From d9e105e6e0accf5def8681334341069117cab213 Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Sat, 6 Jun 2020 22:23:20 +0200 Subject: Navigation via outline is now possible. Sexy! --- geminirenderer.cpp | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'geminirenderer.cpp') diff --git a/geminirenderer.cpp b/geminirenderer.cpp index 51565e2..811a946 100644 --- a/geminirenderer.cpp +++ b/geminirenderer.cpp @@ -235,6 +235,12 @@ std::unique_ptr GeminiRenderer::render(const QByteArray &input, outline.beginBuild(); + int anchor_id = 0; + + auto unique_anchor_name = [&]() -> QString { + return QString("auto-title-%1").arg(++anchor_id); + }; + QList lines = input.split('\n'); for (auto const &line : lines) { @@ -283,22 +289,37 @@ std::unique_ptr GeminiRenderer::render(const QByteArray &input, { auto heading = trim_whitespace(line.mid(3)); - cursor.insertText(heading + "\n", standard_h3); - outline.appendH3(heading); + auto id = unique_anchor_name(); + auto fmt = standard_h3; + fmt.setAnchor(true); + fmt.setAnchorNames(QStringList { id }); + + cursor.insertText(heading + "\n", fmt); + outline.appendH3(heading, id); } else if (line.startsWith("##")) { auto heading = trim_whitespace(line.mid(2)); - cursor.insertText(heading + "\n", standard_h2); - outline.appendH2(heading); + auto id = unique_anchor_name(); + auto fmt = standard_h2; + fmt.setAnchor(true); + fmt.setAnchorNames(QStringList { id }); + + cursor.insertText(heading + "\n", fmt); + outline.appendH2(heading, id); } else if (line.startsWith("#")) { auto heading = trim_whitespace(line.mid(1)); - cursor.insertText(heading + "\n", standard_h1); - outline.appendH1(heading); + auto id = unique_anchor_name(); + auto fmt = standard_h1; + fmt.setAnchor(true); + fmt.setAnchorNames(QStringList { id }); + + cursor.insertText(heading + "\n", fmt); + outline.appendH1(heading, id); } else if (line.startsWith("=>")) { -- cgit v1.2.3