diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-19 01:02:25 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-19 01:02:25 +0200 |
| commit | 9a5c0b8ba8595b9084ad8dc27884b0cbc691459c (patch) | |
| tree | 243a5ba8ed6ae7d281fea3a349266d5e38d42f23 | |
| parent | 924217fd9f9fc4e7dd78bf71f90e3c2fbd046172 (diff) | |
| download | kristall-9a5c0b8ba8595b9084ad8dc27884b0cbc691459c.tar.gz | |
Fixes bug in text highlighter, should not break Unicode anymore.
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | src/geminirenderer.cpp | 38 |
2 files changed, 28 insertions, 11 deletions
@@ -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 { |
