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