diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-03-10 22:17:58 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-03-10 22:17:58 +0000 |
commit | 67169ed4d74fcbbeb0177de132d4b1ec7964cba7 (patch) | |
tree | 82820cef9afb7302b83aaaeb32aa6c5bbec5c52a /src/treebuilder/generic_rcdata.c | |
parent | 691daee99f556f427e78b2220f3bbfeb6ea36204 (diff) | |
download | libhubbub-67169ed4d74fcbbeb0177de132d4b1ec7964cba7.tar.gz libhubbub-67169ed4d74fcbbeb0177de132d4b1ec7964cba7.tar.bz2 |
Sync treebuilder with spec
svn path=/trunk/hubbub/; revision=6764
Diffstat (limited to 'src/treebuilder/generic_rcdata.c')
-rw-r--r-- | src/treebuilder/generic_rcdata.c | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/src/treebuilder/generic_rcdata.c b/src/treebuilder/generic_rcdata.c index 1daf80f..627068a 100644 --- a/src/treebuilder/generic_rcdata.c +++ b/src/treebuilder/generic_rcdata.c @@ -37,8 +37,6 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, case HUBBUB_TOKEN_CHARACTER: { hubbub_string chars = token->data.character; - int success; - void *text, *appended; if (treebuilder->context.strip_leading_lr) { if (chars.ptr[0] == '\n') { @@ -52,30 +50,7 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, if (chars.len == 0) break; - - success = treebuilder->tree_handler->create_text( - treebuilder->tree_handler->ctx, - &chars, - &text); - if (success != 0) { - /** \todo errors */ - } - - 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( - 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); + append_text(treebuilder, &chars); } break; case HUBBUB_TOKEN_END_TAG: @@ -87,10 +62,16 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, /** \todo parse error */ } + if (type == SCRIPT) { + /** \todo script processing and execution */ + } + done = true; } break; case HUBBUB_TOKEN_EOF: + /** \todo if the current node's a script, + * mark it as already executed */ /** \todo parse error */ done = true; err = HUBBUB_REPROCESS; @@ -104,11 +85,18 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, } if (done) { - /* Clean up context */ + hubbub_ns ns; + element_type otype; + void *node; + + /* Pop the current node from the stack */ + if (!element_stack_pop(treebuilder, &ns, &otype, &node)) { + /** \todo errors */ + } + treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, - treebuilder->context.collect.node); - treebuilder->context.collect.node = NULL; + node); /* Return to previous insertion mode */ treebuilder->context.mode = treebuilder->context.collect.mode; |