aboutsummaryrefslogtreecommitdiff
path: root/src/renderers
diff options
context:
space:
mode:
authorMike Skec <skec@protonmail.ch>2021-03-07 18:32:35 +1100
committerFelix Queißner <felix@ib-queissner.de>2021-03-07 11:25:59 +0100
commit27236f6ef005674dd5799e277dd7843be3b39aac (patch)
tree02817ed3e00020b782c7afbc3e1a46b6324ff28b /src/renderers
parentbde8f18a167460c1b31f4bef2f4adc6ff20e13d2 (diff)
downloadkristall-27236f6ef005674dd5799e277dd7843be3b39aac.tar.gz
Add preference for ANSI escape codes
Diffstat (limited to 'src/renderers')
-rw-r--r--src/renderers/geminirenderer.cpp15
-rw-r--r--src/renderers/renderhelpers.cpp17
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);
}
}