php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
rule.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021-2023 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7#ifndef LXB_CSS_RULE_H
8#define LXB_CSS_RULE_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include "lexbor/css/base.h"
15#include "lexbor/css/at_rule.h"
16#include "lexbor/css/property.h"
18
19
20#define lxb_css_rule(rule) ((lxb_css_rule_t *) (rule))
21#define lxb_css_rule_list(rule) ((lxb_css_rule_list_t *) (rule))
22#define lxb_css_rule_at(rule) ((lxb_css_rule_at_t *) (rule))
23#define lxb_css_rule_style(rule) ((lxb_css_rule_style_t *) (rule))
24#define lxb_css_rule_bad_style(rule) ((lxb_css_rule_bad_style_t *) (rule))
25#define lxb_css_rule_declaration_list(rule) ((lxb_css_rule_declaration_list_t *) (rule))
26#define lxb_css_rule_declaration(rule) ((lxb_css_rule_declaration_t *) (rule))
27
28
40
42
55
62
76
83
90
99
102 uintptr_t type;
103
104 union {
204 void *user;
205 } u;
206
208};
209
210
211LXB_API void *
212lxb_css_rule_destroy(lxb_css_rule_t *node, bool self_destroy);
213
216 lexbor_serialize_cb_f cb, void *ctx);
217
220 lexbor_serialize_cb_f cb, void *ctx);
221
224
227 lexbor_serialize_cb_f cb, void *ctx);
228
231
234 void *ctx);
235
238 void *ctx);
239
242
245 lexbor_serialize_cb_f cb, void *ctx);
246
249
252 lexbor_serialize_cb_f cb, void *ctx);
253
256 bool self_destroy);
257
260 lexbor_serialize_cb_f cb, void *ctx);
261
264 bool self_destroy);
265
268 lexbor_serialize_cb_f cb, void *ctx);
269
272 lexbor_serialize_cb_f cb, void *ctx);
273
274/*
275 * Inline functions
276 */
277lxb_inline void
279{
280 if (root->next != NULL) {
281 rule->next = root->next;
282 }
283
284 root->next = rule;
285 rule->prev = root;
286}
287
291{
292 lxb_css_rule_t *rule;
293
294 rule = (lxb_css_rule_t *) lexbor_mraw_calloc(memory->tree, size);
295 if (rule== NULL) {
296 return NULL;
297 }
298
299 rule->type = type;
300 rule->memory = memory;
301
302 return rule;
303}
304
312
313lxb_inline size_t
315{
316 return rule->ref_count;
317}
318
321{
322 if (SIZE_MAX - rule->ref_count == 0) {
324 }
325
326 rule->ref_count++;
327
328 return LXB_STATUS_OK;
329}
330
331lxb_inline void
333{
334 if (rule->ref_count > 0) {
335 rule->ref_count--;
336 }
337}
338
339lxb_inline void
341{
342#if 0
343 if (rule->ref_count > 0) {
344 rule->ref_count--;
345 }
346
347 if (rule->ref_count == 0) {
348 (void) lxb_css_rule_destroy(rule, true);
349 }
350#endif
351}
352
353lxb_inline void
355{
356 if (list->first == NULL) {
357 list->first = rule;
358 }
359 else {
360 lxb_css_rule_insert_next(list->last, rule);
361 }
362
363 list->last = rule;
364 rule->parent = lxb_css_rule(list);
365
367}
368
376
384
392
400
401lxb_inline void
403 lxb_css_rule_t *rule)
404{
405 if (list->first == NULL) {
406 list->first = rule;
407 }
408 else {
409 lxb_css_rule_insert_next(list->last, rule);
410 }
411
412 list->last = rule;
413 rule->parent = lxb_css_rule(list);
414
416
417 list->count++;
418}
419
427
428
429#ifdef __cplusplus
430} /* extern "C" */
431#endif
432
433#endif /* LXB_CSS_RULE_H */
char * cb
Definition assert.c:26
uint32_t u
Definition cdf.c:78
lxb_status_t(* lexbor_serialize_cb_f)(const lxb_char_t *data, size_t len, void *ctx)
Definition base.h:82
@ LXB_STATUS_OK
Definition base.h:49
@ LXB_STATUS_ERROR_OVERFLOW
Definition base.h:62
struct lxb_css_rule_at lxb_css_rule_at_t
Definition base.h:71
struct lxb_css_rule_style lxb_css_rule_style_t
Definition base.h:67
struct lxb_css_memory lxb_css_memory_t
struct lxb_css_rule_declaration lxb_css_rule_declaration_t
Definition base.h:70
struct lxb_css_rule_list lxb_css_rule_list_t
Definition base.h:66
struct lxb_css_rule_declaration_list lxb_css_rule_declaration_list_t
Definition base.h:69
struct lxb_css_rule_bad_style lxb_css_rule_bad_style_t
Definition base.h:68
struct lxb_css_selector_list lxb_css_selector_list_t
Definition base.h:40
#define LXB_API
Definition def.h:48
zend_ffi_type * type
Definition ffi.c:3812
new_type size
Definition ffi.c:4365
#define SIZE_MAX
Definition funcs.c:51
#define NULL
Definition gdcache.h:45
void * lexbor_mraw_calloc(lexbor_mraw_t *mraw, size_t size)
Definition mraw.c:227
lxb_css_value_length_percentage_t lxb_css_property_margin_left_t
Definition property.h:57
lxb_css_value_length_percentage_t lxb_css_property_margin_bottom_t
Definition property.h:56
lxb_css_value_length_percentage_t lxb_css_property_inset_inline_end_t
Definition property.h:119
lxb_css_value_number_type_t lxb_css_property_font_weight_t
Definition property.h:220
lxb_css_value_color_t lxb_css_property_border_top_color_t
Definition property.h:96
lxb_css_value_integer_type_t lxb_css_property_z_index_t
Definition property.h:329
lxb_css_value_length_percentage_t lxb_css_property_right_t
Definition property.h:112
lxb_css_value_length_percentage_t lxb_css_property_margin_right_t
Definition property.h:55
lxb_css_value_number_type_t lxb_css_property_flex_grow_t
Definition property.h:271
lxb_css_value_color_t lxb_css_property_text_decoration_color_t
Definition property.h:400
lxb_css_value_length_percentage_t lxb_css_property_bottom_t
Definition property.h:113
lxb_css_property_border_t lxb_css_property_border_right_t
Definition property.h:92
lxb_css_value_length_percentage_t lxb_css_property_padding_top_t
Definition property.h:58
lxb_css_value_length_percentage_t lxb_css_property_height_t
Definition property.h:49
lxb_css_property_border_t lxb_css_property_border_top_t
Definition property.h:91
lxb_css_value_length_percentage_t lxb_css_property_baseline_shift_t
Definition property.h:318
lxb_css_value_length_percentage_t lxb_css_property_margin_top_t
Definition property.h:54
lxb_css_value_length_percentage_t lxb_css_property_padding_bottom_t
Definition property.h:60
lxb_css_value_number_percentage_t lxb_css_property_opacity_t
Definition property.h:104
lxb_css_property_width_t lxb_css_property_flex_basis_t
Definition property.h:273
lxb_css_property_border_t lxb_css_property_border_bottom_t
Definition property.h:93
lxb_css_value_length_percentage_t lxb_css_property_padding_left_t
Definition property.h:61
lxb_css_value_percentage_type_t lxb_css_property_font_stretch_t
Definition property.h:221
lxb_css_value_length_percentage_t lxb_css_property_padding_right_t
Definition property.h:59
lxb_css_value_number_type_t lxb_css_property_flex_shrink_t
Definition property.h:272
lxb_css_property_border_t lxb_css_property_border_left_t
Definition property.h:94
lxb_css_value_color_t lxb_css_property_color_t
Definition property.h:103
lxb_css_value_length_percentage_t lxb_css_property_inset_block_start_t
Definition property.h:116
lxb_css_value_color_t lxb_css_property_border_left_color_t
Definition property.h:99
lxb_css_value_color_t lxb_css_property_border_right_color_t
Definition property.h:97
lxb_css_value_angle_type_t lxb_css_property_font_style_t
Definition property.h:222
lxb_css_value_length_percentage_t lxb_css_property_inset_inline_start_t
Definition property.h:117
lxb_css_value_length_percentage_t lxb_css_property_width_t
Definition property.h:48
lxb_css_value_integer_type_t lxb_css_property_order_t
Definition property.h:41
lxb_css_value_length_percentage_t lxb_css_property_inset_block_end_t
Definition property.h:118
lxb_css_value_length_percentage_t lxb_css_property_top_t
Definition property.h:111
lxb_css_value_length_percentage_type_t lxb_css_property_font_size_t
Definition property.h:223
lxb_css_value_number_length_percentage_t lxb_css_property_line_height_t
Definition property.h:327
lxb_css_value_number_length_t lxb_css_property_tab_size_t
Definition property.h:161
lxb_css_value_length_percentage_t lxb_css_property_float_offset_t
Definition property.h:242
lxb_css_value_integer_type_t lxb_css_property_float_defer_t
Definition property.h:243
lxb_css_value_color_t lxb_css_property_background_color_t
Definition property.h:101
lxb_css_value_color_t lxb_css_property_border_bottom_color_t
Definition property.h:98
lxb_css_value_length_type_t lxb_css_property_letter_spacing_t
Definition property.h:189
lxb_css_value_length_percentage_t lxb_css_property_left_t
Definition property.h:114
lxb_css_value_length_type_t lxb_css_property_word_spacing_t
Definition property.h:188
lxb_inline lxb_css_rule_t * lxb_css_rule_create(lxb_css_memory_t *memory, size_t size, lxb_css_rule_type_t type)
Definition rule.h:289
LXB_API lxb_css_rule_style_t * lxb_css_rule_style_destroy(lxb_css_rule_style_t *style, bool self_destroy)
lxb_inline lxb_css_rule_declaration_list_t * lxb_css_rule_declaration_list_create(lxb_css_memory_t *memory)
Definition rule.h:394
LXB_API lxb_status_t lxb_css_rule_at_serialize_name(const lxb_css_rule_at_t *at, lexbor_serialize_cb_f cb, void *ctx)
struct lxb_css_rule lxb_css_rule_t
Definition rule.h:41
lxb_inline lxb_css_rule_declaration_t * lxb_css_rule_declaration_create(lxb_css_memory_t *memory)
Definition rule.h:421
lxb_inline lxb_css_rule_list_t * lxb_css_rule_list_create(lxb_css_memory_t *memory)
Definition rule.h:306
LXB_API lxb_css_rule_at_t * lxb_css_rule_at_destroy(lxb_css_rule_at_t *at, bool self_destroy)
#define lxb_css_rule_declaration_list(rule)
Definition rule.h:25
LXB_API lxb_status_t lxb_css_rule_declaration_serialize(const lxb_css_rule_declaration_t *declaration, lexbor_serialize_cb_f cb, void *ctx)
#define lxb_css_rule_at(rule)
Definition rule.h:22
LXB_API lxb_css_rule_declaration_t * lxb_css_rule_declaration_destroy(lxb_css_rule_declaration_t *declr, bool self_destroy)
lxb_inline void lxb_css_rule_insert_next(lxb_css_rule_t *root, lxb_css_rule_t *rule)
Definition rule.h:278
LXB_API lxb_css_rule_declaration_list_t * lxb_css_rule_declaration_list_destroy(lxb_css_rule_declaration_list_t *list, bool self_destroy)
lxb_inline lxb_css_rule_at_t * lxb_css_rule_at_create(lxb_css_memory_t *memory)
Definition rule.h:370
#define lxb_css_rule_declaration(rule)
Definition rule.h:26
LXB_API void * lxb_css_rule_destroy(lxb_css_rule_t *node, bool self_destroy)
lxb_inline lxb_css_rule_style_t * lxb_css_rule_style_create(lxb_css_memory_t *memory)
Definition rule.h:378
lxb_inline void lxb_css_rule_ref_dec_destroy(lxb_css_rule_t *rule)
Definition rule.h:340
lxb_inline size_t lxb_css_rule_ref_count(lxb_css_rule_t *rule)
Definition rule.h:314
lxb_inline void lxb_css_rule_list_append(lxb_css_rule_list_t *list, lxb_css_rule_t *rule)
Definition rule.h:354
LXB_API lxb_status_t lxb_css_rule_declaration_serialize_name(const lxb_css_rule_declaration_t *declr, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_status_t lxb_css_rule_declaration_list_serialize(const lxb_css_rule_declaration_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_css_rule_list_t * lxb_css_rule_list_destroy(lxb_css_rule_list_t *list, bool self_destroy)
LXB_API lxb_status_t lxb_css_rule_serialize_chain(const lxb_css_rule_t *rule, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_css_rule_bad_style_t * lxb_css_rule_bad_style_destroy(lxb_css_rule_bad_style_t *bad, bool self_destroy)
lxb_inline lxb_status_t lxb_css_rule_ref_inc(lxb_css_rule_t *rule)
Definition rule.h:320
#define lxb_css_rule(rule)
Definition rule.h:20
LXB_API lxb_status_t lxb_css_rule_style_serialize(const lxb_css_rule_style_t *style, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_status_t lxb_css_rule_list_serialize(const lxb_css_rule_list_t *list, lexbor_serialize_cb_f cb, void *ctx)
lxb_css_rule_type_t
Definition rule.h:29
@ LXB_CSS_RULE_STYLESHEET
Definition rule.h:31
@ LXB_CSS_RULE_UNDEF
Definition rule.h:30
@ LXB_CSS_RULE_BAD_STYLE
Definition rule.h:35
@ LXB_CSS_RULE_LIST
Definition rule.h:32
@ LXB_CSS_RULE_DECLARATION
Definition rule.h:37
@ LXB_CSS_RULE_AT_RULE
Definition rule.h:33
@ LXB_CSS_RULE_DECLARATION_LIST
Definition rule.h:36
@ LXB_CSS_RULE_STYLE
Definition rule.h:34
lxb_inline void lxb_css_rule_declaration_list_append(lxb_css_rule_declaration_list_t *list, lxb_css_rule_t *rule)
Definition rule.h:402
LXB_API lxb_status_t lxb_css_rule_at_serialize(const lxb_css_rule_at_t *at, lexbor_serialize_cb_f cb, void *ctx)
LXB_API lxb_status_t lxb_css_rule_serialize(const lxb_css_rule_t *rule, lexbor_serialize_cb_f cb, void *ctx)
lxb_inline lxb_css_rule_bad_style_t * lxb_css_rule_bad_style_create(lxb_css_memory_t *memory)
Definition rule.h:386
#define lxb_css_rule_bad_style(rule)
Definition rule.h:24
#define lxb_css_rule_list(rule)
Definition rule.h:21
lxb_inline void lxb_css_rule_ref_dec(lxb_css_rule_t *rule)
Definition rule.h:332
LXB_API lxb_status_t lxb_css_rule_bad_style_serialize(const lxb_css_rule_bad_style_t *bad, lexbor_serialize_cb_f cb, void *ctx)
#define lxb_css_rule_style(rule)
Definition rule.h:23
lexbor_mraw_t * tree
Definition base.h:33
lxb_css_at_rule_namespace_t * ns
Definition rule.h:72
lxb_css_at_rule_media_t * media
Definition rule.h:71
lxb_css_at_rule__undef_t * undef
Definition rule.h:69
uintptr_t type
Definition rule.h:66
lxb_css_at_rule__custom_t * custom
Definition rule.h:70
lxb_css_rule_t rule
Definition rule.h:64
void * user
Definition rule.h:73
lexbor_str_t selectors
Definition rule.h:87
lxb_css_rule_declaration_list_t * declarations
Definition rule.h:88
lxb_css_rule_t rule
Definition rule.h:85
lxb_css_rule_t * first
Definition rule.h:94
lxb_css_rule_t * last
Definition rule.h:95
lxb_css_rule_t rule
Definition rule.h:92
lxb_css_property_wrap_through_t * wrap_through
Definition rule.h:171
lxb_css_property_text_decoration_style_t * text_decoration_style
Definition rule.h:201
lxb_css_property_text_decoration_color_t * text_decoration_color
Definition rule.h:202
lxb_css_property_font_weight_t * font_weight
Definition rule.h:161
lxb_css_property_align_content_t * align_content
Definition rule.h:182
lxb_css_property_padding_bottom_t * padding_bottom
Definition rule.h:121
lxb_css_property_padding_top_t * padding_top
Definition rule.h:119
lxb_css_property_flex_wrap_t * flex_wrap
Definition rule.h:173
lxb_css_property_opacity_t * opacity
Definition rule.h:134
lxb_css_property_inset_inline_start_t * inset_inline_start
Definition rule.h:141
lxb_css_property_vertical_align_t * vertical_align
Definition rule.h:184
lxb_css_property_inset_inline_end_t * inset_inline_end
Definition rule.h:143
lxb_css_property_height_t * height
Definition rule.h:111
lxb_css_property_padding_left_t * padding_left
Definition rule.h:122
lxb_css_property_text_decoration_line_t * text_decoration_line
Definition rule.h:200
lxb_css_property_hyphens_t * hyphens
Definition rule.h:154
lxb_css_property_border_left_color_t * border_left_color
Definition rule.h:131
lxb_css_property_font_stretch_t * font_stretch
Definition rule.h:162
lxb_css_property_flex_t * flex
Definition rule.h:175
lxb_css_property_overflow_inline_t * overflow_inline
Definition rule.h:198
lxb_css_property_width_t * width
Definition rule.h:110
lxb_css_property_clear_t * clear
Definition rule.h:167
lxb_css_property_top_t * top
Definition rule.h:136
lxb_css_property_wrap_flow_t * wrap_flow
Definition rule.h:170
lxb_css_property_text_overflow_t * text_overflow
Definition rule.h:199
lxb_css_property_flex_shrink_t * flex_shrink
Definition rule.h:177
lxb_css_property_baseline_source_t * baseline_source
Definition rule.h:185
lxb_css_property_overflow_y_t * overflow_y
Definition rule.h:196
lxb_css_property_left_t * left
Definition rule.h:139
lxb_css_property_display_t * display
Definition rule.h:107
lxb_css_property_flex_flow_t * flex_flow
Definition rule.h:174
lxb_css_property_flex_direction_t * flex_direction
Definition rule.h:172
lxb_css_property_background_color_t * background_color
Definition rule.h:132
lxb_css_property_z_index_t * z_index
Definition rule.h:189
lxb_css_property_right_t * right
Definition rule.h:137
lxb_css_property_inset_block_end_t * inset_block_end
Definition rule.h:142
lxb_css_property_word_wrap_t * word_wrap
Definition rule.h:156
lxb_css_property_dominant_baseline_t * dominant_baseline
Definition rule.h:183
lxb_css_property_position_t * position
Definition rule.h:135
lxb_css_property_overflow_wrap_t * overflow_wrap
Definition rule.h:155
lxb_css_property_line_break_t * line_break
Definition rule.h:153
lxb_css_property_alignment_baseline_t * alignment_baseline
Definition rule.h:186
lxb_css_property_border_t * border
Definition rule.h:123
lxb_css_property_overflow_block_t * overflow_block
Definition rule.h:197
lxb_css_property_align_self_t * align_self
Definition rule.h:181
lxb_css_property_word_break_t * word_break
Definition rule.h:152
lxb_css_property_margin_right_t * margin_right
Definition rule.h:115
lxb_css_property_float_defer_t * float_defer
Definition rule.h:168
lxb_css_property_hanging_punctuation_t * hanging_punctuation
Definition rule.h:159
lxb_css_property_margin_top_t * margin_top
Definition rule.h:114
lxb_css_property_float_t * floatp
Definition rule.h:166
lxb_css_property_tab_size_t * tab_size
Definition rule.h:151
lxb_css_property_box_sizing_t * box_sizing
Definition rule.h:112
lxb_css_property__custom_t * custom
Definition rule.h:106
lxb_css_property_text_align_all_t * text_align_all
Definition rule.h:146
lxb_css_property_word_spacing_t * word_spacing
Definition rule.h:157
lxb_css_property_writing_mode_t * writing_mode
Definition rule.h:192
lxb_css_property_border_top_t * border_top
Definition rule.h:124
lxb_css_property_text_orientation_t * text_orientation
Definition rule.h:193
lxb_css_property_padding_t * padding
Definition rule.h:118
lxb_css_property_border_left_t * border_left
Definition rule.h:127
lxb_css_property_border_top_color_t * border_top_color
Definition rule.h:128
lxb_css_property_line_height_t * line_height
Definition rule.h:188
lxb_css_property_font_size_t * font_size
Definition rule.h:164
lxb_css_property_text_align_last_t * text_align_last
Definition rule.h:147
lxb_css_rule_t rule
Definition rule.h:101
lxb_css_property_white_space_t * white_space
Definition rule.h:150
lxb_css_property_bottom_t * bottom
Definition rule.h:138
lxb_css_property_margin_bottom_t * margin_bottom
Definition rule.h:116
lxb_css_property__undef_t * undef
Definition rule.h:105
lxb_css_property_margin_t * margin
Definition rule.h:113
lxb_css_property_text_align_t * text_align
Definition rule.h:145
lxb_css_property_float_offset_t * float_offset
Definition rule.h:169
lxb_css_property_order_t * order
Definition rule.h:108
lxb_css_property_justify_content_t * justify_content
Definition rule.h:179
lxb_css_property_border_bottom_color_t * border_bottom_color
Definition rule.h:130
lxb_css_property_flex_basis_t * flex_basis
Definition rule.h:178
lxb_css_property_overflow_x_t * overflow_x
Definition rule.h:195
lxb_css_property_unicode_bidi_t * unicode_bidi
Definition rule.h:191
lxb_css_property_baseline_shift_t * baseline_shift
Definition rule.h:187
lxb_css_property_float_reference_t * float_reference
Definition rule.h:165
lxb_css_property_border_right_color_t * border_right_color
Definition rule.h:129
lxb_css_property_padding_right_t * padding_right
Definition rule.h:120
lxb_css_property_border_right_t * border_right
Definition rule.h:125
lxb_css_property_direction_t * direction
Definition rule.h:190
lxb_css_property_text_combine_upright_t * text_combine_upright
Definition rule.h:194
lxb_css_property_color_t * color
Definition rule.h:133
lxb_css_property_text_justify_t * text_justify
Definition rule.h:148
lxb_css_property_text_indent_t * text_indent
Definition rule.h:149
lxb_css_property_margin_left_t * margin_left
Definition rule.h:117
lxb_css_property_border_bottom_t * border_bottom
Definition rule.h:126
lxb_css_property_align_items_t * align_items
Definition rule.h:180
lxb_css_property_text_decoration_t * text_decoration
Definition rule.h:203
lxb_css_property_text_transform_t * text_transform
Definition rule.h:144
lxb_css_property_font_family_t * font_family
Definition rule.h:160
lxb_css_property_font_style_t * font_style
Definition rule.h:163
lxb_css_property_letter_spacing_t * letter_spacing
Definition rule.h:158
lxb_css_property_flex_grow_t * flex_grow
Definition rule.h:176
lxb_css_property_visibility_t * visibility
Definition rule.h:109
lxb_css_property_inset_block_start_t * inset_block_start
Definition rule.h:140
lxb_css_rule_t * last
Definition rule.h:60
lxb_css_rule_t * first
Definition rule.h:59
lxb_css_rule_t rule
Definition rule.h:57
lxb_css_selector_list_t * selector
Definition rule.h:80
lxb_css_rule_declaration_list_t * declarations
Definition rule.h:81
lxb_css_rule_t rule
Definition rule.h:78
const lxb_char_t * begin
Definition rule.h:49
const lxb_char_t * end
Definition rule.h:50
lxb_css_rule_t * parent
Definition rule.h:47
lxb_css_rule_t * next
Definition rule.h:45
lxb_css_rule_type_t type
Definition rule.h:44
size_t ref_count
Definition rule.h:53
lxb_css_memory_t * memory
Definition rule.h:52
lxb_css_rule_t * prev
Definition rule.h:46
unsigned int lxb_status_t
Definition types.h:28
#define lxb_inline
Definition types.h:21
unsigned char lxb_char_t
Definition types.h:27
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)