aboutsummaryrefslogtreecommitdiff
path: root/src/geminirenderer.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-19 01:02:25 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-19 01:02:25 +0200
commit9a5c0b8ba8595b9084ad8dc27884b0cbc691459c (patch)
tree243a5ba8ed6ae7d281fea3a349266d5e38d42f23 /src/geminirenderer.cpp
parent924217fd9f9fc4e7dd78bf71f90e3c2fbd046172 (diff)
downloadkristall-9a5c0b8ba8595b9084ad8dc27884b0cbc691459c.tar.gz
Fixes bug in text highlighter, should not break Unicode anymore.
Diffstat (limited to 'src/geminirenderer.cpp')
-rw-r--r--src/geminirenderer.cpp38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/geminirenderer.cpp b/src/geminirenderer.cpp
index 9e7dcd6..fd628e5 100644
--- a/src/geminirenderer.cpp
+++ b/src/geminirenderer.cpp
@@ -267,39 +267,57 @@ std::unique_ptr<GeminiDocument> GeminiRenderer::render(
QTextCharFormat fmt = standard;
+ QByteArray buffer;
+
+ auto flush = [&]() {
+ if(buffer.size() > 0) {
+ cursor.insertText(QString::fromUtf8(buffer), fmt);
+ buffer.resize(0);
+ }
+ };
+
for(int i = 0; i < line.length(); i += 1)
{
char c = line.at(i);
if(c == ' ') {
+ flush();
fmt = standard;
- cursor.insertText(" ");
+ buffer.append(' ');
rendering_bold = false;
rendering_underlined = false;
}
else if(c == '*') {
- if(rendering_bold)
- cursor.insertText("*", fmt);
+ if(rendering_bold) {
+ buffer.append('*');
+ }
+ flush();
rendering_bold = not rendering_bold;
auto f = fmt.font();
f.setBold(rendering_bold);
fmt.setFont(f);
- if(rendering_bold)
- cursor.insertText("*", fmt);
+ if(rendering_bold) {
+ buffer.append('*');
+ }
}
else if(c == '_') {
- if(rendering_underlined)
- cursor.insertText(" ", fmt);
+ if(rendering_underlined) {
+ buffer.append(' ');
+ }
+ flush();
rendering_underlined = not rendering_underlined;
auto f = fmt.font();
fmt.setUnderlineStyle(rendering_underlined ? QTextCharFormat::SingleUnderline : QTextCharFormat::NoUnderline);
- if(rendering_underlined)
- cursor.insertText(" ", fmt);
+ if(rendering_underlined) {
+ buffer.append(' ');
+ }
}
else {
- cursor.insertText(QString::fromUtf8(&c, 1), fmt);
+ buffer.append(c);
}
}
+ flush();
+
cursor.insertText("\n", standard);
}
else {