summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorAnton Kudryavtsev <anton.kudryavtsev@vk.team>2024-03-06 15:24:56 +0300
committerAnton Kudryavtsev <antkudr@mail.ru>2024-03-13 19:34:23 +0000
commite10c9b5c0f8f194a79ce12dcf9b6b5cb19976942 (patch)
treee124d156841e0ebabd27ecc276aeeeb1c33c67f1 /src/gui
parented553b720de2da79b1fb3676e4a6a6edbdb38d99 (diff)
QTextMarkdownImporter: use string view more
to reduce allocations. While touching code, reorder condition and extract string literal to remove magic number Change-Id: I3972097dc9b976438e9ba0029f674cea2614f966 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/text/qtextmarkdownimporter.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/gui/text/qtextmarkdownimporter.cpp b/src/gui/text/qtextmarkdownimporter.cpp
index 511c0883a4..e7fcad67b5 100644
--- a/src/gui/text/qtextmarkdownimporter.cpp
+++ b/src/gui/text/qtextmarkdownimporter.cpp
@@ -27,6 +27,8 @@ Q_LOGGING_CATEGORY(lcMD, "qt.text.markdown")
static const QChar qtmi_Newline = u'\n';
static const QChar qtmi_Space = u' ';
+static constexpr auto markerString() noexcept { return "---"_L1; }
+
// TODO maybe eliminate the margins after all views recognize BlockQuoteLevel, CSS can format it, etc.
static const int qtmi_BlockQuoteIndent =
40; // pixels, same as in QTextHtmlParserNode::initializeProperties
@@ -139,24 +141,26 @@ void QTextMarkdownImporter::import(const QString &markdown)
else
m_monoFont.setPixelSize(defaultFont.pixelSize());
qCDebug(lcMD) << "default font" << defaultFont << "mono font" << m_monoFont;
- QByteArray md = markdown.toUtf8();
- if (md.startsWith("---") && m_features.testFlag(QTextMarkdownImporter::FeatureFrontMatter)) {
- qsizetype endMarkerPos = md.indexOf("---", 4);
+ QStringView md = markdown;
+
+ if (m_features.testFlag(QTextMarkdownImporter::FeatureFrontMatter) && md.startsWith(markerString())) {
+ qsizetype endMarkerPos = md.indexOf(markerString(), markerString().size() + 1);
if (endMarkerPos > 4) {
qsizetype firstLinePos = 4; // first line of yaml
- while (md.at(firstLinePos) == '\n' || md.at(firstLinePos) == '\r')
+ while (md.at(firstLinePos) == '\n'_L1 || md.at(firstLinePos) == '\r'_L1)
++firstLinePos;
- QByteArray frontMatter = md.sliced(firstLinePos, endMarkerPos - firstLinePos);
+ auto frontMatter = md.sliced(firstLinePos, endMarkerPos - firstLinePos);
firstLinePos = endMarkerPos + 4; // first line of markdown after yaml
- while (md.size() > firstLinePos && (md.at(firstLinePos) == '\n' || md.at(firstLinePos) == '\r'))
+ while (md.size() > firstLinePos && (md.at(firstLinePos) == '\n'_L1 || md.at(firstLinePos) == '\r'_L1))
++firstLinePos;
- md.remove(0, firstLinePos);
- doc->setMetaInformation(QTextDocument::FrontMatter, QString::fromUtf8(frontMatter));
+ md = md.sliced(firstLinePos);
+ doc->setMetaInformation(QTextDocument::FrontMatter, frontMatter.toString());
qCDebug(lcMD) << "extracted FrontMatter: size" << frontMatter.size();
}
}
+ const auto mdUtf8 = md.toUtf8();
m_cursor.beginEditBlock();
- md_parse(md.constData(), MD_SIZE(md.size()), &callbacks, this);
+ md_parse(mdUtf8.constData(), MD_SIZE(mdUtf8.size()), &callbacks, this);
m_cursor.endEditBlock();
}