| 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 | } |