44 lines
1.7 KiB
C++
44 lines
1.7 KiB
C++
|
|
#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);
|
||
|
|
}
|