### ----------------------------------------------------
### -- LibXML
### -- Licenses: Artistic-2.0
### -- Authors: David Warring
### -- File: etc/libxml2-api.xml
### ----------------------------------------------------
### -- Chunk 24 of 44
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Debugging facility provides the number of allocated nodes over lifetime</info>
      <return type='int' info='the number of nodes ever allocated or -1 in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
    </function>
    <function name='xmlExpCtxtNbNodes' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Debugging facility provides the number of allocated nodes at a that point</info>
      <return type='int' info='the number of nodes in use or -1 in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
    </function>
    <function name='xmlExpDump' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Serialize the expression as compiled to the buffer</info>
      <return type='void'/>
      <arg name='buf' type='xmlBufferPtr' info='a buffer to receive the output'/>
      <arg name='expr' type='xmlExpNodePtr' info='the compiled expression'/>
    </function>
    <function name='xmlExpExpDerive' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages.</info>
      <return type='xmlExpNodePtr' info='the resulting expression or NULL in case of internal error, the result must be freed'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the englobing expression'/>
      <arg name='sub' type='xmlExpNodePtr' info='the subexpression'/>
    </function>
    <function name='xmlExpFree' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Dereference the expression</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
    </function>
    <function name='xmlExpFreeCtxt' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Free an expression context</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
    </function>
    <function name='xmlExpGetLanguage' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Find all the strings used in @exp and store them in @list</info>
      <return type='int' info='the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
      <arg name='langList' type='const xmlChar **' info='where to store the tokens'/>
      <arg name='len' type='int' info='the allocated length of @list'/>
    </function>
    <function name='xmlExpGetStart' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c]</info>
      <return type='int' info='the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
      <arg name='tokList' type='const xmlChar **' info='where to store the tokens'/>
      <arg name='len' type='int' info='the allocated length of @list'/>
    </function>
    <function name='xmlExpIsNillable' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Finds if the expression is nillable, i.e. if it accepts the empty sequqnce</info>
      <return type='int' info='1 if nillable, 0 if not and -1 in case of error'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
    </function>
    <function name='xmlExpMaxToken' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Indicate the maximum number of input a expression can accept</info>
      <return type='int' info='the maximum length or -1 in case of error'/>
      <arg name='expr' type='xmlExpNodePtr' info='a compiled expression'/>
    </function>
    <function name='xmlExpNewAtom' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Get the atom associated to this name from that context</info>
      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='name' type='const xmlChar *' info='the atom name'/>
      <arg name='len' type='int' info='the atom name length in byte (or -1);'/>
    </function>
    <function name='xmlExpNewCtxt' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Creates a new context for manipulating expressions</info>
      <return type='xmlExpCtxtPtr' info='the context or NULL in case of error'/>
      <arg name='maxNodes' type='int' info='the maximum number of nodes'/>
      <arg name='dict' type='xmlDictPtr' info='optional dictionary to use internally'/>
    </function>
    <function name='xmlExpNewOr' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</info>
      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='left' type='xmlExpNodePtr' info='left expression'/>
      <arg name='right' type='xmlExpNodePtr' info='right expression'/>
    </function>
    <function name='xmlExpNewRange' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).</info>
      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='subset' type='xmlExpNodePtr' info='the expression to be repeated'/>
      <arg name='min' type='int' info='the lower bound for the repetition'/>
      <arg name='max' type='int' info='the upper bound for the repetition, -1 means infinite'/>
    </function>
    <function name='xmlExpNewSeq' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</info>
      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='left' type='xmlExpNodePtr' info='left expression'/>
      <arg name='right' type='xmlExpNodePtr' info='right expression'/>
    </function>
    <function name='xmlExpParse' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences  { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values</info>
      <return type='xmlExpNodePtr' info='a new expression or NULL in case of failure'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
      <arg name='expr' type='const char *' info='the 0 terminated string'/>
    </function>
    <function name='xmlExpRef' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Increase the reference count of the expression</info>
      <return type='void'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
    </function>
    <function name='xmlExpStringDerive' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Do one step of Brzozowski derivation of the expression @exp with respect to the input string</info>
      <return type='xmlExpNodePtr' info='the resulting expression or NULL in case of internal error'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
      <arg name='str' type='const xmlChar *' info='the string'/>
      <arg name='len' type='int' info='the string len in bytes if available'/>
    </function>
    <function name='xmlExpSubsume' file='xmlregexp' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
      <info>Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression.</info>
      <return type='int' info='1 if true 0 if false and -1 in case of failure.'/>
      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
      <arg name='exp' type='xmlExpNodePtr' info='the englobing expression'/>
      <arg name='sub' type='xmlExpNodePtr' info='the subexpression'/>
    </function>
    <functype name='xmlExternalEntityLoader' file='parser' module='parser'>
      <info>External entity loaders types.</info>
      <return type='xmlParserInputPtr' info='the entity input parser.'/>
      <arg name='URL' type='const char *' info='The System ID of the resource requested'/>
      <arg name='ID' type='const char *' info='The Public ID of the resource requested'/>
      <arg name='context' type='xmlParserCtxtPtr' info='the XML parser context'/>
    </functype>
    <function name='xmlFileClose' file='xmlIO' module='xmlIO'>
      <info>Close an I/O channel</info>
      <return type='int' info='0 or -1 in case of error'/>
      <arg name='context' type='void *' info='the I/O context'/>
    </function>
    <function name='xmlFileMatch' file='xmlIO' module='xmlIO'>
      <info>input from FILE *</info>
      <return type='int' info='1 if matches, 0 otherwise'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlFileOpen' file='xmlIO' module='xmlIO'>
      <info>Wrapper around xmlFileOpen_real that try it with an unescaped version of @filename, if this fails fallback to @filename</info>
      <return type='void *' info='a handler or NULL in case or failure'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlFileRead' file='xmlIO' module='xmlIO'>
      <info>Read @len bytes to @buffer from the I/O channel.</info>
      <return type='int' info='the number of bytes written or &lt; 0 in case of failure'/>
      <arg name='context' type='void *' info='the I/O context'/>
      <arg name='buffer' type='char *' info='where to drop data'/>
      <arg name='len' type='int' info='number of bytes to write'/>
    </function>
    <function name='xmlFindCharEncodingHandler' file='encoding' module='encoding'>
      <info>Search in the registered set the handler able to read/write that encoding.</info>
      <return type='xmlCharEncodingHandlerPtr' info='the handler or NULL if not found'/>
      <arg name='name' type='const char *' info='a string describing the char encoding.'/>
    </function>
    <function name='xmlFirstElementChild' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED)</cond>
      <info>Finds the first child node of that element which is a 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 first element child or NULL if not available'/>
      <arg name='parent' type='xmlNodePtr' info='the parent node'/>
    </function>
    <function name='xmlFreeAttributeTable' file='valid' module='valid'>
      <info>Deallocate the memory used by an entities hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlAttributeTablePtr' info='An attribute table'/>
    </function>
    <function name='xmlFreeAutomata' file='xmlautomata' module='xmlregexp'>
      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_AUTOMATA_ENABLED)</cond>
      <info>Free an automata</info>
      <return type='void'/>
      <arg name='am' type='xmlAutomataPtr' info='an automata'/>
    </function>
    <function name='xmlFreeCatalog' file='catalog' module='catalog'>
      <cond>defined(LIBXML_CATALOG_ENABLED)</cond>
      <info>Free the memory allocated to a Catalog</info>
      <return type='void'/>
      <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
    </function>
    <function name='xmlFreeDoc' file='tree' module='tree'>
      <info>Free up all the structures used by a document, tree included.</info>
      <return type='void'/>
      <arg name='cur' type='xmlDocPtr' info='pointer to the document'/>
    </function>
    <function name='xmlFreeDocElementContent' file='valid' module='valid'>
      <info>Free an element content structure. The whole subtree is removed.</info>
      <return type='void'/>
      <arg name='doc' type='xmlDocPtr' info='the document owning the element declaration'/>
      <arg name='cur' type='xmlElementContentPtr' info='the element content tree to free'/>
    </function>
    <function name='xmlFreeDtd' file='tree' module='tree'>
      <info>Free a DTD structure.</info>
      <return type='void'/>
      <arg name='cur' type='xmlDtdPtr' info='the DTD structure to free up'/>
    </function>
    <function name='xmlFreeElementContent' file='valid' module='valid'>
      <info>Free an element content structure. The whole subtree is removed. Deprecated, use xmlFreeDocElementContent instead</info>
      <return type='void'/>
      <arg name='cur' type='xmlElementContentPtr' info='the element content tree to free'/>
    </function>
    <function name='xmlFreeElementTable' file='valid' module='valid'>
      <info>Deallocate the memory used by an element hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlElementTablePtr' info='An element table'/>
    </function>
    <function name='xmlFreeEntitiesTable' file='entities' module='entities'>
      <info>Deallocate the memory used by an entities hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlEntitiesTablePtr' info='An entity table'/>
    </function>
    <function name='xmlFreeEnumeration' file='valid' module='valid'>
      <info>free an enumeration attribute node (recursive).</info>
      <return type='void'/>
      <arg name='cur' type='xmlEnumerationPtr' info='the tree to free.'/>
    </function>
    <functype name='xmlFreeFunc' file='xmlmemory' module='xmlmemory'>
      <info>Signature for a free() implementation.</info>
      <return type='void'/>
      <arg name='mem' type='void *' info='an already allocated block of memory'/>
    </functype>
    <function name='xmlFreeIDTable' file='valid' module='valid'>
      <info>Deallocate the memory used by an ID hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlIDTablePtr' info='An id table'/>
    </function>
    <function name='xmlFreeInputStream' file='parserInternals' module='parserInternals'>
      <info>Free up an input stream.</info>
      <return type='void'/>
      <arg name='input' type='xmlParserInputPtr' info='an xmlParserInputPtr'/>
    </function>
    <function name='xmlFreeMutex' file='threads' module='threads'>
      <info>xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.</info>
      <return type='void'/>
      <arg name='tok' type='xmlMutexPtr' info='the simple mutex'/>
    </function>
    <function name='xmlFreeNode' file='tree' module='tree'>
      <info>Free a node, this is a recursive behaviour, all the children are freed too. This doesn&apos;t unlink the child from the list, use xmlUnlinkNode() first.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the node'/>
    </function>
    <function name='xmlFreeNodeList' file='tree' module='tree'>
      <info>Free a node and all its siblings, this is a recursive behaviour, all the children are freed too.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNodePtr' info='the first node in the list'/>
    </function>
    <function name='xmlFreeNotationTable' file='valid' module='valid'>
      <info>Deallocate the memory used by an entities hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlNotationTablePtr' info='An notation table'/>
    </function>
    <function name='xmlFreeNs' file='tree' module='tree'>
      <info>Free up the structures associated to a namespace</info>
      <return type='void'/>
      <arg name='cur' type='xmlNsPtr' info='the namespace pointer'/>
    </function>
    <function name='xmlFreeNsList' file='tree' module='tree'>
      <info>Free up all the structures associated to the chained namespaces.</info>
      <return type='void'/>
      <arg name='cur' type='xmlNsPtr' info='the first namespace pointer'/>
    </function>
    <function name='xmlFreeParserCtxt' file='parser' module='parserInternals'>
      <info>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
    </function>
    <function name='xmlFreeParserInputBuffer' file='xmlIO' module='xmlIO'>
      <info>Free up the memory used by a buffered parser input</info>
      <return type='void'/>
      <arg name='in' type='xmlParserInputBufferPtr' info='a buffered parser input'/>
    </function>
    <function name='xmlFreePattern' file='pattern' module='pattern'>
      <cond>defined(LIBXML_PATTERN_ENABLED)</cond>
      <info>Free up the memory allocated by @comp</info>
      <return type='void'/>
      <arg name='comp' type='xmlPatternPtr' info='an XSLT comp'/>
    </function>
    <function name='xmlFreePatternList' file='pattern' module='pattern'>
      <cond>defined(LIBXML_PATTERN_ENABLED)</cond>
      <info>Free up the memory allocated by all the elements of @comp</info>
      <return type='void'/>
      <arg name='comp' type='xmlPatternPtr' info='an XSLT comp list'/>
    </function>
    <function name='xmlFreeProp' file='tree' module='tree'>
      <info>Free one attribute, all the content is freed too</info>
      <return type='void'/>
      <arg name='cur' type='xmlAttrPtr' info='an attribute'/>
    </function>
    <function name='xmlFreePropList' file='tree' module='tree'>
      <info>Free a property and all its siblings, all the children are freed too.</info>
      <return type='void'/>
      <arg name='cur' type='xmlAttrPtr' info='the first property in the list'/>
    </function>
    <function name='xmlFreeRMutex' file='threads' module='threads'>
      <info>xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.</info>
      <return type='void'/>
      <arg name='tok' type='xmlRMutexPtr' info='the reentrant mutex'/>
    </function>
    <function name='xmlFreeRefTable' file='valid' module='valid'>
      <info>Deallocate the memory used by an Ref hash table.</info>
      <return type='void'/>
      <arg name='table' type='xmlRefTablePtr' info='An ref table'/>
    </function>
    <function name='xmlFreeStreamCtxt' file='pattern' module='pattern'>
      <cond>defined(LIBXML_PATTERN_ENABLED)</cond>
      <info>Free the stream context</info>
      <return type='void'/>
      <arg name='stream' type='xmlStreamCtxtPtr' info='the stream context'/>
    </function>
    <function name='xmlFreeTextReader' file='xmlreader' module='xmlreader'>
      <cond>defined(LIBXML_READER_ENABLED)</cond>
      <info>Deallocate all the resources associated to the reader</info>
      <return type='void'/>
      <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr'/>
    </function>
    <function name='xmlFreeTextWriter' file='xmlwriter' module='xmlwriter'>
      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
      <info>Deallocate all the resources associated to the writer</info>
      <return type='void'/>
      <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
    </function>
    <function name='xmlFreeURI' file='uri' module='uri'>
      <info>Free up the xmlURI struct</info>
      <return type='void'/>
      <arg name='uri' type='xmlURIPtr' info='pointer to an xmlURI'/>
    </function>
    <function name='xmlFreeValidCtxt' file='valid' module='valid'>
      <cond>defined(LIBXML_VALID_ENABLED)</cond>
      <info>Free a validation context structure.</info>
      <return type='void'/>
      <arg name='cur' type='xmlValidCtxtPtr' info='the validation context to free'/>
    </function>
    <function name='xmlGcMemGet' file='xmlmemory' module='xmlmemory'>
      <info>Provides the memory access functions set currently in use The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas  useful for garbage collected memory allocators</info>
      <return type='int' info='0 on success'/>
      <arg name='freeFunc' type='xmlFreeFunc *' info='place to save the free() function in use'/>
      <arg name='mallocFunc' type='xmlMallocFunc *' info='place to save the malloc() function in use'/>
      <arg name='mallocAtomicFunc' type='xmlMallocFunc *' info='place to save the atomic malloc() function in use'/>
      <arg name='reallocFunc' type='xmlReallocFunc *' info='place to save the realloc() function in use'/>
      <arg name='strdupFunc' type='xmlStrdupFunc *' info='place to save the strdup() function in use'/>
    </function>
    <function name='xmlGcMemSetup' file='xmlmemory' module='xmlmemory'>
      <info>Override the default memory access functions with a new set This has to be called before any other libxml routines ! The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas  useful for garbage collected memory allocators  Should this be blocked if there was already some allocations done ?</info>
      <return type='int' info='0 on success'/>
      <arg name='freeFunc' type='xmlFreeFunc' info='the free() function to use'/>
      <arg name='mallocFunc' type='xmlMallocFunc' info='the malloc() function to use'/>
      <arg name='mallocAtomicFunc' type='xmlMallocFunc' info='the malloc() function to use for atomic allocations'/>
      <arg name='reallocFunc' type='xmlReallocFunc' info='the realloc() function to use'/>
      <arg name='strdupFunc' type='xmlStrdupFunc' info='the strdup() function to use'/>
    </function>
    <functype name='xmlGenericErrorFunc' file='xmlerror' module='xmlerror'>
      <info>Signature of the function to use when there is an error and no parsing or validity context available .</info>
      <return type='void'/>
      <arg name='ctx' type='void *' info='a parsing context'/>
      <arg name='msg' type='const char *' info='the message'/>
      <arg name='...' type='...' info='the extra arguments of the varags to format the message'/>
    </functype>
    <function name='xmlGetBufferAllocationScheme' file='tree' module='tree'>
      <info>Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight in normal usage, and doubleit on large strings to avoid pathological performance.</info>
      <return type='xmlBufferAllocationScheme' info='the current allocation scheme'/>
    </function>
    <function name='xmlGetCharEncodingHandler' file='encoding' module='encoding'>
      <info>Search in the registered set the handler able to read/write that encoding.</info>
      <return type='xmlCharEncodingHandlerPtr' info='the handler or NULL if not found'/>
      <arg name='enc' type='xmlCharEncoding' info='an xmlCharEncoding value.'/>
    </function>
    <function name='xmlGetCharEncodingName' file='encoding' module='encoding'>
      <info>The &quot;canonical&quot; name for XML encoding. C.f. http://www.w3.org/TR/REC-xml#charencoding Section 4.3.3  Character Encoding in Entities</info>
      <return type='const char *' info='the canonical name for the given encoding'/>
      <arg name='enc' type='xmlCharEncoding' info='the encoding'/>
    </function>
    <function name='xmlGetCompressMode' file='tree' module='tree'>
      <info>get the default compression mode used, ZLIB based.</info>
      <return type='int' info='0 (uncompressed) to 9 (max compression)'/>
    </function>
    <function name='xmlGetDocCompressMode' file='tree' module='tree'>
      <info>get the compression ratio for a document, ZLIB based</info>
      <return type='int' info='0 (uncompressed) to 9 (max compression)'/>
      <arg name='doc' type='const xmlDoc *' info='the document'/>
    </function>
    <function name='xmlGetDocEntity' file='entities' module='entities'>
      <info>Do an entity lookup in the document entity hash table and</info>
      <return type='xmlEntityPtr' info='the corresponding entity, otherwise a lookup is done in the predefined entities too.  Returns A pointer to the entity structure or NULL if not found.'/>
      <arg name='doc' type='const xmlDoc *' info='the document referencing the entity'/>
      <arg name='name' type='const xmlChar *' info='the entity name'/>
    </function>
    <function name='xmlGetDtdAttrDesc' file='valid' module='valid'>
      <info>Search the DTD for the description of this attribute on this element.</info>
      <return type='xmlAttributePtr' info='the xmlAttributePtr if found or NULL'/>
      <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
      <arg name='elem' type='const xmlChar *' info='the element name'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
    </function>
    <function name='xmlGetDtdElementDesc' file='valid' module='valid'>
      <info>Search the DTD for the description of this element</info>
      <return type='xmlElementPtr' info='the xmlElementPtr if found or NULL'/>
      <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
      <arg name='name' type='const xmlChar *' info='the element name'/>
    </function>
    <function name='xmlGetDtdEntity' file='entities' module='entities'>
      <info>Do an entity lookup in the DTD entity hash table and</info>
      <return type='xmlEntityPtr' info='the corresponding entity, if found. Note: the first argument is the document node, not the DTD node.  Returns A pointer to the entity structure or NULL if not found.'/>
      <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
      <arg name='name' type='const xmlChar *' info='the entity name'/>
    </function>
    <function name='xmlGetDtdNotationDesc' file='valid' module='valid'>
      <info>Search the DTD for the description of this notation</info>
      <return type='xmlNotationPtr' info='the xmlNotationPtr if found or NULL'/>
      <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
      <arg name='name' type='const xmlChar *' info='the notation name'/>
    </function>
    <function name='xmlGetDtdQAttrDesc' file='valid' module='valid'>
      <info>Search the DTD for the description of this qualified attribute on this element.</info>
      <return type='xmlAttributePtr' info='the xmlAttributePtr if found or NULL'/>
      <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
      <arg name='elem' type='const xmlChar *' info='the element name'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
      <arg name='prefix' type='const xmlChar *' info='the attribute namespace prefix'/>
    </function>
    <function name='xmlGetDtdQElementDesc' file='valid' module='valid'>
      <info>Search the DTD for the description of this element</info>
      <return type='xmlElementPtr' info='the xmlElementPtr if found or NULL'/>
      <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
      <arg name='name' type='const xmlChar *' info='the element name'/>
      <arg name='prefix' type='const xmlChar *' info='the element namespace prefix'/>
    </function>
    <function name='xmlGetEncodingAlias' file='encoding' module='encoding'>
      <info>Lookup an encoding name for the given alias.</info>
      <return type='const char *' info='NULL if not found, otherwise the original name'/>
      <arg name='alias' type='const char *' info='the alias name as parsed, in UTF-8 format (ASCII actually)'/>
    </function>
    <function name='xmlGetExternalEntityLoader' file='parser' module='xmlIO'>
      <info>Get the default external entity resolver function for the application</info>
      <return type='xmlExternalEntityLoader' info='the xmlExternalEntityLoader function pointer'/>
    </function>
    <function name='xmlGetFeature' file='parser' module='legacy'>
      <cond>defined(LIBXML_LEGACY_ENABLED)</cond>
      <info>Read the current value of one feature of this parser instance</info>
      <return type='int' info='-1 in case or error, 0 otherwise'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML/HTML parser context'/>
      <arg name='name' type='const char *' info='the feature name'/>
      <arg name='result' type='void *' info='location to store the result'/>
    </function>
    <function name='xmlGetFeaturesList' file='parser' module='legacy'>
      <cond>defined(LIBXML_LEGACY_ENABLED)</cond>
      <info>Copy at most *@len feature names into the @result array</info>
      <return type='int' info='-1 in case or