forked from myst6re/deling
-
Notifications
You must be signed in to change notification settings - Fork 0
/
JsmHighlighter.cpp
83 lines (74 loc) · 2.96 KB
/
JsmHighlighter.cpp
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
/****************************************************************************
** Deling Final Fantasy VIII Field Editor
** Copyright (C) 2009-2012 Arzel Jérôme <myst6re@gmail.com>
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/
#include "JsmHighlighter.h"
JsmHighlighter::JsmHighlighter(QTextDocument *parent) :
QSyntaxHighlighter(parent)
{
}
void JsmHighlighter::highlightBlock(const QString &text)
{
QStringList rows = text.split(QRegExp("[\\t ]+"), QString::SkipEmptyParts);
int opcode;
bool ok;
if(rows.isEmpty()) return;
QString name=rows.first();
if((opcode = JsmFile::opcodeName.indexOf(name.toUpper())) != -1) {
if(opcode==JsmOpcode::CAL) {
setFormat(text.indexOf(name), name.size(), QColor(0x00,0x66,0xcc));
}
else {
if(opcode>0x01 && opcode<0x05) {
setFormat(text.indexOf(name), name.size(), QColor(0x66,0xcc,0x00));
}
if(opcode==JsmOpcode::LBL) {
setFormat(text.indexOf(name), name.size(), QColor(0xcc,0x00,0x00));
}
else if(opcode>0x05 && opcode<20)
setFormat(text.indexOf(name), name.size(), QColor(0x66,0x66,0x66));
else if(opcode>19 && opcode<26)
setFormat(text.indexOf(name), name.size(), QColor(0xcc,0x66,0x00));
else if(opcode==JsmOpcode::MES || opcode==JsmOpcode::ASK || opcode==JsmOpcode::AMESW
|| opcode==JsmOpcode::AMES || opcode==JsmOpcode::AASK || opcode==JsmOpcode::RAMESW) {
QTextCharFormat textFormat;
textFormat.setBackground(QColor(0xFF,0xFF,0x00));
setFormat(text.indexOf(name), name.size(), textFormat);
}
}
} else if(name.startsWith("LABEL", Qt::CaseInsensitive)) {
name.mid(5).toInt(&ok);
if(ok) {
setFormat(text.indexOf(name), name.size(), QColor(0x66,0xcc,0x00));
}
return;
}
if(rows.size()==1) return;
QString param=rows.at(1);
if(opcode==JsmOpcode::CAL && JsmFile::opcodeNameCalc.contains(param.toUpper())) {
setFormat(text.indexOf(param), param.size(), QColor(0x00,0x66,0xcc));
} else if(opcode>1 && opcode<5 && param.startsWith("LABEL", Qt::CaseInsensitive)) {
param.mid(5).toInt(&ok);
if(ok) {
setFormat(text.indexOf(param), param.size(), QColor(0x66,0xcc,0x00));
}
} else {
// param.toInt(&ok);
// if(ok) {
// setFormat(text.indexOf(param), param.size(), QColor(0x00,0x66,0xcc));
// }
}
}