aboutsummaryrefslogtreecommitdiff
path: root/src/renderers/markdownrenderer.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-23 10:38:01 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-23 10:38:01 +0200
commit90db2203299e08d2953fec92a7b7d1f82b0d6011 (patch)
treecb82250a186b1cbdb2102b37f57049811268f74d /src/renderers/markdownrenderer.cpp
parent694c1f6d276d0a4ea3422a02db0f6cf96313b733 (diff)
downloadkristall-90db2203299e08d2953fec92a7b7d1f82b0d6011.tar.gz
Adds link coloring for markdown.
Diffstat (limited to 'src/renderers/markdownrenderer.cpp')
-rw-r--r--src/renderers/markdownrenderer.cpp28
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: