From 036a60a0955c274243c0647d2dd11928c2f30867 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sat, 28 Oct 2023 00:20:01 +0200 Subject: [PATCH] Don't linkify urls in code blocks BUG: 475301 --- src/texthandler.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/texthandler.cpp b/src/texthandler.cpp index ea6a89f88..c5a9147ee 100644 --- a/src/texthandler.cpp +++ b/src/texthandler.cpp @@ -429,9 +429,54 @@ QString TextHandler::unescapeHtml(QString stringIn) QString TextHandler::linkifyUrls(QString stringIn) { - stringIn = stringIn.replace(TextRegex::mxId, QStringLiteral(R"(\1\2)")); - stringIn.replace(TextRegex::plainUrl, QStringLiteral(R"(\1)")); - stringIn = stringIn.replace(TextRegex::emailAddress, QStringLiteral(R"(\1\2)")); + QRegularExpressionMatch match; + int start = 0; + for (int index = 0; index != -1; index = stringIn.indexOf(TextRegex::mxId, start, &match)) { + int skip = 0; + if (match.captured(0).size() > 0) { + if (stringIn.left(index).count(QStringLiteral("")) == stringIn.left(index).count(QStringLiteral(""))) { + auto replacement = QStringLiteral("%1").arg(match.captured(2)); + stringIn = stringIn.replace(index, match.captured(0).size(), replacement); + } else { + skip = match.captured().length(); + } + } + start = index + skip; + match = {}; + } + start = 0; + match = {}; + for (int index = 0; index != -1; index = stringIn.indexOf(TextRegex::plainUrl, start, &match)) { + int skip = 0; + if (match.captured(0).size() > 0) { + if (stringIn.left(index).count(QStringLiteral("")) == stringIn.left(index).count(QStringLiteral(""))) { + auto replacement = QStringLiteral("%1").arg(match.captured(1)); + stringIn = stringIn.replace(index, match.captured(0).size(), replacement); + skip = replacement.length(); + } else { + skip = match.captured().length(); + } + } + start = index + skip; + match = {}; + } + start = 0; + match = {}; + for (int index = 0; index != -1; index = stringIn.indexOf(TextRegex::emailAddress, start, &match)) { + int skip = 0; + if (match.captured(0).size() > 0) { + if (stringIn.left(index).count(QStringLiteral("")) == stringIn.left(index).count(QStringLiteral(""))) { + auto replacement = QStringLiteral("%1").arg(match.captured(2)); + stringIn = stringIn.replace(index, match.captured(0).size(), replacement); + skip = replacement.length(); + } else { + skip = match.captured().length(); + } + } + start = index + skip; + match = {}; + } + return stringIn; }