XPlor/libs/core/highlighter_shock.cpp

44 lines
1.7 KiB
C++
Raw Normal View History

#include "highlighter_shock.h"
Highlighter_Shock::Highlighter_Shock(QTextDocument *parent)
: QSyntaxHighlighter(parent) {
HighlightingRule rule;
// Format for bg_shock_* keys
keyFormat.setForeground(QColor("#569CD6"));
keyFormat.setFontWeight(QFont::Bold);
rule.pattern = QRegularExpression(QStringLiteral("\\bbg_shock_[\\w]+\\b"));
rule.format = keyFormat;
highlightingRules.append(rule);
// Format for quoted string values
stringFormat.setForeground(QColor("#CE9178"));
rule.pattern = QRegularExpression(QStringLiteral("\"[^\"]*\""));
rule.format = stringFormat;
highlightingRules.append(rule);
// Format for numeric values inside quotes (overridden by stringFormat but still useful for raw values)
numberFormat.setForeground(QColor("#B5CEA8"));
rule.pattern = QRegularExpression(QStringLiteral("-?\\d+(\\.\\d+)?"));
rule.format = numberFormat;
highlightingRules.append(rule);
// Optional: Format for control groups (e.g., bg_shock_volume_*)
subgroupFormat.setForeground(QColor("#4EC9B0"));
rule.pattern = QRegularExpression(QStringLiteral("\\bbg_shock_volume_\\w+\\b"));
rule.format = subgroupFormat;
highlightingRules.append(rule);
}
void Highlighter_Shock::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);
}