md4c

C Markdown parser. Fast. SAX-like interface. Compliant to CommonMark specification.
git clone https://noulin.net/git/md4c.git
Log | Files | Refs | README | LICENSE

commit 2e96328ef64647c0897a591eea876c8c5770ef74
parent 5b5c8e7bb0d383b902fc74c91bdc07b99b56b7a3
Author: Martin Mitas <mity@morous.org>
Date:   Mon, 21 Nov 2016 00:27:03 +0100

Use first matching link reference definition.

Diffstat:
Mmd4c/md4c.c | 15++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/md4c/md4c.c b/md4c/md4c.c @@ -100,7 +100,8 @@ struct MD_CTX_tag { CHAR* buffer; unsigned alloc_buffer; - MD_LINK_REF_DEF* link_ref_defs; + MD_LINK_REF_DEF* link_ref_head; + MD_LINK_REF_DEF* link_ref_tail; /* Stack of inline/span markers. * This is only used for parsing a single block contents but by storing it @@ -1562,8 +1563,12 @@ md_is_link_reference_definition(MD_CTX* ctx, const MD_LINE* lines, int n_lines) def->title_needs_free = TRUE; } - def->next = ctx->link_ref_defs; - ctx->link_ref_defs = def; + if(ctx->link_ref_tail != NULL) + ctx->link_ref_tail->next = def; + else + ctx->link_ref_head = def; + ctx->link_ref_tail = def; + def->next = NULL; ret = line_index + 1; @@ -1653,7 +1658,7 @@ md_lookup_link_ref_def(MD_CTX* ctx, const CHAR* label, SZ label_size, MD_LINK_RE { MD_LINK_REF_DEF* def; - def = ctx->link_ref_defs; + def = ctx->link_ref_head; while(def != NULL) { if(md_link_label_eq(def->label, def->label_size, label, label_size)) { *p_def = def; @@ -1807,7 +1812,7 @@ abort: static void md_free_link_ref_defs(MD_CTX* ctx) { - MD_LINK_REF_DEF* def = ctx->link_ref_defs; + MD_LINK_REF_DEF* def = ctx->link_ref_head; MD_LINK_REF_DEF* def_next; while(def != NULL) {