libxml.c revision 1971ee2698cb84c7699c96d3302f00e20d42c0d3
1d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#include <Python.h> 2d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 3d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#include <libxml/parser.h> 4d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#include <libxml/tree.h> 5d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#include "libxml_wrap.h" 696fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard#include "libxml2-py.h" 7d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 8d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard/* #define DEBUG */ 9d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 10d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard/************************************************************************ 11d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 12d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * Per type specific glue * 13d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 14d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ************************************************************************/ 15d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 16d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_intWrap(int val) { 17d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 18d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 19d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 20d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_intWrap: val = %d\n", val); 21d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 22d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyInt_FromLong((long) val); 23d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 24d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 25d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 26d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 2796fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillardlibxml_doubleWrap(double val) { 2896fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard PyObject *ret; 2996fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard 3096fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard#ifdef DEBUG 3196fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard printf("libxml_doubleWrap: val = %f\n", val); 3296fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard#endif 3396fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard ret = PyFloat_FromDouble((double) val); 3496fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard return(ret); 3596fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard} 3696fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard 3796fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel VeillardPyObject * 381971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_charPtrWrap(char *str) { 39d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 40d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 41d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 42d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_xmlcharPtrWrap: str = %s\n", str); 43d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 44d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (str == NULL) { 45d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard Py_INCREF(Py_None); 46d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(Py_None); 47d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 48d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard /* TODO: look at deallocation */ 49d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyString_FromString(str); 5036ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard xmlFree(str); 51d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 52d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 53d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 54d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 551971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlCharPtrWrap(xmlChar *str) { 561971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 571971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 581971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 591971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlCharPtrWrap: str = %s\n", str); 601971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 611971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (str == NULL) { 621971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 631971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 641971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 651971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard /* TODO: look at deallocation */ 661971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyString_FromString(str); 671971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard xmlFree(str); 681971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 691971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 701971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 711971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 721971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_constcharPtrWrap(const char *str) { 731971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 741971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 751971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 761971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlcharPtrWrap: str = %s\n", str); 771971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 781971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (str == NULL) { 791971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 801971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 811971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 821971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard /* TODO: look at deallocation */ 831971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyString_FromString(str); 841971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 851971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 861971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 871971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 881971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_constxmlCharPtrWrap(const xmlChar *str) { 89d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 90d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 91d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 92d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_xmlCharPtrWrap: str = %s\n", str); 93d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 94d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (str == NULL) { 95d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard Py_INCREF(Py_None); 96d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(Py_None); 97d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 98d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard /* TODO: look at deallocation */ 99d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyString_FromString(str); 100d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 101d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 102d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 103d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 104d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_xmlDocPtrWrap(xmlDocPtr doc) { 105d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 106d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 107d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 108d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_xmlDocPtrWrap: doc = %p\n", doc); 109d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 110d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (doc == NULL) { 111d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard Py_INCREF(Py_None); 112d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(Py_None); 113d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 114d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard /* TODO: look at deallocation */ 115d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) doc, "xmlDocPtr", NULL); 116d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 117d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 118d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 119d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 120d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_xmlNodePtrWrap(xmlNodePtr node) { 121d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 122d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 123d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 124d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_xmlNodePtrWrap: node = %p\n", node); 125d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 126d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (node == NULL) { 127d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard Py_INCREF(Py_None); 128d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(Py_None); 129d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 130d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) node, "xmlNodePtr", NULL); 131d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 132d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 133d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 134d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyObject * 1351971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlNsPtrWrap(xmlNsPtr ns) { 1361971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 1371971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1381971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 1391971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlNsPtrWrap: node = %p\n", ns); 1401971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 1411971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (ns == NULL) { 1421971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 1431971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 1441971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 1451971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) ns, "xmlNsPtr", NULL); 1461971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 1471971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 1481971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1491971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 150d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_xmlAttrPtrWrap(xmlAttrPtr attr) { 151d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *ret; 152d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 153d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 1541971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlAttrNodePtrWrap: attr = %p\n", attr); 155d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 156d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (attr == NULL) { 157d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard Py_INCREF(Py_None); 158d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(Py_None); 159d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 160d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) attr, "xmlAttrPtr", NULL); 161d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return(ret); 162d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 163d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 1641971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 1651971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlAttributePtrWrap(xmlAttributePtr attr) { 1661971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 1671971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1681971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 1691971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlAttributePtrWrap: attr = %p\n", attr); 1701971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 1711971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (attr == NULL) { 1721971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 1731971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 1741971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 1751971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) attr, "xmlAttributePtr", NULL); 1761971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 1771971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 1781971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1791971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 1801971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlElementPtrWrap(xmlElementPtr elem) { 1811971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 1821971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1831971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 1841971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlElementNodePtrWrap: elem = %p\n", elem); 1851971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 1861971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (elem == NULL) { 1871971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 1881971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 1891971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 1901971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) elem, "xmlElementPtr", NULL); 1911971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 1921971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 1931971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1941971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 1951971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt) { 1961971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 1971971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1981971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 1991971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlXPathContextPtrWrap: ctxt = %p\n", ctxt); 2001971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 2011971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (ctxt == NULL) { 2021971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 2031971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 2041971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 2051971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt, "xmlXPathContextPtr", 2061971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard NULL); 2071971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 2081971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 2091971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 2101971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyObject * 2111971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardlibxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj) { 2121971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject *ret; 2131971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 2141971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#ifdef DEBUG 2151971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj); 2161971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard#endif 2171971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (obj == NULL) { 2181971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 2191971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(Py_None); 2201971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 2211971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard switch(obj->type) { 2221971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_XSLT_TREE: 2231971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard /* TODO !!!! Allocation problems */ 2241971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_NODESET: 2251971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if ((obj->nodesetval == NULL) || (obj->nodesetval->nodeNr == 0)) 2261971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyList_New(0); 2271971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard else { 2281971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard int i; 2291971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard xmlNodePtr node; 2301971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 2311971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyList_New(obj->nodesetval->nodeNr); 2321971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard for (i = 0;i < obj->nodesetval->nodeNr;i++) { 2331971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard node = obj->nodesetval->nodeTab[i]; 2341971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard /* TODO: try to cast directly to the proper node type */ 2351971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node)); 2361971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 2371971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 2381971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard break; 2391971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_BOOLEAN: 2401971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyInt_FromLong((long) obj->boolval); 2411971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard break; 2421971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_NUMBER: 2431971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyFloat_FromDouble(obj->floatval); 2441971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard break; 2451971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_STRING: 2461971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = PyString_FromString(obj->stringval); 2471971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard break; 2481971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_POINT: 2491971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_RANGE: 2501971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard case XPATH_LOCATIONSET: 2511971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard default: 2521971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("Unable to convert XPath object type %d\n", obj->type); 2531971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard Py_INCREF(Py_None); 2541971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = Py_None; 2551971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard } 2561971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard xmlXPathFreeObject(obj); 2571971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return(ret); 2581971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 2591971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 2601971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard/************************************************************************ 2611971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * * 2621971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * The PyxmlNode type * 2631971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * * 2641971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ************************************************************************/ 265d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic void 266d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyxmlNode_dealloc(PyxmlNode_Object * self) 267d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 268d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("TODO PyxmlNode_dealloc\n"); 269d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyMem_DEL(self); 270d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 271d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 272d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic int 273d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyxmlNode_compare(PyxmlNode_Object * self, PyxmlNode_Object * v) 274d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 275d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (self->obj == v->obj) 276d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return 0; 277d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (self->obj > v->obj) 278d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return -1; 279d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return 1; 280d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 281d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 282d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic long 283d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyxmlNode_hash(PyxmlNode_Object * self) 284d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 285d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return (long) self->obj; 286d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 287d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 288d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 289d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel VeillardPyxmlNode_repr(PyxmlNode_Object * self) 290d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 291d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard char buf[100]; 292d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 293d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard sprintf(buf, "<xmlNode of type %d at %lx>", 294d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyxmlNode_Get(self)->type, 295d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (long) PyxmlNode_Get(self)); 296d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return PyString_FromString(buf); 297d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 298d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 299d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic char PyxmlNode_Type__doc__[] = "This is the type of libxml Nodes"; 300d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 301d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyTypeObject PyxmlNode_Type = { 302d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject_HEAD_INIT(&PyType_Type) 303d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0, /*ob_size */ 304d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard "xmlNode", /*tp_name */ 305d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard sizeof(PyxmlNode_Object), /*tp_basicsize */ 306d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0, /*tp_itemsize */ 307d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (destructor) PyxmlNode_dealloc,/*tp_dealloc */ 308d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (printfunc) 0, /*tp_print */ 309d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (getattrfunc) 0, /*tp_getattr */ 310d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (setattrfunc) 0, /*tp_setattr */ 311d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (cmpfunc) PyxmlNode_compare,/*tp_compare */ 312d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (reprfunc) PyxmlNode_repr, /*tp_repr */ 313d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0, /*tp_as_number */ 314d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0, /*tp_as_sequence */ 315d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0, /*tp_as_mapping */ 316d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (hashfunc) PyxmlNode_hash, /*tp_hash */ 317d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (ternaryfunc) 0, /*tp_call */ 318d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard (reprfunc) 0, /*tp_str */ 319d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 0L, 0L, 0L, 0L, 320d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyxmlNode_Type__doc__ 321d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard}; 322d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 323d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard/************************************************************************ 324d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 3251971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * The PyxmlXPathContext type * 3261971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * * 3271971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ************************************************************************/ 3281971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardstatic void 3291971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyxmlXPathContext_dealloc(PyxmlXPathContext_Object * self) 3301971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard{ 3311971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard printf("TODO PyxmlXPathContext_dealloc\n"); 3321971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyMem_DEL(self); 3331971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 3341971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3351971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardstatic int 3361971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyxmlXPathContext_compare(PyxmlXPathContext_Object * self, PyxmlXPathContext_Object * v) 3371971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard{ 3381971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (self->obj == v->obj) 3391971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return 0; 3401971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if (self->obj > v->obj) 3411971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return -1; 3421971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return 1; 3431971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 3441971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3451971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardstatic long 3461971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyxmlXPathContext_hash(PyxmlXPathContext_Object * self) 3471971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard{ 3481971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return (long) self->obj; 3491971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 3501971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3511971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardstatic PyObject * 3521971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyxmlXPathContext_repr(PyxmlXPathContext_Object * self) 3531971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard{ 3541971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard char buf[100]; 3551971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3561971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard sprintf(buf, "<xmlXPathContext at %lx>", 3571971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (long) PyxmlXPathContext_Get(self)); 3581971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return PyString_FromString(buf); 3591971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard} 3601971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3611971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillardstatic char PyxmlXPathContext_Type__doc__[] = "This is the type of XPath evaluation contexts"; 3621971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3631971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel VeillardPyTypeObject PyxmlXPathContext_Type = { 3641971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyObject_HEAD_INIT(&PyType_Type) 3651971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0, /*ob_size */ 3661971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard "xmlXPathContext", /*tp_name */ 3671971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard sizeof(PyxmlXPathContext_Object), /*tp_basicsize */ 3681971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0, /*tp_itemsize */ 3691971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (destructor) PyxmlXPathContext_dealloc,/*tp_dealloc */ 3701971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (printfunc) 0, /*tp_print */ 3711971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (getattrfunc) 0, /*tp_getattr */ 3721971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (setattrfunc) 0, /*tp_setattr */ 3731971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (cmpfunc) PyxmlXPathContext_compare,/*tp_compare */ 3741971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (reprfunc) PyxmlXPathContext_repr, /*tp_repr */ 3751971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0, /*tp_as_number */ 3761971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0, /*tp_as_sequence */ 3771971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0, /*tp_as_mapping */ 3781971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (hashfunc) PyxmlXPathContext_hash, /*tp_hash */ 3791971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (ternaryfunc) 0, /*tp_call */ 3801971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard (reprfunc) 0, /*tp_str */ 3811971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 0L, 0L, 0L, 0L, 3821971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyxmlXPathContext_Type__doc__ 3831971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard}; 3841971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3851971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard/************************************************************************ 3861971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard * * 387d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * Global properties access * 388d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 389d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ************************************************************************/ 390d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 391d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_name(PyObject *self, PyObject *args) 392d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 393d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 394d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 395d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard const xmlChar *res; 396d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 397d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:name", &obj)) 398d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 399d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 400d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 401d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 402d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_name: cur = %p type %d\n", cur, cur->type); 403d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 404d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 405d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 406d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 407d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 408d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 409d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 410d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: { 411d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlDocPtr doc = (xmlDocPtr) cur; 412d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = doc->URL; 413d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 414d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 415d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 416d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 417d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = attr->name; 418d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 419d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 420d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: { 421d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNsPtr ns = (xmlNsPtr) cur; 422d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = ns->prefix; 423d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 424d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 425d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 426d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->name; 427d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 428d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 4291971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard resultobj = libxml_constxmlCharPtrWrap(res); 430d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 431d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 432d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 433d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 434d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 435d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_doc(PyObject *self, PyObject *args) 436d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 437d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 438d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 439d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlDocPtr res; 440d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 441d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:doc", &obj)) 442d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 443d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 444d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 445d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 446d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_doc: cur = %p\n", cur); 447d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 448d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 449d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 450d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 451d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 452d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 453d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 454d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 455d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 456d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 457d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 458d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 459d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = attr->doc; 460d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 461d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 462d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: 463d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 464d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 465d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 466d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->doc; 467d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 468d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 469d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlDocPtrWrap(res); 470d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 471d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 472d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 473d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 474d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_properties(PyObject *self, PyObject *args) 475d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 476d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 477d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur = NULL; 478d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr res; 479d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 480d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:properties", &obj)) 481d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 482d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 483d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (cur->type == XML_ELEMENT_NODE) 484d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->properties; 485d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard else 486d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 487d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlAttrPtrWrap(res); 488d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 489d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 490d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 491d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 492d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_next(PyObject *self, PyObject *args) 493d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 494d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 495d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 496d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr res; 497d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 498d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:next", &obj)) 499d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 500d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 501d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 502d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 503d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_next: cur = %p\n", cur); 504d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 505d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 506d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 507d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 508d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 509d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 510d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 511d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 512d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 513d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 514d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 515d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 516d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (xmlNodePtr) attr->next; 517d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 518d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 519d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: { 520d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNsPtr ns = (xmlNsPtr) cur; 521d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (xmlNodePtr) ns->next; 522d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 523d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 524d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 525d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->next; 526d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 527d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 528d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 529d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlNodePtrWrap(res); 530d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 531d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 532d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 533d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 534d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_prev(PyObject *self, PyObject *args) 535d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 536d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 537d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 538d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr res; 539d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 540d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:prev", &obj)) 541d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 542d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 543d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 544d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 545d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_prev: cur = %p\n", cur); 546d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 547d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 548d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 549d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 550d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 551d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 552d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 553d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 554d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 555d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 556d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 557d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 558d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (xmlNodePtr) attr->next; 559d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 560d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: 561d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 562d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 563d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 564d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->next; 565d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 566d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 567d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlNodePtrWrap(res); 568d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 569d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 570d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 571d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 572d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_children(PyObject *self, PyObject *args) 573d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 574d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 575d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 576d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr res; 577d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 578d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:children", &obj)) 579d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 580d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 581d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 582d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 583d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_children: cur = %p\n", cur); 584d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 585d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 586d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 587d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ELEMENT_NODE: 588d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_REF_NODE: 589d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_NODE: 590d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_PI_NODE: 591d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_COMMENT_NODE: 592d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 593d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 594d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 595d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 596d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 597d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DTD_NODE: 598d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->children; 599d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 600d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 601d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 602d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = attr->children; 603d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 604d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 605d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 606d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 607d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 608d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 609d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlNodePtrWrap(res); 610d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 611d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 612d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 613d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 614d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_last(PyObject *self, PyObject *args) 615d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 616d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 617d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 618d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr res; 619d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 620d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:last", &obj)) 621d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 622d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 623d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 624d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 625d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_last: cur = %p\n", cur); 626d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 627d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 628d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 629d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ELEMENT_NODE: 630d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_REF_NODE: 631d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_NODE: 632d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_PI_NODE: 633d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_COMMENT_NODE: 634d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 635d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 636d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 637d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 638d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 639d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DTD_NODE: 640d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->last; 641d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 642d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 643d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 644d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = attr->last; 645d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 646d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 647d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 648d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 649d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 650d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlNodePtrWrap(res); 651d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 652d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 653d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 654d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 655d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_parent(PyObject *self, PyObject *args) 656d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 657d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 658d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 659d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr res; 660d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 661d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:parent", &obj)) 662d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 663d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 664d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 665d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 666d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_parent: cur = %p\n", cur); 667d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 668d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 669d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 670d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 671d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 672d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 673d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 674d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 675d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 676d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 677d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: { 678d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlAttrPtr attr = (xmlAttrPtr) cur; 679d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = attr->parent; 680d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 681d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_DECL: 682d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: 683d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_XINCLUDE_START: 684d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_XINCLUDE_END: 685d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = NULL; 686d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 687d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard default: 688d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = cur->parent; 689d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard break; 690d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 691d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard resultobj = libxml_xmlNodePtrWrap(res); 692d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 693d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 694d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 695d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyObject * 696d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardlibxml_type(PyObject *self, PyObject *args) 697d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard{ 698d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *resultobj, *obj; 699d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard xmlNodePtr cur; 700d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard const xmlChar *res; 701d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 702d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if (!PyArg_ParseTuple(args, "O:last", &obj)) 703d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return NULL; 704d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard cur = PyxmlNode_Get(obj); 705d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 706d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 707d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_type: cur = %p\n", cur); 708d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 709d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 710d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard switch(cur->type) { 711d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ELEMENT_NODE: 712d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "element"; break; 713d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_NODE: 714d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "attribute"; break; 715d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_TEXT_NODE: 716d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "text"; break; 717d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_CDATA_SECTION_NODE: 718d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "cdata"; break; 719d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_REF_NODE: 720d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "entity_ref"; break; 721d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_NODE: 722d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "entity"; break; 723d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_PI_NODE: 724d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "pi"; break; 725d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_COMMENT_NODE: 726d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "comment"; break; 727d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_NODE: 728d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "document_xml"; break; 729d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_TYPE_NODE: 730d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "doctype"; break; 731d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCUMENT_FRAG_NODE: 732d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "fragment"; break; 733d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NOTATION_NODE: 734d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "notation"; break; 735d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_HTML_DOCUMENT_NODE: 736d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "document_html"; break; 737d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DTD_NODE: 738d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "dtd"; break; 739d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ELEMENT_DECL: 740d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "elem_decl"; break; 741d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ATTRIBUTE_DECL: 742d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "attribute_decl"; break; 743d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_ENTITY_DECL: 744d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "entity_decl"; break; 745d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_NAMESPACE_DECL: 746d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "namespace"; break; 747d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_XINCLUDE_START: 748d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "xinclude_start"; break; 749d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_XINCLUDE_END: 750d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "xinclude_end"; break; 751d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef LIBXML_DOCB_ENABLED 752d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard case XML_DOCB_DOCUMENT_NODE: 753d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard res = (const xmlChar *) "document_docbook"; break; 754d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 755d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard } 756d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#ifdef DEBUG 757d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard printf("libxml_type: cur = %p: %s\n", cur, res); 758d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard#endif 759d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 7601971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard resultobj = libxml_constxmlCharPtrWrap(res); 761d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard return resultobj; 762d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 763d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 764d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard/************************************************************************ 765d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 766d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * The registration stuff * 767d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard * * 768d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard ************************************************************************/ 769d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardstatic PyMethodDef libxmlMethods[] = { 77096fe095d4bf3c76301ed58ebe1ba10f8004f87efDaniel Veillard#include "libxml2-export.c" 771d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "name", libxml_name, METH_VARARGS }, 772d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "children", libxml_children, METH_VARARGS }, 773d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "properties", libxml_properties, METH_VARARGS }, 774d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "last", libxml_last, METH_VARARGS }, 775d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "prev", libxml_prev, METH_VARARGS }, 776d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "next", libxml_next, METH_VARARGS }, 777d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "parent", libxml_parent, METH_VARARGS }, 778d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "type", libxml_type, METH_VARARGS }, 779d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard { "doc", libxml_doc, METH_VARARGS } 780d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard}; 781d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 782d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillardvoid init_libxml(void) { 783d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyObject *m, *d; 784d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard m = Py_InitModule("_libxml", libxmlMethods); 785d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard d = PyModule_GetDict(m); 786d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard PyDict_SetItemString(d, "xmlNodeType", (PyObject *)&PyxmlNode_Type); 7871971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard PyDict_SetItemString(d, "xmlXPathContextType", (PyObject *)&PyxmlXPathContext_Type); 788d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard} 789d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 790