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