Skip to content

Commit

Permalink
Python - Replace QRegExp by QRegularExpression
Browse files Browse the repository at this point in the history
  • Loading branch information
amtriathlon committed Jan 15, 2024
1 parent c054d7c commit 1f999a3
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/Python/PythonEmbed.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ bool PythonEmbed::pythonInstalled(QString &pybin, QString &pypath, QString PYTHO
if (installnames.count() >0) break;
}

printd("Binary found:%d\n", installnames.count());
printd("Binary found:%d\n", (int)installnames.count());
// if we failed, its not installed
if (installnames.count()==0) return false;

Expand Down
36 changes: 19 additions & 17 deletions src/Python/PythonSyntax.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

#include <QSyntaxHighlighter>
#include <QRegularExpression>

#include "PythonSyntax.h"

Expand All @@ -26,25 +27,25 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
HighlightingRule rule;

assignmentFormat.setForeground(dark ? QColor(255,204,000): Qt::black);
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);


// function: anything followed by (
functionFormat.setForeground(dark ? Qt::cyan : Qt::darkBlue);
//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);

Expand All @@ -53,7 +54,7 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
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);
}
Expand All @@ -63,7 +64,7 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
QStringList constantPatterns;
constantPatterns << "\\bTrue\\b" << "\\bFalse\\b" << "\\bNone\\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);
}
Expand All @@ -81,7 +82,7 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
<< "\\bwith\\b" << "\\byield\\b";

foreach (QString pattern, keywordPatterns) {
rule.pattern = QRegExp(pattern);
rule.pattern = QRegularExpression(pattern);
rule.format = keywordFormat;
highlightingRules.append(rule);
}
Expand All @@ -92,7 +93,7 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
QStringList commonFunctionPatterns;
commonFunctionPatterns << "\\bGC\\b" << "\\bdef\\b" << "\\bself\\b";
foreach (QString pattern, commonFunctionPatterns) {
rule.pattern = QRegExp(pattern);
rule.pattern = QRegularExpression(pattern);
rule.format = commonFunctionFormat;
highlightingRules.append(rule);
}
Expand All @@ -107,30 +108,30 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
operatorPatterns << "\\band\\b" << "\\bor\\b" << "\\bnot\\b" << "[\\.\\&\\$\\@\\|\\:\\~\\{\\}\\(\\)!]" ;

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(dark ? Qt::red : Qt::darkRed);
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(dark ? QColor(100,149,237) : Qt::darkBlue);
rule.pattern = QRegExp("#[^\n]*");
rule.pattern = QRegularExpression("#[^\n]*");
rule.format = commentFormat;
highlightingRules.append(rule);
}
Expand All @@ -139,13 +140,14 @@ PythonSyntax::PythonSyntax(QTextDocument *parent, bool dark) : QSyntaxHighlighte
void PythonSyntax::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);
}
}
}
3 changes: 2 additions & 1 deletion src/Python/PythonSyntax.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

#include <QHash>
#include <QTextCharFormat>
#include <QRegularExpression>

class QTextDocument;

Expand All @@ -38,7 +39,7 @@ class PythonSyntax : public QSyntaxHighlighter

private:
struct HighlightingRule {
QRegExp pattern;
QRegularExpression pattern;
QTextCharFormat format;
};
QVector<HighlightingRule> highlightingRules;
Expand Down

0 comments on commit 1f999a3

Please sign in to comment.