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 /src/geminirenderer.cpp | |
| parent | 924217fd9f9fc4e7dd78bf71f90e3c2fbd046172 (diff) | |
| download | kristall-9a5c0b8ba8595b9084ad8dc27884b0cbc691459c.tar.gz | |
Fixes bug in text highlighter, should not break Unicode anymore.
Diffstat (limited to 'src/geminirenderer.cpp')
| -rw-r--r-- | src/geminirenderer.cpp | 38 |
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 { |
