From 85875e6e948e6fb6dd57e912402190215e1f11a5 Mon Sep 17 00:00:00 2001 From: "Zhian N. Kamvar" Date: Fri, 5 Apr 2024 10:50:58 -0700 Subject: [PATCH 1/3] add NODE_FOOTNOTE type strings --- src/node.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/node.c b/src/node.c index e7a9606d5..6de127b24 100644 --- a/src/node.c +++ b/src/node.c @@ -288,6 +288,10 @@ const char *cmark_node_get_type_string(cmark_node *node) { return "link"; case CMARK_NODE_IMAGE: return "image"; + case CMARK_NODE_FOOTNOTE_REFERENCE: + return "fnref" + case CMARK_NODE_FOOTNOTE_DEFINITION: + return "fn" } return ""; From 2032283bfc224e985b473a4a06b7e2f534f802cc Mon Sep 17 00:00:00 2001 From: "Zhian N. Kamvar" Date: Fri, 5 Apr 2024 11:17:14 -0700 Subject: [PATCH 2/3] add delimiter --- src/node.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node.c b/src/node.c index 6de127b24..c7e62d25b 100644 --- a/src/node.c +++ b/src/node.c @@ -289,9 +289,9 @@ const char *cmark_node_get_type_string(cmark_node *node) { case CMARK_NODE_IMAGE: return "image"; case CMARK_NODE_FOOTNOTE_REFERENCE: - return "fnref" + return "fnref"; case CMARK_NODE_FOOTNOTE_DEFINITION: - return "fn" + return "fn"; } return ""; From 44c7b42c207edc36bdb7ec422441b947e56bff21 Mon Sep 17 00:00:00 2001 From: "Zhian N. Kamvar" Date: Wed, 17 Apr 2024 09:15:30 -0700 Subject: [PATCH 3/3] emit cross-links to nodes in footnotes --- src/xml.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/xml.c b/src/xml.c index 5753e5ab9..c9a79cfd6 100644 --- a/src/xml.c +++ b/src/xml.c @@ -134,6 +134,25 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, escape_xml(xml, node->as.link.title.data, node->as.link.title.len); cmark_strbuf_putc(xml, '"'); break; + case CMARK_NODE_FOOTNOTE_DEFINITION: + cmark_strbuf_puts(xml, " id=\"fn-"); + escape_xml(xml, node->as.literal.data, node->as.literal.len); + cmark_strbuf_putc(xml, '"'); + break; + case CMARK_NODE_FOOTNOTE_REFERENCE: + cmark_strbuf_puts(xml, " id=\"fnref-"); + escape_xml(xml, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len); + if (node->footnote.ref_ix > 1) { + char n[32]; + snprintf(n, sizeof(n), "%d", node->footnote.ref_ix); + cmark_strbuf_puts(xml, "-"); + cmark_strbuf_puts(xml, n); + } + cmark_strbuf_putc(xml, '"'); + cmark_strbuf_puts(xml, " destination=\"fn-"); + escape_xml(xml, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len); + cmark_strbuf_putc(xml, '"'); + break; default: break; }