2 #include <QCXXHighlighter> 3 #include <QSyntaxStyle> 13 m_includePattern (QRegularExpression(R
"(^\s*#\s*include\s*([<"][^:?"<>\|]+[">]))")), 14 m_functionPattern (QRegularExpression(R"(\b([_a-zA-Z][_a-zA-Z0-9]*\s+)?((?:[_a-zA-Z][_a-zA-Z0-9]*\s*::\s*)*[_a-zA-Z][_a-zA-Z0-9]*)(?=\s*\())")), 15 m_defTypePattern (QRegularExpression(R"(\b([_a-zA-Z][_a-zA-Z0-9]*)\s+[_a-zA-Z][_a-zA-Z0-9]*\s*[;=])")), 16 m_commentStartPattern(QRegularExpression(R"(/\*)")), 17 m_commentEndPattern (QRegularExpression(R"(\*/)")) 19 Q_INIT_RESOURCE(qcodeeditor_resources); 20 QFile fl(":/languages/cpp.xml");
22 if (!fl.open(QIODevice::ReadOnly))
29 if (!language.isLoaded())
34 auto keys = language.keys();
35 for (
auto&& key : keys)
37 auto names = language.names(key);
38 for (
auto&&
name : names)
40 m_highlightRules.append({
41 QRegularExpression(QString(R
"(\b%1\b)").arg(name)), 48 m_highlightRules.append({
49 QRegularExpression(R
"((?<=\b|\s|^)(?i)(?:(?:(?:(?:(?:\d+(?:'\d+)*)?\.(?:\d+(?:'\d+)*)(?:e[+-]?(?:\d+(?:'\d+)*))?)|(?:(?:\d+(?:'\d+)*)\.(?:e[+-]?(?:\d+(?:'\d+)*))?)|(?:(?:\d+(?:'\d+)*)(?:e[+-]?(?:\d+(?:'\d+)*)))|(?:0x(?:[0-9a-f]+(?:'[0-9a-f]+)*)?\.(?:[0-9a-f]+(?:'[0-9a-f]+)*)(?:p[+-]?(?:\d+(?:'\d+)*)))|(?:0x(?:[0-9a-f]+(?:'[0-9a-f]+)*)\.?(?:p[+-]?(?:\d+(?:'\d+)*))))[lf]?)|(?:(?:(?:[1-9]\d*(?:'\d+)*)|(?:0[0-7]*(?:'[0-7]+)*)|(?:0x[0-9a-f]+(?:'[0-9a-f]+)*)|(?:0b[01]+(?:'[01]+)*))(?:u?l{0,2}|l{0,2}u?)))(?=\b|\s|$))"), 54 m_highlightRules.append({
55 QRegularExpression(R
"("[^\n"]*")"), 60 m_highlightRules.append({
61 QRegularExpression(R
"(#[a-zA-Z_]+)"), 66 m_highlightRules.append({
67 QRegularExpression(R
"(//[^\n]*)"), 76 auto matchIterator = m_includePattern.globalMatch(text);
78 while (matchIterator.hasNext())
80 auto match = matchIterator.next();
83 match.capturedStart(),
84 match.capturedLength(),
89 match.capturedStart(1),
90 match.capturedLength(1),
97 auto matchIterator = m_functionPattern.globalMatch(text);
99 while (matchIterator.hasNext())
101 auto match = matchIterator.next();
104 match.capturedStart(),
105 match.capturedLength(),
110 match.capturedStart(2),
111 match.capturedLength(2),
117 auto matchIterator = m_defTypePattern.globalMatch(text);
119 while (matchIterator.hasNext())
121 auto match = matchIterator.next();
124 match.capturedStart(1),
125 match.capturedLength(1),
131 for (
auto& rule : m_highlightRules)
133 auto matchIterator = rule.pattern.globalMatch(text);
135 while (matchIterator.hasNext())
137 auto match = matchIterator.next();
140 match.capturedStart(),
141 match.capturedLength(),
147 setCurrentBlockState(0);
150 if (previousBlockState() != 1)
152 startIndex = text.indexOf(m_commentStartPattern);
155 while (startIndex >= 0)
157 auto match = m_commentEndPattern.match(text, startIndex);
159 int endIndex =
match.capturedStart();
160 int commentLength = 0;
164 setCurrentBlockState(1);
165 commentLength = text.length() - startIndex;
169 commentLength = endIndex - startIndex +
match.capturedLength();
177 startIndex = text.indexOf(m_commentStartPattern, startIndex + commentLength);
QSyntaxStyle * syntaxStyle() const
Method for getting syntax style.
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
void highlightBlock(const QString &text) override
Class, that descrubes highlighter with syntax style.
QTextCharFormat getFormat(QString name) const
Method for getting format for property name.
static const char * match(MatchState *ms, const char *s, const char *p)
QCXXHighlighter(QTextDocument *document=nullptr)
Constructor.
the parser read a key of a value in an object