xref: /php-src/ext/dom/lexbor/lexbor/html/tree/error.h (revision bffab33a)
1 /*
2  * Copyright (C) 2018 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_HTML_TREE_ERROR_H
8 #define LEXBOR_HTML_TREE_ERROR_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "lexbor/core/base.h"
15 #include "lexbor/core/array_obj.h"
16 
17 #include "lexbor/html/token.h"
18 
19 
20 typedef enum {
21     /* unexpected-token */
22     LXB_HTML_RULES_ERROR_UNTO = 0x0000,
23     /* unexpected-closed-token */
24     LXB_HTML_RULES_ERROR_UNCLTO,
25     /* null-character */
26     LXB_HTML_RULES_ERROR_NUCH,
27     /* unexpected-character-token */
28     LXB_HTML_RULES_ERROR_UNCHTO,
29     /* unexpected-token-in-initial-mode */
30     LXB_HTML_RULES_ERROR_UNTOININMO,
31     /* bad-doctype-token-in-initial-mode */
32     LXB_HTML_RULES_ERROR_BADOTOININMO,
33     /* doctype-token-in-before-html-mode */
34     LXB_HTML_RULES_ERROR_DOTOINBEHTMO,
35     /* unexpected-closed-token-in-before-html-mode */
36     LXB_HTML_RULES_ERROR_UNCLTOINBEHTMO,
37     /* doctype-token-in-before-head-mode */
38     LXB_HTML_RULES_ERROR_DOTOINBEHEMO,
39     /* unexpected-closed_token-in-before-head-mode */
40     LXB_HTML_RULES_ERROR_UNCLTOINBEHEMO,
41     /* doctype-token-in-head-mode */
42     LXB_HTML_RULES_ERROR_DOTOINHEMO,
43     /* non-void-html-element-start-tag-with-trailing-solidus */
44     LXB_HTML_RULES_ERROR_NOVOHTELSTTAWITRSO,
45     /* head-token-in-head-mode */
46     LXB_HTML_RULES_ERROR_HETOINHEMO,
47     /* unexpected-closed-token-in-head-mode */
48     LXB_HTML_RULES_ERROR_UNCLTOINHEMO,
49     /* template-closed-token-without-opening-in-head-mode */
50     LXB_HTML_RULES_ERROR_TECLTOWIOPINHEMO,
51     /* template-element-is-not-current-in-head-mode */
52     LXB_HTML_RULES_ERROR_TEELISNOCUINHEMO,
53     /* doctype-token-in-head-noscript-mode */
54     LXB_HTML_RULES_ERROR_DOTOINHENOMO,
55     /* doctype-token-after-head-mode */
56     LXB_HTML_RULES_ERROR_DOTOAFHEMO,
57     /* head-token-after-head-mode */
58     LXB_HTML_RULES_ERROR_HETOAFHEMO,
59     /* doctype-token-in-body-mode */
60     LXB_HTML_RULES_ERROR_DOTOINBOMO,
61     /* bad-ending-open-elements-is-wrong */
62     LXB_HTML_RULES_ERROR_BAENOPELISWR,
63     /* open-elements-is-wrong */
64     LXB_HTML_RULES_ERROR_OPELISWR,
65     /* unexpected-element-in-open-elements-stack */
66     LXB_HTML_RULES_ERROR_UNELINOPELST,
67     /* missing-element-in-open-elements-stack */
68     LXB_HTML_RULES_ERROR_MIELINOPELST,
69     /* no-body-element-in-scope */
70     LXB_HTML_RULES_ERROR_NOBOELINSC,
71     /* missing-element-in-scope */
72     LXB_HTML_RULES_ERROR_MIELINSC,
73     /* unexpected-element-in-scope */
74     LXB_HTML_RULES_ERROR_UNELINSC,
75     /* unexpected-element-in-active-formatting-stack */
76     LXB_HTML_RULES_ERROR_UNELINACFOST,
77     /* unexpected-end-of-file */
78     LXB_HTML_RULES_ERROR_UNENOFFI,
79     /* characters-in-table-text */
80     LXB_HTML_RULES_ERROR_CHINTATE,
81     /* doctype-token-in-table-mode */
82     LXB_HTML_RULES_ERROR_DOTOINTAMO,
83     /* doctype-token-in-select-mode */
84     LXB_HTML_RULES_ERROR_DOTOINSEMO,
85     /* doctype-token-after-body-mode */
86     LXB_HTML_RULES_ERROR_DOTOAFBOMO,
87     /* doctype-token-in-frameset-mode */
88     LXB_HTML_RULES_ERROR_DOTOINFRMO,
89     /* doctype-token-after-frameset-mode */
90     LXB_HTML_RULES_ERROR_DOTOAFFRMO,
91     /* doctype-token-foreign-content-mode */
92     LXB_HTML_RULES_ERROR_DOTOFOCOMO,
93 
94     LXB_HTML_RULES_ERROR_LAST_ENTRY
95 }
96 lxb_html_tree_error_id_t;
97 
98 typedef struct {
99     lxb_html_tree_error_id_t id;
100     size_t                   line;
101     size_t                   column;
102     size_t                   length;
103 }
104 lxb_html_tree_error_t;
105 
106 
107 LXB_API lxb_html_tree_error_t *
108 lxb_html_tree_error_add(lexbor_array_obj_t *parse_errors,
109                         lxb_html_token_t *token, lxb_html_tree_error_id_t id);
110 
111 
112 #ifdef __cplusplus
113 } /* extern "C" */
114 #endif
115 
116 #endif /* LEXBOR_HTML_TREE_ERROR_H */
117 
118