unsigned String::ByteOffsetUTF8(unsigned index) const { unsigned byteOffset = 0; unsigned utfPos = 0; while (utfPos < index && byteOffset < length_) { NextUTF8Char(byteOffset); ++utfPos; } return byteOffset; }
size_t String::ByteOffsetUTF8(size_t index) const { size_t byteOffset = 0; size_t utfPos = 0; while (utfPos < index && byteOffset < Length()) { NextUTF8Char(byteOffset); ++utfPos; } return byteOffset; }
String String::SubstringUTF8(unsigned pos) const { unsigned utf8Length = LengthUTF8(); unsigned byteOffset = ByteOffsetUTF8(pos); String ret; while (pos < utf8Length) { ret.AppendUTF8(NextUTF8Char(byteOffset)); ++pos; } return ret; }
String String::SubstringUTF8(size_t pos) const { size_t utf8Length = LengthUTF8(); size_t byteOffset = ByteOffsetUTF8(pos); String ret; while (pos < utf8Length) { ret.AppendUTF8(NextUTF8Char(byteOffset)); ++pos; } return ret; }
void String::ReplaceUTF8(unsigned index, unsigned unicodeChar) { unsigned utfPos = 0; unsigned byteOffset = 0; while (utfPos < index && byteOffset < length_) { NextUTF8Char(byteOffset); ++utfPos; } if (utfPos < index) return; unsigned beginCharPos = byteOffset; NextUTF8Char(byteOffset); char temp[7]; char* dest = temp; EncodeUTF8(dest, unicodeChar); *dest = 0; Replace(beginCharPos, byteOffset - beginCharPos, temp, (unsigned)(dest - temp)); }
void String::ReplaceUTF8(size_t index, unsigned unicodeChar) { size_t utfPos = 0; size_t byteOffset = 0; while (utfPos < index && byteOffset < Length()) { NextUTF8Char(byteOffset); ++utfPos; } if (utfPos < index) return; size_t beginCharPos = byteOffset; NextUTF8Char(byteOffset); char temp[7]; char* dest = temp; EncodeUTF8(dest, unicodeChar); *dest = 0; Replace(beginCharPos, byteOffset - beginCharPos, temp, dest - temp); }
void Text::DecodeToUnicode() { unicodeText_.clear(); for (unsigned i = 0; i < text_.length();) unicodeText_.push_back(NextUTF8Char(text_, i)); }
unsigned String::AtUTF8(unsigned index) const { unsigned byteOffset = ByteOffsetUTF8(index); return NextUTF8Char(byteOffset); }
unsigned String::AtUTF8(size_t index) const { size_t byteOffset = ByteOffsetUTF8(index); return NextUTF8Char(byteOffset); }