coriolis/bootstrap/easyChams/CompileHighlighter.cpp

71 lines
2.2 KiB
C++

// File : CompileHighlighter.cpp
// Date : 01.10.2009
// Author : Dupuis Damien
//
#include "CompileHighlighter.h"
CompileHighlighter::CompileHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) {
// defines rules
CompileHighlighterRule rule;
//building/linking/scanning rule : blue Bold
_doingFormat.setForeground(Qt::blue);
_doingFormat.setFontWeight(QFont::Bold);
rule.format = _doingFormat;
rule.pattern = QRegExp("(^Building.*$|^Linking.*$|^Scanning.*$|^Built target.*$)");
_rules.append(rule);
//compile rule : darkBlue Normal
_compileFormat.setForeground(Qt::darkBlue);
rule.format = _compileFormat;
rule.pattern = QRegExp("(^\\[.*$)");
_rules.append(rule);
//install rule : cyan Bold
_installFormat.setForeground(Qt::cyan);
_installFormat.setFontWeight(QFont::Bold);
rule.format = _installFormat;
rule.pattern = QRegExp("(^Install the project.*$)");
_rules.append(rule);
//--install rule : darkCyan
_installingFormat.setForeground(Qt::darkCyan);
rule.format = _installingFormat;
rule.pattern = QRegExp("(^-- Install.*$)");
_rules.append(rule);
//--uptodate : darkCyan Italic
_uptodateFormat.setForeground(Qt::darkCyan);
_uptodateFormat.setFontItalic(true);
rule.format = _uptodateFormat;
rule.pattern = QRegExp("(^-- Up-to-date.*$)");
_rules.append(rule);
//warning rule
_warningFormat.setForeground(QColor("orange"));
rule.format = _warningFormat;
rule.pattern = QRegExp("(^/.*In function.*$|^/.*warning:.*$)");
_rules.append(rule);
//error rule
_errorFormat.setForeground(Qt::red);
rule.format = _errorFormat;
rule.pattern = QRegExp("(^/.*error:.*$|^make\\[.*$)");
_rules.append(rule);
}
void CompileHighlighter::highlightBlock(const QString &text) {
foreach (const CompileHighlighterRule &rule, _rules) {
QRegExp expression (rule.pattern);
int index = expression.indexIn(text);
while (index >= 0) {
int length = expression.matchedLength();
setFormat(index, length, rule.format);
index = expression.indexIn(text, index + length);
}
}
setCurrentBlockState(0);
}