### ----------------------------------------------------
### -- LibXML
### -- Licenses: Artistic-2.0
### -- Authors: David Warring
### -- File: etc/libxml2-api.xml
### ----------------------------------------------------
### -- Chunk 28 of 44
      <info>Create a new input stream based on an xmlEntityPtr</info>
      <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
      <arg name='entity' type='xmlEntityPtr' info='an Entity pointer'/>
    </function>
    <function name='xmlNewGlobalNs' file='tree' module='legacy'>
      <cond>defined(LIBXML_LEGACY_ENABLED)</cond>
      <info>Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!!</info>
      <return type='xmlNsPtr' info='NULL this functionality had been removed'/>
      <arg name='doc' type='xmlDocPtr' info='the document carrying the namespace'/>
      <arg name='href' type='const xmlChar *' info='the URI associated'/>
      <arg name='prefix' type='const xmlChar *' info='the prefix for the namespace'/>
    </function>
    <function name='xmlNewIOInputStream' file='parser' module='parserInternals'>
      <info>Create a new input stream structure encapsulating the @input into a stream suitable for the parser.</info>
      <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
      <arg name='input' type='xmlParserInputBufferPtr' info='an I/O Input'/>
      <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
    </function>
    <function name='xmlNewInputFromFile' file='parserInternals' module='parserInternals'>
      <info>Create a new input stream based on a file or an URL.</info>
      <return type='xmlParserInputPtr' info='the new input stream or NULL in case of error'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
      <arg name='filename' type='const char *' info='the filename to use as entity'/>
    </function>
    <function name='xmlNewInputStream' file='parserInternals' module='parserInternals'>
      <info>Create a new input stream structure.</info>
      <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
    </function>
    <function name='xmlNewMutex' file='threads' module='threads'>
      <info>xmlNewMutex() is used to allocate a libxml2 token struct for use in synchronizing access to data.</info>
      <return type='xmlMutexPtr' info='a new simple mutex pointer or NULL in case of error'/>
    </function>
    <function name='xmlNewNode' file='tree' module='tree'>
      <info>Creation of a new node element. @ns is optional (NULL).</info>
      <return type='xmlNodePtr' info='a pointer to the new node object. Uses xmlStrdup() to make copy of @name.'/>
      <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
      <arg name='name' type='const xmlChar *' info='the node name'/>
    </function>
    <function name='xmlNewNodeEatName' file='tree' module='tree'>
      <info>Creation of a new node element. @ns is optional (NULL).</info>
      <return type='xmlNodePtr' info='a pointer to the new node object, with pointer @name as new node&apos;s name. Use xmlNewNode() if a copy of @name string is is needed as new node&apos;s name.'/>
      <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
      <arg name='name' type='xmlChar *' info='the node name'/>
    </function>
    <function name='xmlNewNs' file='tree' module='tree'>
      <info>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL.  We use href==NULL in the case of an element creation where the namespace was not defined.</info>
      <return type='xmlNsPtr' info='a new namespace pointer or NULL'/>
      <arg name='node' type='xmlNodePtr' info='the element carrying the namespace'/>
      <arg name='href' type='const xmlChar *' info='the URI associated'/>
      <arg name='prefix' type='const xmlChar *' info='the prefix for the namespace'/>
    </function>
    <function name='xmlNewNsProp' file='tree' module='tree'>
      <info>Create a new property tagged with a namespace and carried by a node.</info>
      <return type='xmlAttrPtr' info='a pointer to the attribute'/>
      <arg name='node' type='xmlNodePtr' info='the holding node'/>
      <arg name='ns' type='xmlNsPtr' info='the namespace'/>
      <arg name='name' type='const xmlChar *' info='the name of the attribute'/>
      <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
    </function>
    <function name='xmlNewNsPropEatName' file='tree' module='tree'>
      <info>Create a new property tagged with a namespace and carried by a node.</info>
      <return type='xmlAttrPtr' info='a pointer to the attribute'/>
      <arg name='node' type='xmlNodePtr' info='the holding node'/>
      <arg name='ns' type='xmlNsPtr' info='the namespace'/>
      <arg name='name' type='xmlChar *' info='the name of the attribute'/>
      <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
    </function>
    <function name='xmlNewPI' file='tree' module='tree'>
      <info>Creation of a processing instruction element. Use xmlDocNewPI preferably to get string interning</info>
      <return type='xmlNodePtr' info='a pointer to the new node object.'/>
      <arg name='name' type='const xmlChar *' info='the processing instruction name'/>
      <arg name='content' type='const xmlChar *' info='the PI content'/>
    </function>
    <function name='xmlNewParserCtxt' file='parser' module='parserInternals'>
      <info>Allocate and initialize a new parser context.</info>
      <return type='xmlParserCtxtPtr' info='the xmlParserCtxtPtr or NULL'/>
    </function>
    <function name='xmlNewProp' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
      <info>Create a new property carried by a node.</info>
      <return type='xmlAttrPtr' info='a pointer to the attribute'/>
      <arg name='node' type='xmlNodePtr' info='the holding node'/>
      <arg name='name' type='const xmlChar *' info='the name of the attribute'/>
      <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
    </function>
    <function name='xmlNewRMutex' file='threads' module='threads'>
      <info>xmlRNewMutex() is used to allocate a reentrant mutex for use in synchronizing access to data. token_r is a re-entrant lock and thus useful for synchronizing access to data structures that may be manipulated in a recursive fashion.</info>
      <return type='xmlRMutexPtr' info='the new reentrant mutex pointer or NULL in case of error'/>
    </function>
    <function name='xmlNewReference' file='tree' module='tree'>
      <info>Creation of a new reference node.</info>
      <return type='xmlNodePtr' info='a pointer to the new node object.'/>
      <arg name='doc' type='const xmlDoc *' info='the document'/>
      <arg name='name' type='const xmlChar *' info='the reference name, or the reference string with &amp; and ;'/>
    </function>
    <function name='xmlNewStringInputStream' file='parserInternals' module='parserInternals'>
      <info>Create a new input stream based on a memory buffer.</info>
      <return type='xmlParserInputPtr' info='the new input stream'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
      <arg name='buffer' type='const xmlChar *' info='an memory buffer'/>
    </function>
    <function name='xmlNewText' file='tree' module='tree'>
      <info>Creation of a new text node.</info>
      <return type='xmlNodePtr' info='a pointer to the new node object.'/>
      <arg name='content' type='const xmlChar *' info='the text content'/>
    </function>
    <function name='xmlNewTextChild' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Creation of a new child element, added at the end of @parent children list. @ns and @content parameters are optional (NULL). If @ns is NULL, the newly created element inherits the namespace of @parent. If @content is non NULL, a child TEXT node will be created containing the string @content. NOTE: Use xmlNewChild() if @content will contain entities that need to be preserved. Use this function, xmlNewTextChild(), if you need to ensure that reserved XML chars that might appear in @content, such as the ampersand, greater-than or less-than signs, are automatically replaced by their XML escaped entity representations.</info>
      <return type='xmlNodePtr' info='a pointer to the new node object.'/>
      <arg name='parent' type='xmlNodePtr' info='the parent node'/>
      <arg name='ns' type='xmlNsPtr' info='a namespace if any'/>
      <arg name='name' type='const xmlChar *' info='the name of the child'/>
      <arg name='content' type='const xmlChar *' info='the text content of the child if any.'/>
    </function>
    <function name='xmlNewTextLen' file='tree' module='tree'>
      <info>Creation of a new text node with an extra parameter for the content&apos;s length</info>
      <return type='xmlNodePtr' info='a pointer to the new node object.'/>
      <arg name='content' type='const xmlChar *' info='the text content'/>
      <arg name='len' type='int' info='the text len.'/>
    </function>
    <function name='xmlNewTextReader' file='xmlreader' module='xmlreader'>
      <cond>defined(LIBXML_READER_ENABLED)</cond>
      <info>Create an xmlTextReader structure fed with @input</info>
      <return type='xmlTextReaderPtr' info='the new xmlTextReaderPtr or NULL in case of error'/>
      <arg name='input' type='xmlParserInputBufferPtr' info='the xmlParserInputBufferPtr used to read data'/>
      <arg name='URI' type='const char *' info='the URI information for the source if available'/>
    </function>
    <function name='xmlNewTextReaderFilename' file='xmlreader' module='xmlreader'>
      <cond>defined(LIBXML_READER_ENABLED)</cond>
      <info>Create an xmlTextReader structure fed with the resource at @URI</info>
      <return type='xmlTextReaderPtr' info='the new xmlTextReaderPtr or NULL in case of error'/>
      <arg name='URI' type='const char *' info='the URI of the resource to process'/>
    </function>
    <function name='xmlNewTextWriter' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr NOTE: the @out parameter will be deallocated when the writer is closed (if the call succeed.)</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
    </function>
    <function name='xmlNewTextWriterDoc' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure with @*doc as output</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='doc' type='xmlDocPtr *' info='address of a xmlDocPtr to hold the new XML document tree'/>
      <arg name='compression' type='int' info='compress the output?'/>
    </function>
    <function name='xmlNewTextWriterFilename' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure with @uri as output</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='uri' type='const char *' info='the URI of the resource for the output'/>
      <arg name='compression' type='int' info='compress the output?'/>
    </function>
    <function name='xmlNewTextWriterMemory' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure with @buf as output TODO: handle compression</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='buf' type='xmlBufferPtr' info='xmlBufferPtr'/>
      <arg name='compression' type='int' info='compress the output?'/>
    </function>
    <function name='xmlNewTextWriterPushParser' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure with @ctxt as output NOTE: the @ctxt context will be freed with the resulting writer (if the call succeeds). TODO: handle compression</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='xmlParserCtxtPtr to hold the new XML document tree'/>
      <arg name='compression' type='int' info='compress the output?'/>
    </function>
    <function name='xmlNewTextWriterTree' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Create a new xmlNewTextWriter structure with @doc as output starting at @node</info>
      <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
      <arg name='doc' type='xmlDocPtr' info='xmlDocPtr'/>
      <arg name='node' type='xmlNodePtr' info='xmlNodePtr or NULL for doc-&gt;children'/>
      <arg name='compression' type='int' info='compress the output?'/>
    </function>
    <function name='xmlNewValidCtxt' file='valid' module='valid'>
      <cond>defined(LIBXML_VALID_ENABLED)</cond>
      <info>Allocate a validation context structure.</info>
      <return type='xmlValidCtxtPtr' info='NULL if not, otherwise the new validation context structure'/>
    </function>
    <function name='xmlNextChar' file='parserInternals' module='parserInternals'>
      <info>Skip to the next char input char.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the XML parser context'/>
    </function>
    <function name='xmlNextElementSibling' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Finds the first closest next sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don&apos;t have back reference from entities content to entities references.</info>
      <return type='xmlNodePtr' info='the next element sibling or NULL if not available'/>
      <arg name='node' type='xmlNodePtr' info='the current node'/>
    </function>
    <function name='xmlNoNetExternalEntityLoader' file='xmlIO' module='xmlIO'>
      <info>A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution.</info>
      <return type='xmlParserInputPtr' info='a new allocated xmlParserInputPtr, or NULL.'/>
      <arg name='URL' type='const char *' info='the URL for the entity to load'/>
      <arg name='ID' type='const char *' info='the System ID for the entity to load'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='the context in which the entity is called or NULL'/>
    </function>
    <function name='xmlNodeAddContent' file='tree' module='tree'>
      <info>Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
      <arg name='content' type='const xmlChar *' info='extra content'/>
    </function>
    <function name='xmlNodeAddContentLen' file='tree' module='tree'>
      <info>Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
      <arg name='content' type='const xmlChar *' info='extra content'/>
      <arg name='len' type='int' info='the size of @content'/>
    </function>
    <function name='xmlNodeBufGetContent' file='tree' module='tree'>
      <info>Read the value of a node @cur, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</info>
      <return type='int' info='0 in case of success and -1 in case of error.'/>
      <arg name='buffer' type='xmlBufferPtr' info='a buffer'/>
      <arg name='cur' type='const xmlNode *' info='the node being read'/>
    </function>
    <function name='xmlNodeDump' file='tree' module='xmlsave'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called Since this is using xmlBuffer structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.</info>
      <return type='int' info='the number of bytes written to the buffer or -1 in case of error'/>
      <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
      <arg name='doc' type='xmlDocPtr' info='the document'/>
      <arg name='cur' type='xmlNodePtr' info='the current node'/>
      <arg name='level' type='int' info='the imbrication level for indenting'/>
      <arg name='format' type='int' info='is formatting allowed'/>
    </function>
    <function name='xmlNodeDumpOutput' file='tree' module='xmlsave'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
      <return type='void'/>
      <arg name='buf' type='xmlOutputBufferPtr' info='the XML buffer output'/>
      <arg name='doc' type='xmlDocPtr' info='the document'/>
      <arg name='cur' type='xmlNodePtr' info='the current node'/>
      <arg name='level' type='int' info='the imbrication level for indenting'/>
      <arg name='format' type='int' info='is formatting allowed'/>
      <arg name='encoding' type='const char *' info='an optional encoding string'/>
    </function>
    <function name='xmlNodeGetBase' file='tree' module='tree'>
      <info>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc-&gt;URL in this case</info>
      <return type='xmlChar *' info='a pointer to the base URL, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='doc' type='const xmlDoc *' info='the document the node pertains to'/>
      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
    </function>
    <function name='xmlNodeGetContent' file='tree' module='tree'>
      <info>Read the value of a node, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted.</info>
      <return type='xmlChar *' info='a new #xmlChar * or NULL if no content is available. It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='cur' type='const xmlNode *' info='the node being read'/>
    </function>
    <function name='xmlNodeGetLang' file='tree' module='tree'>
      <info>Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor.</info>
      <return type='xmlChar *' info='a pointer to the lang value, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
    </function>
    <function name='xmlNodeGetSpacePreserve' file='tree' module='tree'>
      <info>Searches the space preserving behaviour of a node, i.e. the values of the xml:space attribute or the one carried by the nearest ancestor.</info>
      <return type='int' info='-1 if xml:space is not inherited, 0 if &quot;default&quot;, 1 if &quot;preserve&quot;'/>
      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
    </function>
    <function name='xmlNodeIsText' file='tree' module='tree'>
      <info>Is this node a Text node ?</info>
      <return type='int' info='1 yes, 0 no'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
    </function>
    <function name='xmlNodeListGetRawString' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn&apos;t do any character encoding handling.</info>
      <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
      <arg name='doc' type='const xmlDoc *' info='the document'/>
      <arg name='list' type='const xmlNode *' info='a Node list'/>
      <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
    </function>
    <function name='xmlNodeListGetString' file='tree' module='tree'>
      <info>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</info>
      <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
      <arg name='doc' type='xmlDocPtr' info='the document'/>
      <arg name='list' type='const xmlNode *' info='a Node list'/>
      <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
    </function>
    <function name='xmlNodeSetBase' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)</cond>
      <info>Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
      <arg name='uri' type='const xmlChar *' info='the new base URI'/>
    </function>
    <function name='xmlNodeSetContent' file='tree' module='tree'>
      <info>Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
      <arg name='content' type='const xmlChar *' info='the new value of the content'/>
    </function>
    <function name='xmlNodeSetContentLen' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
      <arg name='content' type='const xmlChar *' info='the new value of the content'/>
      <arg name='len' type='int' info='the size of @content'/>
    </function>
    <function name='xmlNodeSetLang' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Set the language of a node, i.e. the values of the xml:lang attribute.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
      <arg name='lang' type='const xmlChar *' info='the language description'/>
    </function>
    <function name='xmlNodeSetName' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Set (or reset) the name of a node.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
      <arg name='name' type='const xmlChar *' info='the new tag name'/>
    </function>
    <function name='xmlNodeSetSpacePreserve' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
      <arg name='val' type='int' info='the xml:space value (&quot;0&quot;: default, 1: &quot;preserve&quot;)'/>
    </function>
    <function name='xmlNormalizeURIPath' file='uri' module='uri'>
      <info>Applies the 5 normalization steps to a path string--that is, RFC 2396 Section 5.2, steps 6.c through 6.g.  Normalization occurs directly on the string, no new allocation is done</info>
      <return type='int' info='0 or an error code'/>
      <arg name='path' type='char *' info='pointer to the path string'/>
    </function>
    <function name='xmlNormalizeWindowsPath' file='xmlIO' module='xmlIO'>
      <info>This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution.</info>
      <return type='xmlChar *' info='a canonicalized version of the path'/>
      <arg name='path' type='const xmlChar *' info='the input file path'/>
    </function>
    <function name='xmlOutputBufferClose' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>flushes and close the output I/O channel and free up all the associated resources</info>
      <return type='int' info='the number of byte written or -1 in case of error.'/>
      <arg name='out' type='xmlOutputBufferPtr' info='a buffered output'/>
    </function>
    <function name='xmlOutputBufferCreateBuffer' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Create a buffered output for the progressive saving to a xmlBuffer</info>
      <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
      <arg name='buffer' type='xmlBufferPtr' info='a xmlBufferPtr'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
    </function>
    <function name='xmlOutputBufferCreateFd' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Create a buffered output for the progressive saving to a file descriptor</info>
      <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
      <arg name='fd' type='int' info='a file descriptor number'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
    </function>
    <function name='xmlOutputBufferCreateFile' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Create a buffered output for the progressive saving to a FILE * buffered C I/O</info>
      <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
      <arg name='file' type='FILE *' info='a FILE*'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
    </function>
    <function name='xmlOutputBufferCreateFilename' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Create a buffered  output for the progressive saving of a file If filename is &quot;-&apos; then we use stdout as the output. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. TODO: currently if compression is set, the library only support writing to a local file.</info>
      <return type='xmlOutputBufferPtr' info='the new output or NULL'/>
      <arg name='URI' type='const char *' info='a C string containing the URI or filename'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
      <arg name='compression' type='int' info='the compression ration (0 none, 9 max).'/>
    </function>
    <function name='xmlOutputBufferCreateFilenameDefault' file='globals' module='xmlIO'>
      <info>Registers a callback for URI output file handling</info>
      <return type='xmlOutputBufferCreateFilenameFunc' info='the old value of the registration function'/>
      <arg name='func' type='xmlOutputBufferCreateFilenameFunc' info='function pointer to the new OutputBufferCreateFilenameFunc'/>
    </function>
    <functype name='xmlOutputBufferCreateFilenameFunc' file='globals' module='globals'>
      <info>Signature for the function doing the lookup for a suitable output method corresponding to an URI.</info>
      <return type='xmlOutputBufferPtr' info='the new xmlOutputBufferPtr in case of success or NULL if no method was found.'/>
      <arg name='URI' type='const char *' info='the URI to write to'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info=''/>
      <arg name='compression' type='int' info=''/>
    </functype>
    <function name='xmlOutputBufferCreateIO' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Create a buffered output for the progressive saving to an I/O handler</info>
      <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
      <arg name='iowrite' type='xmlOutputWriteCallback' info='an I/O write function'/>
      <arg name='ioclose' type='xmlOutputCloseCallback' info='an I/O close function'/>
      <arg name='ioctx' type='void *' info='an I/O handler'/>
      <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the charset encoding if known'/>
    </function>
    <function name='xmlOutputBufferFlush' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>flushes the output I/O channel</info>
      <return type='int' info='the number of byte written or -1 in case of error.'/>
      <arg name='out' type='xmlOutputBufferPtr' info='a buffered output'/>
    </function>
    <function name='xmlOutputBufferGetContent' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Gives a pointer to the data currently held in the output buffer</info>
      <return type='const xmlChar *' info='a pointer to the data or NULL in case of error'/>
      <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
    </function>
    <function name='xmlOutputBufferGetSize' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Gives the length of the data currently held in the output buffer</info>
      <return type='size_t' info='0 in case or error or no data is held, the size otherwise'/>
      <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
    </function>
    <function name='xmlOutputBufferWrite' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</info>
      <return type='int' info='the number of chars immediately written, or -1 in case of error.'/>
      <arg name='out' type='xmlOutputBufferPtr' info='a buffered parser output'/>
      <arg name='len' type='int' info='the size in bytes of the array.'/>
      <arg name='buf' type='const char *' info='an char array'/>
    </function>
    <function name='xmlOutputBufferWriteEscape' file='xmlIO' module