diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-07-10 17:35:19 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-07-10 17:35:19 +0000 |
commit | 3f3fcc16c0cecfa765d62f341faf77dcad761563 (patch) | |
tree | 135602f2cde7e6815d2a4b3404d29a2da048527a /src | |
parent | 6cda0a302e19bcf703bbc78b3278a54b38f08b46 (diff) | |
download | libhubbub-3f3fcc16c0cecfa765d62f341faf77dcad761563.tar.gz libhubbub-3f3fcc16c0cecfa765d62f341faf77dcad761563.tar.bz2 |
Get in-table fostering working for comments and text too.
svn path=/trunk/hubbub/; revision=4576
Diffstat (limited to 'src')
-rw-r--r-- | src/treebuilder/treebuilder.c | 67 |
1 files changed, 40 insertions, 27 deletions
diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c index 39c9b31..1855195 100644 --- a/src/treebuilder/treebuilder.c +++ b/src/treebuilder/treebuilder.c @@ -451,6 +451,7 @@ bool process_characters_expect_whitespace(hubbub_treebuilder *treebuilder, void process_comment_append(hubbub_treebuilder *treebuilder, const hubbub_token *token, void *parent) { + element_type type = current_node(treebuilder); int success; void *comment, *appended; @@ -461,21 +462,26 @@ void process_comment_append(hubbub_treebuilder *treebuilder, /** \todo errors */ } - /* Append to Document node */ - success = treebuilder->tree_handler->append_child( - treebuilder->tree_handler->ctx, - parent, comment, &appended); - if (success != 0) { - /** \todo errors */ - treebuilder->tree_handler->unref_node( + if (treebuilder->context.in_table_foster && + (type == TABLE || type == TBODY || type == TFOOT || + type == THEAD || type == TR)) { + aa_insert_into_foster_parent(treebuilder, comment); + } else { + success = treebuilder->tree_handler->append_child( treebuilder->tree_handler->ctx, - comment); - } + parent, comment, &appended); + if (success != 0) { + /** \todo errors */ + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, + comment); + } - treebuilder->tree_handler->unref_node( - treebuilder->tree_handler->ctx, appended); - treebuilder->tree_handler->unref_node( - treebuilder->tree_handler->ctx, comment); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, appended); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, comment); + } } /** @@ -891,6 +897,7 @@ void reset_insertion_mode(hubbub_treebuilder *treebuilder) void append_text(hubbub_treebuilder *treebuilder, const hubbub_string *string) { + element_type type = current_node(treebuilder); int success; void *text, *appended; @@ -903,22 +910,28 @@ void append_text(hubbub_treebuilder *treebuilder, /** \todo errors */ } - success = treebuilder->tree_handler->append_child( - treebuilder->tree_handler->ctx, - treebuilder->context.element_stack[ - treebuilder->context.current_node].node, - text, &appended); - if (success != 0) { - /** \todo errors */ - treebuilder->tree_handler->unref_node( + if (treebuilder->context.in_table_foster && + (type == TABLE || type == TBODY || type == TFOOT || + type == THEAD || type == TR)) { + aa_insert_into_foster_parent(treebuilder, text); + } else { + success = treebuilder->tree_handler->append_child( treebuilder->tree_handler->ctx, - text); - } + treebuilder->context.element_stack[ + treebuilder->context.current_node].node, + text, &appended); + if (success != 0) { + /** \todo errors */ + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, + text); + } - treebuilder->tree_handler->unref_node( - treebuilder->tree_handler->ctx, appended); - treebuilder->tree_handler->unref_node( - treebuilder->tree_handler->ctx, text); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, appended); + treebuilder->tree_handler->unref_node( + treebuilder->tree_handler->ctx, text); + } } /** |