summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-06-24 21:48:09 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-06-24 21:48:09 +0000
commit2364037c148d7b3bbed7690e37c0b5ae2df064a6 (patch)
tree41c271a4f259cddfa07268dffc71ac442d21404f
parentbabbb971172d6cbe71126ca1f0069236ea1bf144 (diff)
downloadlibhubbub-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.c16
-rw-r--r--src/treebuilder/in_body.c24
-rw-r--r--src/treebuilder/in_body.h18
-rw-r--r--src/treebuilder/in_head.c14
-rw-r--r--src/treebuilder/in_head_noscript.c33
-rw-r--r--src/treebuilder/modes.h2
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);