// возвращает текст без тегов Ogre::UTFString TextIterator::getOnlyText(const Ogre::UTFString& _text) { Ogre::UTFString ret; ret.reserve(_text.size()); Ogre::UTFString::const_iterator end = _text.end(); for (Ogre::UTFString::const_iterator iter=_text.begin(); iter!=end; ++iter) { if ((*iter) == L'#') { // следующий символ ++ iter; if (iter == end) break; // тэг цвета if ((*iter) != L'#') { // остальные 5 символов цвета for (size_t pos=0; pos<5; pos++) { ++ iter; if (iter == end) { --iter; break; } } continue; } } // обыкновенный символ ret.push_back(*iter); } return ret; }
void TextIterator::clearNewLine(Ogre::UTFString & _text) { for (Ogre::UTFString::iterator iter=_text.begin(); iter!=_text.end(); ++iter) { if ( ((*iter) == Font::FONT_CODE_NEL) || ((*iter) == Font::FONT_CODE_CR) || ((*iter) == Font::FONT_CODE_LF) ) { (*iter) = Font::FONT_CODE_SPACE; } } }
void TextIterator::insert(Ogre::UTFString::iterator & _start, Ogre::UTFString & _insert) { // сбрасываем размер mSize = ITEM_NONE; // записываем в историю if (mHistory) mHistory->push_back(TextCommandInfo(_insert, _start-mText.begin(), TextCommandInfo::COMMAND_INSERT)); // запоминаем позицию итератора size_t pos = _start - mText.begin(); size_t pos_save = (mSave==mEnd) ? ITEM_NONE : _start - mText.begin(); // непосредственно вставляем mText.insert(_start, _insert.begin(), _insert.end()); // возвращаем итераторы _start = mText.begin() + pos; mEnd = mText.end(); (pos_save==ITEM_NONE) ? mSave = mEnd : mSave = mText.begin() + pos_save; }