aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/mitjafelicijan/go-tree-sitter/html
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 20:22:09 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 20:22:09 +0100
commit5a8dbc6347b3541e84fe669b22c17ad3b715e258 (patch)
treeb148c450939688caaaeb4adac6f2faa1eaffe649 /vendor/github.com/mitjafelicijan/go-tree-sitter/html
downloadqwe-editor-5a8dbc6347b3541e84fe669b22c17ad3b715e258.tar.gz
Engage!
Diffstat (limited to 'vendor/github.com/mitjafelicijan/go-tree-sitter/html')
-rw-r--r--vendor/github.com/mitjafelicijan/go-tree-sitter/html/binding.go15
-rw-r--r--vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.c2300
-rw-r--r--vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.h265
-rw-r--r--vendor/github.com/mitjafelicijan/go-tree-sitter/html/scanner.c362
-rw-r--r--vendor/github.com/mitjafelicijan/go-tree-sitter/html/tag.h385
5 files changed, 3327 insertions, 0 deletions
diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/html/binding.go b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/binding.go
new file mode 100644
index 0000000..6d5dd0a
--- /dev/null
+++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/binding.go
@@ -0,0 +1,15 @@
1package html
2
3//#include "parser.h"
4//TSLanguage *tree_sitter_html();
5import "C"
6import (
7 "unsafe"
8
9 sitter "github.com/mitjafelicijan/go-tree-sitter"
10)
11
12func GetLanguage() *sitter.Language {
13 ptr := unsafe.Pointer(C.tree_sitter_html())
14 return sitter.NewLanguage(ptr)
15}
diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.c b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.c
new file mode 100644
index 0000000..5e899a6
--- /dev/null
+++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.c
@@ -0,0 +1,2300 @@
1#include "parser.h"
2
3#if defined(__GNUC__) || defined(__clang__)
4#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
5#endif
6
7#define LANGUAGE_VERSION 14
8#define STATE_COUNT 94
9#define LARGE_STATE_COUNT 2
10#define SYMBOL_COUNT 41
11#define ALIAS_COUNT 0
12#define TOKEN_COUNT 25
13#define EXTERNAL_TOKEN_COUNT 9
14#define FIELD_COUNT 0
15#define MAX_ALIAS_SEQUENCE_LENGTH 4
16#define PRODUCTION_ID_COUNT 1
17
18enum ts_symbol_identifiers {
19 anon_sym_LT_BANG = 1,
20 aux_sym_doctype_token1 = 2,
21 anon_sym_GT = 3,
22 sym__doctype = 4,
23 anon_sym_LT = 5,
24 anon_sym_SLASH_GT = 6,
25 anon_sym_LT_SLASH = 7,
26 anon_sym_EQ = 8,
27 sym_attribute_name = 9,
28 sym_attribute_value = 10,
29 sym_entity = 11,
30 anon_sym_SQUOTE = 12,
31 aux_sym_quoted_attribute_value_token1 = 13,
32 anon_sym_DQUOTE = 14,
33 aux_sym_quoted_attribute_value_token2 = 15,
34 sym_text = 16,
35 sym__start_tag_name = 17,
36 sym__script_start_tag_name = 18,
37 sym__style_start_tag_name = 19,
38 sym__end_tag_name = 20,
39 sym_erroneous_end_tag_name = 21,
40 sym__implicit_end_tag = 22,
41 sym_raw_text = 23,
42 sym_comment = 24,
43 sym_document = 25,
44 sym_doctype = 26,
45 sym__node = 27,
46 sym_element = 28,
47 sym_script_element = 29,
48 sym_style_element = 30,
49 sym_start_tag = 31,
50 sym_script_start_tag = 32,
51 sym_style_start_tag = 33,
52 sym_self_closing_tag = 34,
53 sym_end_tag = 35,
54 sym_erroneous_end_tag = 36,
55 sym_attribute = 37,
56 sym_quoted_attribute_value = 38,
57 aux_sym_document_repeat1 = 39,
58 aux_sym_start_tag_repeat1 = 40,
59};
60
61static const char * const ts_symbol_names[] = {
62 [ts_builtin_sym_end] = "end",
63 [anon_sym_LT_BANG] = "<!",
64 [aux_sym_doctype_token1] = "doctype_token1",
65 [anon_sym_GT] = ">",
66 [sym__doctype] = "doctype",
67 [anon_sym_LT] = "<",
68 [anon_sym_SLASH_GT] = "/>",
69 [anon_sym_LT_SLASH] = "</",
70 [anon_sym_EQ] = "=",
71 [sym_attribute_name] = "attribute_name",
72 [sym_attribute_value] = "attribute_value",
73 [sym_entity] = "entity",
74 [anon_sym_SQUOTE] = "'",
75 [aux_sym_quoted_attribute_value_token1] = "attribute_value",
76 [anon_sym_DQUOTE] = "\"",
77 [aux_sym_quoted_attribute_value_token2] = "attribute_value",
78 [sym_text] = "text",
79 [sym__start_tag_name] = "tag_name",
80 [sym__script_start_tag_name] = "tag_name",
81 [sym__style_start_tag_name] = "tag_name",
82 [sym__end_tag_name] = "tag_name",
83 [sym_erroneous_end_tag_name] = "erroneous_end_tag_name",
84 [sym__implicit_end_tag] = "_implicit_end_tag",
85 [sym_raw_text] = "raw_text",
86 [sym_comment] = "comment",
87 [sym_document] = "document",
88 [sym_doctype] = "doctype",
89 [sym__node] = "_node",
90 [sym_element] = "element",
91 [sym_script_element] = "script_element",
92 [sym_style_element] = "style_element",
93 [sym_start_tag] = "start_tag",
94 [sym_script_start_tag] = "start_tag",
95 [sym_style_start_tag] = "start_tag",
96 [sym_self_closing_tag] = "self_closing_tag",
97 [sym_end_tag] = "end_tag",
98 [sym_erroneous_end_tag] = "erroneous_end_tag",
99 [sym_attribute] = "attribute",
100 [sym_quoted_attribute_value] = "quoted_attribute_value",
101 [aux_sym_document_repeat1] = "document_repeat1",
102 [aux_sym_start_tag_repeat1] = "start_tag_repeat1",
103};
104
105static const TSSymbol ts_symbol_map[] = {
106 [ts_builtin_sym_end] = ts_builtin_sym_end,
107 [anon_sym_LT_BANG] = anon_sym_LT_BANG,
108 [aux_sym_doctype_token1] = aux_sym_doctype_token1,
109 [anon_sym_GT] = anon_sym_GT,
110 [sym__doctype] = sym__doctype,
111 [anon_sym_LT] = anon_sym_LT,
112 [anon_sym_SLASH_GT] = anon_sym_SLASH_GT,
113 [anon_sym_LT_SLASH] = anon_sym_LT_SLASH,
114 [anon_sym_EQ] = anon_sym_EQ,
115 [sym_attribute_name] = sym_attribute_name,
116 [sym_attribute_value] = sym_attribute_value,
117 [sym_entity] = sym_entity,
118 [anon_sym_SQUOTE] = anon_sym_SQUOTE,
119 [aux_sym_quoted_attribute_value_token1] = sym_attribute_value,
120 [anon_sym_DQUOTE] = anon_sym_DQUOTE,
121 [aux_sym_quoted_attribute_value_token2] = sym_attribute_value,
122 [sym_text] = sym_text,
123 [sym__start_tag_name] = sym__start_tag_name,
124 [sym__script_start_tag_name] = sym__start_tag_name,
125 [sym__style_start_tag_name] = sym__start_tag_name,
126 [sym__end_tag_name] = sym__start_tag_name,
127 [sym_erroneous_end_tag_name] = sym_erroneous_end_tag_name,
128 [sym__implicit_end_tag] = sym__implicit_end_tag,
129 [sym_raw_text] = sym_raw_text,
130 [sym_comment] = sym_comment,
131 [sym_document] = sym_document,
132 [sym_doctype] = sym_doctype,
133 [sym__node] = sym__node,
134 [sym_element] = sym_element,
135 [sym_script_element] = sym_script_element,
136 [sym_style_element] = sym_style_element,
137 [sym_start_tag] = sym_start_tag,
138 [sym_script_start_tag] = sym_start_tag,
139 [sym_style_start_tag] = sym_start_tag,
140 [sym_self_closing_tag] = sym_self_closing_tag,
141 [sym_end_tag] = sym_end_tag,
142 [sym_erroneous_end_tag] = sym_erroneous_end_tag,
143 [sym_attribute] = sym_attribute,
144 [sym_quoted_attribute_value] = sym_quoted_attribute_value,
145 [aux_sym_document_repeat1] = aux_sym_document_repeat1,
146 [aux_sym_start_tag_repeat1] = aux_sym_start_tag_repeat1,
147};
148
149static const TSSymbolMetadata ts_symbol_metadata[] = {
150 [ts_builtin_sym_end] = {
151 .visible = false,
152 .named = true,
153 },
154 [anon_sym_LT_BANG] = {
155 .visible = true,
156 .named = false,
157 },
158 [aux_sym_doctype_token1] = {
159 .visible = false,
160 .named = false,
161 },
162 [anon_sym_GT] = {
163 .visible = true,
164 .named = false,
165 },
166 [sym__doctype] = {
167 .visible = true,
168 .named = false,
169 },
170 [anon_sym_LT] = {
171 .visible = true,
172 .named = false,
173 },
174 [anon_sym_SLASH_GT] = {
175 .visible = true,
176 .named = false,
177 },
178 [anon_sym_LT_SLASH] = {
179 .visible = true,
180 .named = false,
181 },
182 [anon_sym_EQ] = {
183 .visible = true,
184 .named = false,
185 },
186 [sym_attribute_name] = {
187 .visible = true,
188 .named = true,
189 },
190 [sym_attribute_value] = {
191 .visible = true,
192 .named = true,
193 },
194 [sym_entity] = {
195 .visible = true,
196 .named = true,
197 },
198 [anon_sym_SQUOTE] = {
199 .visible = true,
200 .named = false,
201 },
202 [aux_sym_quoted_attribute_value_token1] = {
203 .visible = true,
204 .named = true,
205 },
206 [anon_sym_DQUOTE] = {
207 .visible = true,
208 .named = false,
209 },
210 [aux_sym_quoted_attribute_value_token2] = {
211 .visible = true,
212 .named = true,
213 },
214 [sym_text] = {
215 .visible = true,
216 .named = true,
217 },
218 [sym__start_tag_name] = {
219 .visible = true,
220 .named = true,
221 },
222 [sym__script_start_tag_name] = {
223 .visible = true,
224 .named = true,
225 },
226 [sym__style_start_tag_name] = {
227 .visible = true,
228 .named = true,
229 },
230 [sym__end_tag_name] = {
231 .visible = true,
232 .named = true,
233 },
234 [sym_erroneous_end_tag_name] = {
235 .visible = true,
236 .named = true,
237 },
238 [sym__implicit_end_tag] = {
239 .visible = false,
240 .named = true,
241 },
242 [sym_raw_text] = {
243 .visible = true,
244 .named = true,
245 },
246 [sym_comment] = {
247 .visible = true,
248 .named = true,
249 },
250 [sym_document] = {
251 .visible = true,
252 .named = true,
253 },
254 [sym_doctype] = {
255 .visible = true,
256 .named = true,
257 },
258 [sym__node] = {
259 .visible = false,
260 .named = true,
261 },
262 [sym_element] = {
263 .visible = true,
264 .named = true,
265 },
266 [sym_script_element] = {
267 .visible = true,
268 .named = true,
269 },
270 [sym_style_element] = {
271 .visible = true,
272 .named = true,
273 },
274 [sym_start_tag] = {
275 .visible = true,
276 .named = true,
277 },
278 [sym_script_start_tag] = {
279 .visible = true,
280 .named = true,
281 },
282 [sym_style_start_tag] = {
283 .visible = true,
284 .named = true,
285 },
286 [sym_self_closing_tag] = {
287 .visible = true,
288 .named = true,
289 },
290 [sym_end_tag] = {
291 .visible = true,
292 .named = true,
293 },
294 [sym_erroneous_end_tag] = {
295 .visible = true,
296 .named = true,
297 },
298 [sym_attribute] = {
299 .visible = true,
300 .named = true,
301 },
302 [sym_quoted_attribute_value] = {
303 .visible = true,
304 .named = true,
305 },
306 [aux_sym_document_repeat1] = {
307 .visible = false,
308 .named = false,
309 },
310 [aux_sym_start_tag_repeat1] = {
311 .visible = false,
312 .named = false,
313 },
314};
315
316static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
317 [0] = {0},
318};
319
320static const uint16_t ts_non_terminal_alias_map[] = {
321 0,
322};
323
324static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
325 [0] = 0,
326 [1] = 1,
327 [2] = 2,
328 [3] = 2,
329 [4] = 4,
330 [5] = 4,
331 [6] = 6,
332 [7] = 6,
333 [8] = 8,
334 [9] = 9,
335 [10] = 10,
336 [11] = 11,
337 [12] = 12,
338 [13] = 11,
339 [14] = 14,
340 [15] = 15,
341 [16] = 15,
342 [17] = 12,
343 [18] = 18,
344 [19] = 19,
345 [20] = 10,
346 [21] = 21,
347 [22] = 9,
348 [23] = 23,
349 [24] = 24,
350 [25] = 25,
351 [26] = 26,
352 [27] = 27,
353 [28] = 18,
354 [29] = 19,
355 [30] = 27,
356 [31] = 14,
357 [32] = 21,
358 [33] = 23,
359 [34] = 25,
360 [35] = 35,
361 [36] = 36,
362 [37] = 37,
363 [38] = 36,
364 [39] = 35,
365 [40] = 40,
366 [41] = 41,
367 [42] = 42,
368 [43] = 43,
369 [44] = 43,
370 [45] = 45,
371 [46] = 46,
372 [47] = 37,
373 [48] = 48,
374 [49] = 42,
375 [50] = 50,
376 [51] = 51,
377 [52] = 51,
378 [53] = 53,
379 [54] = 54,
380 [55] = 55,
381 [56] = 54,
382 [57] = 55,
383 [58] = 53,
384 [59] = 59,
385 [60] = 60,
386 [61] = 61,
387 [62] = 62,
388 [63] = 63,
389 [64] = 64,
390 [65] = 65,
391 [66] = 62,
392 [67] = 67,
393 [68] = 63,
394 [69] = 48,
395 [70] = 50,
396 [71] = 64,
397 [72] = 65,
398 [73] = 73,
399 [74] = 67,
400 [75] = 75,
401 [76] = 76,
402 [77] = 77,
403 [78] = 78,
404 [79] = 79,
405 [80] = 80,
406 [81] = 81,
407 [82] = 82,
408 [83] = 82,
409 [84] = 76,
410 [85] = 85,
411 [86] = 78,
412 [87] = 87,
413 [88] = 87,
414 [89] = 81,
415 [90] = 79,
416 [91] = 80,
417 [92] = 85,
418 [93] = 75,
419};
420
421static bool ts_lex(TSLexer *lexer, TSStateId state) {
422 START_LEXER();
423 eof = lexer->eof(lexer);
424 switch (state) {
425 case 0:
426 if (eof) ADVANCE(18);
427 ADVANCE_MAP(
428 '"', 73,
429 '&', 3,
430 '\'', 70,
431 '/', 6,
432 '<', 24,
433 '=', 27,
434 '>', 22,
435 'D', 9,
436 'd', 9,
437 );
438 if (('\t' <= lookahead && lookahead <= '\r') ||
439 lookahead == ' ') SKIP(0);
440 END_STATE();
441 case 1:
442 if (lookahead == '"') ADVANCE(73);
443 if (lookahead == '\'') ADVANCE(70);
444 if (('\t' <= lookahead && lookahead <= '\r') ||
445 lookahead == ' ') SKIP(1);
446 if (lookahead != 0 &&
447 (lookahead < '<' || '>' < lookahead)) ADVANCE(29);
448 END_STATE();
449 case 2:
450 if (lookahead == '"') ADVANCE(73);
451 if (('\t' <= lookahead && lookahead <= '\r') ||
452 lookahead == ' ') ADVANCE(74);
453 if (lookahead != 0) ADVANCE(75);
454 END_STATE();
455 case 3:
456 if (lookahead == '#') ADVANCE(12);
457 if (('A' <= lookahead && lookahead <= 'Z') ||
458 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(69);
459 END_STATE();
460 case 4:
461 if (lookahead == '\'') ADVANCE(70);
462 if (('\t' <= lookahead && lookahead <= '\r') ||
463 lookahead == ' ') ADVANCE(71);
464 if (lookahead != 0) ADVANCE(72);
465 END_STATE();
466 case 5:
467 if (lookahead == '/') ADVANCE(6);
468 if (lookahead == '=') ADVANCE(27);
469 if (lookahead == '>') ADVANCE(22);
470 if (('\t' <= lookahead && lookahead <= '\r') ||
471 lookahead == ' ') SKIP(5);
472 if (lookahead != 0 &&
473 lookahead != '"' &&
474 lookahead != '\'' &&
475 (lookahead < '<' || '>' < lookahead)) ADVANCE(28);
476 END_STATE();
477 case 6:
478 if (lookahead == '>') ADVANCE(25);
479 END_STATE();
480 case 7:
481 if (lookahead == 'C' ||
482 lookahead == 'c') ADVANCE(11);
483 END_STATE();
484 case 8:
485 if (lookahead == 'E' ||
486 lookahead == 'e') ADVANCE(23);
487 END_STATE();
488 case 9:
489 if (lookahead == 'O' ||
490 lookahead == 'o') ADVANCE(7);
491 END_STATE();
492 case 10:
493 if (lookahead == 'P' ||
494 lookahead == 'p') ADVANCE(8);
495 END_STATE();
496 case 11:
497 if (lookahead == 'T' ||
498 lookahead == 't') ADVANCE(13);
499 END_STATE();
500 case 12:
501 if (lookahead == 'X' ||
502 lookahead == 'x') ADVANCE(16);
503 if (('0' <= lookahead && lookahead <= '9')) ADVANCE(35);
504 END_STATE();
505 case 13:
506 if (lookahead == 'Y' ||
507 lookahead == 'y') ADVANCE(10);
508 END_STATE();
509 case 14:
510 if (('\t' <= lookahead && lookahead <= '\r') ||
511 lookahead == ' ') ADVANCE(14);
512 if (lookahead != 0 &&
513 lookahead != '&' &&
514 lookahead != '<' &&
515 lookahead != '>') ADVANCE(76);
516 END_STATE();
517 case 15:
518 if (('\t' <= lookahead && lookahead <= '\r') ||
519 lookahead == ' ') ADVANCE(20);
520 if (lookahead != 0 &&
521 lookahead != '>') ADVANCE(21);
522 END_STATE();
523 case 16:
524 if (('0' <= lookahead && lookahead <= '9') ||
525 ('A' <= lookahead && lookahead <= 'F') ||
526 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40);
527 END_STATE();
528 case 17:
529 if (eof) ADVANCE(18);
530 if (lookahead == '&') ADVANCE(3);
531 if (lookahead == '<') ADVANCE(24);
532 if (('\t' <= lookahead && lookahead <= '\r') ||
533 lookahead == ' ') SKIP(17);
534 if (lookahead != 0 &&
535 lookahead != '>') ADVANCE(76);
536 END_STATE();
537 case 18:
538 ACCEPT_TOKEN(ts_builtin_sym_end);
539 END_STATE();
540 case 19:
541 ACCEPT_TOKEN(anon_sym_LT_BANG);
542 END_STATE();
543 case 20:
544 ACCEPT_TOKEN(aux_sym_doctype_token1);
545 if (('\t' <= lookahead && lookahead <= '\r') ||
546 lookahead == ' ') ADVANCE(20);
547 if (lookahead != 0 &&
548 lookahead != '>') ADVANCE(21);
549 END_STATE();
550 case 21:
551 ACCEPT_TOKEN(aux_sym_doctype_token1);
552 if (lookahead != 0 &&
553 lookahead != '>') ADVANCE(21);
554 END_STATE();
555 case 22:
556 ACCEPT_TOKEN(anon_sym_GT);
557 END_STATE();
558 case 23:
559 ACCEPT_TOKEN(sym__doctype);
560 END_STATE();
561 case 24:
562 ACCEPT_TOKEN(anon_sym_LT);
563 if (lookahead == '!') ADVANCE(19);
564 if (lookahead == '/') ADVANCE(26);
565 END_STATE();
566 case 25:
567 ACCEPT_TOKEN(anon_sym_SLASH_GT);
568 END_STATE();
569 case 26:
570 ACCEPT_TOKEN(anon_sym_LT_SLASH);
571 END_STATE();
572 case 27:
573 ACCEPT_TOKEN(anon_sym_EQ);
574 END_STATE();
575 case 28:
576 ACCEPT_TOKEN(sym_attribute_name);
577 if (lookahead != 0 &&
578 (lookahead < '\t' || '\r' < lookahead) &&
579 lookahead != ' ' &&
580 lookahead != '"' &&
581 lookahead != '\'' &&
582 lookahead != '/' &&
583 (lookahead < '<' || '>' < lookahead)) ADVANCE(28);
584 END_STATE();
585 case 29:
586 ACCEPT_TOKEN(sym_attribute_value);
587 if (lookahead != 0 &&
588 (lookahead < '\t' || '\r' < lookahead) &&
589 lookahead != ' ' &&
590 lookahead != '"' &&
591 lookahead != '\'' &&
592 (lookahead < '<' || '>' < lookahead)) ADVANCE(29);
593 END_STATE();
594 case 30:
595 ACCEPT_TOKEN(sym_entity);
596 END_STATE();
597 case 31:
598 ACCEPT_TOKEN(sym_entity);
599 if (lookahead == ';') ADVANCE(30);
600 END_STATE();
601 case 32:
602 ACCEPT_TOKEN(sym_entity);
603 if (lookahead == ';') ADVANCE(30);
604 if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31);
605 END_STATE();
606 case 33:
607 ACCEPT_TOKEN(sym_entity);
608 if (lookahead == ';') ADVANCE(30);
609 if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32);
610 END_STATE();
611 case 34:
612 ACCEPT_TOKEN(sym_entity);
613 if (lookahead == ';') ADVANCE(30);
614 if (('0' <= lookahead && lookahead <= '9')) ADVANCE(33);
615 END_STATE();
616 case 35:
617 ACCEPT_TOKEN(sym_entity);
618 if (lookahead == ';') ADVANCE(30);
619 if (('0' <= lookahead && lookahead <= '9')) ADVANCE(34);
620 END_STATE();
621 case 36:
622 ACCEPT_TOKEN(sym_entity);
623 if (lookahead == ';') ADVANCE(30);
624 if (('0' <= lookahead && lookahead <= '9') ||
625 ('A' <= lookahead && lookahead <= 'F') ||
626 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(31);
627 END_STATE();
628 case 37:
629 ACCEPT_TOKEN(sym_entity);
630 if (lookahead == ';') ADVANCE(30);
631 if (('0' <= lookahead && lookahead <= '9') ||
632 ('A' <= lookahead && lookahead <= 'F') ||
633 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(36);
634 END_STATE();
635 case 38:
636 ACCEPT_TOKEN(sym_entity);
637 if (lookahead == ';') ADVANCE(30);
638 if (('0' <= lookahead && lookahead <= '9') ||
639 ('A' <= lookahead && lookahead <= 'F') ||
640 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(37);
641 END_STATE();
642 case 39:
643 ACCEPT_TOKEN(sym_entity);
644 if (lookahead == ';') ADVANCE(30);
645 if (('0' <= lookahead && lookahead <= '9') ||
646 ('A' <= lookahead && lookahead <= 'F') ||
647 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(38);
648 END_STATE();
649 case 40:
650 ACCEPT_TOKEN(sym_entity);
651 if (lookahead == ';') ADVANCE(30);
652 if (('0' <= lookahead && lookahead <= '9') ||
653 ('A' <= lookahead && lookahead <= 'F') ||
654 ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39);
655 END_STATE();
656 case 41:
657 ACCEPT_TOKEN(sym_entity);
658 if (lookahead == ';') ADVANCE(30);
659 if (('A' <= lookahead && lookahead <= 'Z') ||
660 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31);
661 END_STATE();
662 case 42:
663 ACCEPT_TOKEN(sym_entity);
664 if (lookahead == ';') ADVANCE(30);
665 if (('A' <= lookahead && lookahead <= 'Z') ||
666 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(41);
667 END_STATE();
668 case 43:
669 ACCEPT_TOKEN(sym_entity);
670 if (lookahead == ';') ADVANCE(30);
671 if (('A' <= lookahead && lookahead <= 'Z') ||
672 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(42);
673 END_STATE();
674 case 44:
675 ACCEPT_TOKEN(sym_entity);
676 if (lookahead == ';') ADVANCE(30);
677 if (('A' <= lookahead && lookahead <= 'Z') ||
678 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(43);
679 END_STATE();
680 case 45:
681 ACCEPT_TOKEN(sym_entity);
682 if (lookahead == ';') ADVANCE(30);
683 if (('A' <= lookahead && lookahead <= 'Z') ||
684 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(44);
685 END_STATE();
686 case 46:
687 ACCEPT_TOKEN(sym_entity);
688 if (lookahead == ';') ADVANCE(30);
689 if (('A' <= lookahead && lookahead <= 'Z') ||
690 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(45);
691 END_STATE();
692 case 47:
693 ACCEPT_TOKEN(sym_entity);
694 if (lookahead == ';') ADVANCE(30);
695 if (('A' <= lookahead && lookahead <= 'Z') ||
696 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(46);
697 END_STATE();
698 case 48:
699 ACCEPT_TOKEN(sym_entity);
700 if (lookahead == ';') ADVANCE(30);
701 if (('A' <= lookahead && lookahead <= 'Z') ||
702 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(47);
703 END_STATE();
704 case 49:
705 ACCEPT_TOKEN(sym_entity);
706 if (lookahead == ';') ADVANCE(30);
707 if (('A' <= lookahead && lookahead <= 'Z') ||
708 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(48);
709 END_STATE();
710 case 50:
711 ACCEPT_TOKEN(sym_entity);
712 if (lookahead == ';') ADVANCE(30);
713 if (('A' <= lookahead && lookahead <= 'Z') ||
714 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(49);
715 END_STATE();
716 case 51:
717 ACCEPT_TOKEN(sym_entity);
718 if (lookahead == ';') ADVANCE(30);
719 if (('A' <= lookahead && lookahead <= 'Z') ||
720 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(50);
721 END_STATE();
722 case 52:
723 ACCEPT_TOKEN(sym_entity);
724 if (lookahead == ';') ADVANCE(30);
725 if (('A' <= lookahead && lookahead <= 'Z') ||
726 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(51);
727 END_STATE();
728 case 53:
729 ACCEPT_TOKEN(sym_entity);
730 if (lookahead == ';') ADVANCE(30);
731 if (('A' <= lookahead && lookahead <= 'Z') ||
732 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(52);
733 END_STATE();
734 case 54:
735 ACCEPT_TOKEN(sym_entity);
736 if (lookahead == ';') ADVANCE(30);
737 if (('A' <= lookahead && lookahead <= 'Z') ||
738 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(53);
739 END_STATE();
740 case 55:
741 ACCEPT_TOKEN(sym_entity);
742 if (lookahead == ';') ADVANCE(30);
743 if (('A' <= lookahead && lookahead <= 'Z') ||
744 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(54);
745 END_STATE();
746 case 56:
747 ACCEPT_TOKEN(sym_entity);
748 if (lookahead == ';') ADVANCE(30);
749 if (('A' <= lookahead && lookahead <= 'Z') ||
750 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(55);
751 END_STATE();
752 case 57:
753 ACCEPT_TOKEN(sym_entity);
754 if (lookahead == ';') ADVANCE(30);
755 if (('A' <= lookahead && lookahead <= 'Z') ||
756 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(56);
757 END_STATE();
758 case 58:
759 ACCEPT_TOKEN(sym_entity);
760 if (lookahead == ';') ADVANCE(30);
761 if (('A' <= lookahead && lookahead <= 'Z') ||
762 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(57);
763 END_STATE();
764 case 59:
765 ACCEPT_TOKEN(sym_entity);
766 if (lookahead == ';') ADVANCE(30);
767 if (('A' <= lookahead && lookahead <= 'Z') ||
768 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(58);
769 END_STATE();
770 case 60:
771 ACCEPT_TOKEN(sym_entity);
772 if (lookahead == ';') ADVANCE(30);
773 if (('A' <= lookahead && lookahead <= 'Z') ||
774 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(59);
775 END_STATE();
776 case 61:
777 ACCEPT_TOKEN(sym_entity);
778 if (lookahead == ';') ADVANCE(30);
779 if (('A' <= lookahead && lookahead <= 'Z') ||
780 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60);
781 END_STATE();
782 case 62:
783 ACCEPT_TOKEN(sym_entity);
784 if (lookahead == ';') ADVANCE(30);
785 if (('A' <= lookahead && lookahead <= 'Z') ||
786 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(61);
787 END_STATE();
788 case 63:
789 ACCEPT_TOKEN(sym_entity);
790 if (lookahead == ';') ADVANCE(30);
791 if (('A' <= lookahead && lookahead <= 'Z') ||
792 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(62);
793 END_STATE();
794 case 64:
795 ACCEPT_TOKEN(sym_entity);
796 if (lookahead == ';') ADVANCE(30);
797 if (('A' <= lookahead && lookahead <= 'Z') ||
798 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(63);
799 END_STATE();
800 case 65:
801 ACCEPT_TOKEN(sym_entity);
802 if (lookahead == ';') ADVANCE(30);
803 if (('A' <= lookahead && lookahead <= 'Z') ||
804 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(64);
805 END_STATE();
806 case 66:
807 ACCEPT_TOKEN(sym_entity);
808 if (lookahead == ';') ADVANCE(30);
809 if (('A' <= lookahead && lookahead <= 'Z') ||
810 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(65);
811 END_STATE();
812 case 67:
813 ACCEPT_TOKEN(sym_entity);
814 if (lookahead == ';') ADVANCE(30);
815 if (('A' <= lookahead && lookahead <= 'Z') ||
816 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(66);
817 END_STATE();
818 case 68:
819 ACCEPT_TOKEN(sym_entity);
820 if (lookahead == ';') ADVANCE(30);
821 if (('A' <= lookahead && lookahead <= 'Z') ||
822 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(67);
823 END_STATE();
824 case 69:
825 ACCEPT_TOKEN(sym_entity);
826 if (lookahead == ';') ADVANCE(30);
827 if (('A' <= lookahead && lookahead <= 'Z') ||
828 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(68);
829 END_STATE();
830 case 70:
831 ACCEPT_TOKEN(anon_sym_SQUOTE);
832 END_STATE();
833 case 71:
834 ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token1);
835 if (('\t' <= lookahead && lookahead <= '\r') ||
836 lookahead == ' ') ADVANCE(71);
837 if (lookahead != 0 &&
838 lookahead != '\'') ADVANCE(72);
839 END_STATE();
840 case 72:
841 ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token1);
842 if (lookahead != 0 &&
843 lookahead != '\'') ADVANCE(72);
844 END_STATE();
845 case 73:
846 ACCEPT_TOKEN(anon_sym_DQUOTE);
847 END_STATE();
848 case 74:
849 ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token2);
850 if (('\t' <= lookahead && lookahead <= '\r') ||
851 lookahead == ' ') ADVANCE(74);
852 if (lookahead != 0 &&
853 lookahead != '"') ADVANCE(75);
854 END_STATE();
855 case 75:
856 ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token2);
857 if (lookahead != 0 &&
858 lookahead != '"') ADVANCE(75);
859 END_STATE();
860 case 76:
861 ACCEPT_TOKEN(sym_text);
862 if (('\t' <= lookahead && lookahead <= '\r') ||
863 lookahead == ' ') ADVANCE(14);
864 if (lookahead != 0 &&
865 lookahead != '&' &&
866 lookahead != '<' &&
867 lookahead != '>') ADVANCE(76);
868 END_STATE();
869 default:
870 return false;
871 }
872}
873
874static const TSLexMode ts_lex_modes[STATE_COUNT] = {
875 [0] = {.lex_state = 0, .external_lex_state = 1},
876 [1] = {.lex_state = 17, .external_lex_state = 2},
877 [2] = {.lex_state = 17, .external_lex_state = 3},
878 [3] = {.lex_state = 17, .external_lex_state = 3},
879 [4] = {.lex_state = 17, .external_lex_state = 3},
880 [5] = {.lex_state = 17, .external_lex_state = 3},
881 [6] = {.lex_state = 17, .external_lex_state = 3},
882 [7] = {.lex_state = 17, .external_lex_state = 2},
883 [8] = {.lex_state = 17, .external_lex_state = 2},
884 [9] = {.lex_state = 17, .external_lex_state = 2},
885 [10] = {.lex_state = 17, .external_lex_state = 2},
886 [11] = {.lex_state = 17, .external_lex_state = 2},
887 [12] = {.lex_state = 17, .external_lex_state = 3},
888 [13] = {.lex_state = 17, .external_lex_state = 3},
889 [14] = {.lex_state = 17, .external_lex_state = 2},
890 [15] = {.lex_state = 17, .external_lex_state = 2},
891 [16] = {.lex_state = 17, .external_lex_state = 3},
892 [17] = {.lex_state = 17, .external_lex_state = 2},
893 [18] = {.lex_state = 17, .external_lex_state = 3},
894 [19] = {.lex_state = 17, .external_lex_state = 3},
895 [20] = {.lex_state = 17, .external_lex_state = 3},
896 [21] = {.lex_state = 17, .external_lex_state = 2},
897 [22] = {.lex_state = 17, .external_lex_state = 3},
898 [23] = {.lex_state = 17, .external_lex_state = 2},
899 [24] = {.lex_state = 17, .external_lex_state = 3},
900 [25] = {.lex_state = 17, .external_lex_state = 3},
901 [26] = {.lex_state = 17, .external_lex_state = 3},
902 [27] = {.lex_state = 17, .external_lex_state = 2},
903 [28] = {.lex_state = 17, .external_lex_state = 2},
904 [29] = {.lex_state = 17, .external_lex_state = 2},
905 [30] = {.lex_state = 17, .external_lex_state = 3},
906 [31] = {.lex_state = 17, .external_lex_state = 3},
907 [32] = {.lex_state = 17, .external_lex_state = 3},
908 [33] = {.lex_state = 17, .external_lex_state = 3},
909 [34] = {.lex_state = 17, .external_lex_state = 2},
910 [35] = {.lex_state = 5, .external_lex_state = 4},
911 [36] = {.lex_state = 5, .external_lex_state = 4},
912 [37] = {.lex_state = 5, .external_lex_state = 4},
913 [38] = {.lex_state = 5, .external_lex_state = 4},
914 [39] = {.lex_state = 5, .external_lex_state = 4},
915 [40] = {.lex_state = 5, .external_lex_state = 2},
916 [41] = {.lex_state = 5, .external_lex_state = 2},
917 [42] = {.lex_state = 5, .external_lex_state = 4},
918 [43] = {.lex_state = 1, .external_lex_state = 2},
919 [44] = {.lex_state = 1, .external_lex_state = 2},
920 [45] = {.lex_state = 5, .external_lex_state = 2},
921 [46] = {.lex_state = 5, .external_lex_state = 2},
922 [47] = {.lex_state = 5, .external_lex_state = 2},
923 [48] = {.lex_state = 5, .external_lex_state = 4},
924 [49] = {.lex_state = 5, .external_lex_state = 2},
925 [50] = {.lex_state = 5, .external_lex_state = 4},
926 [51] = {.lex_state = 0, .external_lex_state = 5},
927 [52] = {.lex_state = 0, .external_lex_state = 5},
928 [53] = {.lex_state = 5, .external_lex_state = 4},
929 [54] = {.lex_state = 0, .external_lex_state = 6},
930 [55] = {.lex_state = 0, .external_lex_state = 6},
931 [56] = {.lex_state = 0, .external_lex_state = 6},
932 [57] = {.lex_state = 0, .external_lex_state = 6},
933 [58] = {.lex_state = 5, .external_lex_state = 2},
934 [59] = {.lex_state = 0, .external_lex_state = 6},
935 [60] = {.lex_state = 0, .external_lex_state = 6},
936 [61] = {.lex_state = 0, .external_lex_state = 6},
937 [62] = {.lex_state = 0, .external_lex_state = 7},
938 [63] = {.lex_state = 0, .external_lex_state = 2},
939 [64] = {.lex_state = 2, .external_lex_state = 2},
940 [65] = {.lex_state = 0, .external_lex_state = 2},
941 [66] = {.lex_state = 0, .external_lex_state = 7},
942 [67] = {.lex_state = 4, .external_lex_state = 2},
943 [68] = {.lex_state = 0, .external_lex_state = 2},
944 [69] = {.lex_state = 5, .external_lex_state = 2},
945 [70] = {.lex_state = 5, .external_lex_state = 2},
946 [71] = {.lex_state = 2, .external_lex_state = 2},
947 [72] = {.lex_state = 0, .external_lex_state = 2},
948 [73] = {.lex_state = 0, .external_lex_state = 6},
949 [74] = {.lex_state = 4, .external_lex_state = 2},
950 [75] = {.lex_state = 0, .external_lex_state = 2},
951 [76] = {.lex_state = 0, .external_lex_state = 2},
952 [77] = {.lex_state = 0, .external_lex_state = 2},
953 [78] = {.lex_state = 0, .external_lex_state = 2},
954 [79] = {.lex_state = 15, .external_lex_state = 2},
955 [80] = {.lex_state = 0, .external_lex_state = 2},
956 [81] = {.lex_state = 0, .external_lex_state = 8},
957 [82] = {.lex_state = 0, .external_lex_state = 2},
958 [83] = {.lex_state = 0, .external_lex_state = 2},
959 [84] = {.lex_state = 0, .external_lex_state = 2},
960 [85] = {.lex_state = 0, .external_lex_state = 9},
961 [86] = {.lex_state = 0, .external_lex_state = 2},
962 [87] = {.lex_state = 0, .external_lex_state = 2},
963 [88] = {.lex_state = 0, .external_lex_state = 2},
964 [89] = {.lex_state = 0, .external_lex_state = 8},
965 [90] = {.lex_state = 15, .external_lex_state = 2},
966 [91] = {.lex_state = 0, .external_lex_state = 2},
967 [92] = {.lex_state = 0, .external_lex_state = 9},
968 [93] = {.lex_state = 0, .external_lex_state = 2},
969};
970
971static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
972 [0] = {
973 [ts_builtin_sym_end] = ACTIONS(1),
974 [anon_sym_LT_BANG] = ACTIONS(1),
975 [anon_sym_GT] = ACTIONS(1),
976 [sym__doctype] = ACTIONS(1),
977 [anon_sym_LT] = ACTIONS(1),
978 [anon_sym_SLASH_GT] = ACTIONS(1),
979 [anon_sym_LT_SLASH] = ACTIONS(1),
980 [anon_sym_EQ] = ACTIONS(1),
981 [sym_entity] = ACTIONS(1),
982 [anon_sym_SQUOTE] = ACTIONS(1),
983 [anon_sym_DQUOTE] = ACTIONS(1),
984 [sym__start_tag_name] = ACTIONS(1),
985 [sym__script_start_tag_name] = ACTIONS(1),
986 [sym__style_start_tag_name] = ACTIONS(1),
987 [sym__end_tag_name] = ACTIONS(1),
988 [sym_erroneous_end_tag_name] = ACTIONS(1),
989 [sym__implicit_end_tag] = ACTIONS(1),
990 [sym_raw_text] = ACTIONS(1),
991 [sym_comment] = ACTIONS(3),
992 },
993 [1] = {
994 [sym_document] = STATE(77),
995 [sym_doctype] = STATE(8),
996 [sym__node] = STATE(8),
997 [sym_element] = STATE(8),
998 [sym_script_element] = STATE(8),
999 [sym_style_element] = STATE(8),
1000 [sym_start_tag] = STATE(4),
1001 [sym_script_start_tag] = STATE(54),
1002 [sym_style_start_tag] = STATE(57),
1003 [sym_self_closing_tag] = STATE(11),
1004 [sym_erroneous_end_tag] = STATE(8),
1005 [aux_sym_document_repeat1] = STATE(8),
1006 [ts_builtin_sym_end] = ACTIONS(5),
1007 [anon_sym_LT_BANG] = ACTIONS(7),
1008 [anon_sym_LT] = ACTIONS(9),
1009 [anon_sym_LT_SLASH] = ACTIONS(11),
1010 [sym_entity] = ACTIONS(13),
1011 [sym_text] = ACTIONS(13),
1012 [sym_comment] = ACTIONS(3),
1013 },
1014};
1015
1016static const uint16_t ts_small_parse_table[] = {
1017 [0] = 12,
1018 ACTIONS(3), 1,
1019 sym_comment,
1020 ACTIONS(15), 1,
1021 anon_sym_LT_BANG,
1022 ACTIONS(17), 1,
1023 anon_sym_LT,
1024 ACTIONS(19), 1,
1025 anon_sym_LT_SLASH,
1026 ACTIONS(23), 1,
1027 sym__implicit_end_tag,
1028 STATE(5), 1,
1029 sym_start_tag,
1030 STATE(9), 1,
1031 sym_end_tag,
1032 STATE(13), 1,
1033 sym_self_closing_tag,
1034 STATE(55), 1,
1035 sym_style_start_tag,
1036 STATE(56), 1,
1037 sym_script_start_tag,
1038 ACTIONS(21), 2,
1039 sym_entity,
1040 sym_text,
1041 STATE(6), 7,
1042 sym_doctype,
1043 sym__node,
1044 sym_element,
1045 sym_script_element,
1046 sym_style_element,
1047 sym_erroneous_end_tag,
1048 aux_sym_document_repeat1,
1049 [44] = 12,
1050 ACTIONS(3), 1,
1051 sym_comment,
1052 ACTIONS(15), 1,
1053 anon_sym_LT_BANG,
1054 ACTIONS(17), 1,
1055 anon_sym_LT,
1056 ACTIONS(25), 1,
1057 anon_sym_LT_SLASH,
1058 ACTIONS(27), 1,
1059 sym__implicit_end_tag,
1060 STATE(5), 1,
1061 sym_start_tag,
1062 STATE(13), 1,
1063 sym_self_closing_tag,
1064 STATE(22), 1,
1065 sym_end_tag,
1066 STATE(55), 1,
1067 sym_style_start_tag,
1068 STATE(56), 1,
1069 sym_script_start_tag,
1070 ACTIONS(21), 2,
1071 sym_entity,
1072 sym_text,
1073 STATE(6), 7,
1074 sym_doctype,
1075 sym__node,
1076 sym_element,
1077 sym_script_element,
1078 sym_style_element,
1079 sym_erroneous_end_tag,
1080 aux_sym_document_repeat1,
1081 [88] = 12,
1082 ACTIONS(3), 1,
1083 sym_comment,
1084 ACTIONS(15), 1,
1085 anon_sym_LT_BANG,
1086 ACTIONS(17), 1,
1087 anon_sym_LT,
1088 ACTIONS(19), 1,
1089 anon_sym_LT_SLASH,
1090 ACTIONS(31), 1,
1091 sym__implicit_end_tag,
1092 STATE(5), 1,
1093 sym_start_tag,
1094 STATE(13), 1,
1095 sym_self_closing_tag,
1096 STATE(17), 1,
1097 sym_end_tag,
1098 STATE(55), 1,
1099 sym_style_start_tag,
1100 STATE(56), 1,
1101 sym_script_start_tag,
1102 ACTIONS(29), 2,
1103 sym_entity,
1104 sym_text,
1105 STATE(2), 7,
1106 sym_doctype,
1107 sym__node,
1108 sym_element,
1109 sym_script_element,
1110 sym_style_element,
1111 sym_erroneous_end_tag,
1112 aux_sym_document_repeat1,
1113 [132] = 12,
1114 ACTIONS(3), 1,
1115 sym_comment,
1116 ACTIONS(15), 1,
1117 anon_sym_LT_BANG,
1118 ACTIONS(17), 1,
1119 anon_sym_LT,
1120 ACTIONS(25), 1,
1121 anon_sym_LT_SLASH,
1122 ACTIONS(35), 1,
1123 sym__implicit_end_tag,
1124 STATE(5), 1,
1125 sym_start_tag,
1126 STATE(12), 1,
1127 sym_end_tag,
1128 STATE(13), 1,
1129 sym_self_closing_tag,
1130 STATE(55), 1,
1131 sym_style_start_tag,
1132 STATE(56), 1,
1133 sym_script_start_tag,
1134 ACTIONS(33), 2,
1135 sym_entity,
1136 sym_text,
1137 STATE(3), 7,
1138 sym_doctype,
1139 sym__node,
1140 sym_element,
1141 sym_script_element,
1142 sym_style_element,
1143 sym_erroneous_end_tag,
1144 aux_sym_document_repeat1,
1145 [176] = 11,
1146 ACTIONS(3), 1,
1147 sym_comment,
1148 ACTIONS(37), 1,
1149 anon_sym_LT_BANG,
1150 ACTIONS(40), 1,
1151 anon_sym_LT,
1152 ACTIONS(43), 1,
1153 anon_sym_LT_SLASH,
1154 ACTIONS(49), 1,
1155 sym__implicit_end_tag,
1156 STATE(5), 1,
1157 sym_start_tag,
1158 STATE(13), 1,
1159 sym_self_closing_tag,
1160 STATE(55), 1,
1161 sym_style_start_tag,
1162 STATE(56), 1,
1163 sym_script_start_tag,
1164 ACTIONS(46), 2,
1165 sym_entity,
1166 sym_text,
1167 STATE(6), 7,
1168 sym_doctype,
1169 sym__node,
1170 sym_element,
1171 sym_script_element,
1172 sym_style_element,
1173 sym_erroneous_end_tag,
1174 aux_sym_document_repeat1,
1175 [217] = 11,
1176 ACTIONS(3), 1,
1177 sym_comment,
1178 ACTIONS(49), 1,
1179 ts_builtin_sym_end,
1180 ACTIONS(51), 1,
1181 anon_sym_LT_BANG,
1182 ACTIONS(54), 1,
1183 anon_sym_LT,
1184 ACTIONS(57), 1,
1185 anon_sym_LT_SLASH,
1186 STATE(4), 1,
1187 sym_start_tag,
1188 STATE(11), 1,
1189 sym_self_closing_tag,
1190 STATE(54), 1,
1191 sym_script_start_tag,
1192 STATE(57), 1,
1193 sym_style_start_tag,
1194 ACTIONS(60), 2,
1195 sym_entity,
1196 sym_text,
1197 STATE(7), 7,
1198 sym_doctype,
1199 sym__node,
1200 sym_element,
1201 sym_script_element,
1202 sym_style_element,
1203 sym_erroneous_end_tag,
1204 aux_sym_document_repeat1,
1205 [258] = 11,
1206 ACTIONS(3), 1,
1207 sym_comment,
1208 ACTIONS(7), 1,
1209 anon_sym_LT_BANG,
1210 ACTIONS(9), 1,
1211 anon_sym_LT,
1212 ACTIONS(11), 1,
1213 anon_sym_LT_SLASH,
1214 ACTIONS(63), 1,
1215 ts_builtin_sym_end,
1216 STATE(4), 1,
1217 sym_start_tag,
1218 STATE(11), 1,
1219 sym_self_closing_tag,
1220 STATE(54), 1,
1221 sym_script_start_tag,
1222 STATE(57), 1,
1223 sym_style_start_tag,
1224 ACTIONS(65), 2,
1225 sym_entity,
1226 sym_text,
1227 STATE(7), 7,
1228 sym_doctype,
1229 sym__node,
1230 sym_element,
1231 sym_script_element,
1232 sym_style_element,
1233 sym_erroneous_end_tag,
1234 aux_sym_document_repeat1,
1235 [299] = 3,
1236 ACTIONS(3), 1,
1237 sym_comment,
1238 ACTIONS(69), 1,
1239 anon_sym_LT,
1240 ACTIONS(67), 5,
1241 ts_builtin_sym_end,
1242 anon_sym_LT_BANG,
1243 anon_sym_LT_SLASH,
1244 sym_entity,
1245 sym_text,
1246 [313] = 3,
1247 ACTIONS(3), 1,
1248 sym_comment,
1249 ACTIONS(73), 1,
1250 anon_sym_LT,
1251 ACTIONS(71), 5,
1252 ts_builtin_sym_end,
1253 anon_sym_LT_BANG,
1254 anon_sym_LT_SLASH,
1255 sym_entity,
1256 sym_text,
1257 [327] = 3,
1258 ACTIONS(3), 1,
1259 sym_comment,
1260 ACTIONS(77), 1,
1261 anon_sym_LT,
1262 ACTIONS(75), 5,
1263 ts_builtin_sym_end,
1264 anon_sym_LT_BANG,
1265 anon_sym_LT_SLASH,
1266 sym_entity,
1267 sym_text,
1268 [341] = 3,
1269 ACTIONS(3), 1,
1270 sym_comment,
1271 ACTIONS(81), 1,
1272 anon_sym_LT,
1273 ACTIONS(79), 5,
1274 sym__implicit_end_tag,
1275 anon_sym_LT_BANG,
1276 anon_sym_LT_SLASH,
1277 sym_entity,
1278 sym_text,
1279 [355] = 3,
1280 ACTIONS(3), 1,
1281 sym_comment,
1282 ACTIONS(77), 1,
1283 anon_sym_LT,
1284 ACTIONS(75), 5,
1285 sym__implicit_end_tag,
1286 anon_sym_LT_BANG,
1287 anon_sym_LT_SLASH,
1288 sym_entity,
1289 sym_text,
1290 [369] = 3,
1291 ACTIONS(3), 1,
1292 sym_comment,
1293 ACTIONS(85), 1,
1294 anon_sym_LT,
1295 ACTIONS(83), 5,
1296 ts_builtin_sym_end,
1297 anon_sym_LT_BANG,
1298 anon_sym_LT_SLASH,
1299 sym_entity,
1300 sym_text,
1301 [383] = 3,
1302 ACTIONS(3), 1,
1303 sym_comment,
1304 ACTIONS(89), 1,
1305 anon_sym_LT,
1306 ACTIONS(87), 5,
1307 ts_builtin_sym_end,
1308 anon_sym_LT_BANG,
1309 anon_sym_LT_SLASH,
1310 sym_entity,
1311 sym_text,
1312 [397] = 3,
1313 ACTIONS(3), 1,
1314 sym_comment,
1315 ACTIONS(89), 1,
1316 anon_sym_LT,
1317 ACTIONS(87), 5,
1318 sym__implicit_end_tag,
1319 anon_sym_LT_BANG,
1320 anon_sym_LT_SLASH,
1321 sym_entity,
1322 sym_text,
1323 [411] = 3,
1324 ACTIONS(3), 1,
1325 sym_comment,
1326 ACTIONS(81), 1,
1327 anon_sym_LT,
1328 ACTIONS(79), 5,
1329 ts_builtin_sym_end,
1330 anon_sym_LT_BANG,
1331 anon_sym_LT_SLASH,
1332 sym_entity,
1333 sym_text,
1334 [425] = 3,
1335 ACTIONS(3), 1,
1336 sym_comment,
1337 ACTIONS(93), 1,
1338 anon_sym_LT,
1339 ACTIONS(91), 5,
1340 sym__implicit_end_tag,
1341 anon_sym_LT_BANG,
1342 anon_sym_LT_SLASH,
1343 sym_entity,
1344 sym_text,
1345 [439] = 3,
1346 ACTIONS(3), 1,
1347 sym_comment,
1348 ACTIONS(97), 1,
1349 anon_sym_LT,
1350 ACTIONS(95), 5,
1351 sym__implicit_end_tag,
1352 anon_sym_LT_BANG,
1353 anon_sym_LT_SLASH,
1354 sym_entity,
1355 sym_text,
1356 [453] = 3,
1357 ACTIONS(3), 1,
1358 sym_comment,
1359 ACTIONS(73), 1,
1360 anon_sym_LT,
1361 ACTIONS(71), 5,
1362 sym__implicit_end_tag,
1363 anon_sym_LT_BANG,
1364 anon_sym_LT_SLASH,
1365 sym_entity,
1366 sym_text,
1367 [467] = 3,
1368 ACTIONS(3), 1,
1369 sym_comment,
1370 ACTIONS(101), 1,
1371 anon_sym_LT,
1372 ACTIONS(99), 5,
1373 ts_builtin_sym_end,
1374 anon_sym_LT_BANG,
1375 anon_sym_LT_SLASH,
1376 sym_entity,
1377 sym_text,
1378 [481] = 3,
1379 ACTIONS(3), 1,
1380 sym_comment,
1381 ACTIONS(69), 1,
1382 anon_sym_LT,
1383 ACTIONS(67), 5,
1384 sym__implicit_end_tag,
1385 anon_sym_LT_BANG,
1386 anon_sym_LT_SLASH,
1387 sym_entity,
1388 sym_text,
1389 [495] = 3,
1390 ACTIONS(3), 1,
1391 sym_comment,
1392 ACTIONS(105), 1,
1393 anon_sym_LT,
1394 ACTIONS(103), 5,
1395 ts_builtin_sym_end,
1396 anon_sym_LT_BANG,
1397 anon_sym_LT_SLASH,
1398 sym_entity,
1399 sym_text,
1400 [509] = 3,
1401 ACTIONS(3), 1,
1402 sym_comment,
1403 ACTIONS(109), 1,
1404 anon_sym_LT,
1405 ACTIONS(107), 5,
1406 sym__implicit_end_tag,
1407 anon_sym_LT_BANG,
1408 anon_sym_LT_SLASH,
1409 sym_entity,
1410 sym_text,
1411 [523] = 3,
1412 ACTIONS(3), 1,
1413 sym_comment,
1414 ACTIONS(113), 1,
1415 anon_sym_LT,
1416 ACTIONS(111), 5,
1417 sym__implicit_end_tag,
1418 anon_sym_LT_BANG,
1419 anon_sym_LT_SLASH,
1420 sym_entity,
1421 sym_text,
1422 [537] = 3,
1423 ACTIONS(3), 1,
1424 sym_comment,
1425 ACTIONS(117), 1,
1426 anon_sym_LT,
1427 ACTIONS(115), 5,
1428 sym__implicit_end_tag,
1429 anon_sym_LT_BANG,
1430 anon_sym_LT_SLASH,
1431 sym_entity,
1432 sym_text,
1433 [551] = 3,
1434 ACTIONS(3), 1,
1435 sym_comment,
1436 ACTIONS(121), 1,
1437 anon_sym_LT,
1438 ACTIONS(119), 5,
1439 ts_builtin_sym_end,
1440 anon_sym_LT_BANG,
1441 anon_sym_LT_SLASH,
1442 sym_entity,
1443 sym_text,
1444 [565] = 3,
1445 ACTIONS(3), 1,
1446 sym_comment,
1447 ACTIONS(93), 1,
1448 anon_sym_LT,
1449 ACTIONS(91), 5,
1450 ts_builtin_sym_end,
1451 anon_sym_LT_BANG,
1452 anon_sym_LT_SLASH,
1453 sym_entity,
1454 sym_text,
1455 [579] = 3,
1456 ACTIONS(3), 1,
1457 sym_comment,
1458 ACTIONS(97), 1,
1459 anon_sym_LT,
1460 ACTIONS(95), 5,
1461 ts_builtin_sym_end,
1462 anon_sym_LT_BANG,
1463 anon_sym_LT_SLASH,
1464 sym_entity,
1465 sym_text,
1466 [593] = 3,
1467 ACTIONS(3), 1,
1468 sym_comment,
1469 ACTIONS(121), 1,
1470 anon_sym_LT,
1471 ACTIONS(119), 5,
1472 sym__implicit_end_tag,
1473 anon_sym_LT_BANG,
1474 anon_sym_LT_SLASH,
1475 sym_entity,
1476 sym_text,
1477 [607] = 3,
1478 ACTIONS(3), 1,
1479 sym_comment,
1480 ACTIONS(85), 1,
1481 anon_sym_LT,
1482 ACTIONS(83), 5,
1483 sym__implicit_end_tag,
1484 anon_sym_LT_BANG,
1485 anon_sym_LT_SLASH,
1486 sym_entity,
1487 sym_text,
1488 [621] = 3,
1489 ACTIONS(3), 1,
1490 sym_comment,
1491 ACTIONS(101), 1,
1492 anon_sym_LT,
1493 ACTIONS(99), 5,
1494 sym__implicit_end_tag,
1495 anon_sym_LT_BANG,
1496 anon_sym_LT_SLASH,
1497 sym_entity,
1498 sym_text,
1499 [635] = 3,
1500 ACTIONS(3), 1,
1501 sym_comment,
1502 ACTIONS(105), 1,
1503 anon_sym_LT,
1504 ACTIONS(103), 5,
1505 sym__implicit_end_tag,
1506 anon_sym_LT_BANG,
1507 anon_sym_LT_SLASH,
1508 sym_entity,
1509 sym_text,
1510 [649] = 3,
1511 ACTIONS(3), 1,
1512 sym_comment,
1513 ACTIONS(113), 1,
1514 anon_sym_LT,
1515 ACTIONS(111), 5,
1516 ts_builtin_sym_end,
1517 anon_sym_LT_BANG,
1518 anon_sym_LT_SLASH,
1519 sym_entity,
1520 sym_text,
1521 [663] = 5,
1522 ACTIONS(3), 1,
1523 sym_comment,
1524 ACTIONS(123), 1,
1525 anon_sym_GT,
1526 ACTIONS(125), 1,
1527 anon_sym_SLASH_GT,
1528 ACTIONS(127), 1,
1529 sym_attribute_name,
1530 STATE(38), 2,
1531 sym_attribute,
1532 aux_sym_start_tag_repeat1,
1533 [680] = 5,
1534 ACTIONS(3), 1,
1535 sym_comment,
1536 ACTIONS(127), 1,
1537 sym_attribute_name,
1538 ACTIONS(129), 1,
1539 anon_sym_GT,
1540 ACTIONS(131), 1,
1541 anon_sym_SLASH_GT,
1542 STATE(37), 2,
1543 sym_attribute,
1544 aux_sym_start_tag_repeat1,
1545 [697] = 4,
1546 ACTIONS(3), 1,
1547 sym_comment,
1548 ACTIONS(135), 1,
1549 sym_attribute_name,
1550 ACTIONS(133), 2,
1551 anon_sym_GT,
1552 anon_sym_SLASH_GT,
1553 STATE(37), 2,
1554 sym_attribute,
1555 aux_sym_start_tag_repeat1,
1556 [712] = 5,
1557 ACTIONS(3), 1,
1558 sym_comment,
1559 ACTIONS(127), 1,
1560 sym_attribute_name,
1561 ACTIONS(129), 1,
1562 anon_sym_GT,
1563 ACTIONS(138), 1,
1564 anon_sym_SLASH_GT,
1565 STATE(37), 2,
1566 sym_attribute,
1567 aux_sym_start_tag_repeat1,
1568 [729] = 5,
1569 ACTIONS(3), 1,
1570 sym_comment,
1571 ACTIONS(123), 1,
1572 anon_sym_GT,
1573 ACTIONS(127), 1,
1574 sym_attribute_name,
1575 ACTIONS(140), 1,
1576 anon_sym_SLASH_GT,
1577 STATE(36), 2,
1578 sym_attribute,
1579 aux_sym_start_tag_repeat1,
1580 [746] = 4,
1581 ACTIONS(3), 1,
1582 sym_comment,
1583 ACTIONS(142), 1,
1584 anon_sym_GT,
1585 ACTIONS(144), 1,
1586 sym_attribute_name,
1587 STATE(47), 2,
1588 sym_attribute,
1589 aux_sym_start_tag_repeat1,
1590 [760] = 4,
1591 ACTIONS(3), 1,
1592 sym_comment,
1593 ACTIONS(144), 1,
1594 sym_attribute_name,
1595 ACTIONS(146), 1,
1596 anon_sym_GT,
1597 STATE(47), 2,
1598 sym_attribute,
1599 aux_sym_start_tag_repeat1,
1600 [774] = 3,
1601 ACTIONS(3), 1,
1602 sym_comment,
1603 ACTIONS(150), 1,
1604 anon_sym_EQ,
1605 ACTIONS(148), 3,
1606 anon_sym_GT,
1607 anon_sym_SLASH_GT,
1608 sym_attribute_name,
1609 [786] = 5,
1610 ACTIONS(3), 1,
1611 sym_comment,
1612 ACTIONS(152), 1,
1613 sym_attribute_value,
1614 ACTIONS(154), 1,
1615 anon_sym_SQUOTE,
1616 ACTIONS(156), 1,
1617 anon_sym_DQUOTE,
1618 STATE(48), 1,
1619 sym_quoted_attribute_value,
1620 [802] = 5,
1621 ACTIONS(3), 1,
1622 sym_comment,
1623 ACTIONS(158), 1,
1624 sym_attribute_value,
1625 ACTIONS(160), 1,
1626 anon_sym_SQUOTE,
1627 ACTIONS(162), 1,
1628 anon_sym_DQUOTE,
1629 STATE(69), 1,
1630 sym_quoted_attribute_value,
1631 [818] = 4,
1632 ACTIONS(3), 1,
1633 sym_comment,
1634 ACTIONS(144), 1,
1635 sym_attribute_name,
1636 ACTIONS(164), 1,
1637 anon_sym_GT,
1638 STATE(40), 2,
1639 sym_attribute,
1640 aux_sym_start_tag_repeat1,
1641 [832] = 4,
1642 ACTIONS(3), 1,
1643 sym_comment,
1644 ACTIONS(144), 1,
1645 sym_attribute_name,
1646 ACTIONS(166), 1,
1647 anon_sym_GT,
1648 STATE(41), 2,
1649 sym_attribute,
1650 aux_sym_start_tag_repeat1,
1651 [846] = 4,
1652 ACTIONS(3), 1,
1653 sym_comment,
1654 ACTIONS(133), 1,
1655 anon_sym_GT,
1656 ACTIONS(168), 1,
1657 sym_attribute_name,
1658 STATE(47), 2,
1659 sym_attribute,
1660 aux_sym_start_tag_repeat1,
1661 [860] = 2,
1662 ACTIONS(3), 1,
1663 sym_comment,
1664 ACTIONS(171), 3,
1665 anon_sym_GT,
1666 anon_sym_SLASH_GT,
1667 sym_attribute_name,
1668 [869] = 3,
1669 ACTIONS(3), 1,
1670 sym_comment,
1671 ACTIONS(173), 1,
1672 anon_sym_EQ,
1673 ACTIONS(148), 2,
1674 anon_sym_GT,
1675 sym_attribute_name,
1676 [880] = 2,
1677 ACTIONS(3), 1,
1678 sym_comment,
1679 ACTIONS(175), 3,
1680 anon_sym_GT,
1681 anon_sym_SLASH_GT,
1682 sym_attribute_name,
1683 [889] = 4,
1684 ACTIONS(3), 1,
1685 sym_comment,
1686 ACTIONS(177), 1,
1687 sym__start_tag_name,
1688 ACTIONS(179), 1,
1689 sym__script_start_tag_name,
1690 ACTIONS(181), 1,
1691 sym__style_start_tag_name,
1692 [902] = 4,
1693 ACTIONS(3), 1,
1694 sym_comment,
1695 ACTIONS(179), 1,
1696 sym__script_start_tag_name,
1697 ACTIONS(181), 1,
1698 sym__style_start_tag_name,
1699 ACTIONS(183), 1,
1700 sym__start_tag_name,
1701 [915] = 2,
1702 ACTIONS(3), 1,
1703 sym_comment,
1704 ACTIONS(185), 3,
1705 anon_sym_GT,
1706 anon_sym_SLASH_GT,
1707 sym_attribute_name,
1708 [924] = 4,
1709 ACTIONS(3), 1,
1710 sym_comment,
1711 ACTIONS(187), 1,
1712 anon_sym_LT_SLASH,
1713 ACTIONS(189), 1,
1714 sym_raw_text,
1715 STATE(21), 1,
1716 sym_end_tag,
1717 [937] = 4,
1718 ACTIONS(3), 1,
1719 sym_comment,
1720 ACTIONS(191), 1,
1721 anon_sym_LT_SLASH,
1722 ACTIONS(193), 1,
1723 sym_raw_text,
1724 STATE(33), 1,
1725 sym_end_tag,
1726 [950] = 4,
1727 ACTIONS(3), 1,
1728 sym_comment,
1729 ACTIONS(191), 1,
1730 anon_sym_LT_SLASH,
1731 ACTIONS(195), 1,
1732 sym_raw_text,
1733 STATE(32), 1,
1734 sym_end_tag,
1735 [963] = 4,
1736 ACTIONS(3), 1,
1737 sym_comment,
1738 ACTIONS(187), 1,
1739 anon_sym_LT_SLASH,
1740 ACTIONS(197), 1,
1741 sym_raw_text,
1742 STATE(23), 1,
1743 sym_end_tag,
1744 [976] = 2,
1745 ACTIONS(3), 1,
1746 sym_comment,
1747 ACTIONS(185), 2,
1748 anon_sym_GT,
1749 sym_attribute_name,
1750 [984] = 2,
1751 ACTIONS(3), 1,
1752 sym_comment,
1753 ACTIONS(199), 2,
1754 sym_raw_text,
1755 anon_sym_LT_SLASH,
1756 [992] = 2,
1757 ACTIONS(3), 1,
1758 sym_comment,
1759 ACTIONS(201), 2,
1760 sym_raw_text,
1761 anon_sym_LT_SLASH,
1762 [1000] = 2,
1763 ACTIONS(3), 1,
1764 sym_comment,
1765 ACTIONS(203), 2,
1766 sym_raw_text,
1767 anon_sym_LT_SLASH,
1768 [1008] = 3,
1769 ACTIONS(3), 1,
1770 sym_comment,
1771 ACTIONS(205), 1,
1772 sym__end_tag_name,
1773 ACTIONS(207), 1,
1774 sym_erroneous_end_tag_name,
1775 [1018] = 3,
1776 ACTIONS(3), 1,
1777 sym_comment,
1778 ACTIONS(187), 1,
1779 anon_sym_LT_SLASH,
1780 STATE(29), 1,
1781 sym_end_tag,
1782 [1028] = 3,
1783 ACTIONS(3), 1,
1784 sym_comment,
1785 ACTIONS(209), 1,
1786 anon_sym_DQUOTE,
1787 ACTIONS(211), 1,
1788 aux_sym_quoted_attribute_value_token2,
1789 [1038] = 3,
1790 ACTIONS(3), 1,
1791 sym_comment,
1792 ACTIONS(187), 1,
1793 anon_sym_LT_SLASH,
1794 STATE(10), 1,
1795 sym_end_tag,
1796 [1048] = 3,
1797 ACTIONS(3), 1,
1798 sym_comment,
1799 ACTIONS(207), 1,
1800 sym_erroneous_end_tag_name,
1801 ACTIONS(213), 1,
1802 sym__end_tag_name,
1803 [1058] = 3,
1804 ACTIONS(3), 1,
1805 sym_comment,
1806 ACTIONS(209), 1,
1807 anon_sym_SQUOTE,
1808 ACTIONS(215), 1,
1809 aux_sym_quoted_attribute_value_token1,
1810 [1068] = 3,
1811 ACTIONS(3), 1,
1812 sym_comment,
1813 ACTIONS(191), 1,
1814 anon_sym_LT_SLASH,
1815 STATE(19), 1,
1816 sym_end_tag,
1817 [1078] = 2,
1818 ACTIONS(3), 1,
1819 sym_comment,
1820 ACTIONS(171), 2,
1821 anon_sym_GT,
1822 sym_attribute_name,
1823 [1086] = 2,
1824 ACTIONS(3), 1,
1825 sym_comment,
1826 ACTIONS(175), 2,
1827 anon_sym_GT,
1828 sym_attribute_name,
1829 [1094] = 3,
1830 ACTIONS(3), 1,
1831 sym_comment,
1832 ACTIONS(217), 1,
1833 anon_sym_DQUOTE,
1834 ACTIONS(219), 1,
1835 aux_sym_quoted_attribute_value_token2,
1836 [1104] = 3,
1837 ACTIONS(3), 1,
1838 sym_comment,
1839 ACTIONS(191), 1,
1840 anon_sym_LT_SLASH,
1841 STATE(20), 1,
1842 sym_end_tag,
1843 [1114] = 2,
1844 ACTIONS(3), 1,
1845 sym_comment,
1846 ACTIONS(221), 2,
1847 sym_raw_text,
1848 anon_sym_LT_SLASH,
1849 [1122] = 3,
1850 ACTIONS(3), 1,
1851 sym_comment,
1852 ACTIONS(217), 1,
1853 anon_sym_SQUOTE,
1854 ACTIONS(223), 1,
1855 aux_sym_quoted_attribute_value_token1,
1856 [1132] = 2,
1857 ACTIONS(3), 1,
1858 sym_comment,
1859 ACTIONS(225), 1,
1860 sym__doctype,
1861 [1139] = 2,
1862 ACTIONS(3), 1,
1863 sym_comment,
1864 ACTIONS(227), 1,
1865 anon_sym_GT,
1866 [1146] = 2,
1867 ACTIONS(3), 1,
1868 sym_comment,
1869 ACTIONS(229), 1,
1870 ts_builtin_sym_end,
1871 [1153] = 2,
1872 ACTIONS(3), 1,
1873 sym_comment,
1874 ACTIONS(231), 1,
1875 anon_sym_SQUOTE,
1876 [1160] = 2,
1877 ACTIONS(3), 1,
1878 sym_comment,
1879 ACTIONS(233), 1,
1880 aux_sym_doctype_token1,
1881 [1167] = 2,
1882 ACTIONS(3), 1,
1883 sym_comment,
1884 ACTIONS(235), 1,
1885 anon_sym_GT,
1886 [1174] = 2,
1887 ACTIONS(3), 1,
1888 sym_comment,
1889 ACTIONS(237), 1,
1890 sym_erroneous_end_tag_name,
1891 [1181] = 2,
1892 ACTIONS(3), 1,
1893 sym_comment,
1894 ACTIONS(239), 1,
1895 anon_sym_GT,
1896 [1188] = 2,
1897 ACTIONS(3), 1,
1898 sym_comment,
1899 ACTIONS(241), 1,
1900 anon_sym_GT,
1901 [1195] = 2,
1902 ACTIONS(3), 1,
1903 sym_comment,
1904 ACTIONS(243), 1,
1905 anon_sym_GT,
1906 [1202] = 2,
1907 ACTIONS(3), 1,
1908 sym_comment,
1909 ACTIONS(213), 1,
1910 sym__end_tag_name,
1911 [1209] = 2,
1912 ACTIONS(3), 1,
1913 sym_comment,
1914 ACTIONS(245), 1,
1915 anon_sym_SQUOTE,
1916 [1216] = 2,
1917 ACTIONS(3), 1,
1918 sym_comment,
1919 ACTIONS(245), 1,
1920 anon_sym_DQUOTE,
1921 [1223] = 2,
1922 ACTIONS(3), 1,
1923 sym_comment,
1924 ACTIONS(231), 1,
1925 anon_sym_DQUOTE,
1926 [1230] = 2,
1927 ACTIONS(3), 1,
1928 sym_comment,
1929 ACTIONS(207), 1,
1930 sym_erroneous_end_tag_name,
1931 [1237] = 2,
1932 ACTIONS(3), 1,
1933 sym_comment,
1934 ACTIONS(247), 1,
1935 aux_sym_doctype_token1,
1936 [1244] = 2,
1937 ACTIONS(3), 1,
1938 sym_comment,
1939 ACTIONS(249), 1,
1940 anon_sym_GT,
1941 [1251] = 2,
1942 ACTIONS(3), 1,
1943 sym_comment,
1944 ACTIONS(205), 1,
1945 sym__end_tag_name,
1946 [1258] = 2,
1947 ACTIONS(3), 1,
1948 sym_comment,
1949 ACTIONS(251), 1,
1950 sym__doctype,
1951};
1952
1953static const uint32_t ts_small_parse_table_map[] = {
1954 [SMALL_STATE(2)] = 0,
1955 [SMALL_STATE(3)] = 44,
1956 [SMALL_STATE(4)] = 88,
1957 [SMALL_STATE(5)] = 132,
1958 [SMALL_STATE(6)] = 176,
1959 [SMALL_STATE(7)] = 217,
1960 [SMALL_STATE(8)] = 258,
1961 [SMALL_STATE(9)] = 299,
1962 [SMALL_STATE(10)] = 313,
1963 [SMALL_STATE(11)] = 327,
1964 [SMALL_STATE(12)] = 341,
1965 [SMALL_STATE(13)] = 355,
1966 [SMALL_STATE(14)] = 369,
1967 [SMALL_STATE(15)] = 383,
1968 [SMALL_STATE(16)] = 397,
1969 [SMALL_STATE(17)] = 411,
1970 [SMALL_STATE(18)] = 425,
1971 [SMALL_STATE(19)] = 439,
1972 [SMALL_STATE(20)] = 453,
1973 [SMALL_STATE(21)] = 467,
1974 [SMALL_STATE(22)] = 481,
1975 [SMALL_STATE(23)] = 495,
1976 [SMALL_STATE(24)] = 509,
1977 [SMALL_STATE(25)] = 523,
1978 [SMALL_STATE(26)] = 537,
1979 [SMALL_STATE(27)] = 551,
1980 [SMALL_STATE(28)] = 565,
1981 [SMALL_STATE(29)] = 579,
1982 [SMALL_STATE(30)] = 593,
1983 [SMALL_STATE(31)] = 607,
1984 [SMALL_STATE(32)] = 621,
1985 [SMALL_STATE(33)] = 635,
1986 [SMALL_STATE(34)] = 649,
1987 [SMALL_STATE(35)] = 663,
1988 [SMALL_STATE(36)] = 680,
1989 [SMALL_STATE(37)] = 697,
1990 [SMALL_STATE(38)] = 712,
1991 [SMALL_STATE(39)] = 729,
1992 [SMALL_STATE(40)] = 746,
1993 [SMALL_STATE(41)] = 760,
1994 [SMALL_STATE(42)] = 774,
1995 [SMALL_STATE(43)] = 786,
1996 [SMALL_STATE(44)] = 802,
1997 [SMALL_STATE(45)] = 818,
1998 [SMALL_STATE(46)] = 832,
1999 [SMALL_STATE(47)] = 846,
2000 [SMALL_STATE(48)] = 860,
2001 [SMALL_STATE(49)] = 869,
2002 [SMALL_STATE(50)] = 880,
2003 [SMALL_STATE(51)] = 889,
2004 [SMALL_STATE(52)] = 902,
2005 [SMALL_STATE(53)] = 915,
2006 [SMALL_STATE(54)] = 924,
2007 [SMALL_STATE(55)] = 937,
2008 [SMALL_STATE(56)] = 950,
2009 [SMALL_STATE(57)] = 963,
2010 [SMALL_STATE(58)] = 976,
2011 [SMALL_STATE(59)] = 984,
2012 [SMALL_STATE(60)] = 992,
2013 [SMALL_STATE(61)] = 1000,
2014 [SMALL_STATE(62)] = 1008,
2015 [SMALL_STATE(63)] = 1018,
2016 [SMALL_STATE(64)] = 1028,
2017 [SMALL_STATE(65)] = 1038,
2018 [SMALL_STATE(66)] = 1048,
2019 [SMALL_STATE(67)] = 1058,
2020 [SMALL_STATE(68)] = 1068,
2021 [SMALL_STATE(69)] = 1078,
2022 [SMALL_STATE(70)] = 1086,
2023 [SMALL_STATE(71)] = 1094,
2024 [SMALL_STATE(72)] = 1104,
2025 [SMALL_STATE(73)] = 1114,
2026 [SMALL_STATE(74)] = 1122,
2027 [SMALL_STATE(75)] = 1132,
2028 [SMALL_STATE(76)] = 1139,
2029 [SMALL_STATE(77)] = 1146,
2030 [SMALL_STATE(78)] = 1153,
2031 [SMALL_STATE(79)] = 1160,
2032 [SMALL_STATE(80)] = 1167,
2033 [SMALL_STATE(81)] = 1174,
2034 [SMALL_STATE(82)] = 1181,
2035 [SMALL_STATE(83)] = 1188,
2036 [SMALL_STATE(84)] = 1195,
2037 [SMALL_STATE(85)] = 1202,
2038 [SMALL_STATE(86)] = 1209,
2039 [SMALL_STATE(87)] = 1216,
2040 [SMALL_STATE(88)] = 1223,
2041 [SMALL_STATE(89)] = 1230,
2042 [SMALL_STATE(90)] = 1237,
2043 [SMALL_STATE(91)] = 1244,
2044 [SMALL_STATE(92)] = 1251,
2045 [SMALL_STATE(93)] = 1258,
2046};
2047
2048static const TSParseActionEntry ts_parse_actions[] = {
2049 [0] = {.entry = {.count = 0, .reusable = false}},
2050 [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
2051 [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(),
2052 [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 0, 0, 0),
2053 [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75),
2054 [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52),
2055 [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81),
2056 [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
2057 [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93),
2058 [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51),
2059 [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66),
2060 [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),
2061 [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
2062 [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62),
2063 [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
2064 [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),
2065 [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
2066 [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
2067 [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),
2068 [37] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(93),
2069 [40] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(51),
2070 [43] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(89),
2071 [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(6),
2072 [49] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0),
2073 [51] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(75),
2074 [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(52),
2075 [57] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(81),
2076 [60] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(7),
2077 [63] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 1, 0, 0),
2078 [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
2079 [67] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 3, 0, 0),
2080 [69] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 3, 0, 0),
2081 [71] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 3, 0, 0),
2082 [73] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 3, 0, 0),
2083 [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 1, 0, 0),
2084 [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 1, 0, 0),
2085 [79] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 2, 0, 0),
2086 [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 2, 0, 0),
2087 [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_end_tag, 3, 0, 0),
2088 [85] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_end_tag, 3, 0, 0),
2089 [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 4, 0, 0),
2090 [89] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 4, 0, 0),
2091 [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_doctype, 4, 0, 0),
2092 [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_doctype, 4, 0, 0),
2093 [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 3, 0, 0),
2094 [97] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 3, 0, 0),
2095 [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 2, 0, 0),
2096 [101] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 2, 0, 0),
2097 [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 2, 0, 0),
2098 [105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 2, 0, 0),
2099 [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 4, 0, 0),
2100 [109] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 4, 0, 0),
2101 [111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_erroneous_end_tag, 3, 0, 0),
2102 [113] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_erroneous_end_tag, 3, 0, 0),
2103 [115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 3, 0, 0),
2104 [117] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 3, 0, 0),
2105 [119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 3, 0, 0),
2106 [121] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 3, 0, 0),
2107 [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26),
2108 [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30),
2109 [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42),
2110 [129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
2111 [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15),
2112 [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2, 0, 0),
2113 [135] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2, 0, 0), SHIFT_REPEAT(42),
2114 [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
2115 [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27),
2116 [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73),
2117 [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49),
2118 [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59),
2119 [148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1, 0, 0),
2120 [150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43),
2121 [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48),
2122 [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74),
2123 [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71),
2124 [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69),
2125 [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67),
2126 [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64),
2127 [164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60),
2128 [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61),
2129 [168] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2, 0, 0), SHIFT_REPEAT(49),
2130 [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, 0, 0),
2131 [173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44),
2132 [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 2, 0, 0),
2133 [177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35),
2134 [179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46),
2135 [181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45),
2136 [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39),
2137 [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 3, 0, 0),
2138 [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85),
2139 [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65),
2140 [191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92),
2141 [193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68),
2142 [195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72),
2143 [197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63),
2144 [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 4, 0, 0),
2145 [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 3, 0, 0),
2146 [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 3, 0, 0),
2147 [205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82),
2148 [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76),
2149 [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70),
2150 [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87),
2151 [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83),
2152 [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86),
2153 [217] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50),
2154 [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88),
2155 [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 4, 0, 0),
2156 [223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78),
2157 [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79),
2158 [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25),
2159 [229] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
2160 [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53),
2161 [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91),
2162 [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),
2163 [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84),
2164 [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31),
2165 [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14),
2166 [243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34),
2167 [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58),
2168 [247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80),
2169 [249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
2170 [251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90),
2171};
2172
2173enum ts_external_scanner_symbol_identifiers {
2174 ts_external_token__start_tag_name = 0,
2175 ts_external_token__script_start_tag_name = 1,
2176 ts_external_token__style_start_tag_name = 2,
2177 ts_external_token__end_tag_name = 3,
2178 ts_external_token_erroneous_end_tag_name = 4,
2179 ts_external_token_SLASH_GT = 5,
2180 ts_external_token__implicit_end_tag = 6,
2181 ts_external_token_raw_text = 7,
2182 ts_external_token_comment = 8,
2183};
2184
2185static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = {
2186 [ts_external_token__start_tag_name] = sym__start_tag_name,
2187 [ts_external_token__script_start_tag_name] = sym__script_start_tag_name,
2188 [ts_external_token__style_start_tag_name] = sym__style_start_tag_name,
2189 [ts_external_token__end_tag_name] = sym__end_tag_name,
2190 [ts_external_token_erroneous_end_tag_name] = sym_erroneous_end_tag_name,
2191 [ts_external_token_SLASH_GT] = anon_sym_SLASH_GT,
2192 [ts_external_token__implicit_end_tag] = sym__implicit_end_tag,
2193 [ts_external_token_raw_text] = sym_raw_text,
2194 [ts_external_token_comment] = sym_comment,
2195};
2196
2197static const bool ts_external_scanner_states[10][EXTERNAL_TOKEN_COUNT] = {
2198 [1] = {
2199 [ts_external_token__start_tag_name] = true,
2200 [ts_external_token__script_start_tag_name] = true,
2201 [ts_external_token__style_start_tag_name] = true,
2202 [ts_external_token__end_tag_name] = true,
2203 [ts_external_token_erroneous_end_tag_name] = true,
2204 [ts_external_token_SLASH_GT] = true,
2205 [ts_external_token__implicit_end_tag] = true,
2206 [ts_external_token_raw_text] = true,
2207 [ts_external_token_comment] = true,
2208 },
2209 [2] = {
2210 [ts_external_token_comment] = true,
2211 },
2212 [3] = {
2213 [ts_external_token__implicit_end_tag] = true,
2214 [ts_external_token_comment] = true,
2215 },
2216 [4] = {
2217 [ts_external_token_SLASH_GT] = true,
2218 [ts_external_token_comment] = true,
2219 },
2220 [5] = {
2221 [ts_external_token__start_tag_name] = true,
2222 [ts_external_token__script_start_tag_name] = true,
2223 [ts_external_token__style_start_tag_name] = true,
2224 [ts_external_token_comment] = true,
2225 },
2226 [6] = {
2227 [ts_external_token_raw_text] = true,
2228 [ts_external_token_comment] = true,
2229 },
2230 [7] = {
2231 [ts_external_token__end_tag_name] = true,
2232 [ts_external_token_erroneous_end_tag_name] = true,
2233 [ts_external_token_comment] = true,
2234 },
2235 [8] = {
2236 [ts_external_token_erroneous_end_tag_name] = true,
2237 [ts_external_token_comment] = true,
2238 },
2239 [9] = {
2240 [ts_external_token__end_tag_name] = true,
2241 [ts_external_token_comment] = true,
2242 },
2243};
2244
2245#ifdef __cplusplus
2246extern "C" {
2247#endif
2248void *tree_sitter_html_external_scanner_create(void);
2249void tree_sitter_html_external_scanner_destroy(void *);
2250bool tree_sitter_html_external_scanner_scan(void *, TSLexer *, const bool *);
2251unsigned tree_sitter_html_external_scanner_serialize(void *, char *);
2252void tree_sitter_html_external_scanner_deserialize(void *, const char *, unsigned);
2253
2254#ifdef TREE_SITTER_HIDE_SYMBOLS
2255#define TS_PUBLIC
2256#elif defined(_WIN32)
2257#define TS_PUBLIC __declspec(dllexport)
2258#else
2259#define TS_PUBLIC __attribute__((visibility("default")))
2260#endif
2261
2262TS_PUBLIC const TSLanguage *tree_sitter_html(void) {
2263 static const TSLanguage language = {
2264 .version = LANGUAGE_VERSION,
2265 .symbol_count = SYMBOL_COUNT,
2266 .alias_count = ALIAS_COUNT,
2267 .token_count = TOKEN_COUNT,
2268 .external_token_count = EXTERNAL_TOKEN_COUNT,
2269 .state_count = STATE_COUNT,
2270 .large_state_count = LARGE_STATE_COUNT,
2271 .production_id_count = PRODUCTION_ID_COUNT,
2272 .field_count = FIELD_COUNT,
2273 .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,
2274 .parse_table = &ts_parse_table[0][0],
2275 .small_parse_table = ts_small_parse_table,
2276 .small_parse_table_map = ts_small_parse_table_map,
2277 .parse_actions = ts_parse_actions,
2278 .symbol_names = ts_symbol_names,
2279 .symbol_metadata = ts_symbol_metadata,
2280 .public_symbol_map = ts_symbol_map,
2281 .alias_map = ts_non_terminal_alias_map,
2282 .alias_sequences = &ts_alias_sequences[0][0],
2283 .lex_modes = ts_lex_modes,
2284 .lex_fn = ts_lex,
2285 .external_scanner = {
2286 &ts_external_scanner_states[0][0],
2287 ts_external_scanner_symbol_map,
2288 tree_sitter_html_external_scanner_create,
2289 tree_sitter_html_external_scanner_destroy,
2290 tree_sitter_html_external_scanner_scan,
2291 tree_sitter_html_external_scanner_serialize,
2292 tree_sitter_html_external_scanner_deserialize,
2293 },
2294 .primary_state_ids = ts_primary_state_ids,
2295 };
2296 return &language;
2297}
2298#ifdef __cplusplus
2299}
2300#endif
diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.h b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.h
new file mode 100644
index 0000000..17f0e94
--- /dev/null
+++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/parser.h
@@ -0,0 +1,265 @@
1#ifndef TREE_SITTER_PARSER_H_
2#define TREE_SITTER_PARSER_H_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#include <stdbool.h>
9#include <stdint.h>
10#include <stdlib.h>
11
12#define ts_builtin_sym_error ((TSSymbol)-1)
13#define ts_builtin_sym_end 0
14#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024
15
16#ifndef TREE_SITTER_API_H_
17typedef uint16_t TSStateId;
18typedef uint16_t TSSymbol;
19typedef uint16_t TSFieldId;
20typedef struct TSLanguage TSLanguage;
21#endif
22
23typedef struct {
24 TSFieldId field_id;
25 uint8_t child_index;
26 bool inherited;
27} TSFieldMapEntry;
28
29typedef struct {
30 uint16_t index;
31 uint16_t length;
32} TSFieldMapSlice;
33
34typedef struct {
35 bool visible;
36 bool named;
37 bool supertype;
38} TSSymbolMetadata;
39
40typedef struct TSLexer TSLexer;
41
42struct TSLexer {
43 int32_t lookahead;
44 TSSymbol result_symbol;
45 void (*advance)(TSLexer *, bool);
46 void (*mark_end)(TSLexer *);
47 uint32_t (*get_column)(TSLexer *);
48 bool (*is_at_included_range_start)(const TSLexer *);
49 bool (*eof)(const TSLexer *);
50};
51
52typedef enum {
53 TSParseActionTypeShift,
54 TSParseActionTypeReduce,
55 TSParseActionTypeAccept,
56 TSParseActionTypeRecover,
57} TSParseActionType;
58
59typedef union {
60 struct {
61 uint8_t type;
62 TSStateId state;
63 bool extra;
64 bool repetition;
65 } shift;
66 struct {
67 uint8_t type;
68 uint8_t child_count;
69 TSSymbol symbol;
70 int16_t dynamic_precedence;
71 uint16_t production_id;
72 } reduce;
73 uint8_t type;
74} TSParseAction;
75
76typedef struct {
77 uint16_t lex_state;
78 uint16_t external_lex_state;
79} TSLexMode;
80
81typedef union {
82 TSParseAction action;
83 struct {
84 uint8_t count;
85 bool reusable;
86 } entry;
87} TSParseActionEntry;
88
89typedef struct {
90 int32_t start;
91 int32_t end;
92} TSCharacterRange;
93
94struct TSLanguage {
95 uint32_t version;
96 uint32_t symbol_count;
97 uint32_t alias_count;
98 uint32_t token_count;
99 uint32_t external_token_count;
100 uint32_t state_count;
101 uint32_t large_state_count;
102 uint32_t production_id_count;
103 uint32_t field_count;
104 uint16_t max_alias_sequence_length;
105 const uint16_t *parse_table;
106 const uint16_t *small_parse_table;
107 const uint32_t *small_parse_table_map;
108 const TSParseActionEntry *parse_actions;
109 const char * const *symbol_names;
110 const char * const *field_names;
111 const TSFieldMapSlice *field_map_slices;
112 const TSFieldMapEntry *field_map_entries;
113 const TSSymbolMetadata *symbol_metadata;
114 const TSSymbol *public_symbol_map;
115 const uint16_t *alias_map;
116 const TSSymbol *alias_sequences;
117 const TSLexMode *lex_modes;
118 bool (*lex_fn)(TSLexer *, TSStateId);
119 bool (*keyword_lex_fn)(TSLexer *, TSStateId);
120 TSSymbol keyword_capture_token;
121 struct {
122 const bool *states;
123 const TSSymbol *symbol_map;
124 void *(*create)(void);
125 void (*destroy)(void *);
126 bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist);
127 unsigned (*serialize)(void *, char *);
128 void (*deserialize)(void *, const char *, unsigned);
129 } external_scanner;
130 const TSStateId *primary_state_ids;
131};
132
133static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) {
134 uint32_t index = 0;
135 uint32_t size = len - index;
136 while (size > 1) {
137 uint32_t half_size = size / 2;
138 uint32_t mid_index = index + half_size;
139 TSCharacterRange *range = &ranges[mid_index];
140 if (lookahead >= range->start && lookahead <= range->end) {
141 return true;
142 } else if (lookahead > range->end) {
143 index = mid_index;
144 }
145 size -= half_size;
146 }
147 TSCharacterRange *range = &ranges[index];
148 return (lookahead >= range->start && lookahead <= range->end);
149}
150
151/*
152 * Lexer Macros
153 */
154
155#ifdef _MSC_VER
156#define UNUSED __pragma(warning(suppress : 4101))
157#else
158#define UNUSED __attribute__((unused))
159#endif
160
161#define START_LEXER() \
162 bool result = false; \
163 bool skip = false; \
164 UNUSED \
165 bool eof = false; \
166 int32_t lookahead; \
167 goto start; \
168 next_state: \
169 lexer->advance(lexer, skip); \
170 start: \
171 skip = false; \
172 lookahead = lexer->lookahead;
173
174#define ADVANCE(state_value) \
175 { \
176 state = state_value; \
177 goto next_state; \
178 }
179
180#define ADVANCE_MAP(...) \
181 { \
182 static const uint16_t map[] = { __VA_ARGS__ }; \
183 for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \
184 if (map[i] == lookahead) { \
185 state = map[i + 1]; \
186 goto next_state; \
187 } \
188 } \
189 }
190
191#define SKIP(state_value) \
192 { \
193 skip = true; \
194 state = state_value; \
195 goto next_state; \
196 }
197
198#define ACCEPT_TOKEN(symbol_value) \
199 result = true; \
200 lexer->result_symbol = symbol_value; \
201 lexer->mark_end(lexer);
202
203#define END_STATE() return result;
204
205/*
206 * Parse Table Macros
207 */
208
209#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT)
210
211#define STATE(id) id
212
213#define ACTIONS(id) id
214
215#define SHIFT(state_value) \
216 {{ \
217 .shift = { \
218 .type = TSParseActionTypeShift, \
219 .state = (state_value) \
220 } \
221 }}
222
223#define SHIFT_REPEAT(state_value) \
224 {{ \
225 .shift = { \
226 .type = TSParseActionTypeShift, \
227 .state = (state_value), \
228 .repetition = true \
229 } \
230 }}
231
232#define SHIFT_EXTRA() \
233 {{ \
234 .shift = { \
235 .type = TSParseActionTypeShift, \
236 .extra = true \
237 } \
238 }}
239
240#define REDUCE(symbol_name, children, precedence, prod_id) \
241 {{ \
242 .reduce = { \
243 .type = TSParseActionTypeReduce, \
244 .symbol = symbol_name, \
245 .child_count = children, \
246 .dynamic_precedence = precedence, \
247 .production_id = prod_id \
248 }, \
249 }}
250
251#define RECOVER() \
252 {{ \
253 .type = TSParseActionTypeRecover \
254 }}
255
256#define ACCEPT_INPUT() \
257 {{ \
258 .type = TSParseActionTypeAccept \
259 }}
260
261#ifdef __cplusplus
262}
263#endif
264
265#endif // TREE_SITTER_PARSER_H_
diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/html/scanner.c b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/scanner.c
new file mode 100644
index 0000000..d14ba9b
--- /dev/null
+++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/scanner.c
@@ -0,0 +1,362 @@
1#include "tag.h"
2#include "parser.h"
3
4#include <wctype.h>
5
6enum TokenType {
7 START_TAG_NAME,
8 SCRIPT_START_TAG_NAME,
9 STYLE_START_TAG_NAME,
10 END_TAG_NAME,
11 ERRONEOUS_END_TAG_NAME,
12 SELF_CLOSING_TAG_DELIMITER,
13 IMPLICIT_END_TAG,
14 RAW_TEXT,
15 COMMENT,
16};
17
18typedef struct {
19 Array(Tag) tags;
20} Scanner;
21
22#define MAX(a, b) ((a) > (b) ? (a) : (b))
23
24static inline void advance(TSLexer *lexer) { lexer->advance(lexer, false); }
25
26static inline void skip(TSLexer *lexer) { lexer->advance(lexer, true); }
27
28static unsigned serialize(Scanner *scanner, char *buffer) {
29 uint16_t tag_count = scanner->tags.size > UINT16_MAX ? UINT16_MAX : scanner->tags.size;
30 uint16_t serialized_tag_count = 0;
31
32 unsigned size = sizeof(tag_count);
33 memcpy(&buffer[size], &tag_count, sizeof(tag_count));
34 size += sizeof(tag_count);
35
36 for (; serialized_tag_count < tag_count; serialized_tag_count++) {
37 Tag tag = scanner->tags.contents[serialized_tag_count];
38 if (tag.type == CUSTOM) {
39 unsigned name_length = tag.custom_tag_name.size;
40 if (name_length > UINT8_MAX) {
41 name_length = UINT8_MAX;
42 }
43 if (size + 2 + name_length >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) {
44 break;
45 }
46 buffer[size++] = (char)tag.type;
47 buffer[size++] = (char)name_length;
48 strncpy(&buffer[size], tag.custom_tag_name.contents, name_length);
49 size += name_length;
50 } else {
51 if (size + 1 >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) {
52 break;
53 }
54 buffer[size++] = (char)tag.type;
55 }
56 }
57
58 memcpy(&buffer[0], &serialized_tag_count, sizeof(serialized_tag_count));
59 return size;
60}
61
62static void deserialize(Scanner *scanner, const char *buffer, unsigned length) {
63 for (unsigned i = 0; i < scanner->tags.size; i++) {
64 tag_free(&scanner->tags.contents[i]);
65 }
66 array_clear(&scanner->tags);
67
68 if (length > 0) {
69 unsigned size = 0;
70 uint16_t tag_count = 0;
71 uint16_t serialized_tag_count = 0;
72
73 memcpy(&serialized_tag_count, &buffer[size], sizeof(serialized_tag_count));
74 size += sizeof(serialized_tag_count);
75
76 memcpy(&tag_count, &buffer[size], sizeof(tag_count));
77 size += sizeof(tag_count);
78
79 array_reserve(&scanner->tags, tag_count);
80 if (tag_count > 0) {
81 unsigned iter = 0;
82 for (iter = 0; iter < serialized_tag_count; iter++) {
83 Tag tag = tag_new();
84 tag.type = (TagType)buffer[size++];
85 if (tag.type == CUSTOM) {
86 uint16_t name_length = (uint8_t)buffer[size++];
87 array_reserve(&tag.custom_tag_name, name_length);
88 tag.custom_tag_name.size = name_length;
89 memcpy(tag.custom_tag_name.contents, &buffer[size], name_length);
90 size += name_length;
91 }
92 array_push(&scanner->tags, tag);
93 }
94 // add zero tags if we didn't read enough, this is because the
95 // buffer had no more room but we held more tags.
96 for (; iter < tag_count; iter++) {
97 array_push(&scanner->tags, tag_new());
98 }
99 }
100 }
101}
102
103static String scan_tag_name(TSLexer *lexer) {
104 String tag_name = array_new();
105 while (iswalnum(lexer->lookahead) || lexer->lookahead == '-' || lexer->lookahead == ':') {
106 array_push(&tag_name, towupper(lexer->lookahead));
107 advance(lexer);
108 }
109 return tag_name;
110}
111
112static bool scan_comment(TSLexer *lexer) {
113 if (lexer->lookahead != '-') {
114 return false;
115 }
116 advance(lexer);
117 if (lexer->lookahead != '-') {
118 return false;
119 }
120 advance(lexer);
121
122 unsigned dashes = 0;
123 while (lexer->lookahead) {
124 switch (lexer->lookahead) {
125 case '-':
126 ++dashes;
127 break;
128 case '>':
129 if (dashes >= 2) {
130 lexer->result_symbol = COMMENT;
131 advance(lexer);
132 lexer->mark_end(lexer);
133 return true;
134 }
135 default:
136 dashes = 0;
137 }
138 advance(lexer);
139 }
140 return false;
141}
142
143static bool scan_raw_text(Scanner *scanner, TSLexer *lexer) {
144 if (scanner->tags.size == 0) {
145 return false;
146 }
147
148 lexer->mark_end(lexer);
149
150 const char *end_delimiter = array_back(&scanner->tags)->type == SCRIPT ? "</SCRIPT" : "</STYLE";
151
152 unsigned delimiter_index = 0;
153 while (lexer->lookahead) {
154 if (towupper(lexer->lookahead) == end_delimiter[delimiter_index]) {
155 delimiter_index++;
156 if (delimiter_index == strlen(end_delimiter)) {
157 break;
158 }
159 advance(lexer);
160 } else {
161 delimiter_index = 0;
162 advance(lexer);
163 lexer->mark_end(lexer);
164 }
165 }
166
167 lexer->result_symbol = RAW_TEXT;
168 return true;
169}
170
171static void pop_tag(Scanner *scanner) {
172 Tag popped_tag = array_pop(&scanner->tags);
173 tag_free(&popped_tag);
174}
175
176static bool scan_implicit_end_tag(Scanner *scanner, TSLexer *lexer) {
177 Tag *parent = scanner->tags.size == 0 ? NULL : array_back(&scanner->tags);
178
179 bool is_closing_tag = false;
180 if (lexer->lookahead == '/') {
181 is_closing_tag = true;
182 advance(lexer);
183 } else {
184 if (parent && tag_is_void(parent)) {
185 pop_tag(scanner);
186 lexer->result_symbol = IMPLICIT_END_TAG;
187 return true;
188 }
189 }
190
191 String tag_name = scan_tag_name(lexer);
192 if (tag_name.size == 0 && !lexer->eof(lexer)) {
193 array_delete(&tag_name);
194 return false;
195 }
196
197 Tag next_tag = tag_for_name(tag_name);
198
199 if (is_closing_tag) {
200 // The tag correctly closes the topmost element on the stack
201 if (scanner->tags.size > 0 && tag_eq(array_back(&scanner->tags), &next_tag)) {
202 tag_free(&next_tag);
203 return false;
204 }
205
206 // Otherwise, dig deeper and queue implicit end tags (to be nice in
207 // the case of malformed HTML)
208 for (unsigned i = scanner->tags.size; i > 0; i--) {
209 if (scanner->tags.contents[i - 1].type == next_tag.type) {
210 pop_tag(scanner);
211 lexer->result_symbol = IMPLICIT_END_TAG;
212 tag_free(&next_tag);
213 return true;
214 }
215 }
216 } else if (
217 parent &&
218 (
219 !tag_can_contain(parent, &next_tag) ||
220 ((parent->type == HTML || parent->type == HEAD || parent->type == BODY) && lexer->eof(lexer))
221 )
222 ) {
223 pop_tag(scanner);
224 lexer->result_symbol = IMPLICIT_END_TAG;
225 tag_free(&next_tag);
226 return true;
227 }
228
229 tag_free(&next_tag);
230 return false;
231}
232
233static bool scan_start_tag_name(Scanner *scanner, TSLexer *lexer) {
234 String tag_name = scan_tag_name(lexer);
235 if (tag_name.size == 0) {
236 array_delete(&tag_name);
237 return false;
238 }
239
240 Tag tag = tag_for_name(tag_name);
241 array_push(&scanner->tags, tag);
242 switch (tag.type) {
243 case SCRIPT:
244 lexer->result_symbol = SCRIPT_START_TAG_NAME;
245 break;
246 case STYLE:
247 lexer->result_symbol = STYLE_START_TAG_NAME;
248 break;
249 default:
250 lexer->result_symbol = START_TAG_NAME;
251 break;
252 }
253 return true;
254}
255
256static bool scan_end_tag_name(Scanner *scanner, TSLexer *lexer) {
257 String tag_name = scan_tag_name(lexer);
258
259 if (tag_name.size == 0) {
260 array_delete(&tag_name);
261 return false;
262 }
263
264 Tag tag = tag_for_name(tag_name);
265 if (scanner->tags.size > 0 && tag_eq(array_back(&scanner->tags), &tag)) {
266 pop_tag(scanner);
267 lexer->result_symbol = END_TAG_NAME;
268 } else {
269 lexer->result_symbol = ERRONEOUS_END_TAG_NAME;
270 }
271
272 tag_free(&tag);
273 return true;
274}
275
276static bool scan_self_closing_tag_delimiter(Scanner *scanner, TSLexer *lexer) {
277 advance(lexer);
278 if (lexer->lookahead == '>') {
279 advance(lexer);
280 if (scanner->tags.size > 0) {
281 pop_tag(scanner);
282 lexer->result_symbol = SELF_CLOSING_TAG_DELIMITER;
283 }
284 return true;
285 }
286 return false;
287}
288
289static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
290 if (valid_symbols[RAW_TEXT] && !valid_symbols[START_TAG_NAME] && !valid_symbols[END_TAG_NAME]) {
291 return scan_raw_text(scanner, lexer);
292 }
293
294 while (iswspace(lexer->lookahead)) {
295 skip(lexer);
296 }
297
298 switch (lexer->lookahead) {
299 case '<':
300 lexer->mark_end(lexer);
301 advance(lexer);
302
303 if (lexer->lookahead == '!') {
304 advance(lexer);
305 return scan_comment(lexer);
306 }
307
308 if (valid_symbols[IMPLICIT_END_TAG]) {
309 return scan_implicit_end_tag(scanner, lexer);
310 }
311 break;
312
313 case '\0':
314 if (valid_symbols[IMPLICIT_END_TAG]) {
315 return scan_implicit_end_tag(scanner, lexer);
316 }
317 break;
318
319 case '/':
320 if (valid_symbols[SELF_CLOSING_TAG_DELIMITER]) {
321 return scan_self_closing_tag_delimiter(scanner, lexer);
322 }
323 break;
324
325 default:
326 if ((valid_symbols[START_TAG_NAME] || valid_symbols[END_TAG_NAME]) && !valid_symbols[RAW_TEXT]) {
327 return valid_symbols[START_TAG_NAME] ? scan_start_tag_name(scanner, lexer)
328 : scan_end_tag_name(scanner, lexer);
329 }
330 }
331
332 return false;
333}
334
335void *tree_sitter_html_external_scanner_create() {
336 Scanner *scanner = (Scanner *)ts_calloc(1, sizeof(Scanner));
337 return scanner;
338}
339
340bool tree_sitter_html_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) {
341 Scanner *scanner = (Scanner *)payload;
342 return scan(scanner, lexer, valid_symbols);
343}
344
345unsigned tree_sitter_html_external_scanner_serialize(void *payload, char *buffer) {
346 Scanner *scanner = (Scanner *)payload;
347 return serialize(scanner, buffer);
348}
349
350void tree_sitter_html_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) {
351 Scanner *scanner = (Scanner *)payload;
352 deserialize(scanner, buffer, length);
353}
354
355void tree_sitter_html_external_scanner_destroy(void *payload) {
356 Scanner *scanner = (Scanner *)payload;
357 for (unsigned i = 0; i < scanner->tags.size; i++) {
358 tag_free(&scanner->tags.contents[i]);
359 }
360 array_delete(&scanner->tags);
361 ts_free(scanner);
362}
diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/html/tag.h b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/tag.h
new file mode 100644
index 0000000..ca56abd
--- /dev/null
+++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/html/tag.h
@@ -0,0 +1,385 @@
1#include "../array.h"
2
3#include <string.h>
4
5typedef enum {
6 AREA,
7 BASE,
8 BASEFONT,
9 BGSOUND,
10 BR,
11 COL,
12 COMMAND,
13 EMBED,
14 FRAME,
15 HR,
16 IMAGE,
17 IMG,
18 INPUT,
19 ISINDEX,
20 KEYGEN,
21 LINK,
22 MENUITEM,
23 META,
24 NEXTID,
25 PARAM,
26 SOURCE,
27 TRACK,
28 WBR,
29 END_OF_VOID_TAGS,
30
31 A,
32 ABBR,
33 ADDRESS,
34 ARTICLE,
35 ASIDE,
36 AUDIO,
37 B,
38 BDI,
39 BDO,
40 BLOCKQUOTE,
41 BODY,
42 BUTTON,
43 CANVAS,
44 CAPTION,
45 CITE,
46 CODE,
47 COLGROUP,
48 DATA,
49 DATALIST,
50 DD,
51 DEL,
52 DETAILS,
53 DFN,
54 DIALOG,
55 DIV,
56 DL,
57 DT,
58 EM,
59 FIELDSET,
60 FIGCAPTION,
61 FIGURE,
62 FOOTER,
63 FORM,
64 H1,
65 H2,
66 H3,
67 H4,
68 H5,
69 H6,
70 HEAD,
71 HEADER,
72 HGROUP,
73 HTML,
74 I,
75 IFRAME,
76 INS,
77 KBD,
78 LABEL,
79 LEGEND,
80 LI,
81 MAIN,
82 MAP,
83 MARK,
84 MATH,
85 MENU,
86 METER,
87 NAV,
88 NOSCRIPT,
89 OBJECT,
90 OL,
91 OPTGROUP,
92 OPTION,
93 OUTPUT,
94 P,
95 PICTURE,
96 PRE,
97 PROGRESS,
98 Q,
99 RB,
100 RP,
101 RT,
102 RTC,
103 RUBY,
104 S,
105 SAMP,
106 SCRIPT,
107 SECTION,
108 SELECT,
109 SLOT,
110 SMALL,
111 SPAN,
112 STRONG,
113 STYLE,
114 SUB,
115 SUMMARY,
116 SUP,
117 SVG,
118 TABLE,
119 TBODY,
120 TD,
121 TEMPLATE,
122 TEXTAREA,
123 TFOOT,
124 TH,
125 THEAD,
126 TIME,
127 TITLE,
128 TR,
129 U,
130 UL,
131 VAR,
132 VIDEO,
133
134 CUSTOM,
135
136 END_,
137} TagType;
138
139typedef Array(char) String;
140
141typedef struct {
142 char tag_name[16];
143 TagType tag_type;
144} TagMapEntry;
145
146typedef struct {
147 TagType type;
148 String custom_tag_name;
149} Tag;
150
151static const TagMapEntry TAG_TYPES_BY_TAG_NAME[126] = {
152 {"AREA", AREA },
153 {"BASE", BASE },
154 {"BASEFONT", BASEFONT },
155 {"BGSOUND", BGSOUND },
156 {"BR", BR },
157 {"COL", COL },
158 {"COMMAND", COMMAND },
159 {"EMBED", EMBED },
160 {"FRAME", FRAME },
161 {"HR", HR },
162 {"IMAGE", IMAGE },
163 {"IMG", IMG },
164 {"INPUT", INPUT },
165 {"ISINDEX", ISINDEX },
166 {"KEYGEN", KEYGEN },
167 {"LINK", LINK },
168 {"MENUITEM", MENUITEM },
169 {"META", META },
170 {"NEXTID", NEXTID },
171 {"PARAM", PARAM },
172 {"SOURCE", SOURCE },
173 {"TRACK", TRACK },
174 {"WBR", WBR },
175 {"A", A },
176 {"ABBR", ABBR },
177 {"ADDRESS", ADDRESS },
178 {"ARTICLE", ARTICLE },
179 {"ASIDE", ASIDE },
180 {"AUDIO", AUDIO },
181 {"B", B },
182 {"BDI", BDI },
183 {"BDO", BDO },
184 {"BLOCKQUOTE", BLOCKQUOTE},
185 {"BODY", BODY },
186 {"BUTTON", BUTTON },
187 {"CANVAS", CANVAS },
188 {"CAPTION", CAPTION },
189 {"CITE", CITE },
190 {"CODE", CODE },
191 {"COLGROUP", COLGROUP },
192 {"DATA", DATA },
193 {"DATALIST", DATALIST },
194 {"DD", DD },
195 {"DEL", DEL },
196 {"DETAILS", DETAILS },
197 {"DFN", DFN },
198 {"DIALOG", DIALOG },
199 {"DIV", DIV },
200 {"DL", DL },
201 {"DT", DT },
202 {"EM", EM },
203 {"FIELDSET", FIELDSET },
204 {"FIGCAPTION", FIGCAPTION},
205 {"FIGURE", FIGURE },
206 {"FOOTER", FOOTER },
207 {"FORM", FORM },
208 {"H1", H1 },
209 {"H2", H2 },
210 {"H3", H3 },
211 {"H4", H4 },
212 {"H5", H5 },
213 {"H6", H6 },
214 {"HEAD", HEAD },
215 {"HEADER", HEADER },
216 {"HGROUP", HGROUP },
217 {"HTML", HTML },
218 {"I", I },
219 {"IFRAME", IFRAME },
220 {"INS", INS },
221 {"KBD", KBD },
222 {"LABEL", LABEL },
223 {"LEGEND", LEGEND },
224 {"LI", LI },
225 {"MAIN", MAIN },
226 {"MAP", MAP },
227 {"MARK", MARK },
228 {"MATH", MATH },
229 {"MENU", MENU },
230 {"METER", METER },
231 {"NAV", NAV },
232 {"NOSCRIPT", NOSCRIPT },
233 {"OBJECT", OBJECT },
234 {"OL", OL },
235 {"OPTGROUP", OPTGROUP },
236 {"OPTION", OPTION },
237 {"OUTPUT", OUTPUT },
238 {"P", P },
239 {"PICTURE", PICTURE },
240 {"PRE", PRE },
241 {"PROGRESS", PROGRESS },
242 {"Q", Q },
243 {"RB", RB },
244 {"RP", RP },
245 {"RT", RT },
246 {"RTC", RTC },
247 {"RUBY", RUBY },
248 {"S", S },
249 {"SAMP", SAMP },
250 {"SCRIPT", SCRIPT },
251 {"SECTION", SECTION },
252 {"SELECT", SELECT },
253 {"SLOT", SLOT },
254 {"SMALL", SMALL },
255 {"SPAN", SPAN },
256 {"STRONG", STRONG },
257 {"STYLE", STYLE },
258 {"SUB", SUB },
259 {"SUMMARY", SUMMARY },
260 {"SUP", SUP },
261 {"SVG", SVG },
262 {"TABLE", TABLE },
263 {"TBODY", TBODY },
264 {"TD", TD },
265 {"TEMPLATE", TEMPLATE },
266 {"TEXTAREA", TEXTAREA },
267 {"TFOOT", TFOOT },
268 {"TH", TH },
269 {"THEAD", THEAD },
270 {"TIME", TIME },
271 {"TITLE", TITLE },
272 {"TR", TR },
273 {"U", U },
274 {"UL", UL },
275 {"VAR", VAR },
276 {"VIDEO", VIDEO },
277 {"CUSTOM", CUSTOM },
278};
279
280static const TagType TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS[] = {
281 ADDRESS, ARTICLE, ASIDE, BLOCKQUOTE, DETAILS, DIV, DL,
282 FIELDSET, FIGCAPTION, FIGURE, FOOTER, FORM, H1, H2,
283 H3, H4, H5, H6, HEADER, HR, MAIN,
284 NAV, OL, P, PRE, SECTION,
285};
286
287static TagType tag_type_for_name(const String *tag_name) {
288 for (int i = 0; i < 126; i++) {
289 const TagMapEntry *entry = &TAG_TYPES_BY_TAG_NAME[i];
290 if (
291 strlen(entry->tag_name) == tag_name->size &&
292 memcmp(tag_name->contents, entry->tag_name, tag_name->size) == 0
293 ) {
294 return entry->tag_type;
295 }
296 }
297 return CUSTOM;
298}
299
300static inline Tag tag_new() {
301 Tag tag;
302 tag.type = END_;
303 tag.custom_tag_name = (String) array_new();
304 return tag;
305}
306
307static inline Tag tag_for_name(String name) {
308 Tag tag = tag_new();
309 tag.type = tag_type_for_name(&name);
310 if (tag.type == CUSTOM) {
311 tag.custom_tag_name = name;
312 } else {
313 array_delete(&name);
314 }
315 return tag;
316}
317
318static inline void tag_free(Tag *tag) {
319 if (tag->type == CUSTOM) {
320 array_delete(&tag->custom_tag_name);
321 }
322}
323
324static inline bool tag_is_void(const Tag *self) {
325 return self->type < END_OF_VOID_TAGS;
326}
327
328static inline bool tag_eq(const Tag *self, const Tag *other) {
329 if (self->type != other->type) return false;
330 if (self->type == CUSTOM) {
331 if (self->custom_tag_name.size != other->custom_tag_name.size) {
332 return false;
333 }
334 if (memcmp(
335 self->custom_tag_name.contents,
336 other->custom_tag_name.contents,
337 self->custom_tag_name.size
338 ) != 0) {
339 return false;
340 }
341 }
342 return true;
343}
344
345static bool tag_can_contain(Tag *self, const Tag *other) {
346 TagType child = other->type;
347
348 switch (self->type) {
349 case LI:
350 return child != LI;
351
352 case DT:
353 case DD:
354 return child != DT && child != DD;
355
356 case P:
357 for (int i = 0; i < 26; i++) {
358 if (child == TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS[i]) {
359 return false;
360 }
361 }
362 return true;
363
364 case COLGROUP:
365 return child == COL;
366
367 case RB:
368 case RT:
369 case RP:
370 return child != RB && child != RT && child != RP;
371
372 case OPTGROUP:
373 return child != OPTGROUP;
374
375 case TR:
376 return child != TR;
377
378 case TD:
379 case TH:
380 return child != TD && child != TH && child != TR;
381
382 default:
383 return true;
384 }
385}