7#ifndef LEXBOR_CSS_SELECTORS_SELECTOR_H
8#define LEXBOR_CSS_SELECTORS_SELECTOR_H
109#define LXB_CSS_SELECTOR_SPECIFICITY_MASK_N(sp, n) \
110 ((sp) & ~((((uint32_t) 1 << 9) - 1) << (n)))
112#define LXB_CSS_SELECTOR_SPECIFICITY_MASK \
113 ((((uint32_t) 1 << (32 - 9)) - 1) << (9))
115#define lxb_css_selector_sp_i(sp) ((sp) >> 28)
117#define lxb_css_selector_sp_s(sp) \
118 (((sp) >> 27) & ~((((uint32_t) 1 << 31) - 1) << (1)))
120#define lxb_css_selector_sp_a(sp) \
121 (((sp) >> 18) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
123#define lxb_css_selector_sp_b(sp) \
124 (((sp) >> 9) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
126#define lxb_css_selector_sp_c(sp) \
127 ((sp) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
129#define lxb_css_selector_sp_set_i(sp, num) \
130 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 28) | ((num) << 28))
132#define lxb_css_selector_sp_set_s(sp, num) \
133 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 27) | ((num) << 27))
135#define lxb_css_selector_sp_set_a(sp, num) \
136 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 18) | ((num) << 18))
138#define lxb_css_selector_sp_set_b(sp, num) \
139 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 9) | ((num) << 9))
141#define lxb_css_selector_sp_set_c(sp, num) \
142 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 0) | (num))
144#define lxb_css_selector_sp_add_s(sp, num) \
145 (lxb_css_selector_sp_set_s((sp), lxb_css_selector_sp_s(sp) + num))
147#define lxb_css_selector_sp_add_a(sp, num) \
148 (lxb_css_selector_sp_set_a((sp), lxb_css_selector_sp_a(sp) + num))
150#define lxb_css_selector_sp_add_b(sp, num) \
151 (lxb_css_selector_sp_set_b((sp), lxb_css_selector_sp_b(sp) + num))
153#define lxb_css_selector_sp_add_c(sp, num) \
154 (lxb_css_selector_sp_set_c((sp), lxb_css_selector_sp_c(sp) + num))
156#define lxb_css_selector_sp_up_i(num) (num | (1 << 28))
157#define lxb_css_selector_sp_up_s(num) (num | (1 << 27))
159#define LXB_CSS_SELECTOR_SP_S_MAX ((1 << 28) - 1)
160#define LXB_CSS_SELECTOR_SP_A_MAX ((1 << 27) - 1)
161#define LXB_CSS_SELECTOR_SP_B_MAX ((1 << 18) - 1)
162#define LXB_CSS_SELECTOR_SP_C_MAX ((1 << 9) - 1)
lxb_status_t(* lexbor_serialize_cb_f)(const lxb_char_t *data, size_t len, void *ctx)
struct lxb_css_memory lxb_css_memory_t
struct lxb_css_selector lxb_css_selector_t
struct lxb_css_selector_list lxb_css_selector_list_t
struct lxb_css_selectors lxb_css_selectors_t
LXB_API lxb_css_selector_t * lxb_css_selector_create(lxb_css_selector_list_t *list)
LXB_API lxb_status_t lxb_css_selector_serialize_anb_of(lxb_css_selector_anb_of_t *anbof, lexbor_serialize_cb_f cb, void *ctx)
uint32_t lxb_css_selector_specificity_t
LXB_API void lxb_css_selector_append_next(lxb_css_selector_t *dist, lxb_css_selector_t *src)
LXB_API void lxb_css_selector_list_remove(lxb_css_selector_list_t *list)
lxb_css_selector_combinator_t
@ LXB_CSS_SELECTOR_COMBINATOR_CELL
@ LXB_CSS_SELECTOR_COMBINATOR_CLOSE
@ LXB_CSS_SELECTOR_COMBINATOR_DESCENDANT
@ LXB_CSS_SELECTOR_COMBINATOR_SIBLING
@ LXB_CSS_SELECTOR_COMBINATOR_CHILD
@ LXB_CSS_SELECTOR_COMBINATOR__LAST_ENTRY
@ LXB_CSS_SELECTOR_COMBINATOR_FOLLOWING
LXB_API lxb_char_t * lxb_css_selector_serialize_list_chain_char(lxb_css_selector_list_t *list, size_t *out_length)
LXB_API void lxb_css_selector_list_append(lxb_css_selector_list_t *list, lxb_css_selector_t *selector)
LXB_API void lxb_css_selector_list_destroy_chain(lxb_css_selector_list_t *list)
LXB_API void lxb_css_selector_remove(lxb_css_selector_t *selector)
LXB_API lxb_char_t * lxb_css_selector_combinator(lxb_css_selector_t *selector, size_t *out_length)
LXB_API void lxb_css_selector_destroy(lxb_css_selector_t *selector)
@ LXB_CSS_SELECTOR_TYPE_ELEMENT
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_CLASS_FUNCTION
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_CLASS
@ LXB_CSS_SELECTOR_TYPE_ATTRIBUTE
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_ELEMENT_FUNCTION
@ LXB_CSS_SELECTOR_TYPE__LAST_ENTRY
@ LXB_CSS_SELECTOR_TYPE_ID
@ LXB_CSS_SELECTOR_TYPE_CLASS
@ LXB_CSS_SELECTOR_TYPE__UNDEF
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_ELEMENT
@ LXB_CSS_SELECTOR_TYPE_ANY
LXB_API void lxb_css_selector_list_destroy(lxb_css_selector_list_t *list)
LXB_API void lxb_css_selector_list_destroy_memory(lxb_css_selector_list_t *list)
LXB_API lxb_css_selector_list_t * lxb_css_selector_list_create(lxb_css_memory_t *mem)
LXB_API void lxb_css_selector_list_append_next(lxb_css_selector_list_t *dist, lxb_css_selector_list_t *src)
LXB_API void lxb_css_selector_destroy_chain(lxb_css_selector_t *selector)
LXB_API void lxb_css_selector_list_selectors_remove(lxb_css_selectors_t *selectors, lxb_css_selector_list_t *list)
LXB_API lxb_status_t lxb_css_selector_serialize_chain(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_status_t lxb_css_selector_serialize_list(lxb_css_selector_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_status_t lxb_css_selector_serialize(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
lxb_css_selector_modifier_t
@ LXB_CSS_SELECTOR_MODIFIER_UNSET
@ LXB_CSS_SELECTOR_MODIFIER__LAST_ENTRY
@ LXB_CSS_SELECTOR_MODIFIER_S
@ LXB_CSS_SELECTOR_MODIFIER_I
LXB_API lxb_status_t lxb_css_selector_serialize_list_chain(lxb_css_selector_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_char_t * lxb_css_selector_serialize_chain_char(lxb_css_selector_t *selector, size_t *out_length)
@ LXB_CSS_SELECTOR_MATCH_PREFIX
@ LXB_CSS_SELECTOR_MATCH_SUBSTRING
@ LXB_CSS_SELECTOR_MATCH_DASH
@ LXB_CSS_SELECTOR_MATCH_SUFFIX
@ LXB_CSS_SELECTOR_MATCH__LAST_ENTRY
@ LXB_CSS_SELECTOR_MATCH_INCLUDE
@ LXB_CSS_SELECTOR_MATCH_EQUAL
lxb_css_selector_list_t * of
lxb_css_selector_modifier_t modifier
lxb_css_selector_match_t match
lxb_css_selector_list_t * next
lxb_css_memory_t * memory
lxb_css_selector_t * last
lxb_css_selector_specificity_t specificity
lxb_css_selector_list_t * prev
lxb_css_selector_t * parent
lxb_css_selector_t * first
lxb_css_selector_type_t type
lxb_css_selector_t * next
lxb_css_selector_t * prev
lxb_css_selector_list_t * list
union lxb_css_selector::lxb_css_selector_u u
lxb_css_selector_combinator_t combinator
unsigned int lxb_status_t
lxb_css_selector_attribute_t attribute
lxb_css_selector_pseudo_t pseudo