diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-23 10:38:01 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-23 10:38:01 +0200 |
| commit | 90db2203299e08d2953fec92a7b7d1f82b0d6011 (patch) | |
| tree | cb82250a186b1cbdb2102b37f57049811268f74d /src/renderers/markdownrenderer.cpp | |
| parent | 694c1f6d276d0a4ea3422a02db0f6cf96313b733 (diff) | |
| download | kristall-90db2203299e08d2953fec92a7b7d1f82b0d6011.tar.gz | |
Adds link coloring for markdown.
Diffstat (limited to 'src/renderers/markdownrenderer.cpp')
| -rw-r--r-- | src/renderers/markdownrenderer.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/renderers/markdownrenderer.cpp b/src/renderers/markdownrenderer.cpp index 44a9575..c230ff7 100644 --- a/src/renderers/markdownrenderer.cpp +++ b/src/renderers/markdownrenderer.cpp @@ -259,9 +259,33 @@ static void renderNode(RenderState &state, cmark_node const & node, QTextCharFor } case CMARK_NODE_LINK: { - auto fmt = state.text_style.standard_link; - fmt.setAnchorHref(QString::fromUtf8((char*)node.as.link.url)); + QUrl absolute_url = QString::fromUtf8((char*)node.as.link.url); + if(absolute_url.isRelative()) { + absolute_url = state.root_url.resolved(absolute_url); + } + + QTextCharFormat fmt = state.text_style.external_link; + if (absolute_url.host() == state.root_url.host()) + { + fmt = state.text_style.standard_link; + } + else + { + fmt = state.text_style.external_link; + } + + QString suffix = ""; + if (absolute_url.scheme() != state.root_url.scheme()) + { + if(absolute_url.scheme() != "kristall+ctrl") { + suffix = " [" + absolute_url.scheme().toUpper() + "]"; + fmt = state.text_style.cross_protocol_link; + } + } + + fmt.setAnchorHref(absolute_url.toString(QUrl::FullyEncoded)); renderChildren(state, node, fmt); + cursor.insertText(suffix, fmt); break; } case CMARK_NODE_IMAGE: |
