      * Summary: internals routines and limits exported by the parser.
      * Description: this module exports a number of internal parsing routines
      *              they are not really all intended for applications but
      *              can prove useful doing low level processing.
      *
      * Copy: See Copyright for the status of this software.
      *
      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

      /if not defined(XML_PARSER_INTERNALS_H__)
      /define XML_PARSER_INTERNALS_H__

      /include "libxmlrpg/xmlversion"
      /include "libxmlrpg/parser"
      /include "libxmlrpg/HTMLparser"
      /include "libxmlrpg/chvalid"

      * xmlParserMaxDepth:
      *
      * arbitrary depth limit for the XML documents that we allow to
      * process. This is not a limitation of the parser but a safety
      * boundary feature, use XML_PARSE_HUGE option to override it.

     d xmlParserMaxDepth...
     d                 s             10u 0 import('xmlParserMaxDepth')

      * XML_MAX_TEXT_LENGTH:
      *
      * Maximum size allowed for a single text node when building a tree.
      * This is not a limitation of the parser but a safety boundary feature,
      * use XML_PARSE_HUGE option to override it.
      * Introduced in 2.9.0

     d XML_MAX_TEXT_LENGTH...
     d                 c                   10000000

      * XML_MAX_NAME_LENGTH:
      *
      * Maximum size allowed for a markup identitier
      * This is not a limitation of the parser but a safety boundary feature,
      * use XML_PARSE_HUGE option to override it.
      * Note that with the use of parsing dictionaries overriding the limit
      * may result in more runtime memory usage in face of "unfriendly' content
      * Introduced in 2.9.0

     d XML_MAX_NAME_LENGTH...
     d                 c                   50000

      * XML_MAX_DICTIONARY_LIMIT:
      *
      * Maximum size allowed by the parser for a dictionary by default
      * This is not a limitation of the parser but a safety boundary feature,
      * use XML_PARSE_HUGE option to override it.
      * Introduced in 2.9.0

     d XML_MAX_DICTIONARY_LIMIT...
     d                 c                   10000000

      * XML_MAX_LOOKUP_LIMIT:
      *
      * Maximum size allowed by the parser for ahead lookup
      * This is an upper boundary enforced by the parser to avoid bad
      * behaviour on "unfriendly' content
      * Introduced in 2.9.0

     d XML_MAX_LOOKUP_LIMIT...
     d                 c                   10000000

      * XML_MAX_NAMELEN:
      *
      * Identifiers can be longer, but this will be more costly
      * at runtime.

     d XML_MAX_NAMELEN...
     d                 c                   100

      * INPUT_CHUNK:
      *
      * The parser tries to always have that amount of input ready.
      * One of the point is providing context when reporting errors.

     d INPUT_CHUNK     c                   250

      * Global variables used for predefined strings.

     d xmlStringText   s              4    import('xmlStringText')              \0 in 5th byte

     d xmlStringTextNoenc...
     d                 s              9    import('xmlStringTextNoenc')         \0 in 10th byte

     d xmlStringComment...
     d                 s              7    import('xmlStringComment')           \0 in 8th byte

      * Function to finish the work of the macros where needed.

     d xmlIsLetter     pr            10i 0 extproc('xmlIsLetter')
     d c                             10i 0 value

      * Parser context.

     d xmlCreateFileParserCtxt...
     d                 pr                  extproc('xmlCreateFileParserCtxt')
     d                                     like(xmlParserCtxtPtr)
     d filename                        *   value options(*string)               const char *

     d xmlCreateURLParserCtxt...
     d                 pr                  extproc('xmlCreateURLParserCtxt')
     d                                     like(xmlParserCtxtPtr)
     d filename                        *   value options(*string)               const char *
     d options                       10i 0 value

     d xmlCreateMemoryParserCtxt...
     d                 pr                  extproc('xmlCreateMemoryParserCtxt')
     d                                     like(xmlParserCtxtPtr)
     d buffer                          *   value options(*string)               const char *
     d size                          10i 0 value

     d xmlCreateEntityParserCtxt...
     d                 pr                  extproc('xmlCreateEntityParserCtxt')
     d                                     like(xmlParserCtxtPtr)
     d URL                             *   value options(*string)               const xmlChar *
     d ID                              *   value options(*string)               const xmlChar *
     d base                            *   value options(*string)               const xmlChar *

     d xmlSwitchEncoding...
     d                 pr            10i 0 extproc('xmlSwitchEncoding')
     d ctxt                                value like(xmlParserCtxtPtr)
     d enc                                 value like(xmlCharEncoding)

     d xmlSwitchToEncoding...
     d                 pr            10i 0 extproc('xmlSwitchToEncoding')
     d ctxt                                value like(xmlParserCtxtPtr)
     d handler                             value like(xmlCharEncodingHandlerPtr)

     d xmlSwitchInputEncoding...
     d                 pr            10i 0 extproc('xmlSwitchInputEncoding')
     d ctxt                                value like(xmlParserCtxtPtr)
     d input                               value like(xmlParserInputPtr)
     d handler                             value like(xmlCharEncodingHandlerPtr)

      * Input Streams.

     d xmlNewStringInputStream...
     d                 pr                  extproc('xmlNewStringInputStream')
     d                                     like(xmlParserInputPtr)
     d ctxt                                value like(xmlParserCtxtPtr)
     d buffer                          *   value options(*string)               const xmlChar *

     d xmlNewEntityInputStream...
     d                 pr                  extproc('xmlNewEntityInputStream')
     d                                     like(xmlParserInputPtr)
     d ctxt                                value like(xmlParserCtxtPtr)
     d entity                              value like(xmlEntityPtr)

     d xmlPushInput    pr            10i 0 extproc('xmlPushInput')
     d ctxt                                value like(xmlParserCtxtPtr)
     d input                               value like(xmlParserInputPtr)

     d xmlPopInput     pr                  extproc('xmlPopInput')
     d                                     like(xmlChar)
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlFreeInputStream...
     d                 pr                  extproc('xmlFreeInputStream')
     d input                               value like(xmlParserInputPtr)

     d xmlNewInputFromFile...
     d                 pr                  extproc('xmlNewInputFromFile')
     d                                     like(xmlParserInputPtr)
     d ctxt                                value like(xmlParserCtxtPtr)
     d filename                        *   value options(*string)               const char *

     d xmlNewInputStream...
     d                 pr                  extproc('xmlNewInputStream')
     d                                     like(xmlParserInputPtr)
     d ctxt                                value like(xmlParserCtxtPtr)

      * Namespaces.

     d xmlSplitQName   pr              *   extproc('xmlSplitQName')             xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d name                            *   value options(*string)               const xmlChar *
     d prefix                          *                                        xmlChar *(*)

      * Generic production rules.

     d xmlParseName    pr              *   extproc('xmlParseName')              const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseNmtoken...
     d                 pr              *   extproc('xmlParseNmtoken')           xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEntityValue...
     d                 pr              *   extproc('xmlParseEntityValue')       xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d orig                            *                                        xmlChar *(*)

     d xmlParseAttValue...
     d                 pr              *   extproc('xmlParseAttValue')          xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseSystemLiteral...
     d                 pr              *   extproc('xmlParseSystemLiteral')     xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParsePubidLiteral...
     d                 pr              *   extproc('xmlParsePubidLiteral')      xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseCharData...
     d                 pr                  extproc('xmlParseCharData')
     d ctxt                                value like(xmlParserCtxtPtr)
     d cdata                         10i 0 value

     d xmlParseExternalID...
     d                 pr              *   extproc('xmlParseExternalID')        xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d publicID                        *                                        xmlChar *(*)
     d strict                        10i 0 value

     d xmlParseComment...
     d                 pr                  extproc('xmlParseComment')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParsePITarget...
     d                 pr              *   extproc('xmlParsePITarget')          const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParsePI      pr                  extproc('xmlParsePI')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseNotationDecl...
     d                 pr                  extproc('xmlParseNotationDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEntityDecl...
     d                 pr                  extproc('xmlParseEntityDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseDefaultDecl...
     d                 pr            10i 0 extproc('xmlParseDefaultDecl')
     d ctxt                                value like(xmlParserCtxtPtr)
     d value                           *                                        xmlChar *(*)

     d xmlParseNotationType...
     d                 pr                  extproc('xmlParseNotationType')
     d                                     like(xmlEnumerationPtr)
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEnumerationType...
     d                 pr                  extproc('xmlParseEnumerationType')
     d                                     like(xmlEnumerationPtr)
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEnumeratedType...
     d                 pr            10i 0 extproc('xmlParseEnumeratedType')
     d ctxt                                value like(xmlParserCtxtPtr)
     d tree                            *   value                                xmlEnumerationPtr *

     d xmlParseAttributeType...
     d                 pr            10i 0 extproc('xmlParseAttributeType')
     d ctxt                                value like(xmlParserCtxtPtr)
     d tree                            *   value                                xmlEnumerationPtr *

     d xmlParseAttributeListDecl...
     d                 pr                  extproc('xmlParseAttributeListDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseElementMixedContentDecl...
     d                 pr                  extproc(
     d                                     'xmlParseElementMixedContentDecl')
     d                                     like(xmlElementContentPtr)
     d ctxt                                value like(xmlParserCtxtPtr)
     d inputchk                      10i 0 value

     d xmlParseElementChildrenContentDecl...
     d                 pr                  extproc(
     d                                     'xmlParseElementChildrenContentDecl')
     d                                     like(xmlElementContentPtr)
     d ctxt                                value like(xmlParserCtxtPtr)
     d inputchk                      10i 0 value

     d xmlParseElementContentDecl...
     d                 pr            10i 0 extproc('xmlParseElementContentDecl')
     d ctxt                                value like(xmlParserCtxtPtr)
     d name                            *   value options(*string)               const xmlChar *
     d result                          *   value                                xmlElementContentPtr
     d                                                                          *

     d xmlParseElementDecl...
     d                 pr            10i 0 extproc('xmlParseElementDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseMarkupDecl...
     d                 pr                  extproc('xmlParseMarkupDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseCharRef...
     d                 pr            10i 0 extproc('xmlParseCharRef')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEntityRef...
     d                 pr                  extproc('xmlParseEntityRef')
     d                                     like(xmlEntityPtr)
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseReference...
     d                 pr                  extproc('xmlParseReference')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParsePEReference...
     d                 pr                  extproc('xmlParsePEReference')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseDocTypeDecl...
     d                 pr                  extproc('xmlParseDocTypeDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

      /if defined(LIBXML_SAX1_ENABLED)
     d xmlParseAttribute...
     d                 pr              *   extproc('xmlParseAttribute')         const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d value                           *                                        xmlChar *(*)

     d xmlParseStartTag...
     d                 pr              *   extproc('xmlParseStartTag')          const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEndTag  pr                  extproc('xmlParseEndTag')
     d ctxt                                value like(xmlParserCtxtPtr)
      /endif                                                                    LIBXML_SAX1_ENABLED

     d xmlParseCDSect  pr                  extproc('xmlParseCDSect')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseContent...
     d                 pr                  extproc('xmlParseContent')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseElement...
     d                 pr                  extproc('xmlParseElement')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseVersionNum...
     d                 pr              *   extproc('xmlParseVersionNum')        xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseVersionInfo...
     d                 pr              *   extproc('xmlParseVersionInfo')       xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEncName...
     d                 pr              *   extproc('xmlParseEncName')           xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseEncodingDecl...
     d                 pr              *   extproc('xmlParseEncodingDecl')      const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseSDDecl  pr            10i 0 extproc('xmlParseSDDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseXMLDecl...
     d                 pr                  extproc('xmlParseXMLDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseTextDecl...
     d                 pr                  extproc('xmlParseTextDecl')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseMisc    pr                  extproc('xmlParseMisc')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseExternalSubset...
     d                 pr                  extproc('xmlParseExternalSubset')
     d ctxt                                value like(xmlParserCtxtPtr)
     d ExternalID                      *   value options(*string)               const xmlChar *
     d SystemID                        *   value options(*string)               const xmlChar *

      * XML_SUBSTITUTE_NONE:
      *
      * If no entities need to be substituted.

     d XML_SUBSTITUTE_NONE...
     d                 c                   0

      * XML_SUBSTITUTE_REF:
      *
      * Whether general entities need to be substituted.

     d XML_SUBSTITUTE_REF...
     d                 c                   1

      * XML_SUBSTITUTE_PEREF:
      *
      * Whether parameter entities need to be substituted.

     d XML_SUBSTITUTE_PEREF...
     d                 c                   2

      * XML_SUBSTITUTE_BOTH:
      *
      * Both general and parameter entities need to be substituted.

     d XML_SUBSTITUTE_BOTH...
     d                 c                   3

     d xmlStringDecodeEntities...
     d                 pr              *   extproc('xmlStringDecodeEntities')   xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d str                             *   value options(*string)               const xmlChar *
     d what                          10i 0 value
     d end                                 value like(xmlChar)
     d end2                                value like(xmlChar)
     d end3                                value like(xmlChar)

     d xmlStringLenDecodeEntities...
     d                 pr              *   extproc('xmlStringLenDecodeEntities')xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d str                             *   value options(*string)               const xmlChar *
     d len                           10i 0 value
     d what                          10i 0 value
     d end                                 value like(xmlChar)
     d end2                                value like(xmlChar)
     d end3                                value like(xmlChar)

      * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.

     d nodePush        pr            10i 0 extproc('nodePush')
     d ctxt                                value like(xmlParserCtxtPtr)
     d value                               value like(xmlNodePtr)

     d nodePop         pr                  extproc('nodePop')
     d                                     like(xmlNodePtr)
     d ctxt                                value like(xmlParserCtxtPtr)

     d inputPush       pr            10i 0 extproc('inputPush')
     d ctxt                                value like(xmlParserCtxtPtr)
     d value                               value like(xmlParserInputPtr)

     d inputPop        pr                  extproc('inputPop')
     d                                     like(xmlParserInputPtr)
     d ctxt                                value like(xmlParserCtxtPtr)

     d namePop         pr              *   extproc('namePop')                   const xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d namePush        pr            10i 0 extproc('namePush')
     d ctxt                                value like(xmlParserCtxtPtr)
     d value                           *   value options(*string)               const xmlChar *

      * other commodities shared between parser.c and parserInternals.

     d xmlSkipBlankChars...
     d                 pr            10i 0 extproc('xmlSkipBlankChars')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlStringCurrentChar...
     d                 pr            10i 0 extproc('xmlStringCurrentChar')
     d ctxt                                value like(xmlParserCtxtPtr)
     d cur                             *   value options(*string)               const xmlChar *
     d len                             *   value                                int *

     d xmlParserHandlePEReference...
     d                 pr                  extproc('xmlParserHandlePEReference')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlCheckLanguageID...
     d                 pr            10i 0 extproc('xmlCheckLanguageID')
     d lang                            *   value options(*string)               const xmlChar *

      * Really core function shared with HTML parser.

     d xmlCurrentChar  pr            10i 0 extproc('xmlCurrentChar')
     d ctxt                                value like(xmlParserCtxtPtr)
     d len                             *   value                                int *

     d xmlCopyCharMultiByte...
     d                 pr            10i 0 extproc('xmlCopyCharMultiByte')
     d out                             *   value options(*string)               xmlChar *
     d val                           10i 0 value

     d xmlCopyChar     pr            10i 0 extproc('xmlCopyChar')
     d len                           10i 0 value
     d out                             *   value options(*string)               xmlChar *
     d val                           10i 0 value

     d xmlNextChar     pr                  extproc('xmlNextChar')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParserInputShrink...
     d                 pr                  extproc('xmlParserInputShrink')
     d in                                  value like(xmlParserInputPtr)

      /if defined(LIBXML_HTML_ENABLED)

      * Actually comes from the HTML parser but launched from the init stuff.

     d htmlInitAutoClose...
     d                 pr                  extproc('htmlInitAutoClose')

     d htmlCreateFileParserCtxt...
     d                 pr                  extproc('htmlCreateFileParserCtxt')
     d                                     like(htmlParserCtxtPtr)
     d filename                        *   value options(*string)               const char *
     d encoding                        *   value options(*string)               const char *
      /endif

      * Specific function to keep track of entities references
      * and used by the XSLT debugger.

      /if defined(LIBXML_LEGACY_ENABLED)
      * xmlEntityReferenceFunc:
      * @ent: the entity
      * @firstNode:  the fist node in the chunk
      * @lastNode:  the last nod in the chunk
      *
      * Callback function used when one needs to be able to track back the
      * provenance of a chunk of nodes inherited from an entity replacement.

     d xmlEntityReferenceFunc...
     d                 s               *   based(######typedef######)
     d                                     procptr

     d xmlSetEntityReferenceFunc...
     d                 pr                  extproc('xmlSetEntityReferenceFunc')
     d func                                value like(xmlEntityReferenceFunc)

     d xmlParseQuotedString...
     d                 pr              *   extproc('xmlParseQuotedString')      xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParseNamespace...
     d                 pr                  extproc('xmlParseNamespace')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlNamespaceParseNSDef...
     d                 pr              *   extproc('xmlNamespaceParseNSDef')    xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlScanName     pr              *   extproc('xmlScanName')               xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlNamespaceParseNCName...
     d                 pr              *   extproc('xmlNamespaceParseNCName')   xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlParserHandleReference...
     d                 pr                  extproc('xmlParserHandleReference')
     d ctxt                                value like(xmlParserCtxtPtr)

     d xmlNamespaceParseQName...
     d                 pr              *   extproc('xmlNamespaceParseQName')    xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d prefix                          *                                        xmlChar *(*)

      * Entities

     d xmlDecodeEntities...
     d                 pr              *   extproc('xmlDecodeEntities')         xmlChar *
     d ctxt                                value like(xmlParserCtxtPtr)
     d len                           10i 0 value
     d what                          10i 0 value
     d end                                 value like(xmlChar)
     d end2                                value like(xmlChar)
     d end3                                value like(xmlChar)

     d xmlHandleEntity...
     d                 pr                  extproc('xmlHandleEntity')
     d ctxt                                value like(xmlParserCtxtPtr)
     d entity                              value like(xmlEntityPtr)
      /endif                                                                    LIBXML_LEGACY_ENABLD

      /endif
