summaryrefslogtreecommitdiff
path: root/src/blocks.c
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2014-11-17 21:35:39 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2014-11-17 21:43:47 -0800
commita6c0a1e8b3d2f3456972dad61a435684cac52cb5 (patch)
tree541e7147baf6b053c967bfae05487c250d1ba3db /src/blocks.c
parent4a7d4e01348660c8deb71bd55231439a4149ab05 (diff)
Make parse_inlines add directly to parent.
Previously parse_inlines returned a list of parsed inlines. This had to be added to the parent, and fix_parents had to be called to manually add the 'parent' links to the children, and the 'last_child' link to the parent. Now parse_inlines takes the parent block as a parameter, and uses cmark_node_append_child to add the children, so that the pointers should be properly managed. This avoids the need for the fix_parents pass.
Diffstat (limited to 'src/blocks.c')
-rw-r--r--src/blocks.c16
1 files changed, 1 insertions, 15 deletions
diff --git a/src/blocks.c b/src/blocks.c
index 0e68259..58162b5 100644
--- a/src/blocks.c
+++ b/src/blocks.c
@@ -283,19 +283,6 @@ typedef struct BlockStack {
cmark_node *next_sibling;
} block_stack;
-static void fix_parents(cmark_node *node) {
- cmark_node *cur = node->first_child;
- if (cur == NULL) {
- return;
- }
- while (cur->next != NULL) {
- cur->parent = node;
- cur = cur->next;
- }
- cur->parent = node;
- node->last_child = cur;
-}
-
// Walk through cmark_node and all children, recursively, parsing
// string content into inline content where appropriate.
static void process_inlines(cmark_node* cur, reference_map *refmap)
@@ -308,8 +295,7 @@ static void process_inlines(cmark_node* cur, reference_map *refmap)
case NODE_PARAGRAPH:
case NODE_ATX_HEADER:
case NODE_SETEXT_HEADER:
- cur->first_child = parse_inlines(&cur->string_content, refmap);
- fix_parents(cur);
+ parse_inlines(cur, refmap);
break;
default: