summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */
}