<?xml version="1.0" encoding="ISO-8859-1"?>
<api name='libxml2-python'>
  <symbols>
    <function name='xmlRegisterXPathFunction' file='python'>
      <info>Register a Python written function to the XPath interpreter</info>
      <return type='int' info="1 in case of success, 0 or -1 in case of error"/>
      <arg name='ctx' type='xmlXPathContextPtr' info='the xpathContext'/>
      <arg name='name' type='xmlChar *' info='the function name'/>
      <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
      <arg name='f' type='pythonObject' info='the python function'/>
    </function>
    <function name='xmlNewNode' file='python'>
      <info>Create a new Node</info>
      <return type='xmlNodePtr' info="A new element node"/>
      <arg name='name' type='xmlChar *' info='the node name'/>
    </function>
    <function name='xmlRegisterErrorHandler' file='python'>
      <info>Register a Python written function to for error reporting. The function is called back as f(ctx, error).</info>
      <return type='int' info="1 in case of success, 0 or -1 in case of error"/>
      <arg name='f' type='pythonObject' info='the python function'/>
      <arg name='ctx' type='pythonObject' info='a context for the callback'/>
    </function>
    <function name='xmlCreatePushParser' file='python'>
      <info>Create a progressive XML parser context to build either an event flow if the SAX object is not None, or a DOM tree otherwise.</info>
      <return type='xmlParserCtxtPtr' info="the parser context or None in case of error"/>
      <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
      <arg name='chunk' type='xmlChar *' info='the initial data'/>
      <arg name='size' type='int' info='the size of the initial data'/>
      <arg name='URI' type='xmlChar *' info='The URI used for base computations'/>
    </function>
    <function name='htmlCreatePushParser' file='python'>
      <info>Create a progressive HTML parser context to build either an event flow if the SAX object is not None, or a DOM tree otherwise.</info>
      <return type='xmlParserCtxtPtr' info="the parser context or None in case of error"/>
      <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
      <arg name='chunk' type='xmlChar *' info='the initial data'/>
      <arg name='size' type='int' info='the size of the initial data'/>
      <arg name='URI' type='xmlChar *' info='The URI used for base computations'/>
    </function>
    <function name='xmlSAXParseFile' file='python'>
      <info>Interface to parse an XML file or resource pointed by an URI to build an event flow to the SAX object</info>
      <return type='void'/>
      <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
      <arg name='URI' type='xmlChar *' info='The URI of the resource'/>
      <arg name='recover' type='int' info='allow recovery in case of error'/>
    </function>
    <function name='htmlSAXParseFile' file='python'>
      <info>Interface to parse an HTML file or resource pointed by an URI to build an event flow to the SAX object</info>
      <return type='void'/>
      <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
      <arg name='URI' type='xmlChar *' info='The URI of the resource'/>
      <arg name='encoding' type='const char *' info='encoding or None'/>
    </function>
    <!-- xmlParserCtxtPtr accessors -->
    <function name='xmlParserGetDoc' file='python_accessor'>
      <info>Get the document tree from a parser context.</info>
      <return type='xmlDocPtr' info="the document tree" field="myDoc"/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
    </function>
    <function name='xmlParserGetWellFormed' file='python_accessor'>
      <info>Get the well formed information from a parser context.</info>
      <return type='int' info="the wellFormed field" field="wellFormed"/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
    </function>
    <function name='xmlParserGetIsValid' file='python_accessor'>
      <info>Get the validity information from a parser context.</info>
      <return type='int' info="the valid field" field="valid"/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
    </function>
    <function name='xmlParserSetValidate' file='python_accessor'>
      <info>Switch the parser to validation mode.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
      <arg name='validate' type='int' info='1 to activate validation'/>
    </function>
    <function name='xmlParserSetReplaceEntities' file='python_accessor'>
      <info>Switch the parser to replace entities.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
      <arg name='replaceEntities' type='int' info='1 to replace entities'/>
    </function>
    <function name='xmlParserSetPedantic' file='python_accessor'>
      <info>Switch the parser to be pedantic.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
      <arg name='pedantic' type='int' info='1 to run in pedantic mode'/>
    </function>
    <function name='xmlParserSetLoadSubset' file='python_accessor'>
      <info>Switch the parser to load the DTD without validating.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
      <arg name='loadsubset' type='int' info='1 to load the DTD'/>
    </function>
    <function name='xmlParserSetLineNumbers' file='python_accessor'>
      <info>Switch on the generation of line number for elements nodes.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
      <arg name='linenumbers' type='int' info='1 to save line numbers'/>
    </function>
    <function name='xmlDebugMemory' file='python'>
      <info>Switch on the generation of line number for elements nodes. Also returns the number of bytes allocated and not freed by libxml2 since memory debugging was switched on.</info>
      <return type='int' info="returns the number of bytes allocated and not freed"/>
      <arg name='activate' type='int' info='1 switch on memory debugging 0 switch it off'/>
    </function>
    <function name='xmlDumpMemory' file='python'>
      <info>dump the memory allocated in the file .memdump</info>
      <return type='void'/>
    </function>
    <!-- xmlNsPtr accessors -->
    <function name='xmlNodeGetNs' file='python_accessor'>
      <info>Get the namespace of a node</info>
      <return type='xmlNsPtr' info="The namespace or None"/>
      <arg name='node' type='xmlNodePtr' info='the node'/>
    </function>
    <function name='xmlNodeGetNsDefs' file='python_accessor'>
      <info>Get the namespace of a node</info>
      <return type='xmlNsPtr' info="The namespace or None"/>
      <arg name='node' type='xmlNodePtr' info='the node'/>
    </function>
    <!-- xmlXPathContextPtr accessors -->
    <function name='xmlXPathParserGetContext' file='python_accessor'>
      <info>Get the xpathContext from an xpathParserContext</info>
      <return type='xmlXPathContextPtr' info="The XPath context" field="context"/>
      <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath parser context'/>
    </function>
    <function name='xmlXPathGetContextDoc' file='python_accessor'>
      <info>Get the doc from an xpathContext</info>
      <return type='xmlDocPtr' info="The doc context" field="doc"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <function name='xmlXPathGetContextNode' file='python_accessor'>
      <info>Get the current node from an xpathContext</info>
      <return type='xmlNodePtr' info="The node context" field="node"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <function name='xmlXPathSetContextDoc' file='python_accessor'>
      <info>Set the doc of an xpathContext</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
      <arg name="doc" type='xmlDocPtr' info="The doc context"/>
    </function>
    <function name='xmlXPathSetContextNode' file='python_accessor'>
      <info>Set the current node of an xpathContext</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
      <arg name="node" type='xmlNodePtr' info="The node context"/>
    </function>
    <function name='xmlXPathGetContextPosition' file='python_accessor'>
      <info>Get the current node from an xpathContext</info>
      <return type='int' info="The node context" field="proximityPosition"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <function name='xmlXPathGetContextSize' file='python_accessor'>
      <info>Get the current node from an xpathContext</info>
      <return type='int' info="The node context" field="contextSize"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <function name='xmlXPathGetFunction' file='python_accessor'>
      <info>Get the current function name xpathContext</info>
      <return type='const xmlChar *' info="The function name" field="function"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <function name='xmlXPathGetFunctionURI' file='python_accessor'>
      <info>Get the current function name URI xpathContext</info>
      <return type='const xmlChar *' info="The function name URI" field="functionURI"/>
      <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
    </function>
    <!-- xmlURIPtr accessors -->
    <function name='xmlURIGetScheme' file='python_accessor'>
      <info>Get the scheme part from an URI</info>
      <return type='const char *' info="The URI scheme" field="scheme"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetScheme' file='python_accessor'>
      <info>Set the scheme part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='scheme' type='char *' info='The URI scheme part'/>
    </function>
    <function name='xmlURIGetOpaque' file='python_accessor'>
      <info>Get the opaque part from an URI</info>
      <return type='const char *' info="The URI opaque" field="opaque"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetOpaque' file='python_accessor'>
      <info>Set the opaque part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='opaque' type='char *' info='The URI opaque part'/>
    </function>
    <function name='xmlURIGetAuthority' file='python_accessor'>
      <info>Get the authority part from an URI</info>
      <return type='const char *' info="The URI authority" field="authority"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetAuthority' file='python_accessor'>
      <info>Set the authority part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='authority' type='char *' info='The URI authority part'/>
    </function>
    <function name='xmlURIGetServer' file='python_accessor'>
      <info>Get the server part from an URI</info>
      <return type='const char *' info="The URI server" field="server"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetServer' file='python_accessor'>
      <info>Set the server part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='server' type='char *' info='The URI server part'/>
    </function>
    <function name='xmlURIGetUser' file='python_accessor'>
      <info>Get the user part from an URI</info>
      <return type='const char *' info="The URI user" field="user"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetUser' file='python_accessor'>
      <info>Set the user part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='user' type='char *' info='The URI user part'/>
    </function>
    <function name='xmlURIGetPath' file='python_accessor'>
      <info>Get the path part from an URI</info>
      <return type='const char *' info="The URI path" field="path"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetPath' file='python_accessor'>
      <info>Set the path part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='path' type='char *' info='The URI path part'/>
    </function>
    <function name='xmlURIGetQuery' file='python_accessor'>
      <info>Get the query part from an URI</info>
      <return type='const char *' info="The URI query" field="query"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetQuery' file='python_accessor'>
      <info>Set the query part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='query' type='char *' info='The URI query part'/>
    </function>
    <function name='xmlURIGetFragment' file='python_accessor'>
      <info>Get the fragment part from an URI</info>
      <return type='const char *' info="The URI fragment" field="fragment"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetFragment' file='python_accessor'>
      <info>Set the fragment part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='fragment' type='char *' info='The URI fragment part'/>
    </function>
    <function name='xmlURIGetPort' file='python_accessor'>
      <info>Get the port part from an URI</info>
      <return type='int' info="The URI port" field="port"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetPort' file='python_accessor'>
      <info>Set the port part of an URI.</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='port' type='int' info='The URI port part'/>
    </function>
  </symbols>
</api>
