12#define LEXBOR_STR_RES_MAP_HEX
13#define LEXBOR_STR_RES_MAP_HEX_TO_CHAR_LOWERCASE
14#define LEXBOR_STR_RES_CHAR_TO_TWO_HEX_VALUE_LOWERCASE
15#define LEXBOR_STR_RES_ANSI_REPLACEMENT_CHARACTER
18#define LXB_CSS_SYNTAX_RES_NAME_MAP
29 void *ctx,
bool top_level)
69 size_t length, cur_len,
size;
75 length = cur_len +
count + 1024;
85 parser->
rules =
p + cur_len;
99 if (
cp == 0 ||
cp > 0x10FFFF || (
cp >= 0xD800 &&
cp <= 0xDFFF)) {
100 memcpy(tkz->
pos, lexbor_str_res_ansi_replacement_character, 3);
110 if (
cp <= 0x0000007F) {
116 else if (
cp <= 0x000007FF) {
118 data[0] = (char)(0xC0 | (
cp >> 6 ));
119 data[1] = (char)(0x80 | (
cp & 0x3F));
123 else if (
cp <= 0x0000FFFF) {
125 data[0] = (char)(0xE0 | ((
cp >> 12)));
126 data[1] = (char)(0x80 | ((
cp >> 6 ) & 0x3F));
127 data[2] = (char)(0x80 | (
cp & 0x3F));
131 else if (
cp <= 0x001FFFFF) {
133 data[0] = (char)(0xF0 | (
cp >> 18));
134 data[1] = (char)(0x80 | ((
cp >> 12) & 0x3F));
135 data[2] = (char)(0x80 | ((
cp >> 6 ) & 0x3F));
136 data[3] = (char)(0x80 | (
cp & 0x3F));
150 const char **hex_map;
156 hex_map = lexbor_str_res_char_to_two_hex_value_lowercase;
161 if (lxb_css_syntax_res_name_map[
ch] == 0x00) {
168 if (
p <
end && lexbor_str_res_map_hex[*
p] != 0xff) {
170 lxb_str_ws.length, ctx,
status);
192 const char **hex_map;
202 hex_map = lexbor_str_res_char_to_two_hex_value_lowercase;
209 if (lxb_css_syntax_res_name_map[
ch] == 0x00) {
233 if (
p <
end && lexbor_str_res_map_hex[*
p] != 0xff) {
235 lxb_str_ws.length, ctx,
status);
272 if (lxb_css_syntax_res_name_map[*
p++] == 0x00) {
277 return cb(
data, length, ctx);
count(Countable|array $value, int $mode=COUNT_NORMAL)
lxb_status_t(* lexbor_serialize_cb_f)(const lxb_char_t *data, size_t len, void *ctx)
@ LXB_STATUS_ERROR_MEMORY_ALLOCATION
@ LXB_STATUS_ERROR_WRONG_STAGE
#define lexbor_serialize_write(cb, data, length, ctx, status)
struct lxb_css_syntax_tokenizer lxb_css_syntax_tokenizer_t
struct lxb_css_parser lxb_css_parser_t
void lxb_css_parser_clean(lxb_css_parser_t *parser)
lxb_inline void lxb_css_parser_buffer_set(lxb_css_parser_t *parser, const lxb_char_t *data, size_t length)
lxb_inline bool lxb_css_parser_is_running(lxb_css_parser_t *parser)
lxb_status_t lxb_css_syntax_parser_run(lxb_css_parser_t *parser)
lxb_css_syntax_rule_t * lxb_css_syntax_parser_list_rules_push(lxb_css_parser_t *parser, const lxb_css_syntax_token_t *token, lxb_css_parser_state_f state_back, const lxb_css_syntax_cb_list_rules_t *cb_rules, void *ctx, bool top_level, lxb_css_syntax_token_type_t stop)
@ LXB_CSS_SYNTAX_TOKEN_UNDEF
LXB_API void * lexbor_realloc(void *dst, size_t size)
unsigned const char * end
lxb_css_syntax_rule_t * rules_end
lxb_css_syntax_rule_t * rules
lxb_css_parser_stage_t stage
lxb_css_syntax_tokenizer_t * tkz
lxb_css_syntax_rule_t * rules_begin
lxb_status_t lxb_css_syntax_parse_list_rules(lxb_css_parser_t *parser, const lxb_css_syntax_cb_list_rules_t *cb, const lxb_char_t *data, size_t length, void *ctx, bool top_level)
lxb_status_t lxb_css_syntax_ident_serialize(const lxb_char_t *data, size_t length, lexbor_serialize_cb_f cb, void *ctx)
lxb_status_t lxb_css_syntax_stack_expand(lxb_css_parser_t *parser, size_t count)
lxb_status_t lxb_css_syntax_string_serialize(const lxb_char_t *data, size_t length, lexbor_serialize_cb_f cb, void *ctx)
lxb_status_t lxb_css_syntax_ident_or_string_serialize(const lxb_char_t *data, size_t length, lexbor_serialize_cb_f cb, void *ctx)
void lxb_css_syntax_codepoint_to_ascii(lxb_css_syntax_tokenizer_t *tkz, lxb_codepoint_t cp)
struct lxb_css_syntax_rule lxb_css_syntax_rule_t
unsigned int lxb_status_t