-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsqlsyntaxhighlighter.cpp
More file actions
105 lines (99 loc) · 3.14 KB
/
Copy pathsqlsyntaxhighlighter.cpp
File metadata and controls
105 lines (99 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "sqlsyntaxhighlighter.h"
#include <QDebug>
#include <QTextDocument>
SQLSyntaxHighlighter::SQLSyntaxHighlighter(QTextDocument *document) :
QSyntaxHighlighter(document)
{
blueParts = QList<QString>();
blueParts.append("ALTER");
blueParts.append("AND");
blueParts.append("AS");
blueParts.append("ASC");
blueParts.append("BY");
blueParts.append("DELETE");
blueParts.append("DESC");
blueParts.append("DROP");
blueParts.append("FROM");
blueParts.append("INNER");
blueParts.append("INSERT");
blueParts.append("IS");
blueParts.append("JOIN");
blueParts.append("LEFT");
blueParts.append("NULL");
blueParts.append("ON");
blueParts.append("OR");
blueParts.append("ORDER");
blueParts.append("RIGHT");
blueParts.append("SELECT");
blueParts.append("WHERE");
greenParts = QList<QString>();
greenParts.append("*");
greenParts.append("/");
greenParts.append("+");
greenParts.append("-");
greenParts.append("%");
greenParts.append("=");
greenParts.append(";");
greenParts.append("<");
greenParts.append(">");
greenParts.append("<=");
greenParts.append(">=");
greenParts.append("<>");
greenParts.append("!=");
}
void SQLSyntaxHighlighter::highlightBlock(const QString &text)
{
int i;
int state = previousBlockState();
int len = text.length();
int pos = 0;
QString part = text.toUpper();
QString p;
int pSize;
QString previousLetter;
QString quote = QString("'");
QString scape = QString("\\");
while (pos < len) {
switch (state) {
case NormalState:
if (part.mid(pos,1) == quote) {
state = InText;
setFormat(pos, 1, Qt::red);
previousLetter=quote;
}
for (i = 0; i < blueParts.size(); i++) {
p = blueParts.at(i);
pSize = p.size();
QString previousChar = " ";
QString nextChar = " ";
if (pos>0) {
previousChar = part.mid(pos-1,1);
}
if (pos+pSize<part.size()) {
nextChar = part.mid(pos+pSize,1);
}
if (previousChar.count(QRegExp("\\s+"))==1 && nextChar.count(QRegExp("\\s+"))==1 && part.mid(pos,pSize) == p) {
setFormat(pos, pSize, Qt::blue);
}
}
for (i = 0; i < greenParts.size(); i++) {
p = greenParts.at(i);
pSize = p.size();
if (part.mid(pos,pSize) == p) {
setFormat(pos, pSize, Qt::darkGreen);
}
}
break;
case InText:
setFormat(pos, 1, Qt::red);
p = text.mid(pos,1);
if (previousLetter!=scape && p==quote) {
state = NormalState;
}
previousLetter = p;
break;
}
pos++;
}
setCurrentBlockState(state);
}