php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
in_frameset.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018-2020 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
9
10
11bool
13 lxb_html_token_t *token)
14{
15 if (token->type & LXB_HTML_TOKEN_TYPE_CLOSE) {
16 if (token->tag_id == LXB_TAG_FRAMESET)
17 {
18 lxb_dom_node_t *node;
19 node = lxb_html_tree_current_node(tree);
20
21 if (node == lxb_html_tree_open_elements_first(tree)) {
22 lxb_html_tree_parse_error(tree, token,
24 return true;
25 }
26
28
29 node = lxb_html_tree_current_node(tree);
30
31 if (tree->fragment == NULL
32 && lxb_html_tree_node_is(node, LXB_TAG_FRAMESET) == false)
33 {
35 }
36
37 return true;
38 }
39
41
42 return true;
43 }
44
45 switch (token->tag_id) {
47 lxb_dom_comment_t *comment;
48
49 comment = lxb_html_tree_insert_comment(tree, token, NULL);
50 if (comment == NULL) {
51 return lxb_html_tree_process_abort(tree);
52 }
53
54 break;
55 }
56
58 lxb_html_tree_parse_error(tree, token,
60 break;
61
62 case LXB_TAG_HTML:
63 return lxb_html_tree_insertion_mode_in_body(tree, token);
64
65 case LXB_TAG_FRAMESET: {
66 lxb_html_element_t *element;
67
68 element = lxb_html_tree_insert_html_element(tree, token);
69 if (element == NULL) {
71
72 return lxb_html_tree_process_abort(tree);
73 }
74
75 break;
76 }
77
78 case LXB_TAG_FRAME: {
79 lxb_html_element_t *element;
80
81 element = lxb_html_tree_insert_html_element(tree, token);
82 if (element == NULL) {
84
85 return lxb_html_tree_process_abort(tree);
86 }
87
90
91 break;
92 }
93
95 return lxb_html_tree_insertion_mode_in_head(tree, token);
96
99
100 if (node != lxb_html_tree_open_elements_first(tree)) {
101 lxb_html_tree_parse_error(tree, token,
103 }
104
106 if (tree->status != LXB_STATUS_OK) {
107 return lxb_html_tree_process_abort(tree);
108 }
109
110 break;
111 }
112
113 case LXB_TAG__TEXT: {
114 size_t cur_len;
115 lexbor_str_t str;
116
117 tree->status = lxb_html_token_make_text(token, &str,
118 tree->document->dom_document.text);
119 if (tree->status != LXB_STATUS_OK) {
120 return lxb_html_tree_process_abort(tree);
121 }
122
123 cur_len = str.length;
124
126
127 if (str.length != 0) {
129 &str,
130 NULL);
131 if (tree->status != LXB_STATUS_OK) {
132 return lxb_html_tree_process_abort(tree);
133 }
134 }
135
136 if (str.length == cur_len) {
137 return true;
138 }
139 }
140 /* fall through */
141
142 default:
144
145 break;
146 }
147
148 return true;
149}
@ LXB_STATUS_ERROR_MEMORY_ALLOCATION
Definition base.h:51
@ LXB_STATUS_OK
Definition base.h:49
struct lxb_dom_comment lxb_dom_comment_t
Definition interface.h:49
struct lxb_dom_node lxb_dom_node_t
Definition interface.h:38
#define NULL
Definition gdcache.h:45
struct lxb_html_tree lxb_html_tree_t
Definition base.h:28
struct lxb_html_element lxb_html_element_t
Definition interface.h:111
lxb_status_t lxb_html_token_make_text(lxb_html_token_t *token, lexbor_str_t *str, lexbor_mraw_t *mraw)
Definition token.c:91
@ LXB_HTML_TOKEN_TYPE_CLOSE
Definition token.h:27
@ LXB_HTML_RULES_ERROR_DOTOINFRMO
Definition error.h:88
@ LXB_HTML_RULES_ERROR_UNELINOPELST
Definition error.h:66
@ LXB_HTML_RULES_ERROR_UNTO
Definition error.h:22
bool lxb_html_tree_insertion_mode_in_frameset(lxb_html_tree_t *tree, lxb_html_token_t *token)
Definition in_frameset.c:12
LXB_API bool lxb_html_tree_insertion_mode_in_head(lxb_html_tree_t *tree, lxb_html_token_t *token)
Definition in_head.c:41
LXB_API bool lxb_html_tree_insertion_mode_after_frameset(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_body(lxb_html_tree_t *tree, lxb_html_token_t *token)
Definition in_body.c:1685
bool lxb_html_tree_process_abort(lxb_html_tree_t *tree)
Definition tree.c:224
lxb_dom_comment_t * lxb_html_tree_insert_comment(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_dom_node_t *pos)
Definition tree.c:790
lxb_status_t lxb_html_tree_stop_parsing(lxb_html_tree_t *tree)
Definition tree.c:216
lxb_status_t lxb_html_tree_insert_character_for_data(lxb_html_tree_t *tree, lexbor_str_t *str, lxb_dom_node_t **ret_node)
Definition tree.c:697
void lxb_html_tree_parse_error(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_html_tree_error_id_t id)
Definition tree.c:237
lxb_inline lxb_dom_node_t * lxb_html_tree_open_elements_first(lxb_html_tree_t *tree)
lxb_inline lxb_dom_node_t * lxb_html_tree_open_elements_pop(lxb_html_tree_t *tree)
void lexbor_str_stay_only_whitespace(lexbor_str_t *target)
Definition str.c:266
size_t length
Definition str.h:48
lexbor_mraw_t * text
Definition document.h:54
lxb_dom_document_t dom_document
Definition document.h:58
lxb_html_token_type_t type
Definition token.h:49
lxb_tag_id_t tag_id
Definition token.h:48
lxb_status_t status
Definition tree.h:66
lxb_html_tree_insertion_mode_f mode
Definition tree.h:62
lxb_html_document_t * document
Definition tree.h:42
lxb_dom_node_t * fragment
Definition tree.h:43
@ LXB_TAG__EM_DOCTYPE
Definition const.h:29
@ LXB_TAG__END_OF_FILE
Definition const.h:25
@ LXB_TAG_HTML
Definition const.h:125
@ LXB_TAG__EM_COMMENT
Definition const.h:28
@ LXB_TAG_FRAME
Definition const.h:112
@ LXB_TAG_FRAMESET
Definition const.h:113
@ LXB_TAG_NOFRAMES
Definition const.h:162
@ LXB_TAG__TEXT
Definition const.h:26
lxb_inline lxb_dom_node_t * lxb_html_tree_current_node(lxb_html_tree_t *tree)
Definition tree.h:286
lxb_inline void lxb_html_tree_acknowledge_token_self_closing(lxb_html_tree_t *tree, lxb_html_token_t *token)
Definition tree.h:327
lxb_inline bool lxb_html_tree_node_is(lxb_dom_node_t *node, lxb_tag_id_t tag_id)
Definition tree.h:280
lxb_inline lxb_html_element_t * lxb_html_tree_insert_html_element(lxb_html_tree_t *tree, lxb_html_token_t *token)
Definition tree.h:307