From bde8f18a167460c1b31f4bef2f4adc6ff20e13d2 Mon Sep 17 00:00:00 2001 From: Mike Skec Date: Sun, 7 Mar 2021 17:05:10 +1100 Subject: Add multi-line ansi escape sequences --- src/renderers/geminirenderer.cpp | 5 ++++- src/renderers/gophermaprenderer.cpp | 4 +++- src/renderers/plaintextrenderer.cpp | 3 ++- src/renderers/renderhelpers.cpp | 7 +++---- src/renderers/renderhelpers.hpp | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/renderers/geminirenderer.cpp b/src/renderers/geminirenderer.cpp index b1edfc2..f3e9f16 100644 --- a/src/renderers/geminirenderer.cpp +++ b/src/renderers/geminirenderer.cpp @@ -52,6 +52,8 @@ std::unique_ptr GeminiRenderer::render( bool centre_first_h1 = themed_style.centre_h1; + QTextCharFormat preformatted_fmt = text_style.preformatted; + outline.beginBuild(); int anchor_id = 0; @@ -88,7 +90,7 @@ std::unique_ptr GeminiRenderer::render( if (RENDER_ESCAPES) { - renderhelpers::renderEscapeCodes(line, text_style.preformatted, cursor); + renderhelpers::renderEscapeCodes(line, preformatted_fmt, text_style.preformatted, cursor); cursor.insertText("\n", text_style.preformatted); } else @@ -298,6 +300,7 @@ std::unique_ptr GeminiRenderer::render( else if (line.startsWith("```")) { verbatim = true; + preformatted_fmt = text_style.preformatted; } else { diff --git a/src/renderers/gophermaprenderer.cpp b/src/renderers/gophermaprenderer.cpp index 43017fa..66da3c1 100644 --- a/src/renderers/gophermaprenderer.cpp +++ b/src/renderers/gophermaprenderer.cpp @@ -60,6 +60,8 @@ std::unique_ptr GophermapRenderer::render(const QByteArray &input QTextBlockFormat non_list_format = cursor.blockFormat(); + QTextCharFormat text_fmt = standard; + char last_type = '1'; QList lines = input.split('\n'); @@ -149,7 +151,7 @@ std::unique_ptr GophermapRenderer::render(const QByteArray &input if (type == 'i') { const QString escapeRenderInput = title + "\n"; - renderhelpers::renderEscapeCodes(escapeRenderInput.toUtf8(), standard, cursor); + renderhelpers::renderEscapeCodes(escapeRenderInput.toUtf8(), text_fmt, standard, cursor); } else { diff --git a/src/renderers/plaintextrenderer.cpp b/src/renderers/plaintextrenderer.cpp index 9592147..d12ec26 100644 --- a/src/renderers/plaintextrenderer.cpp +++ b/src/renderers/plaintextrenderer.cpp @@ -17,7 +17,8 @@ std::unique_ptr PlainTextRenderer::render(const QByteArray &input renderhelpers::setPageMargins(result.get(), style.margin_h, style.margin_v); QTextCursor cursor { result.get() }; - renderhelpers::renderEscapeCodes(input, standard, cursor); + QTextCharFormat text_fmt = standard; + renderhelpers::renderEscapeCodes(input, text_fmt, standard, cursor); return result; } diff --git a/src/renderers/renderhelpers.cpp b/src/renderers/renderhelpers.cpp index 442d18f..9e44fa8 100644 --- a/src/renderers/renderhelpers.cpp +++ b/src/renderers/renderhelpers.cpp @@ -338,9 +338,8 @@ static QString cleanLineEndings(QString &input) } void renderhelpers::renderEscapeCodes(const QByteArray &input, - const QTextCharFormat& format, QTextCursor& cursor) + QTextCharFormat& format, const QTextCharFormat& defaultFormat, QTextCursor& cursor) { - auto textFormat = format; const auto tokens = input.split(escapeString); QString inputString = QString::fromUtf8(input); cleanLineEndings(inputString); @@ -354,12 +353,12 @@ void renderhelpers::renderEscapeCodes(const QByteArray &input, if (escSequence == "[") { it++; - parseCSI(input, it, textFormat, format, cursor); + parseCSI(input, it, format, defaultFormat, cursor); } } else { - cursor.insertText(currentCharacter, textFormat); + cursor.insertText(currentCharacter, format); } } } diff --git a/src/renderers/renderhelpers.hpp b/src/renderers/renderhelpers.hpp index 521ba92..6dce4fa 100644 --- a/src/renderers/renderhelpers.hpp +++ b/src/renderers/renderhelpers.hpp @@ -7,7 +7,7 @@ namespace renderhelpers { - void renderEscapeCodes(const QByteArray &input, const QTextCharFormat& format, QTextCursor& cursor); + void renderEscapeCodes(const QByteArray &input, QTextCharFormat& format, const QTextCharFormat& defaultFormat, QTextCursor& cursor); void setPageMargins(QTextDocument *doc, int mh, int mv); } -- cgit v1.2.3