1#include <Python.h>
2#include <libxml/tree.h>
3#include <libxml/parser.h>
4#include <libxml/parserInternals.h>
5#include <libxml/catalog.h>
6#include <libxml/threads.h>
7#include <libxml/nanoftp.h>
8#include <libxml/nanohttp.h>
9#include <libxml/uri.h>
10#include <libxml/xpath.h>
11#include <libxml/xpathInternals.h>
12#include <libxml/debugXML.h>
13#include <libxml/HTMLparser.h>
14#include <libxml/HTMLtree.h>
15#include <libxml/xinclude.h>
16#include <libxml/xpointer.h>
17#include <libxml/xmlunicode.h>
18#include <libxml/xmlregexp.h>
19#include <libxml/xmlautomata.h>
20#include <libxml/xmlreader.h>
21#ifdef LIBXML_SCHEMAS_ENABLED
22#include <libxml/relaxng.h>
23#include <libxml/xmlschemas.h>
24#endif
25
26/**
27 * ATTRIBUTE_UNUSED:
28 *
29 * Macro used to signal to GCC unused function parameters
30 * Repeated here since the definition is not available when
31 * compiled outside the libxml2 build tree.
32 */
33#ifdef __GNUC__
34#ifdef ATTRIBUTE_UNUSED
35#undef ATTRIBUTE_UNUSED
36#endif
37#ifndef ATTRIBUTE_UNUSED
38#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
39#endif /* ATTRIBUTE_UNUSED */
40#else
41#define ATTRIBUTE_UNUSED
42#endif
43
44#define PyxmlNode_Get(v) (((v) == Py_None) ? NULL : \
45	(((PyxmlNode_Object *)(v))->obj))
46
47typedef struct {
48    PyObject_HEAD
49    xmlNodePtr obj;
50} PyxmlNode_Object;
51
52#define PyxmlXPathContext_Get(v) (((v) == Py_None) ? NULL : \
53	(((PyxmlXPathContext_Object *)(v))->obj))
54
55typedef struct {
56    PyObject_HEAD
57    xmlXPathContextPtr obj;
58} PyxmlXPathContext_Object;
59
60#define PyxmlXPathParserContext_Get(v) (((v) == Py_None) ? NULL : \
61	(((PyxmlXPathParserContext_Object *)(v))->obj))
62
63typedef struct {
64    PyObject_HEAD
65    xmlXPathParserContextPtr obj;
66} PyxmlXPathParserContext_Object;
67
68#define PyparserCtxt_Get(v) (((v) == Py_None) ? NULL : \
69        (((PyparserCtxt_Object *)(v))->obj))
70
71typedef struct {
72    PyObject_HEAD
73    xmlParserCtxtPtr obj;
74} PyparserCtxt_Object;
75
76#define PyValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
77	(((PyValidCtxt_Object *)(v))->obj))
78
79typedef struct {
80	PyObject_HEAD
81	xmlValidCtxtPtr obj;
82} PyValidCtxt_Object;
83
84#define Pycatalog_Get(v) (((v) == Py_None) ? NULL : \
85        (((Pycatalog_Object *)(v))->obj))
86
87typedef struct {
88    PyObject_HEAD
89    xmlCatalogPtr obj;
90} Pycatalog_Object;
91
92#ifdef LIBXML_REGEXP_ENABLED
93#define PyxmlReg_Get(v) (((v) == Py_None) ? NULL : \
94        (((PyxmlReg_Object *)(v))->obj))
95
96typedef struct {
97    PyObject_HEAD
98    xmlRegexpPtr obj;
99} PyxmlReg_Object;
100#endif /* LIBXML_REGEXP_ENABLED */
101
102#ifdef LIBXML_READER_ENABLED
103#define PyxmlTextReader_Get(v) (((v) == Py_None) ? NULL : \
104        (((PyxmlTextReader_Object *)(v))->obj))
105
106typedef struct {
107    PyObject_HEAD
108    xmlTextReaderPtr obj;
109} PyxmlTextReader_Object;
110
111#define PyxmlTextReaderLocator_Get(v) (((v) == Py_None) ? NULL : \
112        (((PyxmlTextReaderLocator_Object *)(v))->obj))
113
114typedef struct {
115    PyObject_HEAD
116    xmlTextReaderLocatorPtr obj;
117} PyxmlTextReaderLocator_Object;
118#endif
119
120#define PyURI_Get(v) (((v) == Py_None) ? NULL : \
121	(((PyURI_Object *)(v))->obj))
122
123typedef struct {
124    PyObject_HEAD
125    xmlErrorPtr obj;
126} PyError_Object;
127
128#define PyError_Get(v) (((v) == Py_None) ? NULL : \
129	(((PyError_Object *)(v))->obj))
130
131typedef struct {
132    PyObject_HEAD
133    xmlOutputBufferPtr obj;
134} PyoutputBuffer_Object;
135
136#define PyoutputBuffer_Get(v) (((v) == Py_None) ? NULL : \
137	(((PyoutputBuffer_Object *)(v))->obj))
138
139typedef struct {
140    PyObject_HEAD
141    xmlParserInputBufferPtr obj;
142} PyinputBuffer_Object;
143
144#define PyinputBuffer_Get(v) (((v) == Py_None) ? NULL : \
145	(((PyinputBuffer_Object *)(v))->obj))
146
147typedef struct {
148    PyObject_HEAD
149    xmlURIPtr obj;
150} PyURI_Object;
151
152/* FILE * have their own internal representation */
153#define PyFile_Get(v) (((v) == Py_None) ? NULL : \
154	(PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout))
155
156#ifdef LIBXML_SCHEMAS_ENABLED
157typedef struct {
158    PyObject_HEAD
159    xmlRelaxNGPtr obj;
160} PyrelaxNgSchema_Object;
161
162#define PyrelaxNgSchema_Get(v) (((v) == Py_None) ? NULL : \
163	(((PyrelaxNgSchema_Object *)(v))->obj))
164
165typedef struct {
166    PyObject_HEAD
167    xmlRelaxNGParserCtxtPtr obj;
168} PyrelaxNgParserCtxt_Object;
169
170#define PyrelaxNgParserCtxt_Get(v) (((v) == Py_None) ? NULL : \
171	(((PyrelaxNgParserCtxt_Object *)(v))->obj))
172
173typedef struct {
174    PyObject_HEAD
175    xmlRelaxNGValidCtxtPtr obj;
176} PyrelaxNgValidCtxt_Object;
177
178#define PyrelaxNgValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
179	(((PyrelaxNgValidCtxt_Object *)(v))->obj))
180
181typedef struct {
182	PyObject_HEAD
183	xmlSchemaPtr obj;
184} PySchema_Object;
185
186#define PySchema_Get(v) (((v) == Py_None) ? NULL : \
187	(((PySchema_Object *)(v))->obj))
188
189typedef struct {
190	PyObject_HEAD
191	xmlSchemaParserCtxtPtr obj;
192} PySchemaParserCtxt_Object;
193
194#define PySchemaParserCtxt_Get(v) (((v) == Py_None) ? NULL : \
195	(((PySchemaParserCtxt_Object *)(v))->obj))
196
197typedef struct {
198	PyObject_HEAD
199	xmlSchemaValidCtxtPtr obj;
200} PySchemaValidCtxt_Object;
201
202#define PySchemaValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
203	(((PySchemaValidCtxt_Object *)(v))->obj))
204
205#endif /* LIBXML_SCHEMAS_ENABLED */
206
207PyObject * libxml_intWrap(int val);
208PyObject * libxml_longWrap(long val);
209PyObject * libxml_xmlCharPtrWrap(xmlChar *str);
210PyObject * libxml_constxmlCharPtrWrap(const xmlChar *str);
211PyObject * libxml_charPtrWrap(char *str);
212PyObject * libxml_constcharPtrWrap(const char *str);
213PyObject * libxml_charPtrConstWrap(const char *str);
214PyObject * libxml_xmlCharPtrConstWrap(const xmlChar *str);
215PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc);
216PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node);
217PyObject * libxml_xmlAttrPtrWrap(xmlAttrPtr attr);
218PyObject * libxml_xmlNsPtrWrap(xmlNsPtr ns);
219PyObject * libxml_xmlAttributePtrWrap(xmlAttributePtr ns);
220PyObject * libxml_xmlElementPtrWrap(xmlElementPtr ns);
221PyObject * libxml_doubleWrap(double val);
222PyObject * libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt);
223PyObject * libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt);
224PyObject * libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt);
225PyObject * libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj);
226PyObject * libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid);
227PyObject * libxml_xmlCatalogPtrWrap(xmlCatalogPtr obj);
228PyObject * libxml_xmlURIPtrWrap(xmlURIPtr uri);
229PyObject * libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer);
230PyObject * libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer);
231#ifdef LIBXML_REGEXP_ENABLED
232PyObject * libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp);
233#endif /* LIBXML_REGEXP_ENABLED */
234#ifdef LIBXML_READER_ENABLED
235PyObject * libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader);
236PyObject * libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator);
237#endif
238
239xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj);
240#ifdef LIBXML_SCHEMAS_ENABLED
241PyObject * libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt);
242PyObject * libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt);
243PyObject * libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid);
244PyObject * libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt);
245PyObject * libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt);
246PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid);
247#endif /* LIBXML_SCHEMAS_ENABLED */
248PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error);
249PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args);
250