-
Notifications
You must be signed in to change notification settings - Fork 1
/
lexertemplate.cpp
107 lines (88 loc) · 1.75 KB
/
lexertemplate.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <QDebug>
#include <QColor>
#include <QFont>
#include <qsciscintilla.h>
#include <qscistyle.h>
#include "lexertemplate.h"
MyLexer::MyLexer(QObject *parent)
: QsciLexerCustom(parent)
{
styleStack = QList<int>();
resetStyle ();
declareStyle(Default,
QColor(0x0, 0x0, 0x0),
QColor("white"),
QFont("Liberation Mono", 10));
declareStyle(Comment,
QColor(0x0, 0x80, 0x0),
QColor("white"),
QFont("Liberation Mono", 10));
}
MyLexer::~MyLexer()
{
qDebug() << __FUNCTION__;
}
const char* MyLexer::language() const
{
return "MyLexer";
}
QString MyLexer::description(int style) const
{
if (styleNames.contains(style)) {
return styleNames[style];
} else {
return QString("");
}
}
void MyLexer::styleText(int start, int end)
{
QString source;
int len;
if (!editor())
return;
resetStyle ();
char *chars = new char[(end - start) + 1];
editor()->SendScintilla(QsciScintilla::SCI_GETTEXTRANGE, start, end, chars);
source = QString(chars);
delete [] chars;
len = end - start;
// qDebug() << "source =" << source;
startStyling(start, 0x1f);
setStyling(len, getStyle());
}
bool MyLexer::pushStyle(int style)
{
bool pushed = false;
if (style >= getStyle()) {
styleStack << style;
pushed = true;
// qDebug() << __FUNCTION__ << description(style);
}
return pushed;
}
bool MyLexer::popStyle()
{
int style;
bool popped = false;
if (styleStack.size() > 1) {
style = styleStack.takeLast() ;
popped = true;
// qDebug() << __FUNCTION__ << description(style);
}
return popped;
}
int MyLexer::getStyle()
{
int style;
style = styleStack.at(styleStack.size()-1) ;
return style;
}
bool MyLexer::hasStyle(int style)
{
return styleStack.contains(style);
}
void MyLexer::resetStyle()
{
styleStack.clear();
styleStack << Default;
}