aboutsummaryrefslogtreecommitdiff
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
parent924217fd9f9fc4e7dd78bf71f90e3c2fbd046172 (diff)
downloadkristall-9a5c0b8ba8595b9084ad8dc27884b0cbc691459c.tar.gz
Fixes bug in text highlighter, should not break Unicode anymore.
-rw-r--r--README.md1
-rw-r--r--src/geminirenderer.cpp38
2 files changed, 28 insertions, 11 deletions
diff --git a/README.md b/README.md
index 7838c8a..ba788dd 100644
--- a/README.md
+++ b/README.md
@@ -150,7 +150,6 @@ ln -s /path/to/kristall .
- [ ] Allow user to ignore TLS errors
- [ ] Enable TOFU for HTTPS
- [ ] Add management for client certificates
- - [x] Rename/delete certificates
- [ ] Rename/delete/merge groups
- [ ] Import/export PEM certificates and keys
- [ ] Add a "scope" option to certificates so users can restrict the scope where the certificate is valid
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 {