summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-07-10 17:35:19 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-07-10 17:35:19 +0000
commit3f3fcc16c0cecfa765d62f341faf77dcad761563 (patch)
tree135602f2cde7e6815d2a4b3404d29a2da048527a /src
parent6cda0a302e19bcf703bbc78b3278a54b38f08b46 (diff)
downloadlibhubbub-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.c67
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);
+ }
}
/**