1 /* 2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 3 * Distributed under the MIT License 4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 5 */ 6 7 #ifndef MYGUI_TEXT_ITERATOR_H_ 8 #define MYGUI_TEXT_ITERATOR_H_ 9 10 #include "MyGUI_Prerequest.h" 11 #include "MyGUI_Colour.h" 12 #include "MyGUI_TextChangeHistory.h" 13 #include "MyGUI_IFont.h" 14 15 namespace MyGUI 16 { 17 18 class MYGUI_EXPORT TextIterator 19 { 20 private: 21 TextIterator(); 22 23 public: 24 TextIterator(const UString& _text, VectorChangeInfo* _history = nullptr); 25 26 bool moveNext(); 27 28 // возвращает цвет 29 bool getTagColour(UString& _colour) const; 30 31 // удаляет цвет 32 void clearTagColour(); 33 34 bool setTagColour(const Colour& _colour); 35 36 bool setTagColour(UString _colour); 37 38 // сохраняет текущий итератор 39 bool saveStartPoint(); 40 41 // возвращает строку от сохраненного итератора до текущего 42 UString getFromStart(); 43 44 // удаляет от запомненной точки до текущей 45 bool eraseFromStart(); 46 47 // возвращает текущую псевдо позицию 48 size_t getPosition() const; 49 50 const UString& getText() const; 51 52 void insertText(const UString& _insert, bool _multiLine); 53 54 void clearNewLine(UString& _text); 55 56 //очищает весь текст 57 void clearText(); 58 59 // возвращает размер строки 60 size_t getSize() const; 61 62 void setText(const UString& _text, bool _multiLine); 63 64 void cutMaxLength(size_t _max); 65 66 void cutMaxLengthFromBeginning(size_t _max); 67 68 // возвращает текст без тегов 69 static UString getOnlyText(const UString& _text); 70 71 static UString getTextNewLine(); 72 73 static UString getTextCharInfo(Char _char); 74 75 // просто конвертируем цвет в строку 76 static UString convertTagColour(const Colour& _colour); 77 78 static UString toTagsString(const UString& _text); 79 80 private: 81 // возвращает цвет 82 bool getTagColour(UString& _colour, UString::iterator& _iter) const; 83 84 void insert(UString::iterator& _start, UString& _insert); 85 86 UString::iterator erase(UString::iterator _start, UString::iterator _end); 87 88 void clear(); 89 90 void normaliseNewLine(UString& _text); 91 92 private: 93 UString mText; 94 UString::iterator mCurrent, mEnd, mSave; 95 96 // позиция и размер 97 size_t mPosition; 98 mutable size_t mSize; 99 bool mFirst; 100 101 VectorChangeInfo* mHistory; 102 }; 103 104 } // namespace MyGUI 105 106 #endif // MYGUI_TEXT_ITERATOR_H_ 107