Added CapitalizeEachWord() (ugly implementation, maybe, but it works). This version passes all checked-in tests
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1357 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+94
-27
@@ -198,7 +198,8 @@ BString::SetTo(char c, int32 count)
|
||||
/*---- Substring copying ---------------------------------------------------*/
|
||||
BString &BString::CopyInto(BString &into, int32 fromOffset, int32 length) const
|
||||
{
|
||||
into.SetTo(String() + fromOffset, length);
|
||||
if (&into != this)
|
||||
into.SetTo(String() + fromOffset, length);
|
||||
return into;
|
||||
}
|
||||
|
||||
@@ -209,7 +210,6 @@ BString::CopyInto(char *into, int32 fromOffset, int32 length) const
|
||||
if (into) {
|
||||
int32 len = min(Length() - fromOffset , length);
|
||||
strncpy(into, _privateData + fromOffset, len);
|
||||
into[len] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -718,7 +718,9 @@ BString::IFindLast(const char *string, int32 beforeOffset) const
|
||||
BString&
|
||||
BString::ReplaceFirst(char replaceThis, char withThis)
|
||||
{
|
||||
int32 pos = FindFirst(replaceThis, 0);
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
int32 pos = _FindAfter(tmp, 0, -1);
|
||||
|
||||
if (pos >= 0)
|
||||
_privateData[pos] = withThis;
|
||||
return *this;
|
||||
@@ -728,7 +730,9 @@ BString::ReplaceFirst(char replaceThis, char withThis)
|
||||
BString&
|
||||
BString::ReplaceLast(char replaceThis, char withThis)
|
||||
{
|
||||
int32 pos = FindLast(replaceThis, Length());
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
int32 pos = _FindBefore(tmp, Length(), -1);
|
||||
|
||||
if (pos >= 0)
|
||||
_privateData[pos] = withThis;
|
||||
return *this;
|
||||
@@ -739,7 +743,9 @@ BString&
|
||||
BString::ReplaceAll(char replaceThis, char withThis, int32 fromOffset)
|
||||
{
|
||||
int32 pos = B_ERROR;
|
||||
while ((pos = FindFirst(replaceThis, fromOffset)) >= 0) {
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
|
||||
while ((pos = _FindAfter(tmp, fromOffset, -1)) >= 0) {
|
||||
_privateData[pos] = withThis;
|
||||
fromOffset += pos;
|
||||
}
|
||||
@@ -752,8 +758,9 @@ BString::Replace(char replaceThis, char withThis, int32 maxReplaceCount, int32 f
|
||||
{
|
||||
int32 pos = B_ERROR;
|
||||
int32 replaceCount = 0;
|
||||
|
||||
while ((pos = FindFirst(replaceThis, fromOffset)) >= 0) {
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
|
||||
while ((pos = _FindAfter(tmp, fromOffset, -1)) >= 0) {
|
||||
_privateData[pos] = withThis;
|
||||
fromOffset += pos;
|
||||
|
||||
@@ -770,11 +777,10 @@ BString::ReplaceFirst(const char *replaceThis, const char *withThis)
|
||||
if (replaceThis == NULL)
|
||||
return *this;
|
||||
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
|
||||
int32 pos = _FindAfter(replaceThis, 0, -1);
|
||||
if (pos >= 0) {
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
if (difference > 0)
|
||||
_OpenAtBy(pos, difference);
|
||||
else if (difference < 0)
|
||||
@@ -791,12 +797,11 @@ BString::ReplaceLast(const char *replaceThis, const char *withThis)
|
||||
{
|
||||
if (replaceThis == NULL)
|
||||
return *this;
|
||||
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
|
||||
|
||||
int32 pos = _FindBefore(replaceThis, Length(), -1);
|
||||
if (pos >= 0) {
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
if (difference > 0)
|
||||
_OpenAtBy(pos, difference);
|
||||
else if (difference < 0)
|
||||
@@ -811,7 +816,22 @@ BString::ReplaceLast(const char *replaceThis, const char *withThis)
|
||||
BString&
|
||||
BString::ReplaceAll(const char *replaceThis, const char *withThis, int32 fromOffset)
|
||||
{
|
||||
//TODO: Implement
|
||||
if (replaceThis == NULL)
|
||||
return *this;
|
||||
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
|
||||
int32 pos;
|
||||
while ((pos = _FindAfter(replaceThis, fromOffset, -1))>= 0) {
|
||||
if (difference > 0)
|
||||
_OpenAtBy(pos, difference);
|
||||
else if (difference < 0)
|
||||
_ShrinkAtBy(pos, -difference);
|
||||
memcpy(_privateData + pos, withThis, len);
|
||||
fromOffset += pos;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -827,7 +847,8 @@ BString::Replace(const char *replaceThis, const char *withThis, int32 maxReplace
|
||||
BString&
|
||||
BString::IReplaceFirst(char replaceThis, char withThis)
|
||||
{
|
||||
int32 pos = IFindFirst(replaceThis, 0);
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
int32 pos = _FindAfter(tmp, 0, -1);
|
||||
if (pos >= 0)
|
||||
_privateData[pos] = withThis;
|
||||
|
||||
@@ -837,8 +858,9 @@ BString::IReplaceFirst(char replaceThis, char withThis)
|
||||
|
||||
BString&
|
||||
BString::IReplaceLast(char replaceThis, char withThis)
|
||||
{
|
||||
int32 pos = IFindLast(replaceThis, 0);
|
||||
{
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
int32 pos = _IFindBefore(tmp, Length(), -1);
|
||||
if (pos >= 0)
|
||||
_privateData[pos] = withThis;
|
||||
|
||||
@@ -849,7 +871,13 @@ BString::IReplaceLast(char replaceThis, char withThis)
|
||||
BString&
|
||||
BString::IReplaceAll(char replaceThis, char withThis, int32 fromOffset)
|
||||
{
|
||||
//TODO: Implement
|
||||
int32 pos = B_ERROR;
|
||||
char tmp[2] = { replaceThis, '\0' };
|
||||
|
||||
while ((pos = _IFindAfter(tmp, fromOffset, -1)) >= 0) {
|
||||
_privateData[pos] = withThis;
|
||||
fromOffset += pos;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -909,7 +937,22 @@ BString::IReplaceLast(const char *replaceThis, const char *withThis)
|
||||
BString&
|
||||
BString::IReplaceAll(const char *replaceThis, const char *withThis, int32 fromOffset)
|
||||
{
|
||||
//TODO: Implement
|
||||
if (replaceThis == NULL)
|
||||
return *this;
|
||||
|
||||
int32 len = (withThis ? strlen(withThis) : 0);
|
||||
int32 difference = len - strlen(replaceThis);
|
||||
|
||||
int32 pos;
|
||||
while ((pos = _IFindAfter(replaceThis, fromOffset, -1))>= 0) {
|
||||
if (difference > 0)
|
||||
_OpenAtBy(pos, difference);
|
||||
else if (difference < 0)
|
||||
_ShrinkAtBy(pos, -difference);
|
||||
memcpy(_privateData + pos, withThis, len);
|
||||
fromOffset += pos;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -970,7 +1013,8 @@ BString::UnlockBuffer(int32 length)
|
||||
BString&
|
||||
BString::ToLower()
|
||||
{
|
||||
for (int32 count = 0; count < Length(); count++)
|
||||
int32 length = Length();
|
||||
for (int32 count = 0; count < length; count++)
|
||||
_privateData[count] = tolower(_privateData[count]);
|
||||
|
||||
return *this;
|
||||
@@ -980,7 +1024,8 @@ BString::ToLower()
|
||||
BString&
|
||||
BString::ToUpper()
|
||||
{
|
||||
for (int32 count = 0; count < Length(); count++)
|
||||
int32 length = Length();
|
||||
for (int32 count = 0; count < length; count++)
|
||||
_privateData[count] = toupper(_privateData[count]);
|
||||
|
||||
return *this;
|
||||
@@ -991,8 +1036,9 @@ BString&
|
||||
BString::Capitalize()
|
||||
{
|
||||
_privateData[0] = toupper(_privateData[0]);
|
||||
|
||||
for (int32 count = 0; count < Length(); count++)
|
||||
int32 length = Length();
|
||||
|
||||
for (int32 count = 1; count < length; count++)
|
||||
_privateData[count] = tolower(_privateData[count]);
|
||||
|
||||
return *this;
|
||||
@@ -1002,7 +1048,28 @@ BString::Capitalize()
|
||||
BString&
|
||||
BString::CapitalizeEachWord()
|
||||
{
|
||||
//TODO: Implement
|
||||
if (_privateData == NULL)
|
||||
return *this;
|
||||
|
||||
int32 count = 0;
|
||||
int32 length = Length();
|
||||
|
||||
do {
|
||||
for(; count < length; count++) {
|
||||
if (isalpha(_privateData[count])) {
|
||||
_privateData[count] = toupper(_privateData[count]);
|
||||
count++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(; count < length; count++) {
|
||||
if (isalpha(_privateData[count]))
|
||||
_privateData[count] = tolower(_privateData[count]);
|
||||
else
|
||||
break;
|
||||
}
|
||||
} while (count < length);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -1197,8 +1264,8 @@ char*
|
||||
BString::_OpenAtBy(int32 offset, int32 length)
|
||||
{
|
||||
int32 oldLength = Length();
|
||||
|
||||
_privateData -= sizeof(int32);
|
||||
if (_privateData != NULL)
|
||||
_privateData -= sizeof(int32);
|
||||
_privateData = (char*)realloc(_privateData , oldLength + length + sizeof(int32) + 1);
|
||||
_privateData += sizeof(int32);
|
||||
memmove(_privateData + offset + length, _privateData + offset,
|
||||
|
||||
Reference in New Issue
Block a user