aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2014-12-12 23:49:52 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2014-12-12 23:49:52 -0800
commit831bf6de49ae58bd3630f40bdb6f8bc5371a33dd (patch)
tree5878846380b43f3116c9ddc0afc4d645486549cd
parent3d0110a36054a9af1532d52f2671360fa1c802a3 (diff)
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.
-rw-r--r--api_test/main.c5
-rw-r--r--man/man3/cmark.33
-rw-r--r--src/blocks.c3
-rw-r--r--src/cmark.h4
-rw-r--r--src/html.c3
-rw-r--r--src/node.c2
-rw-r--r--src/print.c4
7 files changed, 19 insertions, 5 deletions
diff --git a/api_test/main.c b/api_test/main.c
index 25521d0..996ada7 100644
--- a/api_test/main.c
+++ b/api_test/main.c
@@ -23,6 +23,7 @@ static const cmark_node_type node_types[] = {
CMARK_NODE_PARAGRAPH,
CMARK_NODE_HEADER,
CMARK_NODE_HRULE,
+ CMARK_NODE_REFERENCE_DEF,
CMARK_NODE_TEXT,
CMARK_NODE_SOFTBREAK,
CMARK_NODE_LINEBREAK,
@@ -424,7 +425,8 @@ hierarchy(test_batch_runner *runner)
(1 << CMARK_NODE_HTML) |
(1 << CMARK_NODE_PARAGRAPH) |
(1 << CMARK_NODE_HEADER) |
- (1 << CMARK_NODE_HRULE);
+ (1 << CMARK_NODE_HRULE) |
+ (1 << CMARK_NODE_REFERENCE_DEF);
int all_inlines =
(1 << CMARK_NODE_TEXT) |
(1 << CMARK_NODE_SOFTBREAK) |
@@ -445,6 +447,7 @@ hierarchy(test_batch_runner *runner)
test_content(runner, CMARK_NODE_PARAGRAPH, all_inlines);
test_content(runner, CMARK_NODE_HEADER, all_inlines);
test_content(runner, CMARK_NODE_HRULE, 0);
+ test_content(runner, CMARK_NODE_REFERENCE_DEF, 0);
test_content(runner, CMARK_NODE_TEXT, 0);
test_content(runner, CMARK_NODE_SOFTBREAK, 0);
test_content(runner, CMARK_NODE_LINEBREAK, 0);
diff --git a/man/man3/cmark.3 b/man/man3/cmark.3
index 30165a1..7f70972 100644
--- a/man/man3/cmark.3
+++ b/man/man3/cmark.3
@@ -43,9 +43,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,
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, "<hr />\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);