diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2012-03-25 08:55:27 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2012-03-25 08:55:27 +0000 |
commit | b0e04780af047cffb68f078bf2edd7572fd91b9b (patch) | |
tree | 35934bd3737fc6bdef5c331d37a74c8d86ce6867 | |
parent | 2b215a8df111ef2d1a16a3205188ffefdb558811 (diff) | |
download | netsurf-b0e04780af047cffb68f078bf2edd7572fd91b9b.tar.gz netsurf-b0e04780af047cffb68f078bf2edd7572fd91b9b.tar.bz2 |
node_is_empty
svn path=/trunk/netsurf/; revision=13655
-rw-r--r-- | css/select.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/css/select.c b/css/select.c index aaebc906d..6f1b5a658 100644 --- a/css/select.c +++ b/css/select.c @@ -1544,19 +1544,40 @@ css_error node_count_siblings(void *pw, void *node, bool same_name, */ css_error node_is_empty(void *pw, void *node, bool *match) { -#ifdef FIXME - xmlNode *n = node; - + dom_node *n = node, *next; + dom_exception err; + *match = true; - - for (n = n->children; n != NULL; n = n->next) { - if (n->type == XML_ELEMENT_NODE || - n->type == XML_TEXT_NODE) { + + err = dom_node_get_first_child(n, &n); + if (err != DOM_NO_ERR) { + return CSS_BADPARM; + } + + while (n != NULL) { + dom_node_type ntype; + err = dom_node_get_node_type(n, &ntype); + if (err != DOM_NO_ERR) { + dom_node_unref(n); + return CSS_BADPARM; + } + + if (ntype == DOM_ELEMENT_NODE || + ntype == DOM_TEXT_NODE) { *match = false; + dom_node_unref(n); break; } + + err = dom_node_get_next_sibling(n, &next); + if (err != DOM_NO_ERR) { + dom_node_unref(n); + return CSS_BADPARM; + } + dom_node_unref(n); + n = next; } -#endif + return CSS_OK; } |