diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-07-11 21:15:15 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-07-11 21:15:15 +0000 |
commit | a06c8e695e1199317c571ec8f481900b79314ef0 (patch) | |
tree | 1eef087a607ecbc87682d80db07625f0baf22ed0 | |
parent | a016790d3573e89ecb270d494d855b6111e5e715 (diff) | |
download | libhubbub-a06c8e695e1199317c571ec8f481900b79314ef0.tar.gz libhubbub-a06c8e695e1199317c571ec8f481900b79314ef0.tar.bz2 |
Fixes to "after after body", "after after frameset", and "in frameset" so that the newly added tests pass.
svn path=/trunk/hubbub/; revision=4624
-rw-r--r-- | src/treebuilder/after_after_body.c | 8 | ||||
-rw-r--r-- | src/treebuilder/after_after_frameset.c | 16 | ||||
-rw-r--r-- | src/treebuilder/in_frameset.c | 10 |
3 files changed, 28 insertions, 6 deletions
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 */ } |