diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-06-24 21:48:09 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-06-24 21:48:09 +0000 |
commit | 2364037c148d7b3bbed7690e37c0b5ae2df064a6 (patch) | |
tree | 41c271a4f259cddfa07268dffc71ac442d21404f | |
parent | babbb971172d6cbe71126ca1f0069236ea1bf144 (diff) | |
download | libhubbub-2364037c148d7b3bbed7690e37c0b5ae2df064a6.tar.gz libhubbub-2364037c148d7b3bbed7690e37c0b5ae2df064a6.tar.bz2 |
Make everything that is meant to have processing equivalent to "in head" use the same code.
svn path=/trunk/hubbub/; revision=4434
-rw-r--r-- | src/treebuilder/after_head.c | 16 | ||||
-rw-r--r-- | src/treebuilder/in_body.c | 24 | ||||
-rw-r--r-- | src/treebuilder/in_body.h | 18 | ||||
-rw-r--r-- | src/treebuilder/in_head.c | 14 | ||||
-rw-r--r-- | src/treebuilder/in_head_noscript.c | 33 | ||||
-rw-r--r-- | src/treebuilder/modes.h | 2 |
6 files changed, 33 insertions, 74 deletions
diff --git a/src/treebuilder/after_head.c b/src/treebuilder/after_head.c index b460115..e8d3e79 100644 --- a/src/treebuilder/after_head.c +++ b/src/treebuilder/after_head.c @@ -67,19 +67,9 @@ bool handle_after_head(hubbub_treebuilder *treebuilder, } - /* This should be identical to handling "in head" */ - if (type == BASE || type == LINK || type == META) { - /** \todo ack sc flag */ - - process_base_link_meta_in_head(treebuilder, - token, type); - } else if (type == SCRIPT) { - process_script_in_head(treebuilder, token); - } else if (type == STYLE || type == NOFRAMES) { - parse_generic_rcdata(treebuilder, token, false); - } else if (type == TITLE) { - parse_generic_rcdata(treebuilder, token, true); - } + + /* Process as "in head" */ + reprocess = process_in_head(treebuilder, token); if (!element_stack_pop(treebuilder, &otype, &node)) { /** \todo errors */ diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c index c19b55e..5196a7b 100644 --- a/src/treebuilder/in_body.c +++ b/src/treebuilder/in_body.c @@ -8,7 +8,9 @@ #include <assert.h> #include <string.h> -#include "treebuilder/in_body.h" +#include "treebuilder/modes.h" +#include "treebuilder/internal.h" +#include "treebuilder/treebuilder.h" #include "utils/utils.h" #undef DEBUG_IN_BODY @@ -248,21 +250,11 @@ bool process_start_tag(hubbub_treebuilder *treebuilder, if (type == HTML) { process_html_in_body(treebuilder, token); } else if (type == BASE || type == COMMAND || - type == EVENT_SOURCE || type == LINK) { - process_base_link_meta_in_head(treebuilder, token, type); - - /** \todo ack sc flag */ - } else if (type == META) { - process_base_link_meta_in_head(treebuilder, token, type); - - /** \todo ack sc flag */ - /** \todo detect charset */ - } else if (type == SCRIPT) { - process_script_in_head(treebuilder, token); - } else if (type == NOFRAMES || type == STYLE) { - parse_generic_rcdata(treebuilder, token, false); - } else if (type == TITLE) { - parse_generic_rcdata(treebuilder, token, true); + type == EVENT_SOURCE || type == LINK || + type == META || type == NOFRAMES || type == SCRIPT || + type == STYLE || type == TITLE) { + /* Process as "in head" */ + process_in_head(treebuilder, token); } else if (type == BODY) { process_body_in_body(treebuilder, token); } else if (type == ADDRESS || type == ARTICLE || type == ASIDE || diff --git a/src/treebuilder/in_body.h b/src/treebuilder/in_body.h deleted file mode 100644 index 7d1154e..0000000 --- a/src/treebuilder/in_body.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file is part of Hubbub. - * Licensed under the MIT License, - * http://www.opensource.org/licenses/mit-license.php - * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org> - */ - -#ifndef hubbub_treebuilder_in_body_h_ -#define hubbub_treebuilder_in_body_h_ - -#include "treebuilder/internal.h" - -bool handle_in_body(hubbub_treebuilder *treebuilder, const hubbub_token *token); -bool process_tag_in_body(hubbub_treebuilder *treebuilder, - const hubbub_token *token); - -#endif - diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c index 96ff87d..4163343 100644 --- a/src/treebuilder/in_head.c +++ b/src/treebuilder/in_head.c @@ -117,3 +117,17 @@ bool handle_in_head(hubbub_treebuilder *treebuilder, return reprocess; } + + +/** + * Process a tag as if in the "in head" state. + * + * \param treebuilder The treebuilder instance + * \param token The token to process + * \return True to reprocess the token, false otherwise + */ +bool process_in_head(hubbub_treebuilder *treebuilder, + const hubbub_token *token) +{ + return handle_in_head(treebuilder, token); +} diff --git a/src/treebuilder/in_head_noscript.c b/src/treebuilder/in_head_noscript.c index ca01681..97a48f7 100644 --- a/src/treebuilder/in_head_noscript.c +++ b/src/treebuilder/in_head_noscript.c @@ -29,15 +29,10 @@ bool handle_in_head_noscript(hubbub_treebuilder *treebuilder, switch (token->type) { case HUBBUB_TOKEN_CHARACTER: - /* This should be equivalent to "in head" processing */ - reprocess = process_characters_expect_whitespace(treebuilder, - token, true); + reprocess = process_in_head(treebuilder, token); break; case HUBBUB_TOKEN_COMMENT: - /* This should be equivalent to "in head" processing */ - process_comment_append(treebuilder, token, - treebuilder->context.element_stack[ - treebuilder->context.current_node].node); + reprocess = process_in_head(treebuilder, token); break; case HUBBUB_TOKEN_DOCTYPE: /** \todo parse error */ @@ -52,26 +47,10 @@ bool handle_in_head_noscript(hubbub_treebuilder *treebuilder, process_tag_in_body(treebuilder, token); } else if (type == NOSCRIPT) { handled = true; - } else if (type == LINK) { - /* This should be equivalent to "in head" processing */ - process_base_link_meta_in_head(treebuilder, - token, type); - - /** \todo ack sc flag */ - } else if (type == META) { - /* This should be equivalent to "in head" processing */ - process_base_link_meta_in_head(treebuilder, - token, type); - - /** \todo ack sc flag */ - - /** \todo detect charset */ - } else if (type == NOFRAMES) { - /* This should be equivalent to "in head" processing */ - parse_generic_rcdata(treebuilder, token, true); - } else if (type == STYLE) { - /* This should be equivalent to "in head" processing */ - parse_generic_rcdata(treebuilder, token, false); + } else if (type == LINK || type == META || type == NOFRAMES || + type == STYLE) { + /* Process as "in head" */ + reprocess = process_in_head(treebuilder, token); } else if (type == HEAD || type == NOSCRIPT) { /** \todo parse error */ } else { diff --git a/src/treebuilder/modes.h b/src/treebuilder/modes.h index ab9a229..44a4b9c 100644 --- a/src/treebuilder/modes.h +++ b/src/treebuilder/modes.h @@ -60,6 +60,8 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder, bool handle_script_collect_characters(hubbub_treebuilder *treebuilder, const hubbub_token *token); +bool process_in_head(hubbub_treebuilder *treebuilder, + const hubbub_token *token); bool process_tag_in_body(hubbub_treebuilder *treebuilder, const hubbub_token *token); |