1 |
#include "highlighter.h" |
2 |
#include <QRegExp> |
3 |
#include <QTextCharFormat> |
4 |
#include <QTextDocument> |
5 |
|
6 |
Highlighter::Highlighter(QTextDocument *parent) |
7 |
: QSyntaxHighlighter(parent) |
8 |
{ |
9 |
HighlightingRule rule; |
10 |
|
11 |
//numbers |
12 |
rule.pattern = QRegExp("([-0-9.]+)(?!([^\"]*\"[\\s]*\\:))"); |
13 |
rule.format.setForeground(QColor(255,192,85)); |
14 |
rules.append(rule); |
15 |
|
16 |
//key |
17 |
rule.pattern = QRegExp ("(\"[^\"]*\")"); |
18 |
rule.format.setForeground(QColor(145,145,192)); |
19 |
rules.append(rule); |
20 |
|
21 |
//value |
22 |
rule.pattern = QRegExp(":\\s*([\"](?:[^\"])*[\"])"); |
23 |
rule.format.setForeground(QColor(145,145,192)); |
24 |
rules.append(rule); |
25 |
|
26 |
//reserved words |
27 |
rule.pattern = QRegExp("(true|false|null)(?!\"[^\"]*\")"); |
28 |
rule.format.setForeground(QColor(0,0,255)); |
29 |
rules.append(rule); |
30 |
} |
31 |
|
32 |
void Highlighter::highlightBlock(const QString &text) |
33 |
{ |
34 |
foreach (const HighlightingRule &rule, rules) { |
35 |
QRegExp expression(rule.pattern); |
36 |
int index = expression.indexIn(text); |
37 |
|
38 |
while (index >= 0) { |
39 |
index = expression.pos(1); |
40 |
int length = expression.cap(1).length(); |
41 |
setFormat(index, length, rule.format); |
42 |
index = expression.indexIn(text, index + length); |
43 |
} |
44 |
} |
45 |
} |