diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2020-02-18 01:35:26 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2020-02-18 19:19:26 +0000 |
commit | 937e2b56e7ef63ff55d0c34a4461a795871c330e (patch) | |
tree | 4f06d892ddd386d34473fe03f53ecb05f5dde267 /src/plugins/vcsbase | |
parent | 5bb6c7f0cfbb2c67cfd6a2f09e152f54cdc90dda (diff) |
VcsOutputFormatter: Fix multiple regexp matches
Fixes: QTCREATORBUG-23614
Change-Id: I86e548a1f727113782afbc6b934d6dddc92c92ea
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r-- | src/plugins/vcsbase/vcsoutputformatter.cpp | 37 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsoutputformatter.h | 3 |
2 files changed, 16 insertions, 24 deletions
diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp index 2b0aa92029..4b09ed06eb 100644 --- a/src/plugins/vcsbase/vcsoutputformatter.cpp +++ b/src/plugins/vcsbase/vcsoutputformatter.cpp @@ -31,40 +31,33 @@ namespace VcsBase { VcsOutputFormatter::VcsOutputFormatter() : - m_urlRegexp("https?://\\S*"), - m_referenceRegexp("(v[0-9]+\\.[0-9]+\\.[0-9]+[\\-A-Za-z0-9]*)" // v0.1.2-beta3 - "|([0-9a-f]{6,}(?:\\.\\.[0-9a-f]{6,})?)") // 789acf or 123abc..456cde + m_regexp( + "(https?://\\S*)" // https://codereview.org/c/1234 + "|(v[0-9]+\\.[0-9]+\\.[0-9]+[\\-A-Za-z0-9]*)" // v0.1.2-beta3 + "|([0-9a-f]{6,}(?:\\.\\.[0-9a-f]{6,})?)") // 789acf or 123abc..456cde { } void VcsOutputFormatter::appendMessage(const QString &text, Utils::OutputFormat format) { - const QRegularExpressionMatch urlMatch = m_urlRegexp.match(text); - const QRegularExpressionMatch referenceMatch = m_referenceRegexp.match(text); - - auto append = [this](const QRegularExpressionMatch &match, - QString text, Utils::OutputFormat format) { + QRegularExpressionMatchIterator it = m_regexp.globalMatch(text); + int begin = 0; + while (it.hasNext()) { + const QRegularExpressionMatch match = it.next(); const QTextCharFormat normalFormat = charFormat(format); - OutputFormatter::appendMessage(text.left(match.capturedStart()), format); + OutputFormatter::appendMessage(text.mid(begin, match.capturedStart() - begin), format); QTextCursor tc = plainTextEdit()->textCursor(); QStringView url = match.capturedView(); - int end = match.capturedEnd(); + begin = match.capturedEnd(); while (url.rbegin()->isPunct()) { url.chop(1); - --end; + --begin; } - tc.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); + tc.movePosition(QTextCursor::End); tc.insertText(url.toString(), linkFormat(normalFormat, url.toString())); - tc.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); - OutputFormatter::appendMessage(text.mid(end), format); - }; - - if (urlMatch.hasMatch()) - append(urlMatch, text, format); - else if (referenceMatch.hasMatch()) - append(referenceMatch, text, format); - else - OutputFormatter::appendMessage(text, format); + tc.movePosition(QTextCursor::End); + } + OutputFormatter::appendMessage(text.mid(begin), format); } void VcsOutputFormatter::handleLink(const QString &href) diff --git a/src/plugins/vcsbase/vcsoutputformatter.h b/src/plugins/vcsbase/vcsoutputformatter.h index d1c99b0087..d1d508b895 100644 --- a/src/plugins/vcsbase/vcsoutputformatter.h +++ b/src/plugins/vcsbase/vcsoutputformatter.h @@ -42,8 +42,7 @@ signals: void referenceClicked(const QString &reference); private: - const QRegularExpression m_urlRegexp; - const QRegularExpression m_referenceRegexp; + const QRegularExpression m_regexp; }; } |