1 /*
2  * Copyright (C) 2018-2021 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_DOM_PROCESSING_INSTRUCTION_H
8 #define LEXBOR_DOM_PROCESSING_INSTRUCTION_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "lexbor/dom/interfaces/document.h"
15 #include "lexbor/dom/interfaces/text.h"
16 
17 
18 struct lxb_dom_processing_instruction {
19     lxb_dom_character_data_t char_data;
20 
21     lexbor_str_t             target;
22 };
23 
24 
25 LXB_API lxb_dom_processing_instruction_t *
26 lxb_dom_processing_instruction_interface_create(lxb_dom_document_t *document);
27 
28 LXB_API lxb_dom_processing_instruction_t *
29 lxb_dom_processing_instruction_interface_clone(lxb_dom_document_t *document,
30                                                const lxb_dom_processing_instruction_t *processing_instruction);
31 
32 LXB_API lxb_dom_processing_instruction_t *
33 lxb_dom_processing_instruction_interface_destroy(lxb_dom_processing_instruction_t *processing_instruction);
34 
35 
36 LXB_API lxb_status_t
37 lxb_dom_processing_instruction_copy(lxb_dom_processing_instruction_t *dst,
38                                     const lxb_dom_processing_instruction_t *src);
39 
40 /*
41  * Inline functions
42  */
43 lxb_inline const lxb_char_t *
lxb_dom_processing_instruction_target(lxb_dom_processing_instruction_t * pi,size_t * len)44 lxb_dom_processing_instruction_target(lxb_dom_processing_instruction_t *pi,
45                                       size_t *len)
46 {
47     if (len != NULL) {
48         *len = pi->target.length;
49     }
50 
51     return pi->target.data;
52 }
53 
54 /*
55  * No inline functions for ABI.
56  */
57 LXB_API const lxb_char_t *
58 lxb_dom_processing_instruction_target_noi(lxb_dom_processing_instruction_t *pi,
59                                           size_t *len);
60 
61 
62 #ifdef __cplusplus
63 } /* extern "C" */
64 #endif
65 
66 #endif /* LEXBOR_DOM_PROCESSING_INSTRUCTION_H */
67