38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# generate python wrappers from the XML API description
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncenums = {} # { enumType: { enumConstant: enumValue } }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # launched as a script
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# That part if purely the API acquisition phase from the
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# XML API description
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync """sgmlop based XML parser. this is typically 15x faster
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync than SlowParser..."""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # setup callbacks
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # activate parser
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.parser = self.feed = None # nuke circular reference
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # <string> entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync """slow but safe standard parser, based on the XML parser in
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync Python's standard library."""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # get the fastest available parser, and attach it to an
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # unmarshalling object. return both objects.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "close"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Some filtering rukes to drop functions/types which should not
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# be exposed as-is on the Python interface
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlmemory': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'DOCBparser': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'SAX': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'hash': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'list': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'threads': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# 'xpointer': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSAXHandlerPtr': "not the proper interface for SAX",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlSAXHandlerPtr': "not the proper interface for SAX",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlListPtr': "internal representation not suitable for python",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlBufferPtr': "internal representation not suitable for python",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'FILE *': None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Table of remapping to/from the python type or class to the C
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# counterpart.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'void': (None, None, None, None),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'unsigned char *': ('z', None, "charPtr", "char *"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const char *': ('z', None, "charPtrConst", "const char *"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlChar *': ('z', None, "xmlCharPtr", "xmlChar *"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlChar *': ('z', None, "xmlCharPtrConst", "const xmlChar *"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlDtdPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlDtdPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlDtd *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlDtd *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlAttrPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlAttrPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlAttr *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlAttr *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlEntityPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlEntityPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlEntity *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlEntity *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlElementPtr': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlElementPtr': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlElement *': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlElement *': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlAttributePtr': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlAttributePtr': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlAttribute *': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlAttribute *': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlNsPtr': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlNsPtr': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlNs *': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlNs *': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const xmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const htmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const htmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const htmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'const htmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlXPathContextPtr': ('O', "xmlXPathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlXPathContext *': ('O', "xpathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlXPathParserContextPtr': ('O', "xmlXPathParserContext", "xmlXPathParserContextPtr", "xmlXPathParserContextPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlValidCtxtPtr': ('O', "ValidCtxt", "xmlValidCtxtPtr", "xmlValidCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlCatalogPtr': ('O', "catalog", "xmlCatalogPtr", "xmlCatalogPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlURIPtr': ('O', "URI", "xmlURIPtr", "xmlURIPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlErrorPtr': ('O', "Error", "xmlErrorPtr", "xmlErrorPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlOutputBufferPtr': ('O', "outputBuffer", "xmlOutputBufferPtr", "xmlOutputBufferPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlParserInputBufferPtr': ('O', "inputBuffer", "xmlParserInputBufferPtr", "xmlParserInputBufferPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRegexpPtr': ('O', "xmlReg", "xmlRegexpPtr", "xmlRegexpPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlTextReaderLocatorPtr': ('O', "xmlTextReaderLocator", "xmlTextReaderLocatorPtr", "xmlTextReaderLocatorPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlTextReaderPtr': ('O', "xmlTextReader", "xmlTextReaderPtr", "xmlTextReaderPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGPtr': ('O', "relaxNgSchema", "xmlRelaxNGPtr", "xmlRelaxNGPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGParserCtxtPtr': ('O', "relaxNgParserCtxt", "xmlRelaxNGParserCtxtPtr", "xmlRelaxNGParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGValidCtxtPtr': ('O', "relaxNgValidCtxt", "xmlRelaxNGValidCtxtPtr", "xmlRelaxNGValidCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaPtr': ('O', "Schema", "xmlSchemaPtr", "xmlSchemaPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaParserCtxtPtr': ('O', "SchemaParserCtxt", "xmlSchemaParserCtxtPtr", "xmlSchemaParserCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaValidCtxtPtr': ('O', "SchemaValidCtxt", "xmlSchemaValidCtxtPtr", "xmlSchemaValidCtxtPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlXPathObjectPtr': ('O', "foo", "xmlXPathObjectPtr", "xmlXPathObjectPtr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlCreateMemoryParserCtxt',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlCtxtReadMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlParseChunk',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'htmlReadMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlCreateMemoryParserCtxt',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlCtxtReadMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlCtxtResetPush',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlParseChunk',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlParseMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlReadMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRecoverMemory',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# This part writes the C <-> Python stubs libxml2-py.[ch] and
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# the table libxml2-export.c to add when registrering the Python module
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Class methods which are written by hand in libxml.c but the Python-level
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# code is still automatically generated (so they are not in skip_function()).
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSaveFileTo',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSaveFormatFileTo',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# if name[0:11] == "xmlXPathNew":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # the next function is defined in libxml.c
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Those are skipped because the Const version is used of the bindings
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if name == "xmlOutputBufferClose": # handled by by the superclass
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if name == "xmlOutputBufferFlush": # handled by by the superclass
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdef print_function_wrapper(name, output, export, include):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "failed to get function %s infos"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Don't delete the function entry in the caller.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # This should be correct
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (f == 'z') and (name in foreign_encoding_args) and (num_bufs == 0):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if f != None:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if t != None:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync format_args = format_args + ", &pyobj_%s" % (arg[0])
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_args = c_args + " PyObject *pyobj_%s;\n" % (arg[0])
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if f == 't#':
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync format_args = format_args + ", &py_buffsize%d" % num_bufs
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_args = c_args + " int py_buffsize%d;\n" % num_bufs
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if args[1][1] == "char *" or args[1][1] == "xmlChar *":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = "\n if (%s->%s != NULL) xmlFree(%s->%s);\n" % (
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = c_call + " %s->%s = (%s)xmlStrdup((const xmlChar *)%s);\n" % (args[0][0],
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = "\n %s->%s = %s;\n" % (args[0][0], args[1][0],
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret_convert = " Py_INCREF(Py_None);\n return(Py_None);\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = "\n c_retval = %s->%s;\n" % (args[0][0], ret[2])
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = "\n c_retval = %s(%s);\n" % (name, c_call);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret_convert = " py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret_convert = ret_convert + " return(py_retval);\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync c_call = "\n c_retval = %s(%s);\n" % (name, c_call);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret_convert = " py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret_convert = ret_convert + " return(py_retval);\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name));
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync export.write(" { (char *)\"%s\", libxml_%s, METH_VARARGS, NULL },\n" %
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Those have been manually generated
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if file == "python_accessor" and ret[0] != "void" and ret[2] is None:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Those have been manually generated
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output.write("libxml_%s(PyObject *self ATTRIBUTE_UNUSED," % (name))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output.write("\n if (!PyArg_ParseTuple(args, (char *)\"%s\"%s))\n" %
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = open(os.path.join(srcPref,"..","doc","libxml2-api.xml"))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Found %d functions in libxml2-api.xml" % (n)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = open(os.path.join(srcPref,"libxml2-python-api.xml"))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Found %d functions in libxml2-python-api.xml" % (
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync wrapper.write("#include <libxml/xmlschemastypes.h>\n")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ret = print_function_wrapper(function, wrapper, export, include)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Missing type converters: "
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# This part writes part of the Python front-end classes based on
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# mapping rules between types and classes and also based on function
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# renaming to get consistent function names at the Python level
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#######################################################################
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# The type automatically remapped to generated classes
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlNodePtr": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlNode *": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "htmlDocPtr": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "htmlxmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlAttrPtr": ("._o", "xmlAttr(_obj=%s)", "xmlAttr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlAttr *": ("._o", "xmlAttr(_obj=%s)", "xmlAttr"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlEntityPtr": ("._o", "xmlEntity(_obj=%s)", "xmlEntity"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlEntity *": ("._o", "xmlEntity(_obj=%s)", "xmlEntity"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlElementPtr": ("._o", "xmlElement(_obj=%s)", "xmlElement"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlElement *": ("._o", "xmlElement(_obj=%s)", "xmlElement"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlAttributePtr": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlAttribute *": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlXPathContextPtr": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlXPathContext *": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlXPathParserContext *": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlXPathParserContextPtr": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlParserCtxtPtr": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlParserCtxt *": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "htmlParserCtxtPtr": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "htmlParserCtxt *": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlValidCtxtPtr": ("._o", "ValidCtxt(_obj=%s)", "ValidCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlCatalogPtr": ("._o", "catalog(_obj=%s)", "catalog"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlOutputBufferPtr": ("._o", "outputBuffer(_obj=%s)", "outputBuffer"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlParserInputBufferPtr": ("._o", "inputBuffer(_obj=%s)", "inputBuffer"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlRegexpPtr": ("._o", "xmlReg(_obj=%s)", "xmlReg"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlTextReaderLocatorPtr": ("._o", "xmlTextReaderLocator(_obj=%s)", "xmlTextReaderLocator"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "xmlTextReaderPtr": ("._o", "xmlTextReader(_obj=%s)", "xmlTextReader"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGPtr': ('._o', "relaxNgSchema(_obj=%s)", "relaxNgSchema"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGParserCtxtPtr': ('._o', "relaxNgParserCtxt(_obj=%s)", "relaxNgParserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlRelaxNGValidCtxtPtr': ('._o', "relaxNgValidCtxt(_obj=%s)", "relaxNgValidCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaPtr': ("._o", "Schema(_obj=%s)", "Schema"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaParserCtxtPtr': ("._o", "SchemaParserCtxt(_obj=%s)", "SchemaParserCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 'xmlSchemaValidCtxtPtr': ("._o", "SchemaValidCtxt(_obj=%s)", "SchemaValidCtxt"),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# "outputBuffer": "xmlOutputBufferClose",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:12] == "xmlParserGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:12] == "xmlParserSet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:9] == "xmlURIGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:9] == "xmlURISet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:11] == "xmlErrorGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:17] == "xmlXPathParserGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:11] == "xmlXPathGet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:11] == "xmlXPathSet" and file == "python_accessor":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:15] == "xmlOutputBuffer" and file != "python":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:20] == "xmlParserInputBuffer" and file != "python":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:9] == "xmlRegexp" and file == "xmlregexp":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:6] == "xmlReg" and file == "xmlregexp":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:20] == "xmlTextReaderLocator" and file == "xmlreader":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:18] == "xmlTextReaderConst" and file == "xmlreader":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:13] == "xmlTextReader" and file == "xmlreader":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:12] == "xmlReaderNew" and file == "xmlreader":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if functions[name][0] is None or functions[name][0] == "":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Build the list of C types to look for ordered to start
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # with primary classes
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if name[0:3] == "xml" and len(args) >= 1 and args[0][1] == type:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:3] == "xml" and len(args) >= 2 and args[1][1] == type \
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:4] == "html" and len(args) >= 1 and args[0][1] == type:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elif name[0:4] == "html" and len(args) >= 2 and args[1][1] == type \
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync txt.write(" Generated Classes for libxml2-python\n\n")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync txt.write("#\n# Global functions of the module\n#\n\n")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write("#\n# Functions from module %s\n#\n\n" % file)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Raise an exception
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise uriError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise xpathError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise parserError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise treeError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync txt.write("\n\n#\n# Set of classes of the module\n#\n\n")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write("'%s needs a PyCObject argument'\n" % \
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write(" %s.__init__(self, _obj=_obj)\n\n" % (
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync format = "<%s (%%s) object at 0x%%x>" % (classname)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write(" return \"%s\" %% (self.name, long(pos_id (self)))\n\n" % (
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write(" if _obj != None:self._o = _obj;return\n")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Do not provide as method the destructors for the class
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # to avoid double free
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write(" # accessors for %s\n" % (classname))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync classes.write(" # %s functions from module %s\n" % (
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync txt.write("\n # functions from module %s\n" % file)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Raise an exception
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:return None\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise uriError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise xpathError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise parserError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise treeError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # generate the returned class wrapper for the object
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Sometime one need to keep references of the source
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # class in the returned class object.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # See reference_keepers for the list
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # return the class
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Raise an exception
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:return None");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise uriError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise xpathError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise parserError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync " if ret is None:raise treeError('%s() failed')\n"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # Generate enum constants