summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2014-03-31 22:08:54 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2014-03-31 22:09:45 +0100
commit9c60417f73868e2cd8e0db951020110ee8c295fc (patch)
tree8ef1f177448a7855a83757ed3fd5c8c8f8de3baf
parent0adbfe125e288c59588be87f7cd8493b0c8c0351 (diff)
downloadnetsurf-9c60417f73868e2cd8e0db951020110ee8c295fc.tar.gz
netsurf-9c60417f73868e2cd8e0db951020110ee8c295fc.tar.bz2
Simplify DOM node walker.
-rw-r--r--utils/libdom.c56
1 files changed, 20 insertions, 36 deletions
diff --git a/utils/libdom.c b/utils/libdom.c
index a1465af19..245c9b229 100644
--- a/utils/libdom.c
+++ b/utils/libdom.c
@@ -50,58 +50,42 @@ bool libdom_treewalk(dom_node *root,
break;
}
- if (next != NULL) { /* 1. children */
+ if (next != NULL) {
+ /* 1. Got children */
dom_node_unref(node);
node = next;
} else {
- exc = dom_node_get_next_sibling(node, &next);
- if (exc != DOM_NO_ERR) {
- dom_node_unref(node);
- break;
- }
-
- if (next != NULL) { /* 2. siblings */
- dom_node_unref(node);
- node = next;
- } else { /* 3. ancestor 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) {
- dom_node_unref(next);
- break;
- }
-
- exc = dom_node_get_parent_node(node,
- &next);
- if (exc != DOM_NO_ERR) {
- dom_node_unref(node);
- node = NULL;
- break;
- }
-
+ /* 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 = next;
+ node = NULL;
+ break;
}
- if (node == NULL)
+ if (next != NULL) {
+ /* 2. Got sibling */
break;
+ }
- exc = dom_node_get_next_sibling(node, &next);
+ 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);