aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2020-02-18 01:35:26 +0100
committerAndré Hartmann <aha_1980@gmx.de>2020-02-18 19:19:26 +0000
commit937e2b56e7ef63ff55d0c34a4461a795871c330e (patch)
tree4f06d892ddd386d34473fe03f53ecb05f5dde267 /src/plugins/vcsbase
parent5bb6c7f0cfbb2c67cfd6a2f09e152f54cdc90dda (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.cpp37
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.h3
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;
};
}