1 /*
2  * Copyright (C) 2018-2020 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #include "lexbor/html/tree/insertion_mode.h"
8 
9 
10 bool
lxb_html_tree_insertion_mode_after_after_frameset(lxb_html_tree_t * tree,lxb_html_token_t * token)11 lxb_html_tree_insertion_mode_after_after_frameset(lxb_html_tree_t *tree,
12                                                   lxb_html_token_t *token)
13 {
14     switch (token->tag_id) {
15         case LXB_TAG__EM_COMMENT: {
16             lxb_dom_comment_t *comment;
17 
18             comment = lxb_html_tree_insert_comment(tree, token,
19                                                    lxb_dom_interface_node(tree->document));
20             if (comment == NULL) {
21                 return lxb_html_tree_process_abort(tree);
22             }
23 
24             break;
25         }
26 
27         case LXB_TAG__EM_DOCTYPE:
28         case LXB_TAG_HTML:
29             return lxb_html_tree_insertion_mode_in_body(tree, token);
30 
31         case LXB_TAG__END_OF_FILE:
32             tree->status = lxb_html_tree_stop_parsing(tree);
33             if (tree->status != LXB_STATUS_OK) {
34                 return lxb_html_tree_process_abort(tree);
35             }
36 
37             break;
38 
39         case LXB_TAG_NOFRAMES:
40             return lxb_html_tree_insertion_mode_in_head(tree, token);
41 
42         case LXB_TAG__TEXT: {
43             lxb_html_token_t ws_token = *token;
44 
45             tree->status = lxb_html_token_data_skip_ws_begin(&ws_token);
46             if (tree->status != LXB_STATUS_OK) {
47                 return lxb_html_tree_process_abort(tree);
48             }
49 
50             if (ws_token.text_start == ws_token.text_end) {
51                 return lxb_html_tree_insertion_mode_in_body(tree, token);
52             }
53         }
54         /* fall through */
55 
56         default:
57             lxb_html_tree_parse_error(tree, token, LXB_HTML_RULES_ERROR_UNTO);
58 
59             break;
60     }
61 
62     return true;
63 }
64