38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
#include "highlighter_rumble.h"
|
|
|
|
Highlighter_Rumble::Highlighter_Rumble(QTextDocument *parent)
|
|
: QSyntaxHighlighter(parent) {
|
|
HighlightingRule rule;
|
|
|
|
// Format for the "RUMBLEGRAPHFILE" header
|
|
headerFormat.setForeground(QColor("#569CD6"));
|
|
headerFormat.setFontWeight(QFont::Bold);
|
|
rule.pattern = QRegularExpression(QStringLiteral("^RUMBLEGRAPHFILE\\b"));
|
|
rule.format = headerFormat;
|
|
highlightingRules.append(rule);
|
|
|
|
// Format for line count (second line, typically a single integer)
|
|
countFormat.setForeground(QColor("#C586C0"));
|
|
rule.pattern = QRegularExpression(QStringLiteral("^\\d+$"));
|
|
rule.format = countFormat;
|
|
highlightingRules.append(rule);
|
|
|
|
// Format for floating-point number pairs (e.g. 0.0000 0.4701)
|
|
floatPairFormat.setForeground(QColor("#B5CEA8"));
|
|
rule.pattern = QRegularExpression(QStringLiteral("^\\s*-?\\d+\\.\\d+\\s+-?\\d+\\.\\d+\\s*$"));
|
|
rule.format = floatPairFormat;
|
|
highlightingRules.append(rule);
|
|
}
|
|
|
|
void Highlighter_Rumble::highlightBlock(const QString &text) {
|
|
for (const HighlightingRule &rule : std::as_const(highlightingRules)) {
|
|
QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text);
|
|
while (matchIterator.hasNext()) {
|
|
QRegularExpressionMatch match = matchIterator.next();
|
|
setFormat(match.capturedStart(), match.capturedLength(), rule.format);
|
|
}
|
|
}
|
|
|
|
setCurrentBlockState(0);
|
|
}
|