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/in_head.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/in_head.c')
-rw-r--r-- | src/treebuilder/in_head.c | 63 |
1 files changed, 10 insertions, 53 deletions
diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c index b042e52..32d2ce0 100644 --- a/src/treebuilder/in_head.c +++ b/src/treebuilder/in_head.c @@ -34,7 +34,7 @@ static hubbub_error process_meta_in_head(hubbub_treebuilder *treebuilder, uint16_t content_type_enc = 0; size_t i; - insert_element_no_push(treebuilder, &token->data.tag); + insert_element(treebuilder, &token->data.tag, false); /** \todo ack sc flag */ @@ -99,52 +99,6 @@ static hubbub_error process_meta_in_head(hubbub_treebuilder *treebuilder, return HUBBUB_OK; } - - -/** - * Process a script start tag as if in "in head" - * - * \param treebuilder The treebuilder instance - * \param token The token to process - */ -static void process_script_in_head(hubbub_treebuilder *treebuilder, - const hubbub_token *token) -{ - int success; - void *script; - hubbub_tokeniser_optparams params; - - success = treebuilder->tree_handler->create_element( - treebuilder->tree_handler->ctx, - &token->data.tag, &script); - if (success != 0) { - /** \todo errors */ - } - - /** \todo mark script as parser-inserted */ - - /* It would be nice to be able to re-use the generic - * rcdata character collector here. Unfortunately, we - * can't as we need to do special processing after the - * script data has been collected, so we use an almost - * identical insertion mode which does the right magic - * at the end. */ - params.content_model.model = HUBBUB_CONTENT_MODEL_CDATA; - hubbub_tokeniser_setopt(treebuilder->tokeniser, - HUBBUB_TOKENISER_CONTENT_MODEL, - ¶ms); - - treebuilder->context.collect.mode = treebuilder->context.mode; - treebuilder->context.collect.node = script; - treebuilder->context.collect.type = SCRIPT; - - treebuilder->context.mode = SCRIPT_COLLECT_CHARACTERS; -} - - - - - /** * Handle token in "in head" insertion mode * @@ -179,9 +133,8 @@ hubbub_error handle_in_head(hubbub_treebuilder *treebuilder, if (type == HTML) { /* Process as if "in body" */ handle_in_body(treebuilder, token); - } else if (type == BASE || type == COMMAND || - type == EVENTSOURCE || type == LINK) { - insert_element_no_push(treebuilder, &token->data.tag); + } else if (type == BASE || type == COMMAND || type == LINK) { + insert_element(treebuilder, &token->data.tag, false); /** \todo ack sc flag */ } else if (type == META) { @@ -194,11 +147,15 @@ hubbub_error handle_in_head(hubbub_treebuilder *treebuilder, if (treebuilder->context.enable_scripting) { parse_generic_rcdata(treebuilder, token, false); } else { - insert_element(treebuilder, &token->data.tag); + insert_element(treebuilder, &token->data.tag, + true); treebuilder->context.mode = IN_HEAD_NOSCRIPT; } } else if (type == SCRIPT) { - process_script_in_head(treebuilder, token); + /** \todo need to ensure that the client callback + * sets the parser-inserted/already-executed script + * flags. */ + parse_generic_rcdata(treebuilder, token, false); } else if (type == HEAD) { /** \todo parse error */ } else { @@ -213,7 +170,7 @@ hubbub_error handle_in_head(hubbub_treebuilder *treebuilder, if (type == HEAD) { handled = true; - } else if (type == BR) { + } else if (type == HTML || type == BODY || type == BR) { err = HUBBUB_REPROCESS; } /** \todo parse error */ } |