OLD | NEW |
(Empty) | |
| 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 * for older versions of Python, we don't use PyBytes, but keep PyString |
| 28 * and don't use Capsule but CObjects |
| 29 */ |
| 30 #if PY_VERSION_HEX < 0x02070000 |
| 31 #ifndef PyBytes_Check |
| 32 #define PyBytes_Check PyString_Check |
| 33 #define PyBytes_Size PyString_Size |
| 34 #define PyBytes_AsString PyString_AsString |
| 35 #define PyBytes_AS_STRING PyString_AS_STRING |
| 36 #define PyBytes_GET_SIZE PyString_GET_SIZE |
| 37 #endif |
| 38 #ifndef PyCapsule_New |
| 39 #define PyCapsule_New PyCObject_FromVoidPtrAndDesc |
| 40 #define PyCapsule_CheckExact PyCObject_Check |
| 41 #define PyCapsule_GetPointer(o, n) PyCObject_GetDesc((o)) |
| 42 #endif |
| 43 #endif |
| 44 |
| 45 /** |
| 46 * ATTRIBUTE_UNUSED: |
| 47 * |
| 48 * Macro used to signal to GCC unused function parameters |
| 49 * Repeated here since the definition is not available when |
| 50 * compiled outside the libxml2 build tree. |
| 51 */ |
| 52 #ifdef __GNUC__ |
| 53 #ifdef ATTRIBUTE_UNUSED |
| 54 #undef ATTRIBUTE_UNUSED |
| 55 #endif |
| 56 #ifndef ATTRIBUTE_UNUSED |
| 57 #define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) |
| 58 #endif /* ATTRIBUTE_UNUSED */ |
| 59 #else |
| 60 #define ATTRIBUTE_UNUSED |
| 61 #endif |
| 62 |
| 63 #define PyxmlNode_Get(v) (((v) == Py_None) ? NULL : \ |
| 64 (((PyxmlNode_Object *)(v))->obj)) |
| 65 |
| 66 typedef struct { |
| 67 PyObject_HEAD |
| 68 xmlNodePtr obj; |
| 69 } PyxmlNode_Object; |
| 70 |
| 71 #define PyxmlXPathContext_Get(v) (((v) == Py_None) ? NULL : \ |
| 72 (((PyxmlXPathContext_Object *)(v))->obj)) |
| 73 |
| 74 typedef struct { |
| 75 PyObject_HEAD |
| 76 xmlXPathContextPtr obj; |
| 77 } PyxmlXPathContext_Object; |
| 78 |
| 79 #define PyxmlXPathParserContext_Get(v) (((v) == Py_None) ? NULL : \ |
| 80 (((PyxmlXPathParserContext_Object *)(v))->obj)) |
| 81 |
| 82 typedef struct { |
| 83 PyObject_HEAD |
| 84 xmlXPathParserContextPtr obj; |
| 85 } PyxmlXPathParserContext_Object; |
| 86 |
| 87 #define PyparserCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 88 (((PyparserCtxt_Object *)(v))->obj)) |
| 89 |
| 90 typedef struct { |
| 91 PyObject_HEAD |
| 92 xmlParserCtxtPtr obj; |
| 93 } PyparserCtxt_Object; |
| 94 |
| 95 #define PyValidCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 96 (((PyValidCtxt_Object *)(v))->obj)) |
| 97 |
| 98 typedef struct { |
| 99 PyObject_HEAD |
| 100 xmlValidCtxtPtr obj; |
| 101 } PyValidCtxt_Object; |
| 102 |
| 103 #define Pycatalog_Get(v) (((v) == Py_None) ? NULL : \ |
| 104 (((Pycatalog_Object *)(v))->obj)) |
| 105 |
| 106 typedef struct { |
| 107 PyObject_HEAD |
| 108 xmlCatalogPtr obj; |
| 109 } Pycatalog_Object; |
| 110 |
| 111 #ifdef LIBXML_REGEXP_ENABLED |
| 112 #define PyxmlReg_Get(v) (((v) == Py_None) ? NULL : \ |
| 113 (((PyxmlReg_Object *)(v))->obj)) |
| 114 |
| 115 typedef struct { |
| 116 PyObject_HEAD |
| 117 xmlRegexpPtr obj; |
| 118 } PyxmlReg_Object; |
| 119 #endif /* LIBXML_REGEXP_ENABLED */ |
| 120 |
| 121 #ifdef LIBXML_READER_ENABLED |
| 122 #define PyxmlTextReader_Get(v) (((v) == Py_None) ? NULL : \ |
| 123 (((PyxmlTextReader_Object *)(v))->obj)) |
| 124 |
| 125 typedef struct { |
| 126 PyObject_HEAD |
| 127 xmlTextReaderPtr obj; |
| 128 } PyxmlTextReader_Object; |
| 129 |
| 130 #define PyxmlTextReaderLocator_Get(v) (((v) == Py_None) ? NULL : \ |
| 131 (((PyxmlTextReaderLocator_Object *)(v))->obj)) |
| 132 |
| 133 typedef struct { |
| 134 PyObject_HEAD |
| 135 xmlTextReaderLocatorPtr obj; |
| 136 } PyxmlTextReaderLocator_Object; |
| 137 #endif |
| 138 |
| 139 #define PyURI_Get(v) (((v) == Py_None) ? NULL : \ |
| 140 (((PyURI_Object *)(v))->obj)) |
| 141 |
| 142 typedef struct { |
| 143 PyObject_HEAD |
| 144 xmlErrorPtr obj; |
| 145 } PyError_Object; |
| 146 |
| 147 #define PyError_Get(v) (((v) == Py_None) ? NULL : \ |
| 148 (((PyError_Object *)(v))->obj)) |
| 149 |
| 150 typedef struct { |
| 151 PyObject_HEAD |
| 152 xmlOutputBufferPtr obj; |
| 153 } PyoutputBuffer_Object; |
| 154 |
| 155 #define PyoutputBuffer_Get(v) (((v) == Py_None) ? NULL : \ |
| 156 (((PyoutputBuffer_Object *)(v))->obj)) |
| 157 |
| 158 typedef struct { |
| 159 PyObject_HEAD |
| 160 xmlParserInputBufferPtr obj; |
| 161 } PyinputBuffer_Object; |
| 162 |
| 163 #define PyinputBuffer_Get(v) (((v) == Py_None) ? NULL : \ |
| 164 (((PyinputBuffer_Object *)(v))->obj)) |
| 165 |
| 166 typedef struct { |
| 167 PyObject_HEAD |
| 168 xmlURIPtr obj; |
| 169 } PyURI_Object; |
| 170 |
| 171 /* FILE * have their own internal representation */ |
| 172 #if PY_MAJOR_VERSION >= 3 |
| 173 FILE *libxml_PyFileGet(PyObject *f); |
| 174 void libxml_PyFileRelease(FILE *f); |
| 175 #define PyFile_Get(v) (((v) == Py_None) ? NULL : libxml_PyFileGet(v)) |
| 176 #define PyFile_Release(f) libxml_PyFileRelease(f) |
| 177 #else |
| 178 #define PyFile_Get(v) (((v) == Py_None) ? NULL : \ |
| 179 (PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout)) |
| 180 #define PyFile_Release(f) |
| 181 #endif |
| 182 |
| 183 #ifdef LIBXML_SCHEMAS_ENABLED |
| 184 typedef struct { |
| 185 PyObject_HEAD |
| 186 xmlRelaxNGPtr obj; |
| 187 } PyrelaxNgSchema_Object; |
| 188 |
| 189 #define PyrelaxNgSchema_Get(v) (((v) == Py_None) ? NULL : \ |
| 190 (((PyrelaxNgSchema_Object *)(v))->obj)) |
| 191 |
| 192 typedef struct { |
| 193 PyObject_HEAD |
| 194 xmlRelaxNGParserCtxtPtr obj; |
| 195 } PyrelaxNgParserCtxt_Object; |
| 196 |
| 197 #define PyrelaxNgParserCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 198 (((PyrelaxNgParserCtxt_Object *)(v))->obj)) |
| 199 |
| 200 typedef struct { |
| 201 PyObject_HEAD |
| 202 xmlRelaxNGValidCtxtPtr obj; |
| 203 } PyrelaxNgValidCtxt_Object; |
| 204 |
| 205 #define PyrelaxNgValidCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 206 (((PyrelaxNgValidCtxt_Object *)(v))->obj)) |
| 207 |
| 208 typedef struct { |
| 209 PyObject_HEAD |
| 210 xmlSchemaPtr obj; |
| 211 } PySchema_Object; |
| 212 |
| 213 #define PySchema_Get(v) (((v) == Py_None) ? NULL : \ |
| 214 (((PySchema_Object *)(v))->obj)) |
| 215 |
| 216 typedef struct { |
| 217 PyObject_HEAD |
| 218 xmlSchemaParserCtxtPtr obj; |
| 219 } PySchemaParserCtxt_Object; |
| 220 |
| 221 #define PySchemaParserCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 222 (((PySchemaParserCtxt_Object *)(v))->obj)) |
| 223 |
| 224 typedef struct { |
| 225 PyObject_HEAD |
| 226 xmlSchemaValidCtxtPtr obj; |
| 227 } PySchemaValidCtxt_Object; |
| 228 |
| 229 #define PySchemaValidCtxt_Get(v) (((v) == Py_None) ? NULL : \ |
| 230 (((PySchemaValidCtxt_Object *)(v))->obj)) |
| 231 |
| 232 #endif /* LIBXML_SCHEMAS_ENABLED */ |
| 233 |
| 234 PyObject * libxml_intWrap(int val); |
| 235 PyObject * libxml_longWrap(long val); |
| 236 PyObject * libxml_xmlCharPtrWrap(xmlChar *str); |
| 237 PyObject * libxml_constxmlCharPtrWrap(const xmlChar *str); |
| 238 PyObject * libxml_charPtrWrap(char *str); |
| 239 PyObject * libxml_constcharPtrWrap(const char *str); |
| 240 PyObject * libxml_charPtrConstWrap(const char *str); |
| 241 PyObject * libxml_xmlCharPtrConstWrap(const xmlChar *str); |
| 242 PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc); |
| 243 PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node); |
| 244 PyObject * libxml_xmlAttrPtrWrap(xmlAttrPtr attr); |
| 245 PyObject * libxml_xmlNsPtrWrap(xmlNsPtr ns); |
| 246 PyObject * libxml_xmlAttributePtrWrap(xmlAttributePtr ns); |
| 247 PyObject * libxml_xmlElementPtrWrap(xmlElementPtr ns); |
| 248 PyObject * libxml_doubleWrap(double val); |
| 249 PyObject * libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt); |
| 250 PyObject * libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt); |
| 251 PyObject * libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt); |
| 252 PyObject * libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj); |
| 253 PyObject * libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid); |
| 254 PyObject * libxml_xmlCatalogPtrWrap(xmlCatalogPtr obj); |
| 255 PyObject * libxml_xmlURIPtrWrap(xmlURIPtr uri); |
| 256 PyObject * libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer); |
| 257 PyObject * libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer); |
| 258 #ifdef LIBXML_REGEXP_ENABLED |
| 259 PyObject * libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp); |
| 260 #endif /* LIBXML_REGEXP_ENABLED */ |
| 261 #ifdef LIBXML_READER_ENABLED |
| 262 PyObject * libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader); |
| 263 PyObject * libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator); |
| 264 #endif |
| 265 |
| 266 xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj); |
| 267 #ifdef LIBXML_SCHEMAS_ENABLED |
| 268 PyObject * libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt); |
| 269 PyObject * libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt); |
| 270 PyObject * libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid); |
| 271 PyObject * libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt); |
| 272 PyObject * libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt); |
| 273 PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid); |
| 274 #endif /* LIBXML_SCHEMAS_ENABLED */ |
| 275 PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error); |
| 276 PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args); |
| 277 PyObject * libxml_xmlRegisterInputCallback(PyObject *self, PyObject *args); |
| 278 PyObject * libxml_xmlUnregisterInputCallback(PyObject *self, PyObject *args); |
| 279 PyObject * libxml_xmlNodeRemoveNsDef(PyObject * self, PyObject * args); |
OLD | NEW |