File Coverage

third_party/modest/source/myhtml/tokenizer_end.c
Criterion Covered Total %
statement 8 362 2.2
branch 0 86 0.0
condition n/a
subroutine n/a
pod n/a
total 8 448 1.7


line stmt bran cond sub pod time code
1             /*
2             Copyright (C) 2015-2017 Alexander Borisov
3            
4             This library is free software; you can redistribute it and/or
5             modify it under the terms of the GNU Lesser General Public
6             License as published by the Free Software Foundation; either
7             version 2.1 of the License, or (at your option) any later version.
8            
9             This library is distributed in the hope that it will be useful,
10             but WITHOUT ANY WARRANTY; without even the implied warranty of
11             MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12             Lesser General Public License for more details.
13            
14             You should have received a copy of the GNU Lesser General Public
15             License along with this library; if not, write to the Free Software
16             Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17            
18             Author: lex.borisov@gmail.com (Alexander Borisov)
19             */
20              
21             #include "myhtml/tokenizer_end.h"
22              
23              
24 144           size_t myhtml_tokenizer_end_state_data(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
25             {
26 144           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
27            
28 144           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_size + tree->global_offset), MyHTML_TOKEN_TYPE_DATA);
29 144           return html_offset;
30             }
31              
32 0           size_t myhtml_tokenizer_end_state_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
33             {
34 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
35            
36 0 0         if(token_node->raw_begin < (html_size + tree->global_offset)) {
37 0 0         if(token_node->raw_begin) {
38 0           token_node->raw_length = (html_offset + tree->global_offset) - token_node->raw_begin;
39 0           myhtml_check_tag_parser(tree, token_node, html, html_offset);
40            
41 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
42 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
43 0           return 0;
44             }
45             }
46             else {
47 0           token_node->type ^= (token_node->type & MyHTML_TOKEN_TYPE_WHITESPACE);
48 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_size + tree->global_offset), MyHTML_TOKEN_TYPE_DATA);
49             }
50             }
51            
52 0           return html_offset;
53             }
54              
55 1           size_t myhtml_tokenizer_end_state_tag_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
56             {
57 1           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
58            
59 1           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_size + tree->global_offset), MyHTML_TOKEN_TYPE_DATA);
60 1           return html_offset;
61             }
62              
63 0           size_t myhtml_tokenizer_end_state_end_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
64             {
65 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
66            
67 0 0         if(token_node->raw_begin < (html_size + tree->global_offset))
68             {
69 0           token_node->raw_length = (html_offset + tree->global_offset) - token_node->raw_begin;
70 0           token_node->type ^= (token_node->type & MyHTML_TOKEN_TYPE_WHITESPACE);
71 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_size + tree->global_offset), MyHTML_TOKEN_TYPE_DATA);
72             }
73            
74 0           return html_offset;
75             }
76              
77 0           size_t myhtml_tokenizer_end_state_self_closing_start_tag(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
78             {
79 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
80            
81 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_size + tree->global_offset), MyHTML_TOKEN_TYPE_DATA);
82 0           return html_offset;
83             }
84              
85 0           size_t myhtml_tokenizer_end_state_markup_declaration_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
86             {
87 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
88            
89 0 0         if(token_node->raw_begin > 1) {
90 0           tree->incoming_buf->length = myhtml_tokenizer_state_bogus_comment(tree, token_node, html, token_node->raw_begin, html_size);
91            
92 0 0         if(token_node != tree->current_token_node)
93             {
94 0           token_node = tree->current_token_node;
95 0           token_node->raw_length = (html_size + tree->global_offset) - token_node->raw_begin;
96            
97 0 0         if(token_node->raw_length)
98             {
99 0           token_node->type ^= (token_node->type & MyHTML_TOKEN_TYPE_WHITESPACE);
100 0           token_node->tag_id = MyHTML_TAG__TEXT;
101 0           token_node->type |= MyHTML_TOKEN_TYPE_DATA;
102            
103 0           token_node->raw_length = (html_size + tree->global_offset) - token_node->raw_begin;
104            
105 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
106 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
107 0           return 0;
108             }
109             }
110             }
111             else {
112 0           token_node->type ^= (token_node->type & MyHTML_TOKEN_TYPE_WHITESPACE);
113 0           token_node->tag_id = MyHTML_TAG__COMMENT;
114 0           token_node->type |= MyHTML_TOKEN_TYPE_COMMENT;
115            
116 0           token_node->raw_length = (html_size + tree->global_offset) - token_node->raw_begin;
117            
118 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
119 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
120 0           return 0;
121             }
122             }
123             }
124            
125 0           return html_offset;
126             }
127              
128 0           size_t myhtml_tokenizer_end_state_before_attribute_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
129             {
130 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
131            
132 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
133 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
134 0           return 0;
135             }
136            
137 0           return html_offset;
138             }
139              
140 0           size_t myhtml_tokenizer_end_state_attribute_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
141             {
142 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
143            
144 0           tree->attr_current->raw_key_length = (html_offset + tree->global_offset) - tree->attr_current->raw_key_begin;
145            
146 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
147 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
148 0           return 0;
149             }
150            
151 0           return html_offset;
152             }
153              
154 0           size_t myhtml_tokenizer_end_state_after_attribute_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
155             {
156 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
157            
158 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
159 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
160 0           return 0;
161             }
162            
163 0           return html_offset;
164             }
165              
166 0           size_t myhtml_tokenizer_end_state_before_attribute_value(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
167             {
168 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
169            
170 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
171 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
172 0           return 0;
173             }
174            
175 0           tree->attr_current = myhtml_token_attr_create(tree->token, tree->token->mcasync_attr_id);
176 0 0         if(tree->attr_current == NULL) {
177 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
178 0           return 0;
179             }
180            
181 0           return html_offset;
182             }
183              
184 0           size_t myhtml_tokenizer_end_state_attribute_value_double_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
185             {
186 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
187            
188 0           return html_offset;
189             }
190              
191 0           size_t myhtml_tokenizer_end_state_attribute_value_single_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
192             {
193 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
194            
195 0           return html_offset;
196             }
197              
198 0           size_t myhtml_tokenizer_end_state_attribute_value_unquoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
199             {
200 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
201            
202 0           tree->attr_current->raw_value_length = (html_offset + tree->global_offset) - tree->attr_current->raw_value_begin;
203            
204 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
205 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
206 0           return 0;
207             }
208            
209 0           tree->attr_current = myhtml_token_attr_create(tree->token, tree->token->mcasync_attr_id);
210 0 0         if(tree->attr_current == NULL) {
211 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
212 0           return 0;
213             }
214            
215 0           return html_offset;
216             }
217              
218 0           size_t myhtml_tokenizer_end_state_after_attribute_value_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
219             {
220 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
221            
222 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
223            
224 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
225 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
226 0           return 0;
227             }
228            
229 0           return html_offset;
230             }
231              
232 0           size_t myhtml_tokenizer_end_state_comment_start(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
233             {
234 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
235            
236 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
237            
238 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
239 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
240 0           return 0;
241             }
242            
243 0           return html_offset;
244             }
245              
246 0           size_t myhtml_tokenizer_end_state_comment_start_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
247             {
248 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
249            
250 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
251            
252 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
253 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
254 0           return 0;
255             }
256            
257 0           return html_offset;
258             }
259              
260 0           size_t myhtml_tokenizer_end_state_comment(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
261             {
262 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
263            
264 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
265            
266 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
267 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
268 0           return 0;
269             }
270            
271 0           return html_offset;
272             }
273              
274 0           size_t myhtml_tokenizer_end_state_comment_end(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
275             {
276 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
277            
278 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
279            
280 0 0         if(token_node->raw_length > 2) {
281 0           token_node->raw_length -= 2;
282            
283 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
284 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
285 0           return 0;
286             }
287             }
288            
289 0           return html_offset;
290             }
291              
292 0           size_t myhtml_tokenizer_end_state_comment_end_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
293             {
294 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
295            
296 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
297            
298 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
299 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
300 0           return 0;
301             }
302            
303 0           return html_offset;
304             }
305              
306 0           size_t myhtml_tokenizer_end_state_comment_end_bang(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
307             {
308 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
309            
310 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
311            
312 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
313 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
314 0           return 0;
315             }
316            
317 0           return html_offset;
318             }
319              
320 0           size_t myhtml_tokenizer_end_state_bogus_comment(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
321             {
322 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
323            
324 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
325            
326 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
327 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
328 0           return 0;
329             }
330            
331 0           return html_offset;
332             }
333              
334 0           size_t myhtml_tokenizer_end_state_cdata_section(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
335             {
336 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
337            
338 0           token_node->raw_length = ((html_offset + tree->global_offset) - token_node->raw_begin);
339            
340 0 0         if(token_node->raw_length) {
341 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
342 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
343 0           return 0;
344             }
345             }
346            
347 0           return html_offset;
348             }
349              
350 0           size_t myhtml_tokenizer_end_state_rcdata(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
351             {
352 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
353            
354 0 0         if(token_node->raw_begin < (html_size + tree->global_offset)) {
355 0           token_node->type |= MyHTML_TOKEN_TYPE_RCDATA;
356 0           token_node->tag_id = MyHTML_TAG__TEXT;
357 0           token_node->raw_length = (html_size + tree->global_offset) - token_node->raw_begin;
358            
359 0 0         if(myhtml_queue_add(tree, 0, token_node) != MyHTML_STATUS_OK) {
360 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
361 0           return 0;
362             }
363             }
364            
365 0           return html_offset;
366             }
367              
368 0           size_t myhtml_tokenizer_end_state_rcdata_less_than_sign(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
369             {
370 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
371            
372 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RCDATA);
373 0           return html_offset;
374             }
375              
376 0           size_t myhtml_tokenizer_end_state_rcdata_end_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
377             {
378 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
379            
380 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RCDATA);
381 0           return html_offset;
382             }
383              
384 0           size_t myhtml_tokenizer_end_state_rcdata_end_tag_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
385             {
386 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
387            
388 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RCDATA);
389 0           return html_offset;
390             }
391              
392 0           size_t myhtml_tokenizer_end_state_rawtext(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
393             {
394 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
395            
396 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RAWTEXT);
397 0           return html_offset;
398             }
399              
400 0           size_t myhtml_tokenizer_end_state_rawtext_less_than_sign(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
401             {
402 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
403            
404 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RAWTEXT);
405 0           return html_offset;
406             }
407              
408 0           size_t myhtml_tokenizer_end_state_rawtext_end_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
409             {
410 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
411            
412 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RAWTEXT);
413 0           return html_offset;
414             }
415              
416 0           size_t myhtml_tokenizer_end_state_rawtext_end_tag_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
417             {
418 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
419            
420 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RAWTEXT);
421 0           return html_offset;
422             }
423              
424 0           size_t myhtml_tokenizer_end_state_plaintext(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
425             {
426 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
427            
428             // all we need inside myhtml_tokenizer_state_plaintext
429 0           return html_offset;
430             }
431              
432 0           size_t myhtml_tokenizer_end_state_doctype(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
433             {
434 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
435            
436 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_RAWTEXT);
437 0           return html_offset;
438             }
439              
440 0           size_t myhtml_tokenizer_end_state_before_doctype_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
441             {
442 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
443            
444 0           tree->compat_mode = MyHTML_TREE_COMPAT_MODE_QUIRKS;
445            
446 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
447 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
448 0           return 0;
449             }
450            
451 0           return html_offset;
452             }
453              
454 0           size_t myhtml_tokenizer_end_state_doctype_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
455             {
456 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
457            
458 0           tree->attr_current->raw_key_length = (html_offset + tree->global_offset) - tree->attr_current->raw_key_begin;
459            
460 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
461 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
462 0           return 0;
463             }
464            
465 0           return html_offset;
466             }
467              
468 0           size_t myhtml_tokenizer_end_state_after_doctype_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
469             {
470 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
471            
472 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
473 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
474 0           return 0;
475             }
476            
477 0           return html_offset;
478             }
479              
480 0           size_t myhtml_tokenizer_end_state_custom_after_doctype_name_a_z(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
481             {
482 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
483            
484 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
485 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
486 0           return 0;
487             }
488            
489 0           return html_offset;
490             }
491              
492 0           size_t myhtml_tokenizer_end_state_before_doctype_public_identifier(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
493             {
494 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
495            
496 0           tree->compat_mode = MyHTML_TREE_COMPAT_MODE_QUIRKS;
497            
498 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
499 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
500 0           return 0;
501             }
502            
503 0           return html_offset;
504             }
505              
506 0           size_t myhtml_tokenizer_end_state_doctype_public_identifier_double_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
507             {
508 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
509            
510 0           tree->compat_mode = MyHTML_TREE_COMPAT_MODE_QUIRKS;
511            
512 0 0         if(tree->attr_current->raw_key_begin && html_size) {
    0          
513 0           tree->attr_current->raw_key_length = (html_offset + tree->global_offset) - tree->attr_current->raw_key_begin;
514             }
515            
516 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
517 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
518 0           return 0;
519             }
520            
521 0           return html_offset;
522             }
523              
524 0           size_t myhtml_tokenizer_end_state_doctype_public_identifier_single_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
525             {
526 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
527            
528 0           myhtml_tokenizer_end_state_doctype_public_identifier_double_quoted(tree, token_node, html, (html_offset + tree->global_offset), html_size);
529 0           return html_offset;
530             }
531              
532 0           size_t myhtml_tokenizer_end_state_after_doctype_public_identifier(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
533             {
534 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
535            
536 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
537 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
538 0           return 0;
539             }
540            
541 0           return html_offset;
542             }
543              
544 0           size_t myhtml_tokenizer_end_state_doctype_system_identifier_double_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
545             {
546 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
547            
548 0           tree->compat_mode = MyHTML_TREE_COMPAT_MODE_QUIRKS;
549            
550 0 0         if(tree->attr_current->raw_key_begin && html_size) {
    0          
551 0           tree->attr_current->raw_key_length = (html_offset + tree->global_offset) - tree->attr_current->raw_key_begin;
552             }
553            
554 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
555 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
556 0           return 0;
557             }
558            
559 0           return html_offset;
560             }
561              
562 0           size_t myhtml_tokenizer_end_state_doctype_system_identifier_single_quoted(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
563             {
564 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
565            
566 0           myhtml_tokenizer_end_state_doctype_system_identifier_double_quoted(tree, token_node, html, (html_offset + tree->global_offset), html_size);
567 0           return html_offset;
568             }
569              
570 0           size_t myhtml_tokenizer_end_state_after_doctype_system_identifier(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
571             {
572 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
573            
574 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
575 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
576 0           return 0;
577             }
578            
579 0           return html_offset;
580             }
581              
582 0           size_t myhtml_tokenizer_end_state_bogus_doctype(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
583             {
584 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
585            
586 0 0         if(myhtml_queue_add(tree, html_offset, token_node) != MyHTML_STATUS_OK) {
587 0           myhtml_tokenizer_state_set(tree) = MyHTML_TOKENIZER_STATE_PARSE_ERROR_STOP;
588 0           return 0;
589             }
590            
591 0           return html_offset;
592             }
593              
594 0           size_t myhtml_tokenizer_end_state_script_data(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
595             {
596 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
597            
598 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
599 0           return html_offset;
600             }
601              
602 0           size_t myhtml_tokenizer_end_state_script_data_less_than_sign(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
603             {
604 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
605            
606 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
607 0           return html_offset;
608             }
609              
610 0           size_t myhtml_tokenizer_end_state_script_data_end_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
611             {
612 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
613            
614 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
615 0           return html_offset;
616             }
617              
618 0           size_t myhtml_tokenizer_end_state_script_data_end_tag_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
619             {
620 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
621            
622 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
623 0           return html_offset;
624             }
625              
626 0           size_t myhtml_tokenizer_end_state_script_data_escape_start(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
627             {
628 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
629            
630 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
631 0           return html_offset;
632             }
633              
634 0           size_t myhtml_tokenizer_end_state_script_data_escape_start_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
635             {
636 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
637            
638 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
639 0           return html_offset;
640             }
641              
642 0           size_t myhtml_tokenizer_end_state_script_data_escaped(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
643             {
644 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
645            
646 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
647 0           return html_offset;
648             }
649              
650 0           size_t myhtml_tokenizer_end_state_script_data_escaped_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
651             {
652 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
653            
654 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
655 0           return html_offset;
656             }
657              
658 0           size_t myhtml_tokenizer_end_state_script_data_escaped_dash_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
659             {
660 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
661            
662 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
663 0           return html_offset;
664             }
665              
666 0           size_t myhtml_tokenizer_end_state_script_data_escaped_less_than_sign(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
667             {
668 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
669            
670 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
671 0           return html_offset;
672             }
673              
674 0           size_t myhtml_tokenizer_end_state_script_data_escaped_end_tag_open(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
675             {
676 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
677            
678 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
679 0           return html_offset;
680             }
681              
682 0           size_t myhtml_tokenizer_end_state_script_data_escaped_end_tag_name(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
683             {
684 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
685            
686 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
687 0           return html_offset;
688             }
689              
690 0           size_t myhtml_tokenizer_end_state_script_data_double_escape_start(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
691             {
692 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
693            
694 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
695 0           return html_offset;
696             }
697              
698 0           size_t myhtml_tokenizer_end_state_script_data_double_escaped(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
699             {
700 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
701            
702 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
703 0           return html_offset;
704             }
705              
706 0           size_t myhtml_tokenizer_end_state_script_data_double_escaped_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
707             {
708 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
709            
710 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
711 0           return html_offset;
712             }
713              
714 0           size_t myhtml_tokenizer_end_state_script_data_double_escaped_dash_dash(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
715             {
716 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
717            
718 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
719 0           return html_offset;
720             }
721              
722 0           size_t myhtml_tokenizer_end_state_script_data_double_escaped_less_than_sign(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
723             {
724 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
725            
726 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
727 0           return html_offset;
728             }
729              
730 0           size_t myhtml_tokenizer_end_state_script_data_double_escape_end(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
731             {
732 0           token_node->element_length = (tree->global_offset + html_size) - token_node->element_begin;
733            
734 0           myhtml_tokenizer_queue_create_text_node_if_need(tree, token_node, html, (html_offset + tree->global_offset), MyHTML_TOKEN_TYPE_SCRIPT);
735 0           return html_offset;
736             }
737              
738 0           size_t myhtml_tokenizer_end_state_parse_error_stop(myhtml_tree_t* tree, myhtml_token_node_t* token_node, const char* html, size_t html_offset, size_t html_size)
739             {
740            
741            
742 0           return html_size;
743             }