diff options
| author | Karol Kosek <krkk@krkk.ct8.pl> | 2021-04-04 23:23:44 +0200 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-04-05 17:13:58 +0200 |
| commit | 0e6bed958e9c179e9a6fddde13b9a9f883abe861 (patch) | |
| tree | 07b099b9dccbbbe8249bbb9193f0b3b4e6fe76b7 /src/renderers/markdownrenderer.cpp | |
| parent | 8d0eb55033a46f5b278224d173499d2f3d42eadf (diff) | |
| download | kristall-0e6bed958e9c179e9a6fddde13b9a9f883abe861.tar.gz | |
MarkdownRenderer: move page_title to RenderState struct
Diffstat (limited to 'src/renderers/markdownrenderer.cpp')
| -rw-r--r-- | src/renderers/markdownrenderer.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/renderers/markdownrenderer.cpp b/src/renderers/markdownrenderer.cpp index a6793f9..9e9e953 100644 --- a/src/renderers/markdownrenderer.cpp +++ b/src/renderers/markdownrenderer.cpp @@ -67,6 +67,8 @@ struct RenderState DocumentOutlineModel *outline; TextStyleInstance text_style; + QString &page_title; + bool suppress_next_block = false; void emitNewBlock() { @@ -77,13 +79,13 @@ struct RenderState } }; -static void renderNode(RenderState &state, cmark_node &node, const QTextCharFormat ¤t_format, QString &page_title, int listIndent = 1); +static void renderNode(RenderState &state, cmark_node &node, const QTextCharFormat ¤t_format, int listIndent = 1); -static void renderChildren(RenderState &state, cmark_node & node, const QTextCharFormat ¤t_format, QString &page_title, int listIndent = 1) +static void renderChildren(RenderState &state, cmark_node & node, const QTextCharFormat ¤t_format, int listIndent = 1) { for (auto child = cmark_node_first_child(&node); child != nullptr; child = cmark_node_next(child)) { - renderNode(state, *child, current_format, page_title, listIndent); + renderNode(state, *child, current_format, listIndent); } } @@ -104,7 +106,7 @@ static QString extractNodeText(cmark_node &node) return QString::fromUtf8(data, strlen(data)); } -static void renderNode(RenderState &state, cmark_node & node, const QTextCharFormat ¤t_format, QString &page_title, int listIndent) +static void renderNode(RenderState &state, cmark_node & node, const QTextCharFormat ¤t_format, int listIndent) { auto & cursor = state.cursor; @@ -112,7 +114,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor { case CMARK_NODE_DOCUMENT: { - renderChildren(state, node, current_format, page_title); + renderChildren(state, node, current_format); break; } @@ -122,7 +124,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor state.suppress_next_block = true; cursor.setBlockFormat(state.text_style.blockquote_format); - renderChildren(state, node, current_format, page_title); + renderChildren(state, node, current_format); state.emitNewBlock(); state.suppress_next_block = true; @@ -144,7 +146,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor cursor.insertList(listFormat); state.suppress_next_block = true; - renderChildren(state, node, current_format, page_title, listIndent); + renderChildren(state, node, current_format, listIndent); state.emitNewBlock(); state.suppress_next_block = true; @@ -153,7 +155,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor } case CMARK_NODE_ITEM: { - renderChildren(state, node, current_format, page_title, listIndent); + renderChildren(state, node, current_format, listIndent); break; } case CMARK_NODE_CODE_BLOCK: @@ -183,7 +185,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor case CMARK_NODE_PARAGRAPH: { state.emitNewBlock(); - renderChildren(state, node, current_format, page_title); + renderChildren(state, node, current_format); break; } case CMARK_NODE_HEADING: @@ -207,15 +209,15 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor state.outline->appendH1(text, QString { }); // Use first heading as the page's title. - if (page_title.isEmpty()) - page_title = text; + if (state.page_title.isEmpty()) + state.page_title = text; break; case 2: state.outline->appendH2(text, QString { }); break; case 3: state.outline->appendH3(text, QString { }); break; } - renderChildren(state, node, fmt, page_title); + renderChildren(state, node, fmt); break; } case CMARK_NODE_THEMATIC_BREAK: @@ -260,14 +262,14 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor { auto fmt = current_format; fmt.setFontItalic(true); - renderChildren(state, node, fmt, page_title); + renderChildren(state, node, fmt); break; } case CMARK_NODE_STRONG: { auto fmt = current_format; fmt.setFontWeight(QFont::Bold); - renderChildren(state, node, fmt, page_title); + renderChildren(state, node, fmt); break; } case CMARK_NODE_IMAGE: @@ -294,7 +296,7 @@ static void renderNode(RenderState &state, cmark_node & node, const QTextCharFor } fmt.setAnchorHref(absolute_url.toString(QUrl::FullyEncoded)); - renderChildren(state, node, fmt, page_title); + renderChildren(state, node, fmt); cursor.insertText(suffix, fmt); break; } @@ -329,9 +331,10 @@ std::unique_ptr<QTextDocument> MarkdownRenderer::render( &style, &outline, TextStyleInstance { style }, + page_title }; - renderNode(state, *md_root, state.text_style.standard, page_title); + renderNode(state, *md_root, state.text_style.standard); outline.endBuild(); |
