diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-07-10 13:42:43 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-07-10 13:42:43 +0000 |
commit | d354b2d78f226b370fd6720ff84aa43bfa4d930d (patch) | |
tree | 0b2f5abebe9903f394df5c368d33c01fac7ca67b /src/treebuilder/treebuilder.c | |
parent | 0438fcc8b80bf080e2dcd7708d728adad1ba1e5f (diff) | |
download | libhubbub-d354b2d78f226b370fd6720ff84aa43bfa4d930d.tar.gz libhubbub-d354b2d78f226b370fd6720ff84aa43bfa4d930d.tar.bz2 |
- Handle in_table_foster for element insertion (yet to do comment/character).
- Fix test harness's insert_before() method.
- Foster parenting now correctly taints the current table.
svn path=/trunk/hubbub/; revision=4568
Diffstat (limited to 'src/treebuilder/treebuilder.c')
-rw-r--r-- | src/treebuilder/treebuilder.c | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c index e276bc0..ef23631 100644 --- a/src/treebuilder/treebuilder.c +++ b/src/treebuilder/treebuilder.c @@ -712,31 +712,34 @@ void insert_element(hubbub_treebuilder *treebuilder, const hubbub_tag *tag) int success; void *node, *appended; - /** \todo handle treebuilder->context.in_table_foster */ - success = treebuilder->tree_handler->create_element( treebuilder->tree_handler->ctx, tag, &node); if (success != 0) { /** \todo errors */ } - success = treebuilder->tree_handler->append_child( - treebuilder->tree_handler->ctx, - treebuilder->context.element_stack[ - treebuilder->context.current_node].node, - node, &appended); - if (success != 0) { - /** \todo errors */ - } + if (!treebuilder->context.in_table_foster) { + success = treebuilder->tree_handler->append_child( + treebuilder->tree_handler->ctx, + treebuilder->context.element_stack[ + treebuilder->context.current_node].node, + node, &appended); + if (success != 0) { + /** \todo errors */ + } - treebuilder->tree_handler->unref_node(treebuilder->tree_handler->ctx, - appended); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, appended); - if (!element_stack_push(treebuilder, - tag->ns, - element_type_from_name(treebuilder, &tag->name), - node)) { - /** \todo errors */ + if (!element_stack_push(treebuilder, + tag->ns, + element_type_from_name(treebuilder, &tag->name), + node)) { + /** \todo errors */ + } + } else { + printf("should be inserting foster here\n"); + aa_insert_into_foster_parent(treebuilder, node); } } @@ -760,19 +763,23 @@ void insert_element_no_push(hubbub_treebuilder *treebuilder, /** \todo errors */ } - success = treebuilder->tree_handler->append_child( - treebuilder->tree_handler->ctx, - treebuilder->context.element_stack[ - treebuilder->context.current_node].node, - node, &appended); - if (success != 0) { - /** \todo errors */ - } + if (!treebuilder->context.in_table_foster) { + success = treebuilder->tree_handler->append_child( + treebuilder->tree_handler->ctx, + treebuilder->context.element_stack[ + treebuilder->context.current_node].node, + node, &appended); + if (success != 0) { + /** \todo errors */ + } - treebuilder->tree_handler->unref_node(treebuilder->tree_handler->ctx, - appended); - treebuilder->tree_handler->unref_node(treebuilder->tree_handler->ctx, - node); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, appended); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, node); + } else { + aa_insert_into_foster_parent(treebuilder, node); + } } /** |