1 /*
2  * Copyright (C) 2018 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_HTML_TOKENIZER_ERROR_H
8 #define LEXBOR_HTML_TOKENIZER_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/tokenizer.h"
18 
19 
20 typedef enum {
21     /* abrupt-closing-of-empty-comment */
22     LXB_HTML_TOKENIZER_ERROR_ABCLOFEMCO         = 0x0000,
23     /* abrupt-doctype-public-identifier */
24     LXB_HTML_TOKENIZER_ERROR_ABDOPUID           = 0x0001,
25     /* abrupt-doctype-system-identifier */
26     LXB_HTML_TOKENIZER_ERROR_ABDOSYID           = 0x0002,
27     /* absence-of-digits-in-numeric-character-reference */
28     LXB_HTML_TOKENIZER_ERROR_ABOFDIINNUCHRE     = 0x0003,
29     /* cdata-in-html-content */
30     LXB_HTML_TOKENIZER_ERROR_CDINHTCO           = 0x0004,
31     /* character-reference-outside-unicode-range */
32     LXB_HTML_TOKENIZER_ERROR_CHREOUUNRA         = 0x0005,
33     /* control-character-in-input-stream */
34     LXB_HTML_TOKENIZER_ERROR_COCHININST         = 0x0006,
35     /* control-character-reference */
36     LXB_HTML_TOKENIZER_ERROR_COCHRE             = 0x0007,
37     /* end-tag-with-attributes */
38     LXB_HTML_TOKENIZER_ERROR_ENTAWIAT           = 0x0008,
39     /* duplicate-attribute */
40     LXB_HTML_TOKENIZER_ERROR_DUAT               = 0x0009,
41     /* end-tag-with-trailing-solidus */
42     LXB_HTML_TOKENIZER_ERROR_ENTAWITRSO         = 0x000A,
43     /* eof-before-tag-name */
44     LXB_HTML_TOKENIZER_ERROR_EOBETANA           = 0x000B,
45     /* eof-in-cdata */
46     LXB_HTML_TOKENIZER_ERROR_EOINCD             = 0x000C,
47     /* eof-in-comment */
48     LXB_HTML_TOKENIZER_ERROR_EOINCO             = 0x000D,
49     /* eof-in-doctype */
50     LXB_HTML_TOKENIZER_ERROR_EOINDO             = 0x000E,
51     /* eof-in-script-html-comment-like-text */
52     LXB_HTML_TOKENIZER_ERROR_EOINSCHTCOLITE     = 0x000F,
53     /* eof-in-tag */
54     LXB_HTML_TOKENIZER_ERROR_EOINTA             = 0x0010,
55     /* incorrectly-closed-comment */
56     LXB_HTML_TOKENIZER_ERROR_INCLCO             = 0x0011,
57     /* incorrectly-opened-comment */
58     LXB_HTML_TOKENIZER_ERROR_INOPCO             = 0x0012,
59     /* invalid-character-sequence-after-doctype-name */
60     LXB_HTML_TOKENIZER_ERROR_INCHSEAFDONA       = 0x0013,
61     /* invalid-first-character-of-tag-name */
62     LXB_HTML_TOKENIZER_ERROR_INFICHOFTANA       = 0x0014,
63     /* missing-attribute-value */
64     LXB_HTML_TOKENIZER_ERROR_MIATVA             = 0x0015,
65     /* missing-doctype-name */
66     LXB_HTML_TOKENIZER_ERROR_MIDONA             = 0x0016,
67     /* missing-doctype-public-identifier */
68     LXB_HTML_TOKENIZER_ERROR_MIDOPUID           = 0x0017,
69     /* missing-doctype-system-identifier */
70     LXB_HTML_TOKENIZER_ERROR_MIDOSYID           = 0x0018,
71     /* missing-end-tag-name */
72     LXB_HTML_TOKENIZER_ERROR_MIENTANA           = 0x0019,
73     /* missing-quote-before-doctype-public-identifier */
74     LXB_HTML_TOKENIZER_ERROR_MIQUBEDOPUID       = 0x001A,
75     /* missing-quote-before-doctype-system-identifier */
76     LXB_HTML_TOKENIZER_ERROR_MIQUBEDOSYID       = 0x001B,
77     /* missing-semicolon-after-character-reference */
78     LXB_HTML_TOKENIZER_ERROR_MISEAFCHRE         = 0x001C,
79     /* missing-whitespace-after-doctype-public-keyword */
80     LXB_HTML_TOKENIZER_ERROR_MIWHAFDOPUKE       = 0x001D,
81     /* missing-whitespace-after-doctype-system-keyword */
82     LXB_HTML_TOKENIZER_ERROR_MIWHAFDOSYKE       = 0x001E,
83     /* missing-whitespace-before-doctype-name */
84     LXB_HTML_TOKENIZER_ERROR_MIWHBEDONA         = 0x001F,
85     /* missing-whitespace-between-attributes */
86     LXB_HTML_TOKENIZER_ERROR_MIWHBEAT           = 0x0020,
87     /* missing-whitespace-between-doctype-public-and-system-identifiers */
88     LXB_HTML_TOKENIZER_ERROR_MIWHBEDOPUANSYID   = 0x0021,
89     /* nested-comment */
90     LXB_HTML_TOKENIZER_ERROR_NECO               = 0x0022,
91     /* noncharacter-character-reference */
92     LXB_HTML_TOKENIZER_ERROR_NOCHRE             = 0x0023,
93     /* noncharacter-in-input-stream */
94     LXB_HTML_TOKENIZER_ERROR_NOININST           = 0x0024,
95     /* non-void-html-element-start-tag-with-trailing-solidus */
96     LXB_HTML_TOKENIZER_ERROR_NOVOHTELSTTAWITRSO = 0x0025,
97     /* null-character-reference */
98     LXB_HTML_TOKENIZER_ERROR_NUCHRE             = 0x0026,
99     /* surrogate-character-reference */
100     LXB_HTML_TOKENIZER_ERROR_SUCHRE             = 0x0027,
101     /* surrogate-in-input-stream */
102     LXB_HTML_TOKENIZER_ERROR_SUININST           = 0x0028,
103     /* unexpected-character-after-doctype-system-identifier */
104     LXB_HTML_TOKENIZER_ERROR_UNCHAFDOSYID       = 0x0029,
105     /* unexpected-character-in-attribute-name */
106     LXB_HTML_TOKENIZER_ERROR_UNCHINATNA         = 0x002A,
107     /* unexpected-character-in-unquoted-attribute-value */
108     LXB_HTML_TOKENIZER_ERROR_UNCHINUNATVA       = 0x002B,
109     /* unexpected-equals-sign-before-attribute-name */
110     LXB_HTML_TOKENIZER_ERROR_UNEQSIBEATNA       = 0x002C,
111     /* unexpected-null-character */
112     LXB_HTML_TOKENIZER_ERROR_UNNUCH             = 0x002D,
113     /* unexpected-question-mark-instead-of-tag-name */
114     LXB_HTML_TOKENIZER_ERROR_UNQUMAINOFTANA     = 0x002E,
115     /* unexpected-solidus-in-tag */
116     LXB_HTML_TOKENIZER_ERROR_UNSOINTA           = 0x002F,
117     /* unknown-named-character-reference */
118     LXB_HTML_TOKENIZER_ERROR_UNNACHRE           = 0x0030,
119     LXB_HTML_TOKENIZER_ERROR_LAST_ENTRY         = 0x0031,
120 }
121 lxb_html_tokenizer_error_id_t;
122 
123 typedef struct {
124     const lxb_char_t              *pos;
125     lxb_html_tokenizer_error_id_t id;
126 }
127 lxb_html_tokenizer_error_t;
128 
129 
130 LXB_API lxb_html_tokenizer_error_t *
131 lxb_html_tokenizer_error_add(lexbor_array_obj_t *parse_errors,
132                              const lxb_char_t *pos,
133                              lxb_html_tokenizer_error_id_t id);
134 
135 
136 #ifdef __cplusplus
137 } /* extern "C" */
138 #endif
139 
140 #endif /* LEXBOR_HTML_TOKENIZER_ERROR_H */
141 
142