13 TextIterator::TextIterator() :
22 mText(_text.asUTF32()),
23 mCurrent(mText.begin()),
44 for (UString::utf32string::iterator iter = mCurrent; iter != mEnd; ++iter)
74 for (
size_t pos = 0; pos < 5; pos++)
108 if (mCurrent == mEnd)
111 UString::utf32string::iterator iter = mCurrent;
125 if (mCurrent == mEnd)
128 if (mCurrent == mEnd)
131 const size_t SIZE = 16;
138 (
int)(_colour.
red * 255),
139 (
int)(_colour.
green * 255),
140 (
int)(_colour.
blue * 255));
146 (
int)(_colour.
red * 255),
147 (
int)(_colour.
green * 255),
148 (
int)(_colour.
blue * 255));
151 insert(mCurrent, tmpStr.
asUTF32());
158 if (mCurrent == mEnd)
161 if (mCurrent == mEnd)
168 insert(mCurrent, _colour);
185 for (UString::utf32string::const_iterator iter = mCurrent; iter != mEnd; ++iter)
198 for (
size_t pos = 0; pos < 5; pos++)
223 ret.reserve(text.size());
225 UString::utf32string::const_iterator end = text.end();
226 for (UString::utf32string::const_iterator iter = text.begin(); iter != end; ++iter)
239 for (
size_t pos = 0; pos < 5; pos++)
253 ret.push_back(*iter);
262 if ((_iter == mEnd) || ((*_iter) != L
'#'))
267 if ((_iter == mEnd) || ((*_iter) == L
'#'))
271 wchar_t buff[16] = L
"#FFFFFF\0";
272 buff[1] = (wchar_t)(*_iter);
273 for (
size_t pos = 2; pos < 7; pos++)
278 buff[pos] = (wchar_t)(*_iter);
293 auto character = iter.getCharacter();
303 if (mCurrent == mEnd)
313 size_t start = mSave - mText.begin();
314 return UString(mText.substr(start, mCurrent - mText.begin() - start));
321 mCurrent = erase(mSave, mCurrent);
322 mSave = mEnd = mText.end();
330 normaliseNewLine(text);
335 insert(mCurrent, text.
asUTF32());
347 normaliseNewLine(text);
352 insert(mCurrent, text.
asUTF32());
359 wchar_t buff[16] = L
"_\0";
360 buff[0] = (wchar_t)_char;
366 const size_t SIZE = 16;
373 (
int)(_colour.
red * 255),
374 (
int)(_colour.
green * 255),
375 (
int)(_colour.
blue * 255));
381 (
int)(_colour.
red * 255),
382 (
int)(_colour.
green * 255),
383 (
int)(_colour.
blue * 255));
396 iter = text.
insert(iter.moveNext(), L
'#');
401 void TextIterator::insert(UString::utf32string::iterator& _start,
const UString::utf32string& _insert)
409 size_t pos = _start - mText.begin();
410 size_t pos_save = (mSave == mEnd) ?
ITEM_NONE : _start - mText.begin();
412 mText.insert(_start, _insert.begin(), _insert.end());
414 _start = mText.begin() + pos;
416 (pos_save ==
ITEM_NONE) ? mSave = mEnd : mSave = mText.begin() + pos_save;
419 UString::utf32string::iterator TextIterator::erase(
420 UString::utf32string::iterator _start,
421 UString::utf32string::iterator _end)
426 size_t start = _start - mText.begin();
431 return mText.erase(_start, _end);
434 void TextIterator::clear()
445 mCurrent = mText.begin();
446 mEnd = mSave = mText.end();
452 if ((mSize !=
ITEM_NONE) && (mSize <= _max))
454 if (mPosition > _max)
457 mSize = mPosition = 0;
458 mCurrent = mText.begin();
459 mEnd = mSave = mText.end();
464 for (UString::utf32string::iterator iter = mCurrent; iter != mEnd; ++iter)
477 for (
size_t pos = 0; pos < 5; pos++)
494 mCurrent = erase(iter, mEnd);
495 mSave = mEnd = mText.end();
513 size_t diff = size - _max;
516 UString::utf32string::iterator iter_colour = mEnd;
519 UString::utf32string::iterator iter = mText.begin();
520 for (; iter != mEnd; ++iter)
524 UString::utf32string::iterator save = iter;
535 for (
size_t pos = 0; pos < 5; pos++)
557 if (iter_colour != mEnd)
559 colour.append(iter_colour, iter_colour +
size_t(7));
562 mCurrent = erase(mText.begin(), iter);
574 if (mCurrent == mEnd)
577 UString::utf32string::iterator iter = mCurrent;
583 iter = mCurrent = erase(mCurrent, iter);
608 void TextIterator::normaliseNewLine(
UString& _text)
610 for (
size_t index = 0; index < _text.
size(); ++index)
612 Char character = _text[index];
616 _text.
erase(index, 1);
static UString getOnlyText(const UString &_text)
void clearNewLine(UString &_text)
static UString getTextNewLine()
static UString getTextCharInfo(Char _char)
void cutMaxLength(size_t _max)
bool setTagColour(const Colour &_colour)
UString getFromStart() const
static UString convertTagColour(const Colour &_colour)
static UString toTagsString(const UString &_text)
void cutMaxLengthFromBeginning(size_t _max)
void setText(const UString &_text, bool _multiLine)
size_t getPosition() const
void insertText(const UString &_insert, bool _multiLine)
bool getTagColour(UString &_colour) const
forward iterator for UString
_fwd_iterator & moveNext()
advances to the next Unicode character, honoring surrogate pairs in the UTF-16 stream
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
iterator insert(iterator i, const code_point &ch)
inserts ch before the code point denoted by i
size_type size() const
Returns the number of code points in the current string.
const utf32string & asUTF32() const
returns the current string in UTF-32 form within a utf32string
std::basic_string< unicode_char > utf32string
string type used for returning UTF-32 formatted data
iterator erase(iterator loc)
removes the code point pointed to by loc, returning an iterator to the next character
iterator end()
returns an iterator just past the end of the string
static const size_type npos
the usual constant representing: not found, no limit, etc
iterator begin()
returns an iterator to the first element of the string
std::vector< TextCommandInfo > VectorChangeInfo
constexpr size_t ITEM_NONE