php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
selector.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7#ifndef LEXBOR_CSS_SELECTORS_SELECTOR_H
8#define LEXBOR_CSS_SELECTORS_SELECTOR_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include "lexbor/core/str.h"
17
18
33
44
55
63
70
71typedef struct {
72 unsigned type;
73 void *data;
74}
76
82
101
102
103/*
104 * I S A B C
105 * 1 bit | 1 bit | 9 bit | 9 bit | 9 bit
106 */
108
109#define LXB_CSS_SELECTOR_SPECIFICITY_MASK_N(sp, n) \
110 ((sp) & ~((((uint32_t) 1 << 9) - 1) << (n)))
111
112#define LXB_CSS_SELECTOR_SPECIFICITY_MASK \
113 ((((uint32_t) 1 << (32 - 9)) - 1) << (9))
114
115#define lxb_css_selector_sp_i(sp) ((sp) >> 28)
116
117#define lxb_css_selector_sp_s(sp) \
118 (((sp) >> 27) & ~((((uint32_t) 1 << 31) - 1) << (1)))
119
120#define lxb_css_selector_sp_a(sp) \
121 (((sp) >> 18) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
122
123#define lxb_css_selector_sp_b(sp) \
124 (((sp) >> 9) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
125
126#define lxb_css_selector_sp_c(sp) \
127 ((sp) & ~LXB_CSS_SELECTOR_SPECIFICITY_MASK)
128
129#define lxb_css_selector_sp_set_i(sp, num) \
130 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 28) | ((num) << 28))
131
132#define lxb_css_selector_sp_set_s(sp, num) \
133 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 27) | ((num) << 27))
134
135#define lxb_css_selector_sp_set_a(sp, num) \
136 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 18) | ((num) << 18))
137
138#define lxb_css_selector_sp_set_b(sp, num) \
139 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 9) | ((num) << 9))
140
141#define lxb_css_selector_sp_set_c(sp, num) \
142 sp = (LXB_CSS_SELECTOR_SPECIFICITY_MASK_N((sp), 0) | (num))
143
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))
146
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))
149
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))
152
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))
155
156#define lxb_css_selector_sp_up_i(num) (num | (1 << 28))
157#define lxb_css_selector_sp_up_s(num) (num | (1 << 27))
158
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)
163
164
178
179
182
183LXB_API void
185
186LXB_API void
188
189LXB_API void
191
194
195LXB_API void
197
198LXB_API void
201
202LXB_API void
204
205LXB_API void
207
208LXB_API void
210
213 lexbor_serialize_cb_f cb, void *ctx);
214
217 lexbor_serialize_cb_f cb, void *ctx);
218
221 size_t *out_length);
222
225 lexbor_serialize_cb_f cb, void *ctx);
226
229 lexbor_serialize_cb_f cb, void *ctx);
230
233 size_t *out_length);
234
237 lexbor_serialize_cb_f cb, void *ctx);
238
240lxb_css_selector_combinator(lxb_css_selector_t *selector, size_t *out_length);
241
242LXB_API void
244 lxb_css_selector_t *selector);
245
246LXB_API void
249
250LXB_API void
252
253
254#ifdef __cplusplus
255} /* extern "C" */
256#endif
257
258#endif /* LEXBOR_CSS_SELECTORS_SELECTOR_H */
char * cb
Definition assert.c:26
lxb_status_t(* lexbor_serialize_cb_f)(const lxb_char_t *data, size_t len, void *ctx)
Definition base.h:82
struct lxb_css_memory lxb_css_memory_t
struct lxb_css_selector lxb_css_selector_t
Definition base.h:39
struct lxb_css_selector_list lxb_css_selector_list_t
Definition base.h:40
struct lxb_css_selectors lxb_css_selectors_t
Definition base.h:38
#define LXB_API
Definition def.h:48
LXB_API lxb_css_selector_t * lxb_css_selector_create(lxb_css_selector_list_t *list)
Definition selector.c:111
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)
Definition selector.c:846
uint32_t lxb_css_selector_specificity_t
Definition selector.h:107
LXB_API void lxb_css_selector_append_next(lxb_css_selector_t *dist, lxb_css_selector_t *src)
Definition selector.c:918
LXB_API void lxb_css_selector_list_remove(lxb_css_selector_list_t *list)
Definition selector.c:184
lxb_css_selector_combinator_t
Definition selector.h:34
@ LXB_CSS_SELECTOR_COMBINATOR_CELL
Definition selector.h:40
@ LXB_CSS_SELECTOR_COMBINATOR_CLOSE
Definition selector.h:36
@ LXB_CSS_SELECTOR_COMBINATOR_DESCENDANT
Definition selector.h:35
@ LXB_CSS_SELECTOR_COMBINATOR_SIBLING
Definition selector.h:38
@ LXB_CSS_SELECTOR_COMBINATOR_CHILD
Definition selector.h:37
@ LXB_CSS_SELECTOR_COMBINATOR__LAST_ENTRY
Definition selector.h:41
@ LXB_CSS_SELECTOR_COMBINATOR_FOLLOWING
Definition selector.h:39
LXB_API lxb_char_t * lxb_css_selector_serialize_list_chain_char(lxb_css_selector_list_t *list, size_t *out_length)
Definition selector.c:539
LXB_API void lxb_css_selector_list_append(lxb_css_selector_list_t *list, lxb_css_selector_t *selector)
Definition selector.c:902
LXB_API void lxb_css_selector_list_destroy_chain(lxb_css_selector_list_t *list)
Definition selector.c:220
LXB_API void lxb_css_selector_remove(lxb_css_selector_t *selector)
Definition selector.c:149
LXB_API lxb_char_t * lxb_css_selector_combinator(lxb_css_selector_t *selector, size_t *out_length)
Definition selector.c:868
LXB_API void lxb_css_selector_destroy(lxb_css_selector_t *selector)
Definition selector.c:124
lxb_css_selector_type_t
Definition selector.h:19
@ LXB_CSS_SELECTOR_TYPE_ELEMENT
Definition selector.h:22
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_CLASS_FUNCTION
Definition selector.h:27
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_CLASS
Definition selector.h:26
@ LXB_CSS_SELECTOR_TYPE_ATTRIBUTE
Definition selector.h:25
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_ELEMENT_FUNCTION
Definition selector.h:29
@ LXB_CSS_SELECTOR_TYPE__LAST_ENTRY
Definition selector.h:30
@ LXB_CSS_SELECTOR_TYPE_ID
Definition selector.h:23
@ LXB_CSS_SELECTOR_TYPE_CLASS
Definition selector.h:24
@ LXB_CSS_SELECTOR_TYPE__UNDEF
Definition selector.h:20
@ LXB_CSS_SELECTOR_TYPE_PSEUDO_ELEMENT
Definition selector.h:28
@ LXB_CSS_SELECTOR_TYPE_ANY
Definition selector.h:21
LXB_API void lxb_css_selector_list_destroy(lxb_css_selector_list_t *list)
Definition selector.c:211
LXB_API void lxb_css_selector_list_destroy_memory(lxb_css_selector_list_t *list)
Definition selector.c:232
LXB_API lxb_css_selector_list_t * lxb_css_selector_list_create(lxb_css_memory_t *mem)
Definition selector.c:169
LXB_API void lxb_css_selector_list_append_next(lxb_css_selector_list_t *dist, lxb_css_selector_list_t *src)
Definition selector.c:931
LXB_API void lxb_css_selector_destroy_chain(lxb_css_selector_t *selector)
Definition selector.c:137
LXB_API void lxb_css_selector_list_selectors_remove(lxb_css_selectors_t *selectors, lxb_css_selector_list_t *list)
Definition selector.c:196
LXB_API lxb_status_t lxb_css_selector_serialize_chain(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:350
LXB_API lxb_status_t lxb_css_selector_serialize_list(lxb_css_selector_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:451
LXB_API lxb_status_t lxb_css_selector_serialize(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:343
lxb_css_selector_modifier_t
Definition selector.h:56
@ LXB_CSS_SELECTOR_MODIFIER_UNSET
Definition selector.h:57
@ LXB_CSS_SELECTOR_MODIFIER__LAST_ENTRY
Definition selector.h:60
@ LXB_CSS_SELECTOR_MODIFIER_S
Definition selector.h:59
@ LXB_CSS_SELECTOR_MODIFIER_I
Definition selector.h:58
LXB_API lxb_status_t lxb_css_selector_serialize_list_chain(lxb_css_selector_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:508
LXB_API lxb_char_t * lxb_css_selector_serialize_chain_char(lxb_css_selector_t *selector, size_t *out_length)
Definition selector.c:405
lxb_css_selector_match_t
Definition selector.h:45
@ LXB_CSS_SELECTOR_MATCH_PREFIX
Definition selector.h:49
@ LXB_CSS_SELECTOR_MATCH_SUBSTRING
Definition selector.h:51
@ LXB_CSS_SELECTOR_MATCH_DASH
Definition selector.h:48
@ LXB_CSS_SELECTOR_MATCH_SUFFIX
Definition selector.h:50
@ LXB_CSS_SELECTOR_MATCH__LAST_ENTRY
Definition selector.h:52
@ LXB_CSS_SELECTOR_MATCH_INCLUDE
Definition selector.h:47
@ LXB_CSS_SELECTOR_MATCH_EQUAL
Definition selector.h:46
lxb_css_selector_list_t * of
Definition selector.h:79
lxb_css_syntax_anb_t anb
Definition selector.h:78
lxb_css_selector_modifier_t modifier
Definition selector.h:66
lxb_css_selector_match_t match
Definition selector.h:65
lxb_css_selector_list_t * next
Definition selector.h:171
lxb_css_memory_t * memory
Definition selector.h:174
lxb_css_selector_t * last
Definition selector.h:167
lxb_css_selector_specificity_t specificity
Definition selector.h:176
lxb_css_selector_list_t * prev
Definition selector.h:172
lxb_css_selector_t * parent
Definition selector.h:169
lxb_css_selector_t * first
Definition selector.h:166
lxb_css_selector_type_t type
Definition selector.h:84
lexbor_str_t ns
Definition selector.h:88
lxb_css_selector_t * next
Definition selector.h:96
lxb_css_selector_t * prev
Definition selector.h:97
lxb_css_selector_list_t * list
Definition selector.h:99
union lxb_css_selector::lxb_css_selector_u u
lxb_css_selector_combinator_t combinator
Definition selector.h:85
lexbor_str_t name
Definition selector.h:87
unsigned int lxb_status_t
Definition types.h:28
unsigned char lxb_char_t
Definition types.h:27
lxb_css_selector_attribute_t attribute
Definition selector.h:91
lxb_css_selector_pseudo_t pseudo
Definition selector.h:92