xref: /php-src/ext/dom/lexbor/lexbor/dom/interface.h (revision bffab33a)
1 /*
2  * Copyright (C) 2018-2021 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_DOM_INTERFACES_H
8 #define LEXBOR_DOM_INTERFACES_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "lexbor/core/base.h"
15 
16 #include "lexbor/tag/const.h"
17 #include "lexbor/ns/const.h"
18 
19 #include "lexbor/dom/exception.h"
20 
21 
22 #define lxb_dom_interface_cdata_section(obj) ((lxb_dom_cdata_section_t *) (obj))
23 #define lxb_dom_interface_character_data(obj) ((lxb_dom_character_data_t *) (obj))
24 #define lxb_dom_interface_comment(obj) ((lxb_dom_comment_t *) (obj))
25 #define lxb_dom_interface_document(obj) ((lxb_dom_document_t *) (obj))
26 #define lxb_dom_interface_document_fragment(obj) ((lxb_dom_document_fragment_t *) (obj))
27 #define lxb_dom_interface_document_type(obj) ((lxb_dom_document_type_t *) (obj))
28 #define lxb_dom_interface_element(obj) ((lxb_dom_element_t *) (obj))
29 #define lxb_dom_interface_attr(obj) ((lxb_dom_attr_t *) (obj))
30 #define lxb_dom_interface_event_target(obj) ((lxb_dom_event_target_t *) (obj))
31 #define lxb_dom_interface_node(obj) ((lxb_dom_node_t *) (obj))
32 #define lxb_dom_interface_processing_instruction(obj) ((lxb_dom_processing_instruction_t *) (obj))
33 #define lxb_dom_interface_shadow_root(obj) ((lxb_dom_shadow_root_t *) (obj))
34 #define lxb_dom_interface_text(obj) ((lxb_dom_text_t *) (obj))
35 
36 
37 typedef struct lxb_dom_event_target lxb_dom_event_target_t;
38 typedef struct lxb_dom_node lxb_dom_node_t;
39 typedef struct lxb_dom_element lxb_dom_element_t;
40 typedef struct lxb_dom_attr lxb_dom_attr_t;
41 typedef struct lxb_dom_document lxb_dom_document_t;
42 typedef struct lxb_dom_document_type lxb_dom_document_type_t;
43 typedef struct lxb_dom_document_fragment lxb_dom_document_fragment_t;
44 typedef struct lxb_dom_shadow_root lxb_dom_shadow_root_t;
45 typedef struct lxb_dom_character_data lxb_dom_character_data_t;
46 typedef struct lxb_dom_text lxb_dom_text_t;
47 typedef struct lxb_dom_cdata_section lxb_dom_cdata_section_t;
48 typedef struct lxb_dom_processing_instruction lxb_dom_processing_instruction_t;
49 typedef struct lxb_dom_comment lxb_dom_comment_t;
50 
51 typedef void lxb_dom_interface_t;
52 
53 typedef void *
54 (*lxb_dom_interface_constructor_f)(void *document);
55 
56 typedef void *
57 (*lxb_dom_interface_destructor_f)(void *intrfc);
58 
59 
60 typedef lxb_dom_interface_t *
61 (*lxb_dom_interface_create_f)(lxb_dom_document_t *document, lxb_tag_id_t tag_id,
62                               lxb_ns_id_t ns);
63 
64 typedef lxb_dom_interface_t *
65 (*lxb_dom_interface_clone_f)(lxb_dom_document_t *document,
66                              const lxb_dom_interface_t *intrfc);
67 
68 typedef lxb_dom_interface_t *
69 (*lxb_dom_interface_destroy_f)(lxb_dom_interface_t *intrfc);
70 
71 typedef lxb_status_t
72 (*lxb_dom_event_insert_f)(lxb_dom_node_t *node);
73 
74 typedef lxb_status_t
75 (*lxb_dom_event_remove_f)(lxb_dom_node_t *node);
76 
77 typedef lxb_status_t
78 (*lxb_dom_event_destroy_f)(lxb_dom_node_t *node);
79 
80 typedef lxb_status_t
81 (*lxb_dom_event_set_value_f)(lxb_dom_node_t *node,
82                              const lxb_char_t *value, size_t length);
83 
84 
85 LXB_API lxb_dom_interface_t *
86 lxb_dom_interface_create(lxb_dom_document_t *document, lxb_tag_id_t tag_id,
87                          lxb_ns_id_t ns);
88 
89 LXB_API lxb_dom_interface_t *
90 lxb_dom_interface_clone(lxb_dom_document_t *document,
91                         const lxb_dom_interface_t *intrfc);
92 
93 LXB_API lxb_dom_interface_t *
94 lxb_dom_interface_destroy(lxb_dom_interface_t *intrfc);
95 
96 
97 #ifdef __cplusplus
98 } /* extern "C" */
99 #endif
100 
101 #endif /* LEXBOR_DOM_INTERFACES_H */
102