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