diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-06-26 07:58:56 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-06-26 07:58:56 +0000 |
commit | ee7f42523421f2a2d7d2978e0497fb8f6919a2bd (patch) | |
tree | defcb4fd13550e75696acc54f23b4db30b9e35bb /src/treebuilder | |
parent | fb0d38d674ccc382ae097c2fe803da7595f02ec7 (diff) | |
download | libhubbub-ee7f42523421f2a2d7d2978e0497fb8f6919a2bd.tar.gz libhubbub-ee7f42523421f2a2d7d2978e0497fb8f6919a2bd.tar.bz2 |
Move some stuff internal to the "in head" mode to in_head.c.
svn path=/trunk/hubbub/; revision=4451
Diffstat (limited to 'src/treebuilder')
-rw-r--r-- | src/treebuilder/in_head.c | 64 | ||||
-rw-r--r-- | src/treebuilder/internal.h | 4 | ||||
-rw-r--r-- | src/treebuilder/treebuilder.c | 61 |
3 files changed, 65 insertions, 64 deletions
diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c index 4163343..f5fb099 100644 --- a/src/treebuilder/in_head.c +++ b/src/treebuilder/in_head.c @@ -15,6 +15,70 @@ /** + * Process a <base>, <link>, or <meta> start tag as if in "in head" + * + * \param treebuilder The treebuilder instance + * \param token The token to process + * \param type The type of element (BASE, LINK, or META) + */ +static void process_base_link_meta_in_head(hubbub_treebuilder *treebuilder, + const hubbub_token *token, element_type type) +{ + insert_element_no_push(treebuilder, &token->data.tag); + + if (type == META) { + /** \todo charset extraction */ + } +} + + +/** + * 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.collect.string.data.off = 0; + treebuilder->context.collect.string.len = 0; + + treebuilder->context.mode = SCRIPT_COLLECT_CHARACTERS; +} + + + + + +/** * Handle token in "in head" insertion mode * * \param treebuilder The treebuilder instance diff --git a/src/treebuilder/internal.h b/src/treebuilder/internal.h index 7d3d672..ba69660 100644 --- a/src/treebuilder/internal.h +++ b/src/treebuilder/internal.h @@ -109,10 +109,6 @@ void process_comment_append(hubbub_treebuilder *treebuilder, const hubbub_token *token, void *parent); void parse_generic_rcdata(hubbub_treebuilder *treebuilder, const hubbub_token *token, bool rcdata); -void process_base_link_meta_in_head(hubbub_treebuilder *treebuilder, - const hubbub_token *token, element_type type); -void process_script_in_head(hubbub_treebuilder *treebuilder, - const hubbub_token *token); uint32_t element_in_scope(hubbub_treebuilder *treebuilder, element_type type, bool in_table); diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c index 35768fc..2ca2132 100644 --- a/src/treebuilder/treebuilder.c +++ b/src/treebuilder/treebuilder.c @@ -505,65 +505,6 @@ void parse_generic_rcdata(hubbub_treebuilder *treebuilder, } /** - * Process a <base>, <link>, or <meta> start tag as if in "in head" - * - * \param treebuilder The treebuilder instance - * \param token The token to process - * \param type The type of element (BASE, LINK, or META) - */ -void process_base_link_meta_in_head(hubbub_treebuilder *treebuilder, - const hubbub_token *token, element_type type) -{ - insert_element_no_push(treebuilder, &token->data.tag); - - if (type == META) { - /** \todo charset extraction */ - } -} - -/** - * Process a <script> start tag as if in "in head" - * - * \param treebuilder The treebuilder instance - * \param token The token to process - */ -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.collect.string.data.off = 0; - treebuilder->context.collect.string.len = 0; - - treebuilder->context.mode = SCRIPT_COLLECT_CHARACTERS; -} - -/** * Determine if an element is in (table) scope * * \param treebuilder Treebuilder to look in @@ -580,7 +521,7 @@ uint32_t element_in_scope(hubbub_treebuilder *treebuilder, return false; for (node = treebuilder->context.current_node; node > 0; node--) { - element_type node_type = + element_type node_type = treebuilder->context.element_stack[node].type; if (node_type == type) |