summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-07-11 21:15:15 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-07-11 21:15:15 +0000
commita06c8e695e1199317c571ec8f481900b79314ef0 (patch)
tree1eef087a607ecbc87682d80db07625f0baf22ed0 /src
parenta016790d3573e89ecb270d494d855b6111e5e715 (diff)
downloadlibhubbub-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
Diffstat (limited to 'src')
-rw-r--r--src/treebuilder/after_after_body.c8
-rw-r--r--src/treebuilder/after_after_frameset.c16
-rw-r--r--src/treebuilder/in_frameset.c10
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 */
}