1 /*
2  * Copyright (C) 2020-2022 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_CSS_SELECTORS_PSEUDO_H
8 #define LEXBOR_CSS_SELECTORS_PSEUDO_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "lexbor/css/base.h"
15 #include "lexbor/css/syntax/parser.h"
16 #include "lexbor/css/selectors/base.h"
17 
18 
19 typedef struct {
20     lxb_char_t                          *name;
21     size_t                              length;
22     unsigned                            id;
23     bool                                empty;
24     lxb_css_selector_combinator_t       combinator;
25     const lxb_css_syntax_cb_function_t  cb;
26     bool                                forgiving;
27     bool                                comma;
28 }
29 lxb_css_selectors_pseudo_data_func_t;
30 
31 typedef struct {
32     lxb_char_t *name;
33     size_t     length;
34     unsigned   id;
35 }
36 lxb_css_selectors_pseudo_data_t;
37 
38 
39 LXB_API const lxb_css_selectors_pseudo_data_t *
40 lxb_css_selector_pseudo_class_by_name(const lxb_char_t *name, size_t length);
41 
42 LXB_API const lxb_css_selectors_pseudo_data_func_t *
43 lxb_css_selector_pseudo_class_function_by_name(const lxb_char_t *name,
44                                                size_t length);
45 
46 LXB_API const lxb_css_selectors_pseudo_data_func_t *
47 lxb_css_selector_pseudo_class_function_by_id(unsigned id);
48 
49 LXB_API const lxb_css_selectors_pseudo_data_t *
50 lxb_css_selector_pseudo_element_by_name(const lxb_char_t *name, size_t length);
51 
52 LXB_API const lxb_css_selectors_pseudo_data_func_t *
53 lxb_css_selector_pseudo_element_function_by_name(const lxb_char_t *name,
54                                                  size_t length);
55 
56 LXB_API const lxb_css_selectors_pseudo_data_func_t *
57 lxb_css_selector_pseudo_element_function_by_id(unsigned id);
58 
59 LXB_API const lxb_css_selectors_pseudo_data_func_t *
60 lxb_css_selector_pseudo_function_by_id(unsigned id, bool is_class);
61 
62 LXB_API bool
63 lxb_css_selector_pseudo_function_can_empty(unsigned id, bool is_class);
64 
65 
66 #ifdef __cplusplus
67 } /* extern "C" */
68 #endif
69 
70 #endif /* LEXBOR_CSS_SELECTORS_PSEUDO_H */
71