diff --git a/src/R/RSyntax.cpp b/src/R/RSyntax.cpp index 86b12fbe9..f3a2b2e6d 100644 --- a/src/R/RSyntax.cpp +++ b/src/R/RSyntax.cpp @@ -26,10 +26,10 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) HighlightingRule rule; assignmentFormat.setForeground(QColor(255,204,000)); - rule.pattern = QRegExp("<{1,2}[-]"); + rule.pattern = QRegularExpression("<{1,2}[-]"); rule.format = assignmentFormat; highlightingRules.append(rule); - rule.pattern = QRegExp("[-]>{1,2}"); + rule.pattern = QRegularExpression("[-]>{1,2}"); rule.format = assignmentFormat; highlightingRules.append(rule); @@ -37,14 +37,14 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) // function: anything followed by ( functionFormat.setForeground(Qt::cyan); //functionFormat.setFontItalic(true); - rule.pattern = QRegExp("\\b[A-Za-z0-9_\\.]+(?=[ ]*\\()"); + rule.pattern = QRegularExpression("\\b[A-Za-z0-9_\\.]+(?=[ ]*\\()"); rule.format = functionFormat; highlightingRules.append(rule); // argument: anything followed by =, but not at the start(???) // unfortunately look behind assertions are not supported argumentFormat.setFontItalic(true); - rule.pattern = QRegExp("[A-Za-z0-9_\\.]+(?=[ ]*=[^=])"); + rule.pattern = QRegularExpression("[A-Za-z0-9_\\.]+(?=[ ]*=[^=])"); rule.format = argumentFormat; highlightingRules.append(rule); @@ -53,7 +53,7 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) QStringList numberPatterns; numberPatterns << "\\b[0-9]+[\\.]?[0-9]*\\b" << "\\b[\\.][0-9]+\\b"; foreach (QString pattern, numberPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = numberFormat; highlightingRules.append(rule); } @@ -63,7 +63,7 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) QStringList constantPatterns; constantPatterns << "\\bTRUE\\b" << "\\bFALSE\\b" << "\\bNA\\b" << "\\bNULL\\b" << "\\bInf\\b" << "\\bNaN\\b"; foreach (QString pattern, constantPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = constantFormat; highlightingRules.append(rule); } @@ -79,7 +79,7 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) << "\\bfunction\\b" << "\\breturn\\b" << "\\bmessage\\b" << "\\bwarning\\b" << "\\bstop\\b"; foreach (QString pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } @@ -90,7 +90,7 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) QStringList commonFunctionPatterns; commonFunctionPatterns << "\\blibrary\\b" << "\\bsource\\b" << "\\brequire\\b"; foreach (QString pattern, commonFunctionPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = commonFunctionFormat; highlightingRules.append(rule); } @@ -105,30 +105,30 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) operatorPatterns << "[\\&\\@\\|\\:\\~!<>=]" << "==" << "!="; foreach (QString pattern, operatorPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = operatorFormat; highlightingRules.append(rule); } // namespace: anything followed by :: //namespaceFormat.setForeground(Qt::magenta); - //rule.pattern = QRegExp("\\b[A-Za-z0-9_\\.]+(?=::)"); + //rule.pattern = QRegularExpression("\\b[A-Za-z0-9_\\.]+(?=::)"); //rule.format = namespaceFormat; //highlightingRules.append(rule); // quotes: only activated after quotes are closed. Does not // span lines. quotationFormat.setForeground(Qt::red); - rule.pattern = QRegExp("\"[^\"]*\""); + rule.pattern = QRegularExpression("\"[^\"]*\""); rule.format = quotationFormat; highlightingRules.append(rule); - rule.pattern = QRegExp("'[^']*\'"); + rule.pattern = QRegularExpression("'[^']*\'"); rule.format = quotationFormat; highlightingRules.append(rule); // comments (should override everything else) commentFormat.setForeground(QColor(100,149,237)); - rule.pattern = QRegExp("#[^\n]*"); + rule.pattern = QRegularExpression("#[^\n]*"); rule.format = commentFormat; highlightingRules.append(rule); } @@ -137,13 +137,14 @@ RSyntax::RSyntax(QTextDocument *parent) : QSyntaxHighlighter(parent) void RSyntax::highlightBlock(const QString &text) { foreach (HighlightingRule rule, highlightingRules) { - QRegExp expression(rule.pattern); - int index = text.indexOf(expression); + QRegularExpression expression(rule.pattern); + QRegularExpressionMatch match; + int index = text.indexOf(expression, 0, &match); // NB: this is index in block, not full document while (index >= 0) { - int length = expression.matchedLength(); + int length = match.capturedLength(); setFormat(index, length, rule.format); - index = text.indexOf(expression, index + length); + index = text.indexOf(expression, index + length, &match); } } } diff --git a/src/R/RSyntax.h b/src/R/RSyntax.h index e165c7dc6..c47cff78e 100644 --- a/src/R/RSyntax.h +++ b/src/R/RSyntax.h @@ -23,6 +23,7 @@ #include #include +#include class QTextDocument; @@ -38,7 +39,7 @@ class RSyntax : public QSyntaxHighlighter private: struct HighlightingRule { - QRegExp pattern; + QRegularExpression pattern; QTextCharFormat format; }; QVector highlightingRules;