php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
selector.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
8#include "lexbor/css/css.h"
16
17
18typedef void
20 lxb_css_memory_t *mem);
23 lexbor_serialize_cb_f cb, void *ctx);
24
25
26static void
27lxb_css_selector_destroy_undef(lxb_css_selector_t *selector,
28 lxb_css_memory_t *mem);
29static void
30lxb_css_selector_destroy_any(lxb_css_selector_t *selector,
31 lxb_css_memory_t *mem);
32static void
33lxb_css_selector_destroy_id(lxb_css_selector_t *selector,
34 lxb_css_memory_t *mem);
35static void
36lxb_css_selector_destroy_attribute(lxb_css_selector_t *selector,
37 lxb_css_memory_t *mem);
38static void
39lxb_css_selector_destroy_pseudo_class_function(lxb_css_selector_t *selector,
40 lxb_css_memory_t *mem);
41static void
42lxb_css_selector_destroy_pseudo_element_function(lxb_css_selector_t *selector,
43 lxb_css_memory_t *mem);
44
45static lxb_status_t
46lxb_css_selector_serialize_undef(lxb_css_selector_t *selector,
47 lexbor_serialize_cb_f cb, void *ctx);
48static lxb_status_t
49lxb_css_selector_serialize_any(lxb_css_selector_t *selector,
50 lexbor_serialize_cb_f cb, void *ctx);
51static lxb_status_t
52lxb_css_selector_serialize_id(lxb_css_selector_t *selector,
53 lexbor_serialize_cb_f cb, void *ctx);
54static lxb_status_t
55lxb_css_selector_serialize_class(lxb_css_selector_t *selector,
56 lexbor_serialize_cb_f cb, void *ctx);
57static lxb_status_t
58lxb_css_selector_serialize_attribute(lxb_css_selector_t *selector,
59 lexbor_serialize_cb_f cb, void *ctx);
60static lxb_status_t
61lxb_css_selector_serialize_pseudo_class(lxb_css_selector_t *selector,
62 lexbor_serialize_cb_f cb, void *ctx);
63static lxb_status_t
64lxb_css_selector_serialize_pseudo_class_function(lxb_css_selector_t *selector,
65 lexbor_serialize_cb_f cb, void *ctx);
66static lxb_status_t
67lxb_css_selector_serialize_pseudo_element(lxb_css_selector_t *selector,
68 lexbor_serialize_cb_f cb, void *ctx);
69static lxb_status_t
70lxb_css_selector_serialize_pseudo_element_function(lxb_css_selector_t *selector,
71 lexbor_serialize_cb_f cb, void *ctx);
72
73static lxb_status_t
74lxb_css_selector_serialize_pseudo_single(lxb_css_selector_t *selector,
75 lexbor_serialize_cb_f cb, void *ctx,
76 bool is_class);
77
78
80 lxb_selector_destroy_map[LXB_CSS_SELECTOR_TYPE__LAST_ENTRY] =
81{
82 lxb_css_selector_destroy_undef,
83 lxb_css_selector_destroy_any,
84 lxb_css_selector_destroy_any,
85 lxb_css_selector_destroy_id,
86 lxb_css_selector_destroy_id,
87 lxb_css_selector_destroy_attribute,
88 lxb_css_selector_destroy_undef,
89 lxb_css_selector_destroy_pseudo_class_function,
90 lxb_css_selector_destroy_undef,
91 lxb_css_selector_destroy_pseudo_element_function
92};
93
95 lxb_selector_serialize_map[LXB_CSS_SELECTOR_TYPE__LAST_ENTRY] =
96{
97 lxb_css_selector_serialize_undef,
98 lxb_css_selector_serialize_any,
99 lxb_css_selector_serialize_any,
100 lxb_css_selector_serialize_id,
101 lxb_css_selector_serialize_class,
102 lxb_css_selector_serialize_attribute,
103 lxb_css_selector_serialize_pseudo_class,
104 lxb_css_selector_serialize_pseudo_class_function,
105 lxb_css_selector_serialize_pseudo_element,
106 lxb_css_selector_serialize_pseudo_element_function
107};
108
109
112{
114 if (selector == NULL) {
115 return NULL;
116 }
117
118 selector->list = list;
119
120 return selector;
121}
122
123void
125{
126 lxb_css_memory_t *memory;
127
128 if (selector != NULL) {
129 memory = selector->list->memory;
130
131 lxb_selector_destroy_map[selector->type](selector, memory);
132 lexbor_dobject_free(memory->objs, selector);
133 }
134}
135
136void
138{
140
141 while (selector != NULL) {
142 next = selector->next;
143 lxb_css_selector_destroy(selector);
144 selector = next;
145 }
146}
147
148void
150{
151 if (selector->next != NULL) {
152 selector->next->prev = selector->prev;
153 }
154
155 if (selector->prev != NULL) {
156 selector->prev->next = selector->next;
157 }
158
159 if (selector->list->first == selector) {
160 selector->list->first = selector->next;
161 }
162
163 if (selector->list->last == selector) {
164 selector->list->last = selector->prev;
165 }
166}
167
170{
172
173 list = lexbor_dobject_calloc(mem->objs);
174 if (list == NULL) {
175 return NULL;
176 }
177
178 list->memory = mem;
179
180 return list;
181}
182
183void
185{
186 if (list->next != NULL) {
187 list->next->prev = list->prev;
188 }
189
190 if (list->prev != NULL) {
191 list->prev->next = list->next;
192 }
193}
194
195void
198{
200
201 if (selectors->list == list) {
202 selectors->list = list->next;
203 }
204
205 if (selectors->list_last == list) {
206 selectors->list_last = list->prev;
207 }
208}
209
210void
218
219void
221{
223
224 while (list != NULL) {
225 next = list->next;
227 list = next;
228 }
229}
230
231void
233{
234 if (list != NULL) {
235 (void) lxb_css_memory_destroy(list->memory, true);
236 }
237}
238
239static void
240lxb_css_selector_destroy_undef(lxb_css_selector_t *selector,
241 lxb_css_memory_t *mem)
242{
243 /* Do nothing. */
244}
245
246static void
247lxb_css_selector_destroy_any(lxb_css_selector_t *selector,
248 lxb_css_memory_t *mem)
249{
250 if (selector->ns.data != NULL) {
251 lexbor_mraw_free(mem->mraw, selector->ns.data);
252 }
253
254 if (selector->name.data != NULL) {
255 lexbor_mraw_free(mem->mraw, selector->name.data);
256 }
257}
258
259static void
260lxb_css_selector_destroy_id(lxb_css_selector_t *selector,
261 lxb_css_memory_t *mem)
262{
263 if (selector->name.data != NULL) {
264 (void) lexbor_mraw_free(mem->mraw, selector->name.data);
265 }
266}
267
268static void
269lxb_css_selector_destroy_attribute(lxb_css_selector_t *selector,
270 lxb_css_memory_t *mem)
271{
272 if (selector->ns.data != NULL) {
273 lexbor_mraw_free(mem->mraw, selector->ns.data);
274 }
275
276 if (selector->name.data != NULL) {
277 lexbor_mraw_free(mem->mraw, selector->name.data);
278 }
279
280 if (selector->u.attribute.value.data != NULL) {
281 lexbor_mraw_free(mem->mraw, selector->u.attribute.value.data);
282 }
283}
284
285static void
286lxb_css_selector_destroy_pseudo_class_function(lxb_css_selector_t *selector,
287 lxb_css_memory_t *mem)
288{
291
292 pseudo = &selector->u.pseudo;
293
294 switch (pseudo->type) {
296 break;
298 break;
299
303 break;
304
306 break;
307
310 break;
311
318 anbof = pseudo->data;
319
320 if (anbof != NULL) {
322 lexbor_mraw_free(mem->mraw, anbof);
323 }
324 break;
325
328 break;
329
330 default:
331 break;
332 }
333}
334
335static void
336lxb_css_selector_destroy_pseudo_element_function(lxb_css_selector_t *selector,
337 lxb_css_memory_t *mem)
338{
339
340}
341
344 lexbor_serialize_cb_f cb, void *ctx)
345{
346 return lxb_selector_serialize_map[selector->type](selector, cb, ctx);
347}
348
351 lexbor_serialize_cb_f cb, void *ctx)
352{
353 size_t length;
356
357 if (selector == NULL) {
358 return LXB_STATUS_OK;
359 }
360
362 data = lxb_css_selector_combinator(selector, &length);
363 if (data == NULL) {
365 }
366
369 }
370
371 status = lxb_css_selector_serialize(selector, cb, ctx);
372 if (status != LXB_STATUS_OK) {
373 return status;
374 }
375
376 selector = selector->next;
377
378 while (selector != NULL) {
379 data = lxb_css_selector_combinator(selector, &length);
380 if (data == NULL) {
382 }
383
384 if (length != 0) {
386
387 if (*data != ' ') {
390 }
391 }
392
393 status = lxb_css_selector_serialize(selector, cb, ctx);
394 if (status != LXB_STATUS_OK) {
395 return status;
396 }
397
398 selector = selector->next;
399 }
400
401 return LXB_STATUS_OK;
402}
403
406 size_t *out_length)
407{
408 size_t length = 0;
410 lexbor_str_t str;
411
413 &length);
414 if (status != LXB_STATUS_OK) {
415 goto failed;
416 }
417
418 /* + 1 == '\0' */
419 str.data = lexbor_malloc(length + 1);
420 if (str.data == NULL) {
421 goto failed;
422 }
423
424 str.length = 0;
425
427 &str);
428 if (status != LXB_STATUS_OK) {
429 lexbor_free(str.data);
430 goto failed;
431 }
432
433 str.data[str.length] = '\0';
434
435 if (out_length != NULL) {
436 *out_length = str.length;
437 }
438
439 return str.data;
440
441failed:
442
443 if (out_length != NULL) {
444 *out_length = 0;
445 }
446
447 return NULL;
448}
449
452 lexbor_serialize_cb_f cb, void *ctx)
453{
454 if (list != NULL) {
455 return lxb_css_selector_serialize_chain(list->first, cb, ctx);
456 }
457
458 return LXB_STATUS_OK;
459}
460
463 size_t *out_length)
464{
465 size_t length = 0;
467 lexbor_str_t str;
468
470 &length);
471 if (status != LXB_STATUS_OK) {
472 goto failed;
473 }
474
475 /* + 1 == '\0' */
476 str.data = lexbor_malloc(length + 1);
477 if (str.data == NULL) {
478 goto failed;
479 }
480
481 str.length = 0;
482
484 &str);
485 if (status != LXB_STATUS_OK) {
486 lexbor_free(str.data);
487 goto failed;
488 }
489
490 str.data[str.length] = '\0';
491
492 if (out_length != NULL) {
493 *out_length = str.length;
494 }
495
496 return str.data;
497
498failed:
499
500 if (out_length != NULL) {
501 *out_length = 0;
502 }
503
504 return NULL;
505}
506
509 lexbor_serialize_cb_f cb, void *ctx)
510{
512
513 if (list == NULL) {
514 return LXB_STATUS_OK;
515 }
516
518 if (status != LXB_STATUS_OK) {
519 return status;
520 }
521
522 list = list->next;
523
524 while (list != NULL) {
526
528 if (status != LXB_STATUS_OK) {
529 return status;
530 }
531
532 list = list->next;
533 }
534
535 return LXB_STATUS_OK;
536}
537
540 size_t *out_length)
541{
542 size_t length = 0;
544 lexbor_str_t str;
545
547 &length);
548 if (status != LXB_STATUS_OK) {
549 goto failed;
550 }
551
552 /* + 1 == '\0' */
553 str.data = lexbor_malloc(length + 1);
554 if (str.data == NULL) {
555 goto failed;
556 }
557
558 str.length = 0;
559
561 &str);
562 if (status != LXB_STATUS_OK) {
563 lexbor_free(str.data);
564 goto failed;
565 }
566
567 str.data[str.length] = '\0';
568
569 if (out_length != NULL) {
570 *out_length = str.length;
571 }
572
573 return str.data;
574
575failed:
576
577 if (out_length != NULL) {
578 *out_length = 0;
579 }
580
581 return NULL;
582}
583
584
585static lxb_status_t
586lxb_css_selector_serialize_undef(lxb_css_selector_t *selector,
587 lexbor_serialize_cb_f cb, void *ctx)
588{
590}
591
592static lxb_status_t
593lxb_css_selector_serialize_any(lxb_css_selector_t *selector,
594 lexbor_serialize_cb_f cb, void *ctx)
595{
597
598 if (selector->ns.data != NULL) {
600 selector->ns.length);
602 }
603
604 if (selector->name.data != NULL) {
605 return cb(selector->name.data, selector->name.length, ctx);
606 }
607
608 return LXB_STATUS_OK;
609}
610
611static lxb_status_t
612lxb_css_selector_serialize_id(lxb_css_selector_t *selector,
613 lexbor_serialize_cb_f cb, void *ctx)
614{
616
618
619 if (selector->name.data != NULL) {
620 return cb(selector->name.data, selector->name.length, ctx);
621 }
622
623 return LXB_STATUS_OK;
624}
625
626static lxb_status_t
627lxb_css_selector_serialize_class(lxb_css_selector_t *selector,
628 lexbor_serialize_cb_f cb, void *ctx)
629{
631
633
634 if (selector->name.data != NULL) {
635 return cb(selector->name.data, selector->name.length, ctx);
636 }
637
638 return LXB_STATUS_OK;
639}
640
641static lxb_status_t
642lxb_css_selector_serialize_attribute(lxb_css_selector_t *selector,
643 lexbor_serialize_cb_f cb, void *ctx)
644{
645 lxb_char_t *p, *begin, *end;
648
650
651 status = lxb_css_selector_serialize_any(selector, cb, ctx);
652 if (status != LXB_STATUS_OK) {
653 return status;
654 }
655
656 attr = &selector->u.attribute;
657
658 if (attr->value.data == NULL) {
659 return cb((lxb_char_t *) "]", 1, ctx);
660 }
661
662 switch (attr->match) {
665 break;
668 break;
671 break;
674 break;
677 break;
680 break;
681
682 default:
684 }
685
686 p = attr->value.data;
687 end = attr->value.data + attr->value.length;
688
689 begin = p;
690
692
693 while (p < end) {
694 if (*p == '"') {
695 if (begin < p) {
697 }
698
700
701 begin = p + 1;
702 }
703
704 p++;
705 }
706
707 if (begin < p) {
709 }
710
712
713 if (attr->modifier != LXB_CSS_SELECTOR_MODIFIER_UNSET) {
714 switch (attr->modifier) {
717 break;
718
721 break;
722
723 default:
725 }
726 }
727
728 return cb((lxb_char_t *) "]", 1, ctx);
729}
730
731static lxb_status_t
732lxb_css_selector_serialize_pseudo_class(lxb_css_selector_t *selector,
733 lexbor_serialize_cb_f cb, void *ctx)
734{
735 return lxb_css_selector_serialize_pseudo_single(selector, cb, ctx, true);
736}
737
738static lxb_status_t
739lxb_css_selector_serialize_pseudo_class_function(lxb_css_selector_t *selector,
740 lexbor_serialize_cb_f cb, void *ctx)
741{
745
746 pseudo = &selector->u.pseudo;
747
748 pfunc = &lxb_css_selectors_pseudo_data_pseudo_class_function[pseudo->type];
749
753
754 switch (pseudo->type) {
756 break;
758 break;
759
763 cb, ctx);
764 break;
766 break;
767
770 cb, ctx);
771 break;
772
780
781 if (pseudo->data != NULL) {
783 cb, ctx);
784 }
785 break;
786
789 cb, ctx);
790 break;
791
792 default:
794 break;
795 }
796
797 if (status != LXB_STATUS_OK) {
798 return status;
799 }
800
802
803 return LXB_STATUS_OK;
804}
805
806static lxb_status_t
807lxb_css_selector_serialize_pseudo_element(lxb_css_selector_t *selector,
808 lexbor_serialize_cb_f cb, void *ctx)
809{
810 return lxb_css_selector_serialize_pseudo_single(selector, cb, ctx, false);
811}
812
813static lxb_status_t
814lxb_css_selector_serialize_pseudo_element_function(lxb_css_selector_t *selector,
815 lexbor_serialize_cb_f cb, void *ctx)
816{
817 return LXB_STATUS_OK;
818}
819
820static lxb_status_t
821lxb_css_selector_serialize_pseudo_single(lxb_css_selector_t *selector,
822 lexbor_serialize_cb_f cb, void *ctx,
823 bool is_class)
824{
828
829 pseudo = &selector->u.pseudo;
830
831 if (is_class) {
832 pclass = &lxb_css_selectors_pseudo_data_pseudo_class[pseudo->type];
834 }
835 else {
836 pclass = &lxb_css_selectors_pseudo_data_pseudo_element[pseudo->type];
838 }
839
841
842 return LXB_STATUS_OK;
843}
844
847 lexbor_serialize_cb_f cb, void *ctx)
848{
850
851 static const lxb_char_t of[] = " of ";
852
853 status = lxb_css_syntax_anb_serialize(&anbof->anb, cb, ctx);
854 if (status != LXB_STATUS_OK) {
855 return status;
856 }
857
858 if (anbof->of != NULL) {
859 lxb_css_selector_serialize_write(of, sizeof(of) - 1);
860
861 return lxb_css_selector_serialize_list_chain(anbof->of, cb, ctx);
862 }
863
864 return LXB_STATUS_OK;
865}
866
869{
870 switch (selector->combinator) {
872 if (out_length != NULL) {*out_length = 1;}
873 return (lxb_char_t *) " ";
874
876 if (out_length != NULL) {*out_length = 0;}
877 return (lxb_char_t *) "";
878
880 if (out_length != NULL) {*out_length = 1;}
881 return (lxb_char_t *) ">";
882
884 if (out_length != NULL) {*out_length = 1;}
885 return (lxb_char_t *) "+";
886
888 if (out_length != NULL) {*out_length = 1;}
889 return (lxb_char_t *) "~";
890
892 if (out_length != NULL) {*out_length = 2;}
893 return (lxb_char_t *) "||";
894
895 default:
896 if (out_length != NULL) {*out_length = 0;}
897 return NULL;
898 }
899}
900
901void
903 lxb_css_selector_t *selector)
904{
905 selector->prev = list->last;
906
907 if (list->last != NULL) {
908 list->last->next = selector;
909 }
910 else {
911 list->first = selector;
912 }
913
914 list->last = selector;
915}
916
917void
919{
920 if (dist->next != NULL) {
921 dist->next->prev = src;
922 }
923
924 src->prev = dist;
925 src->next = dist->next;
926
927 dist->next = src;
928}
929
930void
933{
934 if (dist->next != NULL) {
935 dist->next->prev = src;
936 }
937
938 src->prev = dist;
939 src->next = dist->next;
940
941 dist->next = src;
942}
lxb_status_t lxb_css_syntax_anb_serialize(lxb_css_syntax_anb_t *anb, lexbor_serialize_cb_f cb, void *ctx)
Definition anb.c:379
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
@ LXB_STATUS_OK
Definition base.h:49
@ LXB_STATUS_ERROR_UNEXPECTED_DATA
Definition base.h:61
struct lxb_css_memory lxb_css_memory_t
LXB_API lxb_css_memory_t * lxb_css_memory_destroy(lxb_css_memory_t *memory, bool self_destroy)
Definition css.c:97
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_css_selector_serialize_write(data, length)
Definition base.h:28
DNS_STATUS status
Definition dns_win32.c:49
void * lexbor_dobject_calloc(lexbor_dobject_t *dobject)
Definition dobject.c:123
void * lexbor_dobject_free(lexbor_dobject_t *dobject, void *data)
Definition dobject.c:135
int begin
Definition eaw_table.h:20
new_type attr
Definition ffi.c:4364
#define NULL
Definition gdcache.h:45
LXB_API void * lexbor_free(void *dst)
Definition memory.c:33
LXB_API void * lexbor_malloc(size_t size)
Definition memory.c:15
#define next(ls)
Definition minilua.c:2661
void * lexbor_mraw_free(lexbor_mraw_t *mraw, void *data)
Definition mraw.c:392
unsigned const char * end
Definition php_ffi.h:51
zend_constant * data
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_LAST_COL
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_LAST_OF_TYPE
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_IS
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_DIR
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_HAS
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_COL
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_CURRENT
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_LANG
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_WHERE
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_CHILD
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_OF_TYPE
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NOT
@ LXB_CSS_SELECTOR_PSEUDO_CLASS_FUNCTION_NTH_LAST_CHILD
lxb_css_selector_list_t * lxb_css_selector_list_create(lxb_css_memory_t *mem)
Definition selector.c:169
void lxb_css_selector_list_remove(lxb_css_selector_list_t *list)
Definition selector.c:184
void lxb_css_selector_remove(lxb_css_selector_t *selector)
Definition selector.c:149
lxb_status_t(* lxb_css_selector_serialize_f)(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:22
void lxb_css_selector_list_destroy_memory(lxb_css_selector_list_t *list)
Definition selector.c:232
lxb_char_t * lxb_css_selector_serialize_chain_char(lxb_css_selector_t *selector, size_t *out_length)
Definition selector.c:405
lxb_char_t * lxb_css_selector_serialize_list_chain_char(lxb_css_selector_list_t *list, size_t *out_length)
Definition selector.c:539
void lxb_css_selector_destroy_chain(lxb_css_selector_t *selector)
Definition selector.c:137
void lxb_css_selector_list_append_next(lxb_css_selector_list_t *dist, lxb_css_selector_list_t *src)
Definition selector.c:931
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_css_selector_t * lxb_css_selector_create(lxb_css_selector_list_t *list)
Definition selector.c:111
void lxb_css_selector_list_destroy(lxb_css_selector_list_t *list)
Definition selector.c:211
void lxb_css_selector_append_next(lxb_css_selector_t *dist, lxb_css_selector_t *src)
Definition selector.c:918
void lxb_css_selector_list_destroy_chain(lxb_css_selector_list_t *list)
Definition selector.c:220
lxb_status_t lxb_css_selector_serialize(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:343
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_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
lxb_char_t * lxb_css_selector_serialize_list_char(lxb_css_selector_list_t *list, size_t *out_length)
Definition selector.c:462
lxb_char_t * lxb_css_selector_combinator(lxb_css_selector_t *selector, size_t *out_length)
Definition selector.c:868
void lxb_css_selector_list_append(lxb_css_selector_list_t *list, lxb_css_selector_t *selector)
Definition selector.c:902
void lxb_css_selector_list_selectors_remove(lxb_css_selectors_t *selectors, lxb_css_selector_list_t *list)
Definition selector.c:196
lxb_status_t lxb_css_selector_serialize_chain(lxb_css_selector_t *selector, lexbor_serialize_cb_f cb, void *ctx)
Definition selector.c:350
void(* lxb_css_selector_destroy_f)(lxb_css_selector_t *selector, lxb_css_memory_t *mem)
Definition selector.c:19
void lxb_css_selector_destroy(lxb_css_selector_t *selector)
Definition selector.c:124
@ 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_FOLLOWING
Definition selector.h:39
@ LXB_CSS_SELECTOR_TYPE__LAST_ENTRY
Definition selector.h:30
@ LXB_CSS_SELECTOR_MODIFIER_UNSET
Definition selector.h:57
@ LXB_CSS_SELECTOR_MODIFIER_S
Definition selector.h:59
@ LXB_CSS_SELECTOR_MODIFIER_I
Definition selector.h:58
@ 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_INCLUDE
Definition selector.h:47
@ LXB_CSS_SELECTOR_MATCH_EQUAL
Definition selector.h:46
lxb_status_t lexbor_serialize_length_cb(const lxb_char_t *data, size_t length, void *ctx)
Definition serialize.c:12
lxb_status_t lexbor_serialize_copy_cb(const lxb_char_t *data, size_t length, void *ctx)
Definition serialize.c:19
p
Definition session.c:1105
lxb_char_t * data
Definition str.h:47
size_t length
Definition str.h:48
lexbor_dobject_t * objs
Definition base.h:31
lexbor_mraw_t * mraw
Definition base.h:32
lxb_css_selector_list_t * of
Definition selector.h:79
lxb_css_syntax_anb_t anb
Definition selector.h:78
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_list_t * prev
Definition selector.h:172
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
lxb_css_selector_list_t * list_last
Definition selectors.h:25
lxb_css_selector_list_t * list
Definition selectors.h:24
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
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)