summaryrefslogtreecommitdiff
path: root/src/treebuilder
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-07-11 12:03:26 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-07-11 12:03:26 +0000
commitad6930529525c4635fa68ec1fe8c6d6ac961828c (patch)
tree6aa74d6422e40a20fc0ebdaa5a22d370bb7746e2 /src/treebuilder
parent43f9df0a35d46bfd4fd84b465b36d6173df7cf32 (diff)
downloadlibhubbub-ad6930529525c4635fa68ec1fe8c6d6ac961828c.tar.gz
libhubbub-ad6930529525c4635fa68ec1fe8c6d6ac961828c.tar.bz2
Fix up script and rcdata collection modes.
svn path=/trunk/hubbub/; revision=4587
Diffstat (limited to 'src/treebuilder')
-rw-r--r--src/treebuilder/generic_rcdata.c8
-rw-r--r--src/treebuilder/script_collect.c45
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);