summaryrefslogtreecommitdiff
path: root/noncore/apps/tinykate/libkate/document/katehighlight.h
Unidiff
Diffstat (limited to 'noncore/apps/tinykate/libkate/document/katehighlight.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tinykate/libkate/document/katehighlight.h349
1 files changed, 349 insertions, 0 deletions
diff --git a/noncore/apps/tinykate/libkate/document/katehighlight.h b/noncore/apps/tinykate/libkate/document/katehighlight.h
new file mode 100644
index 0000000..1baddcc
--- a/dev/null
+++ b/noncore/apps/tinykate/libkate/document/katehighlight.h
@@ -0,0 +1,349 @@
1/*
2 Copyright (C) 1998, 1999 Jochen Wilhelmy
3 digisnap@cs.tu-berlin.de
4 (C) 2002, 2001 The Kate Team <kwrite-devel@kde.org>
5 (C) 2002 Joseph Wenninger <jowenn@kde.org>
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
16
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
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.
21*/
22
23#ifndef _HIGHLIGHT_H_
24#define _HIGHLIGHT_H_
25
26#include <qlist.h>
27#include <qdialog.h>
28
29#include <kcolorbtn.h>
30#include <qstrvec.h>
31#include <qdict.h>
32#include <qregexp.h>
33#include "../qt3back/qregexp3.h"
34#include <kdebug.h>
35
36class SyntaxDocument;
37struct syntaxModeListItem;
38struct syntaxContextData;
39
40class QCheckBox;
41class QComboBox;
42class QLineEdit;
43
44class TextLine;
45class Attribute;
46
47class HlItem {
48 public:
49 HlItem(int attribute, int context);
50 virtual ~HlItem();
51 virtual bool startEnable(QChar);
52 virtual const QChar *checkHgl(const QChar *, int len, bool) = 0;
53 QList<HlItem> *subItems;
54 int attr;
55 int ctx;
56};
57
58class HlCharDetect : public HlItem {
59 public:
60 HlCharDetect(int attribute, int context, QChar);
61 virtual const QChar *checkHgl(const QChar *, int len, bool);
62 protected:
63 QChar sChar;
64};
65
66class Hl2CharDetect : public HlItem {
67 public:
68 Hl2CharDetect(int attribute, int context, QChar ch1, QChar ch2);
69 Hl2CharDetect(int attribute, int context, const QChar *ch);
70
71 virtual const QChar *checkHgl(const QChar *, int len, bool);
72 protected:
73 QChar sChar1;
74 QChar sChar2;
75};
76
77class HlStringDetect : public HlItem {
78 public:
79 HlStringDetect(int attribute, int context, const QString &, bool inSensitive=false);
80 virtual ~HlStringDetect();
81 virtual const QChar *checkHgl(const QChar *, int len, bool);
82 protected:
83 const QString str;
84 bool _inSensitive;
85};
86
87class HlRangeDetect : public HlItem {
88 public:
89 HlRangeDetect(int attribute, int context, QChar ch1, QChar ch2);
90 virtual const QChar *checkHgl(const QChar *, int len, bool);
91 protected:
92 QChar sChar1;
93 QChar sChar2;
94};
95
96class HlKeyword : public HlItem
97{
98 public:
99 HlKeyword(int attribute, int context,bool casesensitive, const QChar *deliminator, uint deliLen);
100 virtual ~HlKeyword();
101
102 virtual void addWord(const QString &);
103 virtual void addList(const QStringList &);
104 virtual const QChar *checkHgl(const QChar *, int len, bool);
105 QStringList getList() { return words;};
106 virtual bool startEnable(QChar c);
107
108 protected:
109 QStringList words;
110 QDict<bool> dict;
111 bool _caseSensitive;
112 const QChar *deliminatorChars;
113 uint deliminatorLen;
114};
115
116class HlPHex : public HlItem {
117 public:
118 HlPHex(int attribute,int context);
119 virtual const QChar *checkHgl(const QChar *, int len, bool);
120};
121class HlInt : public HlItem {
122 public:
123 HlInt(int attribute, int context);
124 virtual const QChar *checkHgl(const QChar *, int len, bool);
125};
126
127class HlFloat : public HlItem {
128 public:
129 HlFloat(int attribute, int context);
130 virtual const QChar *checkHgl(const QChar *, int len, bool);
131};
132
133class HlCInt : public HlInt {
134 public:
135 HlCInt(int attribute, int context);
136 virtual const QChar *checkHgl(const QChar *, int len, bool);
137};
138
139class HlCOct : public HlItem {
140 public:
141 HlCOct(int attribute, int context);
142 virtual const QChar *checkHgl(const QChar *, int len, bool);
143};
144
145class HlCHex : public HlItem {
146 public:
147 HlCHex(int attribute, int context);
148 virtual const QChar *checkHgl(const QChar *, int len, bool);
149};
150
151class HlCFloat : public HlFloat {
152 public:
153 HlCFloat(int attribute, int context);
154 virtual const QChar *checkHgl(const QChar *, int len, bool);
155};
156
157class HlLineContinue : public HlItem {
158 public:
159 HlLineContinue(int attribute, int context);
160 virtual bool endEnable(QChar c) {return c == '\0';}
161 virtual const QChar *checkHgl(const QChar *, int len, bool);
162};
163
164class HlCStringChar : public HlItem {
165 public:
166 HlCStringChar(int attribute, int context);
167 virtual const QChar *checkHgl(const QChar *, int len, bool);
168};
169
170class HlCChar : public HlItem {
171 public:
172 HlCChar(int attribute, int context);
173 virtual const QChar *checkHgl(const QChar *, int len, bool);
174};
175
176class HlAnyChar : public HlItem {
177 public:
178 HlAnyChar(int attribute, int context, const QChar* charList, uint len);
179 virtual const QChar *checkHgl(const QChar *, int len, bool);
180 const QChar* _charList;
181 uint _charListLen;
182};
183
184class HlRegExpr : public HlItem {
185 public:
186 HlRegExpr(int attribute, int context,QString expr);
187 ~HlRegExpr(){delete Expr;};
188 virtual const QChar *checkHgl(const QChar *, int len, bool);
189 QRegExp3 *Expr;
190 bool handlesLinestart;
191};
192
193//--------
194
195
196//Item Style: color, selected color, bold, italic
197class ItemStyle {
198 public:
199 ItemStyle();
200// ItemStyle(const ItemStyle &);
201 ItemStyle(const QColor &, const QColor &, bool bold, bool italic);
202 ItemStyle(ItemStyle *its){col=its->col;selCol=its->selCol; bold=its->bold; italic=its->italic;}
203// void setData(const ItemStyle &);
204 QColor col;
205 QColor selCol;
206 int bold; //boolean value
207 int italic; //boolean value
208};
209
210typedef QList<ItemStyle> ItemStyleList;
211
212//Item Properties: name, Item Style, Item Font
213class ItemData : public ItemStyle {
214 public:
215 ItemData(const QString name, int defStyleNum);
216 ItemData(const QString name, int defStyleNum,
217 const QColor&, const QColor&, bool bold, bool italic);
218 ItemData(ItemData
219*itd):ItemStyle((ItemStyle*)itd),name(itd->name),defStyleNum(itd->defStyleNum),defStyle(itd->defStyle){;}
220 const QString name;
221 int defStyleNum;
222 int defStyle; //boolean value
223};
224
225typedef QList<ItemData> ItemDataList;
226
227class HlData {
228 public:
229 HlData(const QString &wildcards, const QString &mimetypes,const QString &identifier);
230 ItemDataList itemDataList;
231 QString wildcards;
232 QString mimetypes;
233 QString identifier;
234};
235
236typedef QList<HlData> HlDataList;
237
238class HlManager;
239class KConfig;
240
241//context
242class HlContext {
243 public:
244 HlContext(int attribute, int lineEndContext,int _lineBeginContext);
245 QList<HlItem> items;
246 int attr;
247 int ctx;
248 int lineBeginContext;
249};
250
251class Highlight
252{
253 friend class HlManager;
254
255 public:
256 Highlight(syntaxModeListItem *def);
257 ~Highlight();
258
259 int doHighlight(int ctxNum, TextLine *);
260
261 KConfig *getKConfig();
262 QString getWildcards();
263 QString getMimetypes();
264 HlData *getData();
265 void setData(HlData *);
266 void getItemDataList(ItemDataList &);
267 void getItemDataList(ItemDataList &, KConfig *);
268 void setItemDataList(ItemDataList &, KConfig *);
269 QString name() {return iName;}
270 QString section() {return iSection;}
271 void use();
272 void release();
273 bool isInWord(QChar c);
274
275 QString getCommentStart() {return cmlStart;};
276 QString getCommentEnd() {return cmlEnd;};
277 QString getCommentSingleLineStart() { return cslStart;};
278
279 protected:
280 void init();
281 void done();
282 void makeContextList ();
283 void createItemData (ItemDataList &list);
284 void readGlobalKeywordConfig();
285 void readCommentConfig();
286 HlItem *createHlItem(struct syntaxContextData *data, ItemDataList &iDl);
287 int lookupAttrName(const QString& name, ItemDataList &iDl);
288 ItemDataList internalIDList;
289 static const int nContexts = 32;
290 HlContext *contextList[nContexts];
291
292 bool noHl;
293 bool casesensitive;
294 QString weakDeliminator;
295 QString deliminator;
296 const QChar *deliminatorChars;
297 uint deliminatorLen;
298 QString cmlStart;
299 QString cmlEnd;
300 QString cslStart;
301 QString iName;
302 QString iSection;
303 QString iWildcards;
304 QString iMimetypes;
305 QString identifier;
306 int refCount;
307};
308
309class HlManager : public QObject {
310 Q_OBJECT
311 public:
312 HlManager();
313 ~HlManager();
314
315 static HlManager *self();
316
317 Highlight *getHl(int n);
318 int defaultHl();
319 int nameFind(const QString &name);
320
321 int wildcardFind(const QString &fileName);
322 int findHl(Highlight *h) {return hlList.find(h);}
323
324 int makeAttribs(Highlight *, Attribute *, int maxAttribs);
325
326 int defaultStyles();
327 QString defaultStyleName(int n);
328 void getDefaults(ItemStyleList &);
329 void setDefaults(ItemStyleList &);
330
331 int highlights();
332 QString hlName(int n);
333 QString hlSection(int n);
334 void getHlDataList(HlDataList &);
335 void setHlDataList(HlDataList &);
336
337 SyntaxDocument *syntax;
338
339 signals:
340 void changed();
341 protected:
342 QList<Highlight> hlList;
343 static HlManager *s_pSelf;
344};
345
346
347
348
349#endif //_HIGHLIGHT_H_