From 2920247ab40a9029230e083697ccc162c13d94a7 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Thu, 17 Nov 2022 21:38:49 +0100 Subject: [PATCH] Don't render custom emojis in code blocks BUG: 458993 --- src/actionshandler.cpp | 4 ++-- src/customemojimodel.cpp | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index a8e7d264d..32d55c74a 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -26,7 +26,7 @@ using namespace Quotient; QString markdownToHTML(const QString &markdown) { const auto str = markdown.toUtf8(); - char *tmp_buf = cmark_markdown_to_html(str.constData(), str.size(), CMARK_OPT_HARDBREAKS); + char *tmp_buf = cmark_markdown_to_html(str.constData(), str.size(), CMARK_OPT_HARDBREAKS | CMARK_OPT_UNSAFE); const std::string html(tmp_buf); @@ -137,8 +137,8 @@ void ActionsHandler::handleMessage() } } - handledText = markdownToHTML(handledText); handledText = CustomEmojiModel::instance().preprocessText(handledText); + handledText = markdownToHTML(handledText); if (handledText.length() == 0) { return; diff --git a/src/customemojimodel.cpp b/src/customemojimodel.cpp index 17d167449..d17694a85 100644 --- a/src/customemojimodel.cpp +++ b/src/customemojimodel.cpp @@ -163,13 +163,20 @@ QHash CustomEmojiModel::roleNames() const QString CustomEmojiModel::preprocessText(const QString &text) { - auto handledText = text; - for (const auto &emoji : std::as_const(m_emojis)) { - handledText.replace( - emoji.regexp, - QStringLiteral(R"(%2)").arg(emoji.url, emoji.name)); + auto parts = text.split("```"); + bool skip = true; + for (auto &part : parts) { + skip = !skip; + if (skip) { + continue; + } + for (const auto &emoji : std::as_const(m_emojis)) { + part.replace( + emoji.regexp, + QStringLiteral(R"(%2)").arg(emoji.url, emoji.name)); + } } - return handledText; + return parts.join("```"); } QVariantList CustomEmojiModel::filterModel(const QString &filter)