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