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/after_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/after_head.c')
-rw-r--r-- | src/treebuilder/after_head.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/treebuilder/after_head.c b/src/treebuilder/after_head.c index 5ec6ca4..9af0796 100644 --- a/src/treebuilder/after_head.c +++ b/src/treebuilder/after_head.c @@ -51,7 +51,7 @@ hubbub_error handle_after_head(hubbub_treebuilder *treebuilder, } else if (type == BODY) { handled = true; } else if (type == FRAMESET) { - insert_element(treebuilder, &token->data.tag); + insert_element(treebuilder, &token->data.tag, true); treebuilder->context.mode = IN_FRAMESET; } else if (type == BASE || type == LINK || type == META || type == NOFRAMES || type == SCRIPT || @@ -59,6 +59,7 @@ hubbub_error handle_after_head(hubbub_treebuilder *treebuilder, hubbub_ns ns; element_type otype; void *node; + uint32_t index; /** \todo parse error */ @@ -69,11 +70,13 @@ hubbub_error handle_after_head(hubbub_treebuilder *treebuilder, /** \todo errors */ } + index = treebuilder->context.current_node; + /* Process as "in head" */ err = handle_in_head(treebuilder, token); - if (!element_stack_pop(treebuilder, &ns, &otype, - &node)) { + if (!element_stack_remove(treebuilder, index, + &ns, &otype, &node)) { /** \todo errors */ } @@ -87,7 +90,16 @@ hubbub_error handle_after_head(hubbub_treebuilder *treebuilder, } break; case HUBBUB_TOKEN_END_TAG: - /** \todo parse error */ + { + element_type type = element_type_from_name(treebuilder, + &token->data.tag.name); + + if (type == HTML || type == BODY || type == BR) { + err = HUBBUB_REPROCESS; + } else { + /** \todo parse error */ + } + } break; case HUBBUB_TOKEN_EOF: err = HUBBUB_REPROCESS; @@ -109,7 +121,7 @@ hubbub_error handle_after_head(hubbub_treebuilder *treebuilder, tag = token->data.tag; } - insert_element(treebuilder, &tag); + insert_element(treebuilder, &tag, true); treebuilder->context.mode = IN_BODY; } |