Skip to content

Commit 4f2da5a

Browse files
committed
Updated BasicXMLSyntaxHighlighter
Removed deprecated QRegExp class Code rewritten using QRegularExpression class
1 parent 3337247 commit 4f2da5a

File tree

2 files changed

+40
-51
lines changed

2 files changed

+40
-51
lines changed

src/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.cpp

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,39 @@
2323
*/
2424

2525
#include "BasicXMLSyntaxHighlighter.h"
26+
#include <QRegularExpressionMatchIterator>
2627

27-
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QObject * parent) :
28-
QSyntaxHighlighter(parent)
28+
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QObject *parent) : QSyntaxHighlighter(parent)
2929
{
3030
setRegexes();
3131
setFormats();
3232
}
3333

34-
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextDocument * parent) :
35-
QSyntaxHighlighter(parent)
34+
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent)
3635
{
3736
setRegexes();
3837
setFormats();
3938
}
4039

41-
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextEdit * parent) :
42-
QSyntaxHighlighter(parent)
40+
BasicXMLSyntaxHighlighter::BasicXMLSyntaxHighlighter(QTextEdit *parent) : QSyntaxHighlighter(parent)
4341
{
4442
setRegexes();
4543
setFormats();
4644
}
4745

48-
void BasicXMLSyntaxHighlighter::highlightBlock(const QString & text)
46+
void BasicXMLSyntaxHighlighter::highlightBlock(const QString &text)
4947
{
5048
// Special treatment for xml element regex as we use captured text to emulate lookbehind
51-
int xmlElementIndex = m_xmlElementRegex.indexIn(text);
52-
while(xmlElementIndex >= 0)
53-
{
54-
int matchedPos = m_xmlElementRegex.pos(1);
55-
int matchedLength = m_xmlElementRegex.cap(1).length();
56-
setFormat(matchedPos, matchedLength, m_xmlElementFormat);
57-
58-
xmlElementIndex = m_xmlElementRegex.indexIn(text, matchedPos + matchedLength);
49+
auto matchIt = m_xmlElementRegex.globalMatch(text);
50+
51+
while (matchIt.hasNext()) {
52+
auto match = matchIt.next();
53+
setFormat(match.capturedStart(), match.capturedLength(), m_xmlElementFormat);
5954
}
6055

6156
// Highlight xml keywords *after* xml elements to fix any occasional / captured into the enclosing element
62-
typedef QList<QRegExp>::const_iterator Iter;
63-
Iter xmlKeywordRegexesEnd = m_xmlKeywordRegexes.end();
64-
for(Iter it = m_xmlKeywordRegexes.begin(); it != xmlKeywordRegexesEnd; ++it) {
65-
const QRegExp & regex = *it;
57+
for (auto it = m_xmlKeywordRegexes.begin(); it != m_xmlKeywordRegexes.end(); ++it) {
58+
const QRegularExpression &regex = *it;
6659
highlightByRegex(m_xmlKeywordFormat, regex, text);
6760
}
6861

@@ -71,17 +64,14 @@ void BasicXMLSyntaxHighlighter::highlightBlock(const QString & text)
7164
highlightByRegex(m_xmlValueFormat, m_xmlValueRegex, text);
7265
}
7366

74-
void BasicXMLSyntaxHighlighter::highlightByRegex(const QTextCharFormat & format,
75-
const QRegExp & regex, const QString & text)
67+
void BasicXMLSyntaxHighlighter::highlightByRegex(const QTextCharFormat &format, const QRegularExpression &regex,
68+
const QString &text)
7669
{
77-
int index = regex.indexIn(text);
78-
79-
while(index >= 0)
80-
{
81-
int matchedLength = regex.matchedLength();
82-
setFormat(index, matchedLength, format);
70+
auto matchIt = regex.globalMatch(text);
8371

84-
index = regex.indexIn(text, index + matchedLength);
72+
while (matchIt.hasNext()) {
73+
auto match = matchIt.next();
74+
setFormat(match.capturedStart(), match.capturedLength(), format);
8575
}
8676
}
8777

@@ -92,9 +82,9 @@ void BasicXMLSyntaxHighlighter::setRegexes()
9282
m_xmlValueRegex.setPattern("\"[^\\n\"]+\"(?=[?\\s/>])");
9383
m_xmlCommentRegex.setPattern("<!--[^\\n]*-->");
9484

95-
m_xmlKeywordRegexes = QList<QRegExp>() << QRegExp("<\\?") << QRegExp("/>")
96-
<< QRegExp(">") << QRegExp("<") << QRegExp("</")
97-
<< QRegExp("\\?>");
85+
m_xmlKeywordRegexes = QList<QRegularExpression>()
86+
<< QRegularExpression("<\\?") << QRegularExpression("/>") << QRegularExpression(">") << QRegularExpression("<")
87+
<< QRegularExpression("</") << QRegularExpression("\\?>");
9888
}
9989

10090
void BasicXMLSyntaxHighlighter::setFormats()

src/BasicXMLSyntaxHighlighter/BasicXMLSyntaxHighlighter.h

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,38 @@
2424
#ifndef BASIC_XML_SYNTAX_HIGHLIGHTER_H
2525
#define BASIC_XML_SYNTAX_HIGHLIGHTER_H
2626

27+
#include <QRegularExpression>
2728
#include <QSyntaxHighlighter>
2829
#include <QTextEdit>
2930

30-
class BasicXMLSyntaxHighlighter : public QSyntaxHighlighter
31-
{
31+
class BasicXMLSyntaxHighlighter : public QSyntaxHighlighter {
3232
Q_OBJECT
3333
public:
34-
BasicXMLSyntaxHighlighter(QObject * parent);
35-
BasicXMLSyntaxHighlighter(QTextDocument * parent);
36-
BasicXMLSyntaxHighlighter(QTextEdit * parent);
34+
BasicXMLSyntaxHighlighter(QObject *parent);
35+
BasicXMLSyntaxHighlighter(QTextDocument *parent);
36+
BasicXMLSyntaxHighlighter(QTextEdit *parent);
3737

3838
protected:
39-
virtual void highlightBlock(const QString & text);
39+
virtual void highlightBlock(const QString &text);
4040

4141
private:
42-
void highlightByRegex(const QTextCharFormat & format,
43-
const QRegExp & regex, const QString & text);
42+
void highlightByRegex(const QTextCharFormat &format, const QRegularExpression &regex, const QString &text);
4443

4544
void setRegexes();
4645
void setFormats();
4746

4847
private:
49-
QTextCharFormat m_xmlKeywordFormat;
50-
QTextCharFormat m_xmlElementFormat;
51-
QTextCharFormat m_xmlAttributeFormat;
52-
QTextCharFormat m_xmlValueFormat;
53-
QTextCharFormat m_xmlCommentFormat;
54-
55-
QList<QRegExp> m_xmlKeywordRegexes;
56-
QRegExp m_xmlElementRegex;
57-
QRegExp m_xmlAttributeRegex;
58-
QRegExp m_xmlValueRegex;
59-
QRegExp m_xmlCommentRegex;
48+
QTextCharFormat m_xmlKeywordFormat;
49+
QTextCharFormat m_xmlElementFormat;
50+
QTextCharFormat m_xmlAttributeFormat;
51+
QTextCharFormat m_xmlValueFormat;
52+
QTextCharFormat m_xmlCommentFormat;
53+
54+
QList<QRegularExpression> m_xmlKeywordRegexes;
55+
QRegularExpression m_xmlElementRegex;
56+
QRegularExpression m_xmlAttributeRegex;
57+
QRegularExpression m_xmlValueRegex;
58+
QRegularExpression m_xmlCommentRegex;
6059
};
6160

62-
#endif // BASIC_XML_SYNTAX_HIGHLIGHTER_H
61+
#endif // BASIC_XML_SYNTAX_HIGHLIGHTER_H

0 commit comments

Comments
 (0)