1 /* 2 * This file is part of Hubbub. 3 * Licensed under the MIT License, 4 * http://www.opensource.org/licenses/mit-license.php 5 * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org> 6 */ 7 8 #ifndef hubbub_types_h_ 9 #define hubbub_types_h_ 10 11 #ifdef __cplusplus 12 extern "C" 13 { 14 #endif 15 16 #include <stdbool.h> 17 #include <inttypes.h> 18 19 /** Source of charset information, in order of importance 20 * A client-dictated charset will override all others. 21 * A document-specified charset will override autodetection or the default */ 22 typedef enum hubbub_charset_source { 23 HUBBUB_CHARSET_UNKNOWN = 0, /**< Unknown */ 24 HUBBUB_CHARSET_TENTATIVE = 1, /**< Charset may be changed 25 * with further data */ 26 HUBBUB_CHARSET_CONFIDENT = 2 /**< Charset definite */ 27 } hubbub_charset_source; 28 29 /** 30 * Content model flag 31 */ 32 typedef enum hubbub_content_model { 33 HUBBUB_CONTENT_MODEL_PCDATA, 34 HUBBUB_CONTENT_MODEL_RCDATA, 35 HUBBUB_CONTENT_MODEL_CDATA, 36 HUBBUB_CONTENT_MODEL_PLAINTEXT 37 } hubbub_content_model; 38 39 /** 40 * Quirks mode flag 41 */ 42 typedef enum hubbub_quirks_mode { 43 HUBBUB_QUIRKS_MODE_NONE, 44 HUBBUB_QUIRKS_MODE_LIMITED, 45 HUBBUB_QUIRKS_MODE_FULL 46 } hubbub_quirks_mode; 47 48 /** 49 * Type of an emitted token 50 */ 51 typedef enum hubbub_token_type { 52 HUBBUB_TOKEN_DOCTYPE, 53 HUBBUB_TOKEN_START_TAG, 54 HUBBUB_TOKEN_END_TAG, 55 HUBBUB_TOKEN_COMMENT, 56 HUBBUB_TOKEN_CHARACTER, 57 HUBBUB_TOKEN_EOF 58 } hubbub_token_type; 59 60 /** 61 * Possible namespaces 62 */ 63 typedef enum hubbub_ns { 64 HUBBUB_NS_NULL, 65 HUBBUB_NS_HTML, 66 HUBBUB_NS_MATHML, 67 HUBBUB_NS_SVG, 68 HUBBUB_NS_XLINK, 69 HUBBUB_NS_XML, 70 HUBBUB_NS_XMLNS 71 } hubbub_ns; 72 73 /** 74 * Tokeniser string type 75 */ 76 typedef struct hubbub_string { 77 const uint8_t *ptr; /**< Pointer to data */ 78 size_t len; /**< Byte length of string */ 79 } hubbub_string; 80 81 /** 82 * Tag attribute data 83 */ 84 typedef struct hubbub_attribute { 85 hubbub_ns ns; /**< Attribute namespace */ 86 hubbub_string name; /**< Attribute name */ 87 hubbub_string value; /**< Attribute value */ 88 } hubbub_attribute; 89 90 /** 91 * Data for doctype token 92 */ 93 typedef struct hubbub_doctype { 94 hubbub_string name; /**< Doctype name */ 95 96 bool public_missing; /**< Whether the public id is missing */ 97 hubbub_string public_id; /**< Doctype public identifier */ 98 99 bool system_missing; /**< Whether the system id is missing */ 100 hubbub_string system_id; /**< Doctype system identifier */ 101 102 bool force_quirks; /**< Doctype force-quirks flag */ 103 } hubbub_doctype; 104 105 /** 106 * Data for a tag 107 */ 108 typedef struct hubbub_tag { 109 hubbub_ns ns; /**< Tag namespace */ 110 hubbub_string name; /**< Tag name */ 111 uint32_t n_attributes; /**< Count of attributes */ 112 hubbub_attribute *attributes; /**< Array of attribute data */ 113 bool self_closing; /**< Whether the tag can have children */ 114 } hubbub_tag; 115 116 /** 117 * Token data 118 */ 119 typedef struct hubbub_token { 120 hubbub_token_type type; /**< The token type */ 121 122 union { 123 hubbub_doctype doctype; 124 125 hubbub_tag tag; 126 127 hubbub_string comment; 128 129 hubbub_string character; 130 } data; /**< Type-specific data */ 131 } hubbub_token; 132 133 #ifdef __cplusplus 134 } 135 #endif 136 137 #endif 138