diff options
| author | Mike Skec <skec@protonmail.ch> | 2021-03-07 18:32:35 +1100 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-03-07 11:25:59 +0100 |
| commit | 27236f6ef005674dd5799e277dd7843be3b39aac (patch) | |
| tree | 02817ed3e00020b782c7afbc3e1a46b6324ff28b /src/renderers | |
| parent | bde8f18a167460c1b31f4bef2f4adc6ff20e13d2 (diff) | |
| download | kristall-27236f6ef005674dd5799e277dd7843be3b39aac.tar.gz | |
Add preference for ANSI escape codes
Diffstat (limited to 'src/renderers')
| -rw-r--r-- | src/renderers/geminirenderer.cpp | 15 | ||||
| -rw-r--r-- | src/renderers/renderhelpers.cpp | 17 |
2 files changed, 18 insertions, 14 deletions
diff --git a/src/renderers/geminirenderer.cpp b/src/renderers/geminirenderer.cpp index f3e9f16..6bcd3a4 100644 --- a/src/renderers/geminirenderer.cpp +++ b/src/renderers/geminirenderer.cpp @@ -84,19 +84,8 @@ std::unique_ptr<GeminiDocument> GeminiRenderer::render( else { cursor.setBlockFormat(text_style.preformatted_format); - - // TODO: make this a preference - const bool RENDER_ESCAPES = true; - - if (RENDER_ESCAPES) - { - renderhelpers::renderEscapeCodes(line, preformatted_fmt, text_style.preformatted, cursor); - cursor.insertText("\n", text_style.preformatted); - } - else - { - cursor.insertText(line + "\n", text_style.preformatted); - } + renderhelpers::renderEscapeCodes(line, preformatted_fmt, text_style.preformatted, cursor); + cursor.insertText("\n", text_style.preformatted); } continue; diff --git a/src/renderers/renderhelpers.cpp b/src/renderers/renderhelpers.cpp index 9e44fa8..a18d434 100644 --- a/src/renderers/renderhelpers.cpp +++ b/src/renderers/renderhelpers.cpp @@ -340,9 +340,17 @@ static QString cleanLineEndings(QString &input) void renderhelpers::renderEscapeCodes(const QByteArray &input, QTextCharFormat& format, const QTextCharFormat& defaultFormat, QTextCursor& cursor) { - const auto tokens = input.split(escapeString); QString inputString = QString::fromUtf8(input); cleanLineEndings(inputString); + + // Don't render escapes if set to 'ignore' + if (kristall::globals().options.ansi_escapes == AnsiEscRenderMode::ignore) + { + cursor.insertText(input, defaultFormat); + return; + } + + const auto tokens = input.split(escapeString); for (QString::const_iterator it = inputString.cbegin(); it != inputString.cend(); ++it) { const auto currentCharacter = *it;; @@ -356,8 +364,15 @@ void renderhelpers::renderEscapeCodes(const QByteArray &input, parseCSI(input, it, format, defaultFormat, cursor); } } + else if (kristall::globals().options.ansi_escapes == AnsiEscRenderMode::strip) + { + // 'strip' mode -> we still interpret escapes as above, but just render + // text in the default format. + cursor.insertText(currentCharacter, defaultFormat); + } else { + // 'render' mode -> we use the interpreted ANSI format cursor.insertText(currentCharacter, format); } } |
