Added Escaping/Deescaping. Fixed a bug in Inserting methods
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1405 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -316,6 +316,10 @@ BString&
|
|||||||
BString::Insert(const char *str, int32 pos)
|
BString::Insert(const char *str, int32 pos)
|
||||||
{
|
{
|
||||||
if (str) {
|
if (str) {
|
||||||
|
if (pos < 0) {
|
||||||
|
str -= pos;
|
||||||
|
pos = 0;
|
||||||
|
}
|
||||||
_privateData = _OpenAtBy(pos, strlen(str));
|
_privateData = _OpenAtBy(pos, strlen(str));
|
||||||
memcpy(_privateData + pos, str, strlen(str));
|
memcpy(_privateData + pos, str, strlen(str));
|
||||||
}
|
}
|
||||||
@@ -327,6 +331,10 @@ BString&
|
|||||||
BString::Insert(const char *str, int32 length, int32 pos)
|
BString::Insert(const char *str, int32 length, int32 pos)
|
||||||
{
|
{
|
||||||
if (str) {
|
if (str) {
|
||||||
|
if (pos < 0) {
|
||||||
|
str -= pos;
|
||||||
|
pos = 0;
|
||||||
|
}
|
||||||
int32 len = (int32)strlen(str);
|
int32 len = (int32)strlen(str);
|
||||||
len = min(len, length);
|
len = min(len, length);
|
||||||
_privateData = _OpenAtBy(pos, len);
|
_privateData = _OpenAtBy(pos, len);
|
||||||
@@ -341,7 +349,7 @@ BString::Insert(const char *str, int32 fromOffset, int32 length, int32 pos)
|
|||||||
{
|
{
|
||||||
if (str) {
|
if (str) {
|
||||||
int32 len = (int32)strlen(str);
|
int32 len = (int32)strlen(str);
|
||||||
len = min(len, length);
|
len = min(len - fromOffset, length);
|
||||||
_privateData = _OpenAtBy(pos, len);
|
_privateData = _OpenAtBy(pos, len);
|
||||||
memcpy(_privateData + pos, str + fromOffset, len);
|
memcpy(_privateData + pos, str + fromOffset, len);
|
||||||
}
|
}
|
||||||
@@ -1035,6 +1043,9 @@ BString::ToUpper()
|
|||||||
BString&
|
BString&
|
||||||
BString::Capitalize()
|
BString::Capitalize()
|
||||||
{
|
{
|
||||||
|
if (_privateData == NULL)
|
||||||
|
return *this;
|
||||||
|
|
||||||
_privateData[0] = toupper(_privateData[0]);
|
_privateData[0] = toupper(_privateData[0]);
|
||||||
int32 length = Length();
|
int32 length = Length();
|
||||||
|
|
||||||
@@ -1078,7 +1089,23 @@ BString::CapitalizeEachWord()
|
|||||||
BString&
|
BString&
|
||||||
BString::CharacterEscape(const char *original, const char *setOfCharsToEscape, char escapeWith)
|
BString::CharacterEscape(const char *original, const char *setOfCharsToEscape, char escapeWith)
|
||||||
{
|
{
|
||||||
//TODO: Implement
|
if (original == NULL || setOfCharsToEscape == NULL || _privateData == NULL)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
_DoAssign(original, strlen(original));
|
||||||
|
|
||||||
|
int32 pos, offset = 0;
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
pos = strcspn(_privateData + offset, setOfCharsToEscape);
|
||||||
|
offset += pos;
|
||||||
|
if (offset > Length())
|
||||||
|
break;
|
||||||
|
_OpenAtBy(offset, 1);
|
||||||
|
memset(_privateData + offset, escapeWith, 1);
|
||||||
|
offset+=2;
|
||||||
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1086,7 +1113,21 @@ BString::CharacterEscape(const char *original, const char *setOfCharsToEscape, c
|
|||||||
BString&
|
BString&
|
||||||
BString::CharacterEscape(const char *setOfCharsToEscape, char escapeWith)
|
BString::CharacterEscape(const char *setOfCharsToEscape, char escapeWith)
|
||||||
{
|
{
|
||||||
//TODO: Implement
|
if (setOfCharsToEscape == NULL || _privateData == NULL)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
int32 pos, offset = 0;
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
pos = strcspn(_privateData + offset, setOfCharsToEscape);
|
||||||
|
offset += pos;
|
||||||
|
if (offset > Length())
|
||||||
|
break;
|
||||||
|
_OpenAtBy(offset, 1);
|
||||||
|
memset(_privateData + offset, escapeWith, 1);
|
||||||
|
offset+=2;
|
||||||
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1094,7 +1135,14 @@ BString::CharacterEscape(const char *setOfCharsToEscape, char escapeWith)
|
|||||||
BString&
|
BString&
|
||||||
BString::CharacterDeescape(const char *original, char escapeChar)
|
BString::CharacterDeescape(const char *original, char escapeChar)
|
||||||
{
|
{
|
||||||
//TODO: Implement
|
if (original == NULL || _privateData == NULL)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
_DoAssign(original, strlen(original));
|
||||||
|
|
||||||
|
char tmp[2] = { escapeChar, '\0' };
|
||||||
|
RemoveAll(tmp);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1102,7 +1150,12 @@ BString::CharacterDeescape(const char *original, char escapeChar)
|
|||||||
BString&
|
BString&
|
||||||
BString::CharacterDeescape(char escapeChar)
|
BString::CharacterDeescape(char escapeChar)
|
||||||
{
|
{
|
||||||
//TODO: Implement
|
if (_privateData == NULL)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
char tmp[2] = { escapeChar, '\0' };
|
||||||
|
RemoveAll(tmp);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1263,6 +1316,8 @@ BString::_GrowBy(int32 size)
|
|||||||
char*
|
char*
|
||||||
BString::_OpenAtBy(int32 offset, int32 length)
|
BString::_OpenAtBy(int32 offset, int32 length)
|
||||||
{
|
{
|
||||||
|
assert(offset >= 0);
|
||||||
|
|
||||||
int32 oldLength = Length();
|
int32 oldLength = Length();
|
||||||
if (_privateData != NULL)
|
if (_privateData != NULL)
|
||||||
_privateData -= sizeof(int32);
|
_privateData -= sizeof(int32);
|
||||||
|
|||||||
Reference in New Issue
Block a user