Diffstat (limited to 'noncore/apps/tinykate/libkate/document') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/tinykate/libkate/document/katetextline.h | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/noncore/apps/tinykate/libkate/document/katetextline.h b/noncore/apps/tinykate/libkate/document/katetextline.h index c2968cc..3518900 100644 --- a/noncore/apps/tinykate/libkate/document/katetextline.h +++ b/noncore/apps/tinykate/libkate/document/katetextline.h | |||
@@ -12,180 +12,180 @@ | |||
12 | This library is distributed in the hope that it will be useful, | 12 | This library is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | Library General Public License for more details. | 15 | Library General Public License for more details. |
16 | 16 | ||
17 | You should have received a copy of the GNU Library General Public License | 17 | You should have received a copy of the GNU Library General Public License |
18 | along with this library; see the file COPYING.LIB. If not, write to | 18 | along with this library; see the file COPYING.LIB. If not, write to |
19 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 19 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
20 | Boston, MA 02111-1307, USA. | 20 | Boston, MA 02111-1307, USA. |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #ifndef _KWTEXTLINE_H_ | 23 | #ifndef _KWTEXTLINE_H_ |
24 | #define _KWTEXTLINE_H_ | 24 | #define _KWTEXTLINE_H_ |
25 | 25 | ||
26 | #include <stdlib.h> | 26 | #include <stdlib.h> |
27 | 27 | ||
28 | #include <qstring.h> | 28 | #include <qstring.h> |
29 | #include <qarray.h> | 29 | #include <qarray.h> |
30 | #include <qvaluelist.h> | 30 | #include <qvaluelist.h> |
31 | 31 | ||
32 | #include <ksharedptr.h> | 32 | #include <ksharedptr.h> |
33 | 33 | ||
34 | /** | 34 | /** |
35 | FastValueList: QValueList, but with a faster at() like QList | 35 | FastValueList: QValueList, but with a faster at() like QList |
36 | FVPrivate is needed so that "const" functions can change the | 36 | FVPrivate is needed so that "const" functions can change the |
37 | current position | 37 | current position |
38 | */ | 38 | */ |
39 | template<class T> | 39 | template<class T> |
40 | class FVPrivate | 40 | class FVPrivate |
41 | { | 41 | { |
42 | public: | 42 | public: |
43 | int curpos; | 43 | int curpos; |
44 | typedef QValueListConstIterator<T> Iterator; | 44 | typedef QValueListConstIterator<T> Iterator; |
45 | Iterator curit; | 45 | Iterator curit; |
46 | 46 | ||
47 | FVPrivate() { curpos=-1; }; | 47 | FVPrivate() { curpos=-1; }; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | template<class T> | 50 | template<class T> |
51 | class FastValueList : public QValueList<T> | 51 | class FastValueList : public QValueList<T> |
52 | { | 52 | { |
53 | public: | 53 | public: |
54 | typedef QValueListIterator<T> Iterator; | 54 | typedef QValueListIterator<T> Iterator; |
55 | typedef QValueListConstIterator<T> ConstIterator; | 55 | typedef QValueListConstIterator<T> ConstIterator; |
56 | protected: | 56 | protected: |
57 | FVPrivate<T> *fvp; | 57 | FVPrivate<T> *fvp; |
58 | 58 | ||
59 | Iterator fastat( uint i ) { | 59 | Iterator fastat( uint i ) { |
60 | uint num=count(); | 60 | uint num=this->count(); |
61 | if (i>=num) {return end();} | 61 | if (i>=num) {return this->end();} |
62 | if (fvp->curpos<0) { fvp->curpos=0; fvp->curit=begin(); } | 62 | if (fvp->curpos<0) { fvp->curpos=0; fvp->curit=this->begin(); } |
63 | uint curpos=(uint) fvp->curpos; | 63 | uint curpos=(uint) fvp->curpos; |
64 | Iterator curit(fvp->curit.node); | 64 | Iterator curit(fvp->curit.node); |
65 | if (curpos==i) return curit; | 65 | if (curpos==i) return curit; |
66 | 66 | ||
67 | int diff=i-curpos; | 67 | int diff=i-curpos; |
68 | bool forward; | 68 | bool forward; |
69 | if (diff<0) diff=-diff; | 69 | if (diff<0) diff=-diff; |
70 | if (((uint)diff < i) && ((uint)diff < num-i)) { // start from current node | 70 | if (((uint)diff < i) && ((uint)diff < num-i)) { // start from current node |
71 | forward=i > (uint)curpos; | 71 | forward=i > (uint)curpos; |
72 | } else if (i < num - i) { // start from first node | 72 | } else if (i < num - i) { // start from first node |
73 | curit=begin(); diff=i; forward=TRUE; | 73 | curit=this->begin(); diff=i; forward=TRUE; |
74 | } else { // start from last node | 74 | } else { // start from last node |
75 | curit=fromLast(); diff=num - i - 1; | 75 | curit=this->fromLast(); diff=num - i - 1; |
76 | if (diff<0) diff=0; | 76 | if (diff<0) diff=0; |
77 | forward=FALSE; | 77 | forward=FALSE; |
78 | } | 78 | } |
79 | if (forward) { | 79 | if (forward) { |
80 | while(diff--) curit++; | 80 | while(diff--) curit++; |
81 | } else { | 81 | } else { |
82 | while(diff--) curit--; | 82 | while(diff--) curit--; |
83 | } | 83 | } |
84 | fvp->curpos=i; fvp->curit=curit; | 84 | fvp->curpos=i; fvp->curit=curit; |
85 | return curit; | 85 | return curit; |
86 | } | 86 | } |
87 | ConstIterator fastat( uint i ) const { | 87 | ConstIterator fastat( uint i ) const { |
88 | uint num=count(); | 88 | uint num=this->count(); |
89 | if (i>=num) {return end();} | 89 | if (i>=num) {return this->end();} |
90 | if (fvp->curpos<0) { fvp->curpos=0; fvp->curit=begin(); } | 90 | if (fvp->curpos<0) { fvp->curpos=0; fvp->curit=this->begin(); } |
91 | uint curpos=(uint) fvp->curpos; | 91 | uint curpos=(uint) fvp->curpos; |
92 | ConstIterator curit=fvp->curit; | 92 | ConstIterator curit=fvp->curit; |
93 | if (curpos==i) return curit; | 93 | if (curpos==i) return curit; |
94 | 94 | ||
95 | int diff=i-curpos; | 95 | int diff=i-curpos; |
96 | bool forward; | 96 | bool forward; |
97 | if (diff<0) diff=-diff; | 97 | if (diff<0) diff=-diff; |
98 | if (((uint)diff < i) && ((uint)diff < num-i)) { // start from current node | 98 | if (((uint)diff < i) && ((uint)diff < num-i)) { // start from current node |
99 | forward=i > (uint)curpos; | 99 | forward=i > (uint)curpos; |
100 | } else if (i < num - i) { // start from first node | 100 | } else if (i < num - i) { // start from first node |
101 | curit=begin(); diff=i; forward=TRUE; | 101 | curit=this->begin(); diff=i; forward=TRUE; |
102 | } else { // start from last node | 102 | } else { // start from last node |
103 | curit=fromLast(); diff=num - i - 1; | 103 | curit=this->fromLast(); diff=num - i - 1; |
104 | if (diff<0) diff=0; | 104 | if (diff<0) diff=0; |
105 | forward=FALSE; | 105 | forward=FALSE; |
106 | } | 106 | } |
107 | if (forward) { | 107 | if (forward) { |
108 | while(diff--) curit++; | 108 | while(diff--) curit++; |
109 | } else { | 109 | } else { |
110 | while(diff--) curit--; | 110 | while(diff--) curit--; |
111 | } | 111 | } |
112 | fvp->curpos=i; fvp->curit=curit; | 112 | fvp->curpos=i; fvp->curit=curit; |
113 | return curit; | 113 | return curit; |
114 | } | 114 | } |
115 | 115 | ||
116 | public: | 116 | public: |
117 | FastValueList() : QValueList<T>() | 117 | FastValueList() : QValueList<T>() |
118 | { fvp=new FVPrivate<T>(); } | 118 | { fvp=new FVPrivate<T>(); } |
119 | FastValueList(const FastValueList<T>& l) : QValueList<T>(l) | 119 | FastValueList(const FastValueList<T>& l) : QValueList<T>(l) |
120 | { fvp=new FVPrivate<T>(); } | 120 | { fvp=new FVPrivate<T>(); } |
121 | ~FastValueList() { delete fvp; } | 121 | ~FastValueList() { delete fvp; } |
122 | 122 | ||
123 | Iterator insert( Iterator it, const T& x ) { | 123 | Iterator insert( Iterator it, const T& x ) { |
124 | fvp->curpos=-1; return QValueList<T>::insert(it, x); | 124 | fvp->curpos=-1; return QValueList<T>::insert(it, x); |
125 | } | 125 | } |
126 | 126 | ||
127 | Iterator append( const T& x ) { | 127 | Iterator append( const T& x ) { |
128 | fvp->curpos=-1; return QValueList<T>::append( x ); | 128 | fvp->curpos=-1; return QValueList<T>::append( x ); |
129 | } | 129 | } |
130 | Iterator prepend( const T& x ) { | 130 | Iterator prepend( const T& x ) { |
131 | fvp->curpos=-1; return QValueList<T>::prepend( x ); | 131 | fvp->curpos=-1; return QValueList<T>::prepend( x ); |
132 | } | 132 | } |
133 | 133 | ||
134 | Iterator remove( Iterator it ) { | 134 | Iterator remove( Iterator it ) { |
135 | fvp->curpos=-1; return QValueList<T>::remove( it ); | 135 | fvp->curpos=-1; return QValueList<T>::remove( it ); |
136 | } | 136 | } |
137 | void remove( const T& x ) { | 137 | void remove( const T& x ) { |
138 | fvp->curpos=-1; QValueList<T>::remove( x ); | 138 | fvp->curpos=-1; QValueList<T>::remove( x ); |
139 | } | 139 | } |
140 | 140 | ||
141 | T& operator[] ( uint i ) { detach(); return fastat(i); } | 141 | T& operator[] ( uint i ) { this->detach(); return fastat(i); } |
142 | const T& operator[] ( uint i ) const { return *fastat(i); } | 142 | const T& operator[] ( uint i ) const { return *fastat(i); } |
143 | Iterator at( uint i ) { detach(); return fastat(i); } | 143 | Iterator at( uint i ) { this->detach(); return fastat(i); } |
144 | ConstIterator at( uint i ) const { return ConstIterator( fastat(i) ); } | 144 | ConstIterator at( uint i ) const { return ConstIterator( fastat(i) ); } |
145 | }; | 145 | }; |
146 | 146 | ||
147 | 147 | ||
148 | /** | 148 | /** |
149 | The TextLine represents a line of text. A text line that contains the | 149 | The TextLine represents a line of text. A text line that contains the |
150 | text, an attribute for each character, an attribute for the free space | 150 | text, an attribute for each character, an attribute for the free space |
151 | behind the last character and a context number for the syntax highlight. | 151 | behind the last character and a context number for the syntax highlight. |
152 | The attribute stores the index to a table that contains fonts and colors | 152 | The attribute stores the index to a table that contains fonts and colors |
153 | and also if a character is selected. | 153 | and also if a character is selected. |
154 | */ | 154 | */ |
155 | class TextLine : public KShared | 155 | class TextLine : public KShared |
156 | { | 156 | { |
157 | friend class KWBuffer; | 157 | friend class KWBuffer; |
158 | friend class KWBufBlock; | 158 | friend class KWBufBlock; |
159 | 159 | ||
160 | public: | 160 | public: |
161 | typedef KSharedPtr<TextLine> Ptr; | 161 | typedef KSharedPtr<TextLine> Ptr; |
162 | typedef FastValueList<Ptr> List; | 162 | typedef FastValueList<Ptr> List; |
163 | 163 | ||
164 | public: | 164 | public: |
165 | /** | 165 | /** |
166 | Creates an empty text line with given attribute and syntax highlight | 166 | Creates an empty text line with given attribute and syntax highlight |
167 | context | 167 | context |
168 | */ | 168 | */ |
169 | TextLine(uchar attribute = 0, int context = 0); | 169 | TextLine(uchar attribute = 0, int context = 0); |
170 | ~TextLine(); | 170 | ~TextLine(); |
171 | 171 | ||
172 | /** | 172 | /** |
173 | Returns the length | 173 | Returns the length |
174 | */ | 174 | */ |
175 | uint length() const {return text.length();} | 175 | uint length() const {return text.length();} |
176 | /** | 176 | /** |
177 | Universal text manipulation method. It can be used to insert, delete | 177 | Universal text manipulation method. It can be used to insert, delete |
178 | or replace text. | 178 | or replace text. |
179 | */ | 179 | */ |
180 | void replace(uint pos, uint delLen, const QChar *insText, uint insLen, uchar *insAttribs = 0L); | 180 | void replace(uint pos, uint delLen, const QChar *insText, uint insLen, uchar *insAttribs = 0L); |
181 | 181 | ||
182 | /** | 182 | /** |
183 | Appends a string of length l to the textline | 183 | Appends a string of length l to the textline |
184 | */ | 184 | */ |
185 | void append(const QChar *s, uint l) {replace(text.length(), 0, s, l);} | 185 | void append(const QChar *s, uint l) {replace(text.length(), 0, s, l);} |
186 | /** | 186 | /** |
187 | Wraps the text from the given position to the end to the next line | 187 | Wraps the text from the given position to the end to the next line |
188 | */ | 188 | */ |
189 | void wrap(TextLine::Ptr nextLine, uint pos); | 189 | void wrap(TextLine::Ptr nextLine, uint pos); |
190 | /** | 190 | /** |
191 | Wraps the text of given length from the beginning of the next line to | 191 | Wraps the text of given length from the beginning of the next line to |