13 "and",
"assert",
"break",
"class",
"continue",
"def",
"del",
"elif",
14 "else",
"except",
"exec",
"finally",
"for",
"from",
"global",
"if",
15 "import",
"in",
"is",
"lambda",
"not",
"or",
"pass",
"print",
16 "raise",
"return",
"try",
"while",
"yield",
"None",
"True",
"False"};
50 static const QStringList
s_Braces = {
"\\{",
"\\}",
"\\(",
"\\)", R
"([)", R"(])"};
63 return {
"Definition"};
67 return {
"Doc String"};
84 for (HighlightingRule &rule : m_highlightingRules)
86 rule.format = colorScheme[rule.element];
97 highlightPythonBlock(text);
100 void PythonHighlighter::initialize()
112 QString pattern = QString(
"\\b%1\\b").arg(keyword);
119 for (
const QString &pattern :
s_Braces)
128 m_highlightingRules += HighlightingRule(
CodeElement::String, R
"("[^"\\]*(\\.[^"\\]*)*")", 0);
130 m_highlightingRules += HighlightingRule(
CodeElement::String, R
"("[^'\\]*(\\.[^'\\]*)*")", 0);
142 m_highlightingRules +=
144 m_highlightingRules += HighlightingRule(
148 void PythonHighlighter::highlightPythonBlock(
const QString &text)
156 for (
const auto &rule : m_highlightingRules)
160 index = wrapper.indexIn(text, 0);
165 index = wrapper.pos(rule.matchIndex);
166 int length = wrapper.cap(rule.matchIndex).length();
169 setFormat(index,
length, rule.format);
170 index = wrapper.indexIn(text, index +
length);
179 setCurrentBlockState(0);
182 bool in_multiline = matchMultiLine(text, m_triSingle);
184 in_multiline = matchMultiLine(text, m_triDouble);
193 bool PythonHighlighter::matchMultiLine(
const QString &text,
const HighlightingRule &rule)
195 int start, add, end,
length;
201 if (previousBlockState() == rule.matchIndex)
209 start = wrapper.indexIn(text);
211 add = wrapper.matchedLength();
218 end = wrapper.indexIn(text, start + add);
222 length = end - start + add + wrapper.matchedLength();
223 setCurrentBlockState(0);
228 setCurrentBlockState(rule.matchIndex);
229 length = text.length() - start + add;
233 setFormat(start,
length, rule.format);
236 start = wrapper.indexIn(text, start +
length);
240 return currentBlockState() == rule.matchIndex;
static const QStringList s_Keywords
static const QStringList s_Operators
static const QStringList s_Braces
ColorScheme to be used by the PythonHighlighter & Editor.
static QString CodeElementName(PythonHighlighter::CodeElement e)
void highlightBlock(const QString &text) override
PythonHighlighter(QTextDocument *parent=nullptr)
void useColorScheme(const ColorScheme &colorScheme)
__host__ __device__ float length(float2 v)