summaryrefslogtreecommitdiff
path: root/src/treebuilder/treebuilder.c
diff options
context:
space:
mode:
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);
+ }
}
/**