<?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 optional 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 optional 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>
