From ad6930529525c4635fa68ec1fe8c6d6ac961828c Mon Sep 17 00:00:00 2001 From: Andrew Sidwell Date: Fri, 11 Jul 2008 12:03:26 +0000 Subject: Fix up script and rcdata collection modes. svn path=/trunk/hubbub/; revision=4587 --- src/treebuilder/generic_rcdata.c | 8 ++++--- src/treebuilder/script_collect.c | 45 +++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/treebuilder/generic_rcdata.c b/src/treebuilder/generic_rcdata.c index 07173cf..0ab3b8c 100644 --- a/src/treebuilder/generic_rcdata.c +++ b/src/treebuilder/generic_rcdata.c @@ -79,7 +79,7 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder, break; } - if (done) { + if (done && treebuilder->context.collect.string.len) { int success; void *text, *appended; @@ -107,6 +107,9 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder, treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, text); + } + + if (done) { /* Clean up context */ treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, @@ -114,8 +117,7 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder, treebuilder->context.collect.node = NULL; /* Return to previous insertion mode */ - treebuilder->context.mode = - treebuilder->context.collect.mode; + treebuilder->context.mode = treebuilder->context.collect.mode; } return reprocess; diff --git a/src/treebuilder/script_collect.c b/src/treebuilder/script_collect.c index 7f61f95..0ec9b12 100644 --- a/src/treebuilder/script_collect.c +++ b/src/treebuilder/script_collect.c @@ -63,31 +63,33 @@ bool handle_script_collect_characters(hubbub_treebuilder *treebuilder, int success; void *text, *appended; - success = treebuilder->tree_handler->create_text( - treebuilder->tree_handler->ctx, - &treebuilder->context.collect.string, - &text); - if (success != 0) { - /** \todo errors */ - } + if (treebuilder->context.collect.string.len) { + success = treebuilder->tree_handler->create_text( + treebuilder->tree_handler->ctx, + &treebuilder->context.collect.string, + &text); + if (success != 0) { + /** \todo errors */ + } - /** \todo fragment case -- skip this lot entirely */ + /** \todo fragment case -- skip this lot entirely */ - success = treebuilder->tree_handler->append_child( - treebuilder->tree_handler->ctx, - treebuilder->context.collect.node, - text, &appended); - if (success != 0) { - /** \todo errors */ - treebuilder->tree_handler->unref_node( + success = treebuilder->tree_handler->append_child( treebuilder->tree_handler->ctx, - text); - } + treebuilder->context.collect.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); + } /** \todo insertion point manipulation */ @@ -106,6 +108,7 @@ bool handle_script_collect_characters(hubbub_treebuilder *treebuilder, treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, appended); + treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, treebuilder->context.collect.node); -- cgit v1.2.3