Git init
[external/libxml2.git] / include / libxml / c14n.h
1 /*
2  * Summary: Provide Canonical XML and Exclusive XML Canonicalization
3  * Description: the c14n modules provides a
4  *
5  * "Canonical XML" implementation
6  * http://www.w3.org/TR/xml-c14n
7  *
8  * and an
9  *
10  * "Exclusive XML Canonicalization" implementation
11  * http://www.w3.org/TR/xml-exc-c14n
12
13  * Copy: See Copyright for the status of this software.
14  *
15  * Author: Aleksey Sanin <aleksey@aleksey.com>
16  */
17 #ifndef __XML_C14N_H__
18 #define __XML_C14N_H__
19 #ifdef LIBXML_C14N_ENABLED
20 #ifdef LIBXML_OUTPUT_ENABLED
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif /* __cplusplus */
25
26 #include <libxml/xmlversion.h>
27 #include <libxml/tree.h>
28 #include <libxml/xpath.h>
29
30 /*
31  * XML Canonicazation
32  * http://www.w3.org/TR/xml-c14n
33  *
34  * Exclusive XML Canonicazation
35  * http://www.w3.org/TR/xml-exc-c14n
36  *
37  * Canonical form of an XML document could be created if and only if
38  *  a) default attributes (if any) are added to all nodes
39  *  b) all character and parsed entity references are resolved
40  * In order to achive this in libxml2 the document MUST be loaded with
41  * following global setings:
42  *
43  *    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
44  *    xmlSubstituteEntitiesDefault(1);
45  *
46  * or corresponding parser context setting:
47  *    xmlParserCtxtPtr ctxt;
48  *
49  *    ...
50  *    ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
51  *    ctxt->replaceEntities = 1;
52  *    ...
53  */
54
55 /*
56  * xmlC14NMode:
57  * 
58  * Predefined values for C14N modes
59  *
60  */
61 typedef enum {
62     XML_C14N_1_0            = 0,    /* Origianal C14N 1.0 spec */
63     XML_C14N_EXCLUSIVE_1_0  = 1,    /* Exclusive C14N 1.0 spec */
64     XML_C14N_1_1            = 2     /* C14N 1.1 spec */
65 } xmlC14NMode;
66
67 XMLPUBFUN int XMLCALL
68                 xmlC14NDocSaveTo        (xmlDocPtr doc,
69                                          xmlNodeSetPtr nodes,
70                                          int mode, /* a xmlC14NMode */
71                                          xmlChar **inclusive_ns_prefixes,
72                                          int with_comments,
73                                          xmlOutputBufferPtr buf);
74
75 XMLPUBFUN int XMLCALL
76                 xmlC14NDocDumpMemory    (xmlDocPtr doc,
77                                          xmlNodeSetPtr nodes,
78                                          int mode, /* a xmlC14NMode */
79                                          xmlChar **inclusive_ns_prefixes,
80                                          int with_comments,
81                                          xmlChar **doc_txt_ptr);
82
83 XMLPUBFUN int XMLCALL
84                 xmlC14NDocSave          (xmlDocPtr doc,
85                                          xmlNodeSetPtr nodes,
86                                          int mode, /* a xmlC14NMode */
87                                          xmlChar **inclusive_ns_prefixes,
88                                          int with_comments,
89                                          const char* filename,
90                                          int compression);
91
92
93 /**
94  * This is the core C14N function
95  */
96 /**
97  * xmlC14NIsVisibleCallback:
98  * @user_data: user data
99  * @node: the curent node
100  * @parent: the parent node
101  *
102  * Signature for a C14N callback on visible nodes
103  *
104  * Returns 1 if the node should be included
105  */
106 typedef int (*xmlC14NIsVisibleCallback) (void* user_data,
107                                          xmlNodePtr node,
108                                          xmlNodePtr parent);
109
110 XMLPUBFUN int XMLCALL
111                 xmlC14NExecute          (xmlDocPtr doc,
112                                          xmlC14NIsVisibleCallback is_visible_callback,
113                                          void* user_data,
114                                          int mode, /* a xmlC14NMode */
115                                          xmlChar **inclusive_ns_prefixes,
116                                          int with_comments,
117                                          xmlOutputBufferPtr buf);
118
119 #ifdef __cplusplus
120 }
121 #endif /* __cplusplus */
122
123 #endif /* LIBXML_OUTPUT_ENABLED */
124 #endif /* LIBXML_C14N_ENABLED */
125 #endif /* __XML_C14N_H__ */
126