From e08b69c152ca7c86b7176fae7749e104c6bf2f58 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Mon, 3 Aug 2026 00:32:26 +0200 Subject: [PATCH] fix build: replace-with-lambda requires Qt 6.5+, use manual global-match loop --- gui/chatblockmodel.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/gui/chatblockmodel.cpp b/gui/chatblockmodel.cpp index 9d70f47..9b70b55 100644 --- a/gui/chatblockmodel.cpp +++ b/gui/chatblockmodel.cpp @@ -194,21 +194,27 @@ QString ChatBlockModel::highlightCode(const QString &code, const QString &langua QString ChatBlockModel::renderMarkdown(const QString &markdown) const { // Pre-process: render blocks as styled boxes. + // Manual global-match loop instead of replace-with-lambda, which requires + // Qt 6.5+ and isn't available on all target systems. static const QRegularExpression interruptionRe( R"(\n([\s\S]*?)\n)"); - QString processed = markdown; - processed.replace(interruptionRe, [](const QString &match) -> QString { - // Extract content between the tags (after opening "\n" - // and before trailing "\n"). - const int start = QStringLiteral("\n").size(); - const int end = match.size() - QStringLiteral("\n").size(); - const QString content = match.mid(start, end - start).toHtmlEscaped(); - return QStringLiteral( - "
" - "\u26A0\uFE0F User interruption\n") + content + - QStringLiteral("
"); - }); + QString processed; + { + int cursor = 0; + auto it = interruptionRe.globalMatch(markdown); + while (it.hasNext()) { + const auto match = it.next(); + processed += markdown.mid(cursor, match.capturedStart() - cursor); + const QString content = match.captured(1).toHtmlEscaped(); + processed += QStringLiteral( + "
" + "\u26A0\uFE0F User interruption\n") + + content + QStringLiteral("
"); + cursor = match.capturedEnd(); + } + processed += markdown.mid(cursor); + } static const QRegularExpression fenceRe( R"(```([A-Za-z0-9_+.-]*)[^\n]*\n([\s\S]*?)\n```(\n|$))");