From a06c8e695e1199317c571ec8f481900b79314ef0 Mon Sep 17 00:00:00 2001 From: Andrew Sidwell Date: Fri, 11 Jul 2008 21:15:15 +0000 Subject: Fixes to "after after body", "after after frameset", and "in frameset" so that the newly added tests pass. svn path=/trunk/hubbub/; revision=4624 --- src/treebuilder/after_after_body.c | 8 +++++++- src/treebuilder/after_after_frameset.c | 16 +++++++++++++--- src/treebuilder/in_frameset.c | 10 ++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/treebuilder/after_after_body.c b/src/treebuilder/after_after_body.c index a2a7afc..e9460af 100644 --- a/src/treebuilder/after_after_body.c +++ b/src/treebuilder/after_after_body.c @@ -27,12 +27,18 @@ bool handle_after_after_body(hubbub_treebuilder *treebuilder, bool reprocess = false; switch (token->type) { + case HUBBUB_TOKEN_CHARACTER: + if (process_characters_expect_whitespace(treebuilder, + token, true)) { + treebuilder->context.mode = IN_BODY; + reprocess = true; + } + break; case HUBBUB_TOKEN_COMMENT: process_comment_append(treebuilder, token, treebuilder->context.document); break; case HUBBUB_TOKEN_DOCTYPE: - case HUBBUB_TOKEN_CHARACTER: handle_in_body(treebuilder, token); break; case HUBBUB_TOKEN_START_TAG: diff --git a/src/treebuilder/after_after_frameset.c b/src/treebuilder/after_after_frameset.c index 65981ef..11fcf5a 100644 --- a/src/treebuilder/after_after_frameset.c +++ b/src/treebuilder/after_after_frameset.c @@ -27,10 +27,20 @@ bool handle_after_after_frameset(hubbub_treebuilder *treebuilder, bool reprocess = false; switch (token->type) { + case HUBBUB_TOKEN_CHARACTER: + if (process_characters_expect_whitespace(treebuilder, + token, true)) { + treebuilder->context.mode = IN_FRAMESET; + reprocess = true; + } + break; case HUBBUB_TOKEN_COMMENT: + process_comment_append(treebuilder, token, + treebuilder->context.document); + break; case HUBBUB_TOKEN_DOCTYPE: - case HUBBUB_TOKEN_CHARACTER: - handle_in_body(treebuilder, token); + /** \todo parse error */ + /* ignore token */ break; case HUBBUB_TOKEN_START_TAG: { @@ -42,7 +52,7 @@ bool handle_after_after_frameset(hubbub_treebuilder *treebuilder, handle_in_body(treebuilder, token); } else { /** \todo parse error */ - treebuilder->context.mode = IN_BODY; + treebuilder->context.mode = IN_FRAMESET; reprocess = true; } } diff --git a/src/treebuilder/in_frameset.c b/src/treebuilder/in_frameset.c index 115c1c8..7b644ad 100644 --- a/src/treebuilder/in_frameset.c +++ b/src/treebuilder/in_frameset.c @@ -69,7 +69,12 @@ bool handle_in_frameset(hubbub_treebuilder *treebuilder, hubbub_ns ns; void *node; - /** \todo fragment case */ + /* fragment case -- ignore */ + if (current_node(treebuilder) == HTML) { + /** \todo parse error */ + break; + } + if (!element_stack_pop(treebuilder, &ns, &type, &node)) { /** \todo errors */ @@ -79,8 +84,9 @@ bool handle_in_frameset(hubbub_treebuilder *treebuilder, treebuilder->tree_handler->ctx, node); - if (type != FRAMESET) + if (current_node(treebuilder) != FRAMESET) { treebuilder->context.mode = AFTER_FRAMESET; + } } else { /** \todo parse error */ } -- cgit v1.2.3