summaryrefslogtreecommitdiff
path: root/src/treebuilder/treebuilder.c
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-07-10 13:42:43 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-07-10 13:42:43 +0000
commitd354b2d78f226b370fd6720ff84aa43bfa4d930d (patch)
tree0b2f5abebe9903f394df5c368d33c01fac7ca67b /src/treebuilder/treebuilder.c
parent0438fcc8b80bf080e2dcd7708d728adad1ba1e5f (diff)
downloadlibhubbub-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.c65
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);
+ }
}
/**