1 /*
2 * This file is part of Hubbub.
3 * Licensed under the MIT License,
4 * http://www.opensource.org/licenses/mit-license.php
5 * Copyright 2008 Andrew Sidwell <takkaria@netsurf-browser.org>
6 */
7
8 #include <assert.h>
9 #include <string.h>
10
11 #include "treebuilder/modes.h"
12 #include "treebuilder/internal.h"
13 #include "treebuilder/treebuilder.h"
14 #include "utils/utils.h"
15
16
17 /**
18 * Handle token in "after after frameset" insertion mode
19 *
20 * \param treebuilder The treebuilder instance
21 * \param token The token to handle
22 * \return True to reprocess token, false otherwise
23 */
handle_after_after_frameset(hubbub_treebuilder * treebuilder,const hubbub_token * token)24 hubbub_error handle_after_after_frameset(hubbub_treebuilder *treebuilder,
25 const hubbub_token *token)
26 {
27 hubbub_error err = HUBBUB_OK;
28
29 switch (token->type) {
30 case HUBBUB_TOKEN_CHARACTER:
31 err = process_characters_expect_whitespace(treebuilder,
32 token, true);
33 if (err == HUBBUB_REPROCESS)
34 treebuilder->context.mode = IN_FRAMESET;
35 break;
36 case HUBBUB_TOKEN_COMMENT:
37 err = process_comment_append(treebuilder, token,
38 treebuilder->context.document);
39 break;
40 case HUBBUB_TOKEN_END_TAG:
41 case HUBBUB_TOKEN_DOCTYPE:
42 /** \todo parse error */
43 /* ignore token */
44 break;
45 case HUBBUB_TOKEN_START_TAG:
46 {
47 element_type type = element_type_from_name(treebuilder,
48 &token->data.tag.name);
49
50 if (type == HTML) {
51 /* Process as if "in body" */
52 err = handle_in_body(treebuilder, token);
53 } else if (type == NOFRAMES) {
54 err = handle_in_head(treebuilder, token);
55 } else {
56 /** \todo parse error */
57 treebuilder->context.mode = IN_FRAMESET;
58 err = HUBBUB_REPROCESS;
59 }
60 }
61 break;
62 case HUBBUB_TOKEN_EOF:
63 break;
64 }
65
66 return err;
67 }
68
69