insilmaril@435
|
1 |
/****************************************************************************
|
insilmaril@435
|
2 |
**
|
insilmaril@435
|
3 |
** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
|
insilmaril@435
|
4 |
**
|
insilmaril@435
|
5 |
** This file is part of the example classes of the Qt Toolkit.
|
insilmaril@435
|
6 |
**
|
insilmaril@435
|
7 |
** This file may be used under the terms of the GNU General Public
|
insilmaril@435
|
8 |
** License version 2.0 as published by the Free Software Foundation
|
insilmaril@435
|
9 |
** and appearing in the file LICENSE.GPL included in the packaging of
|
insilmaril@435
|
10 |
** this file. Please review the following information to ensure GNU
|
insilmaril@435
|
11 |
** General Public Licensing requirements will be met:
|
insilmaril@435
|
12 |
** http://www.trolltech.com/products/qt/opensource.html
|
insilmaril@435
|
13 |
**
|
insilmaril@435
|
14 |
** If you are unsure which license is appropriate for your use, please
|
insilmaril@435
|
15 |
** review the following information:
|
insilmaril@435
|
16 |
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
insilmaril@435
|
17 |
** sales department at sales@trolltech.com.
|
insilmaril@435
|
18 |
**
|
insilmaril@435
|
19 |
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
insilmaril@435
|
20 |
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
insilmaril@435
|
21 |
**
|
insilmaril@435
|
22 |
****************************************************************************/
|
insilmaril@435
|
23 |
|
insilmaril@435
|
24 |
// highlighting rules have been adapted by Uwe Drechsel to match vym syntax
|
insilmaril@435
|
25 |
|
insilmaril@435
|
26 |
|
insilmaril@435
|
27 |
#include <QtGui>
|
insilmaril@435
|
28 |
|
insilmaril@435
|
29 |
#include "highlighter.h"
|
insilmaril@435
|
30 |
|
insilmaril@435
|
31 |
Highlighter::Highlighter(QTextDocument *parent)
|
insilmaril@435
|
32 |
: QSyntaxHighlighter(parent)
|
insilmaril@435
|
33 |
{
|
insilmaril@435
|
34 |
HighlightingRule rule;
|
insilmaril@435
|
35 |
|
insilmaril@435
|
36 |
keywordFormat.setForeground(Qt::darkBlue);
|
insilmaril@435
|
37 |
keywordFormat.setFontWeight(QFont::Bold);
|
insilmaril@435
|
38 |
QStringList keywordPatterns;
|
insilmaril@435
|
39 |
keywordPatterns << "\\baddBranch\\b" << "\\baddBranchBefore\\b"
|
insilmaril@435
|
40 |
<< "\\baddMapInsert\\b" << "\\baddMapReplace\\b"
|
insilmaril@435
|
41 |
<< "\\bcolorBranch\\b" << "\\bcolorSubtree\\b"
|
insilmaril@435
|
42 |
<< "\\bcut\\b" << "\\bdelete\\b"
|
insilmaril@435
|
43 |
<< "\\bdeletepKeepChilds\\b" << "\\bdeletepChilds\\b"
|
insilmaril@435
|
44 |
<< "\\blinkTo\\b" << "\\bloadImage\\b"
|
insilmaril@435
|
45 |
<< "\\bmoveBranchUp\\b" << "\\bmoveBranchDown\\b"
|
insilmaril@435
|
46 |
<< "\\bmove\\b" << "\\bmoveRel\\b"
|
insilmaril@435
|
47 |
<< "\\bpaste\\b"
|
insilmaril@435
|
48 |
<< "\\bsaveImage\\b"
|
insilmaril@435
|
49 |
<< "\\bscroll\\b"
|
insilmaril@435
|
50 |
<< "\\bselect\\b" << "\\bselectLastBranch\\b" << "\\bselectLastImage\\b"
|
insilmaril@435
|
51 |
<< "\\bsetMapAuthor\\b"
|
insilmaril@435
|
52 |
<< "\\bsetMapComment\\b"
|
insilmaril@435
|
53 |
<< "\\bsetMapBackgroundColor\\b"
|
insilmaril@435
|
54 |
<< "\\bsetMapDefLinkColor\\b"
|
insilmaril@435
|
55 |
<< "\\bsetMapDefLinkStyle\\b"
|
insilmaril@435
|
56 |
<< "\\bsetHeading\\b"
|
insilmaril@435
|
57 |
<< "\\bsetHideExport\\b"
|
insilmaril@435
|
58 |
<< "\\bsetIncludeImagesHorizontally\\b"
|
insilmaril@435
|
59 |
<< "\\bsetIncludeImagesVertically\\b"
|
insilmaril@435
|
60 |
<< "\\bsetURL\\b"
|
insilmaril@435
|
61 |
<< "\\bsetVymLink\\b"
|
insilmaril@435
|
62 |
<< "\\bsetFlag\\b"
|
insilmaril@435
|
63 |
<< "\\bunscroll\\b"
|
insilmaril@435
|
64 |
<< "\\bunsetFlag\\b"
|
insilmaril@435
|
65 |
;
|
insilmaril@435
|
66 |
foreach (QString pattern, keywordPatterns) {
|
insilmaril@435
|
67 |
rule.pattern = QRegExp(pattern);
|
insilmaril@435
|
68 |
rule.format = keywordFormat;
|
insilmaril@435
|
69 |
highlightingRules.append(rule);
|
insilmaril@435
|
70 |
}
|
insilmaril@435
|
71 |
|
insilmaril@435
|
72 |
// QT keywords
|
insilmaril@435
|
73 |
/*
|
insilmaril@435
|
74 |
classFormat.setFontWeight(QFont::Bold);
|
insilmaril@435
|
75 |
classFormat.setForeground(Qt::darkMagenta);
|
insilmaril@435
|
76 |
rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
|
insilmaril@435
|
77 |
rule.format = classFormat;
|
insilmaril@435
|
78 |
highlightingRules.append(rule);
|
insilmaril@435
|
79 |
*/
|
insilmaril@435
|
80 |
|
insilmaril@435
|
81 |
// Single line comments
|
insilmaril@435
|
82 |
singleLineCommentFormat.setForeground(Qt::red);
|
insilmaril@435
|
83 |
rule.pattern = QRegExp("#[^\n]*");
|
insilmaril@435
|
84 |
rule.format = singleLineCommentFormat;
|
insilmaril@435
|
85 |
highlightingRules.append(rule);
|
insilmaril@435
|
86 |
|
insilmaril@435
|
87 |
// Single line comments
|
insilmaril@435
|
88 |
multiLineCommentFormat.setForeground(Qt::red);
|
insilmaril@435
|
89 |
commentStartExpression = QRegExp("/\\*");
|
insilmaril@435
|
90 |
commentEndExpression = QRegExp("\\*/");
|
insilmaril@435
|
91 |
|
insilmaril@435
|
92 |
// Quotations
|
insilmaril@435
|
93 |
quotationFormat.setForeground(Qt::darkGreen);
|
insilmaril@435
|
94 |
rule.pattern = QRegExp("\".*\"");
|
insilmaril@435
|
95 |
rule.format = quotationFormat;
|
insilmaril@435
|
96 |
highlightingRules.append(rule);
|
insilmaril@435
|
97 |
|
insilmaril@435
|
98 |
QStringList valuePatterns;
|
insilmaril@435
|
99 |
valuePatterns << "\\btrue\\b" << "\\bfalse\\b";
|
insilmaril@435
|
100 |
foreach (QString pattern, valuePatterns) {
|
insilmaril@435
|
101 |
rule.pattern = QRegExp(pattern);
|
insilmaril@435
|
102 |
rule.format = quotationFormat;
|
insilmaril@435
|
103 |
highlightingRules.append(rule);
|
insilmaril@435
|
104 |
}
|
insilmaril@435
|
105 |
|
insilmaril@435
|
106 |
|
insilmaril@435
|
107 |
|
insilmaril@435
|
108 |
// Funtions
|
insilmaril@435
|
109 |
/*
|
insilmaril@435
|
110 |
functionFormat.setFontItalic(true);
|
insilmaril@435
|
111 |
functionFormat.setForeground(Qt::blue);
|
insilmaril@435
|
112 |
rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
|
insilmaril@435
|
113 |
rule.format = functionFormat;
|
insilmaril@435
|
114 |
highlightingRules.append(rule);
|
insilmaril@435
|
115 |
*/
|
insilmaril@435
|
116 |
|
insilmaril@435
|
117 |
}
|
insilmaril@435
|
118 |
|
insilmaril@435
|
119 |
void Highlighter::highlightBlock(const QString &text)
|
insilmaril@435
|
120 |
{
|
insilmaril@435
|
121 |
foreach (HighlightingRule rule, highlightingRules) {
|
insilmaril@435
|
122 |
QRegExp expression(rule.pattern);
|
insilmaril@435
|
123 |
int index = text.indexOf(expression);
|
insilmaril@435
|
124 |
while (index >= 0) {
|
insilmaril@435
|
125 |
int length = expression.matchedLength();
|
insilmaril@435
|
126 |
setFormat(index, length, rule.format);
|
insilmaril@435
|
127 |
index = text.indexOf(expression, index + length);
|
insilmaril@435
|
128 |
}
|
insilmaril@435
|
129 |
}
|
insilmaril@435
|
130 |
setCurrentBlockState(0);
|
insilmaril@435
|
131 |
|
insilmaril@435
|
132 |
int startIndex = 0;
|
insilmaril@435
|
133 |
if (previousBlockState() != 1)
|
insilmaril@435
|
134 |
startIndex = text.indexOf(commentStartExpression);
|
insilmaril@435
|
135 |
|
insilmaril@435
|
136 |
while (startIndex >= 0) {
|
insilmaril@435
|
137 |
int endIndex = text.indexOf(commentEndExpression, startIndex);
|
insilmaril@435
|
138 |
int commentLength;
|
insilmaril@435
|
139 |
if (endIndex == -1) {
|
insilmaril@435
|
140 |
setCurrentBlockState(1);
|
insilmaril@435
|
141 |
commentLength = text.length() - startIndex;
|
insilmaril@435
|
142 |
} else {
|
insilmaril@435
|
143 |
commentLength = endIndex - startIndex
|
insilmaril@435
|
144 |
+ commentEndExpression.matchedLength();
|
insilmaril@435
|
145 |
}
|
insilmaril@435
|
146 |
setFormat(startIndex, commentLength, multiLineCommentFormat);
|
insilmaril@435
|
147 |
startIndex = text.indexOf(commentStartExpression,
|
insilmaril@435
|
148 |
startIndex + commentLength);
|
insilmaril@435
|
149 |
}
|
insilmaril@435
|
150 |
}
|