diff options
author | John MacFarlane <jgm@berkeley.edu> | 2014-12-13 14:13:58 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2014-12-13 19:40:21 -0800 |
commit | a3030f985a973b3b835645313fdad1a8a72ff432 (patch) | |
tree | e1b1b43b16102b106bc43f4dd5eee32bb11b2a73 /src/node.c | |
parent | 8d6efe632aaeb1831c86b27e120a344c5e3ee7d4 (diff) |
Added iterator interface to API, removed cmark_walk.
* Added `iterator.c`, `iterator.h`.
* Removed `cmark_walk`.
* Replaced `cmark_walk` with iterator in HTML renderer.
* Replaced API test for `cmark_walk` with simple iterator test.
Diffstat (limited to 'src/node.c')
-rw-r--r-- | src/node.c | 66 |
1 files changed, 0 insertions, 66 deletions
@@ -766,69 +766,3 @@ cmark_node_check(cmark_node *node, FILE *out) return errors; } - -int S_is_leaf_node(cmark_node *current_node) -{ - switch (cmark_node_get_type(current_node)) { - case CMARK_NODE_HTML: - case CMARK_NODE_HRULE: - case CMARK_NODE_CODE_BLOCK: - case CMARK_NODE_TEXT: - case CMARK_NODE_SOFTBREAK: - case CMARK_NODE_LINEBREAK: - case CMARK_NODE_INLINE_CODE: - case CMARK_NODE_INLINE_HTML: - return 1; - default: - return 0; - } -} - -int cmark_walk(cmark_node *root, cmark_node_handler handler, void *state) -{ - int ev_type = CMARK_EVENT_ENTER; - cmark_node *current_node = root; - int depth = 0; - cmark_node *next, *parent, *first_child; - - while (current_node != NULL && depth >= 0) { - - next = current_node->next; - parent = current_node->parent; - - if (!handler(current_node, ev_type, state)) { - return 0; - } - - if (ev_type == CMARK_EVENT_ENTER && - !S_is_leaf_node(current_node)) { - first_child = current_node->first_child; - if (first_child == NULL) { - ev_type = CMARK_EVENT_EXIT; // stay on this node - } else { - depth += 1; - current_node = first_child; - } - } else { - if (current_node) { - next = current_node->next; - parent = current_node->parent; - } - if (next) { - // don't go past root: - if (current_node == root) { - ev_type = CMARK_EVENT_DONE; - return 1; - } else { - ev_type = CMARK_EVENT_ENTER; - current_node = next; - } - } else { - ev_type = CMARK_EVENT_EXIT; - depth -= 1; - current_node = parent; - } - } - } - return 1; -} |