From 831bf6de49ae58bd3630f40bdb6f8bc5371a33dd Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 12 Dec 2014 23:49:52 -0800 Subject: Revert "Removed CMARK_NODE_REFERENCE_DEF from API." This reverts commit b598b52a4acdc2332be3d34e30237d1b93b7dd03. The change led to some problems, because some of the callers of 'finalize' expected the node to exist after the call. This could all be rewritten, but for now let's just revert. --- src/blocks.c | 3 +-- src/cmark.h | 4 +++- src/html.c | 3 +++ src/node.c | 2 ++ src/print.c | 4 ++++ 5 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/blocks.c b/src/blocks.c index 8ca10b9..ebef88b 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -201,8 +201,7 @@ static void finalize(cmark_parser *parser, cmark_node* b, int line_number) strbuf_drop(&b->string_content, pos); } if (is_blank(&b->string_content, 0)) { - // remove blank node (former reference def) - cmark_node_free(b); + b->type = NODE_REFERENCE_DEF; } break; diff --git a/src/cmark.h b/src/cmark.h index 224ef3a..3eab93a 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -47,9 +47,10 @@ typedef enum { CMARK_NODE_PARAGRAPH, CMARK_NODE_HEADER, CMARK_NODE_HRULE, + CMARK_NODE_REFERENCE_DEF, CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, - CMARK_NODE_LAST_BLOCK = CMARK_NODE_HRULE, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_REFERENCE_DEF, /* Inline */ CMARK_NODE_TEXT, @@ -336,6 +337,7 @@ int cmark_walk(cmark_node *root, cmark_node_handler handler, void *state); #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH #define NODE_HEADER CMARK_NODE_HEADER #define NODE_HRULE CMARK_NODE_HRULE + #define NODE_REFERENCE_DEF CMARK_NODE_REFERENCE_DEF #define NODE_TEXT CMARK_NODE_TEXT #define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK #define NODE_LINEBREAK CMARK_NODE_LINEBREAK diff --git a/src/html.c b/src/html.c index 12d4659..e6ae63e 100644 --- a/src/html.c +++ b/src/html.c @@ -163,6 +163,9 @@ S_render_node(cmark_node *node, int entering, void *vstate) strbuf_puts(html, "
\n"); break; + case CMARK_NODE_REFERENCE_DEF: + break; + case CMARK_NODE_PARAGRAPH: parent = cmark_node_parent(node); grandparent = cmark_node_parent(parent); diff --git a/src/node.c b/src/node.c index 38f1913..980229e 100644 --- a/src/node.c +++ b/src/node.c @@ -102,6 +102,7 @@ S_type_string(cmark_node *node) case CMARK_NODE_PARAGRAPH: return "PARAGRAPH"; case CMARK_NODE_HEADER: return "HEADER"; case CMARK_NODE_HRULE: return "HRULE"; + case CMARK_NODE_REFERENCE_DEF: return "REFERENCE_DEF"; case CMARK_NODE_TEXT: return "TEXT"; case CMARK_NODE_SOFTBREAK: return "SOFTBREAK"; case CMARK_NODE_LINEBREAK: return "LINEBREAK"; @@ -773,6 +774,7 @@ int S_is_leaf_node(cmark_node *current_node) case CMARK_NODE_HTML: case CMARK_NODE_HRULE: case CMARK_NODE_CODE_BLOCK: + case CMARK_NODE_REFERENCE_DEF: case CMARK_NODE_TEXT: case CMARK_NODE_SOFTBREAK: case CMARK_NODE_LINEBREAK: diff --git a/src/print.c b/src/print.c index 9384a0b..d2dfe8c 100644 --- a/src/print.c +++ b/src/print.c @@ -88,6 +88,10 @@ static void render_nodes(strbuf* buffer, cmark_node* node, int indent) print_str(buffer, node->string_content.ptr, -1); strbuf_putc(buffer, '\n'); break; + case NODE_REFERENCE_DEF: + // skip + // strbuf_printf(buffer, "reference_def\n"); + break; case NODE_TEXT: strbuf_printf(buffer, "text "); print_str(buffer, node->as.literal.data, node->as.literal.len); -- cgit v1.2.3