diff options
Diffstat (limited to 'utils/libdom.c')
-rw-r--r-- | utils/libdom.c | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/utils/libdom.c b/utils/libdom.c index a996e98bf..c39aad343 100644 --- a/utils/libdom.c +++ b/utils/libdom.c @@ -28,129 +28,6 @@ #include "utils/log.h" #include "utils/libdom.h" -/* exported interface documented in libdom.h */ -bool libdom_treewalk(dom_node *root, - bool (*callback)(dom_node *node, dom_string *name, void *ctx), - void *ctx) -{ - dom_node *node; - bool result = true; - - node = dom_node_ref(root); /* tree root */ - - while (node != NULL) { - dom_node *next = NULL; - dom_node_type type; - dom_string *name; - dom_exception exc; - - exc = dom_node_get_first_child(node, &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - break; - } - - if (next != NULL) { - /* 1. Got children */ - dom_node_unref(node); - node = next; - } else { - /* No children; siblings & ancestor's siblings */ - while (node != NULL) { - exc = dom_node_get_next_sibling(node, &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - node = NULL; - break; - } - - if (next != NULL) { - /* 2. Got sibling */ - break; - } - - exc = dom_node_get_parent_node(node, &next); - if (exc != DOM_NO_ERR) { - dom_node_unref(node); - node = NULL; - break; - } - - /* 3. Try parent */ - dom_node_unref(node); - node = next; - } - - if (node == NULL) - break; - - dom_node_unref(node); - node = next; - } - - assert(node != NULL); - - exc = dom_node_get_node_type(node, &type); - if ((exc != DOM_NO_ERR) || (type != DOM_ELEMENT_NODE)) - continue; - - exc = dom_node_get_node_name(node, &name); - if (exc != DOM_NO_ERR) - continue; - - result = callback(node, name, ctx); - - dom_string_unref(name); - - if (result == false) { - break; /* callback caused early termination */ - } - - } - return result; -} - - -/* libdom_treewalk context for libdom_find_element */ -struct find_element_ctx { - lwc_string *search; - dom_node *found; -}; - -/* libdom_treewalk callback for libdom_find_element */ -static bool libdom_find_element_callback(dom_node *node, dom_string *name, - void *ctx) -{ - struct find_element_ctx *data = ctx; - - if (dom_string_caseless_lwc_isequal(name, data->search)) { - /* Found element */ - data->found = node; - return false; /* Discontinue search */ - } - - return true; /* Continue search */ -} - - -/* exported interface documented in libdom.h */ -dom_node *libdom_find_element(dom_node *node, lwc_string *element_name) -{ - struct find_element_ctx data; - - assert(element_name != NULL); - - if (node == NULL) - return NULL; - - data.search = element_name; - data.found = NULL; - - libdom_treewalk(node, libdom_find_element_callback, &data); - - return data.found; -} - /* exported interface documented in libdom.h */ dom_node *libdom_find_first_element(dom_node *parent, lwc_string *element_name) |