<?xml version="1.0" encoding="ISO-8859-1"?>
<api name='libxml2-python'>
  <symbols>
    <function name='xmlRegisterXPathFunction' file='python'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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='xmlXPathRegisterVariable' file='python'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <info>Register a variable with the XPath context</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 variable name'/>
      <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
      <arg name='value' type='pythonObject' info='the value'/>
    </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='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'>
      <cond>defined(LIBXML_HTML_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_HTML_ENABLED)</cond>
      <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>
    <function name='xmlCreateOutputBuffer' file='python'>
      <info>Create a libxml2 output buffer from a Python file</info>
      <return type='xmlOutputBufferPtr' info="the output buffer"/>
      <arg name='file' type='pythonObject' info='the Python file'/>
      <arg name='encoding' type='xmlChar *' info='an optionnal encoding'/>
    </function>
    <function name='xmlCreateInputBuffer' file='python'>
      <info>Create a libxml2 input buffer from a Python file</info>
      <return type='xmlParserInputBufferPtr' info="the input buffer"/>
      <arg name='file' type='pythonObject' info='the Python file'/>
      <arg name='encoding' type='xmlChar *' info='an optionnal encoding'/>
    </function>
    <function name='xmlSetEntityLoader' file='python'>
      <info>Set the entity resolver as a python function</info>
      <return type='int' info="0 in case of success, -1 for error"/>
      <arg name='resolver' type='pythonObject' info='the Python function'/>
    </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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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'>
      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
      <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='xmlURIGetQueryRaw' file='python_accessor'>
      <info>Get the raw query part from an URI (i.e. the unescaped form).</info>
      <return type='const char *' info="The URI query" field="query_raw"/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
    </function>
    <function name='xmlURISetQueryRaw' file='python_accessor'>
      <info>Set the raw query part of an URI (i.e. the unescaped form).</info>
      <return type='void'/>
      <arg name='URI' type='xmlURIPtr' info='the URI'/>
      <arg name='query_raw' type='char *' info='The raw 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>
    <!-- xmlErrorPtr accessors -->
    <function name='xmlErrorGetDomain' file='python_accessor'>
      <info>What part of the library raised this error</info>
      <return type='int' info="The error domain" field="domain"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlErrorGetCode' file='python_accessor'>
      <info>The error code, e.g. an xmlParserError</info>
      <return type='int' info="The error code" field="code"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlErrorGetMessage' file='python_accessor'>
      <info>human-readable informative error message</info>
      <return type='const char *' info="The error message" field="message"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlErrorGetLevel' file='python_accessor'>
      <info>how consequent is the error</info>
      <return type='int' info="The error level" field="level"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlErrorGetFile' file='python_accessor'>
      <info>the filename</info>
      <return type='const char *' info="The error file" field="file"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlErrorGetLine' file='python_accessor'>
      <info>the line number if available</info>
      <return type='int' info="The error line" field="line"/>
      <arg name='Error' type='xmlErrorPtr' info='the Error'/>
    </function>
    <function name='xmlPythonCleanupParser' file='python'>
      <info>Cleanup function for the XML library. It tries to reclaim all parsing related global memory allocated for the library processing. It doesn't deallocate any document related memory. Calling this function should not prevent reusing the library but one should call xmlCleanupParser() only when the process has finished using the library or XML document built with it.</info>
      <return type='void'/>
    </function>
    <function name='xmlMemoryUsed' file='python'>
      <info>Returns the total amount of memory allocated by libxml2</info>
      <return type='int' info='number of bytes allocated'/>
    </function>
  </symbols>
</api>
