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