rainbow now works with unicode!

This commit is contained in:
LordMZTE 2021-03-27 14:35:06 +01:00
parent a898abcecb
commit 939f00c90d

View file

@ -492,7 +492,10 @@ utils::markdownToHtml(const QString &text, bool rainbowify)
if (cmark_node_get_type(cur) != CMARK_NODE_TEXT) if (cmark_node_get_type(cur) != CMARK_NODE_TEXT)
continue; continue;
// count up by length of current node's text // count up by length of current node's text
textLen += strlen(cmark_node_get_literal(cur)); QTextBoundaryFinder tbf(QTextBoundaryFinder::BoundaryType::Grapheme,
QString(cmark_node_get_literal(cur)));
while (tbf.toNextBoundary() != -1)
textLen++;
} }
// create new iter to start over // create new iter to start over
@ -510,14 +513,19 @@ utils::markdownToHtml(const QString &text, bool rainbowify)
// get text in current node // get text in current node
const char *tmp_buf = cmark_node_get_literal(cur); const char *tmp_buf = cmark_node_get_literal(cur);
std::string nodeText(tmp_buf); std::string nodeText(tmp_buf);
auto qNodeText = QString::fromStdString(nodeText);
// create buffer to append rainbow text to // create buffer to append rainbow text to
std::string buf; std::string buf;
int boundaryStart = 0; int boundaryStart = 0;
int boundaryEnd = 0; int boundaryEnd = 0;
QTextBoundaryFinder tbf(QTextBoundaryFinder::BoundaryType::Grapheme, QString::fromStdString(nodeText)); // use QTextBoundaryFinder to iterate ofer graphemes
QTextBoundaryFinder tbf(QTextBoundaryFinder::BoundaryType::Grapheme,
qNodeText);
while ((boundaryEnd = tbf.toNextBoundary()) != -1) { while ((boundaryEnd = tbf.toNextBoundary()) != -1) {
nhlog::ui()->info("from {} to {}", boundaryStart, boundaryEnd); // Split text to get current char
auto curChar = nodeText.substr(boundaryStart, boundaryEnd - boundaryEnd + 1); auto curChar =
qNodeText.mid(boundaryStart, boundaryEnd - boundaryStart)
.toStdString();
boundaryStart = boundaryEnd; boundaryStart = boundaryEnd;
// Don't rainbowify spaces // Don't rainbowify spaces
if (curChar == " ") { if (curChar == " ") {
@ -531,8 +539,8 @@ utils::markdownToHtml(const QString &text, bool rainbowify)
auto colorString = color.name(QColor::NameFormat::HexRgb); auto colorString = color.name(QColor::NameFormat::HexRgb);
// create HTML element for current char // create HTML element for current char
auto curCharColored = fmt::format("<font color=\"{}\">{}</font>", auto curCharColored = fmt::format("<font color=\"{}\">{}</font>",
colorString.toStdString(), colorString.toStdString(),
curChar); curChar);
// append colored HTML element to buffer // append colored HTML element to buffer
buf.append(curCharColored); buf.append(curCharColored);