summaryrefslogtreecommitdiff
path: root/noncore/apps/tinykate/libkate
Unidiff
Diffstat (limited to 'noncore/apps/tinykate/libkate') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tinykate/libkate/document/katetextline.h24
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*/
39template<class T> 39template<class T>
40class FVPrivate 40class FVPrivate
41{ 41{
42public: 42public:
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
50template<class T> 50template<class T>
51class FastValueList : public QValueList<T> 51class FastValueList : public QValueList<T>
52{ 52{
53public: 53public:
54 typedef QValueListIterator<T> Iterator; 54 typedef QValueListIterator<T> Iterator;
55 typedef QValueListConstIterator<T> ConstIterator; 55 typedef QValueListConstIterator<T> ConstIterator;
56protected: 56protected:
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
116public: 116public:
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*/
155class TextLine : public KShared 155class TextLine : public KShared
156{ 156{
157 friend class KWBuffer; 157 friend class KWBuffer;
158 friend class KWBufBlock; 158 friend class KWBufBlock;
159 159
160public: 160public:
161 typedef KSharedPtr<TextLine> Ptr; 161 typedef KSharedPtr<TextLine> Ptr;
162 typedef FastValueList<Ptr> List; 162 typedef FastValueList<Ptr> List;
163 163
164public: 164public:
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