* Summary: The DTD validation
* Description: API for the DTD handling and the validity checking
*
* Copy: See Copyright for the status of this software.
*
* Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

/if not defined(XML_VALID_H__)
/define XML_VALID_H__

/include "libxmlrpg/xmlversion"
/include "libxmlrpg/xmlTypesC"
/include "libxmlrpg/xmlerror"
/include "libxmlrpg/tree"
/include "libxmlrpg/list"
/include "libxmlrpg/xmlautomata"
/include "libxmlrpg/xmlregexp"

* Validation state added for non-determinist content model.

d xmlValidStatePtr… d s * based(######typedef######)

* xmlValidityErrorFunc:
* @ctx:  usually an xmlValidCtxtPtr to a validity error context,
*        but comes from ctxt->userData (which normally contains such
*        a pointer); ctxt->userData can be changed by the user.
* @msg:  the string to format *printf like vararg
* @...:  remaining arguments to the format
*
* Callback called when a validity error is found. This is a message
* oriented function similar to an *printf function.

d xmlValidityErrorFunc… d s * based(######typedef######) d procptr

* xmlValidityWarningFunc:
* @ctx:  usually an xmlValidCtxtPtr to a validity error context,
*        but comes from ctxt->userData (which normally contains such
*        a pointer); ctxt->userData can be changed by the user.
* @msg:  the string to format *printf like vararg
* @...:  remaining arguments to the format
*
* Callback called when a validity warning is found. This is a message
* oriented function similar to an *printf function.

d xmlValidityWarningFunc… d s * based(######typedef######) d procptr

* xmlValidCtxt:
* An xmlValidCtxt is used for error reporting when validating.

d xmlValidCtxtPtr… d s * based(######typedef######)

d xmlValidCtxt ds based(xmlValidCtxtPtr) d align qualified d userdata * void * d error like(xmlValidityErrorFunc) Error callback d warning like(xmlValidityWarningFunc) Warning callback

*
* Node analysis stack used when validating within entities
*

d node like(xmlNodePtr) Current parsed Node d nodeNr like(xmlCint) Parsing stack depth d nodeMax like(xmlCint) Max stack depth d nodeTab * xmlNodePtr *

*

d finishDtd like(xmlCuint) d doc like(xmlDocPtr) The document d valid like(xmlCint) Temp check result

*
* state state used for non-determinist content validation
*

d vstate * xmlValidState * d vstateNr like(xmlCint) Validat. stack depth d vstateMax like(xmlCint) Max stack depth d vstateTab * xmlValidState *

*
/if defined(LIBXML_REGEXP_ENABLED)

d am like(xmlAutomataPtr) The automata d state like(xmlAutomataStatePtr) Automata build state

/else

d am * d state *

/endif

* ALL notation declarations are stored in a table.
* There is one table per DTD.

d xmlNotationTablePtr… d s * based(######typedef######)

* ALL element declarations are stored in a table.
* There is one table per DTD.

d xmlElementTablePtr… d s * based(######typedef######)

* ALL attribute declarations are stored in a table.
* There is one table per DTD.

d xmlAttributeTablePtr… d s * based(######typedef######)

* ALL IDs attributes are stored in a table.
* There is one table per document.

d xmlIDTablePtr s * based(######typedef######)

* ALL Refs attributes are stored in a table.
* There is one table per document.

d xmlRefTablePtr s * based(######typedef######)

* Notation

d xmlAddNotationDecl… d pr extproc('xmlAddNotationDecl') d like(xmlNotationPtr) d ctxt value like(xmlValidCtxtPtr) d dtd value like(xmlDtdPtr) d name * value options(*string) const xmlChar * d PublicID * value options(*string) const xmlChar * d SystemID * value options(*string) const xmlChar *

/if defined(LIBXML_TREE_ENABLED)

d xmlCopyNotationTable… d pr extproc('xmlCopyNotationTable') d like(xmlNotationPtr) d table value like(xmlNotationTablePtr)

/endif                                                                    LIBXML_TREE_ENABLED

d xmlFreeNotationTable… d pr extproc('xmlFreeNotationTable') d table value like(xmlNotationTablePtr)

/if defined(LIBXML_OUTPUT_ENABLED)

d xmlDumpNotationDecl… d pr extproc('xmlDumpNotationDecl') d buf value like(xmlBufferPtr) d nota value like(xmlNotationPtr)

d xmlDumpNotationTable… d pr extproc('xmlDumpNotationTable') d buf value like(xmlBufferPtr) d table value like(xmlNotationTablePtr)

/endif                                                                    LIBXML_OUTPUT_ENABLD

* Element Content
* the non Doc version are being deprecated

d xmlNewElementContent… d pr extproc('xmlNewElementContent') d like(xmlElementContentPtr) d name * value const xmlChar * d type value like(xmlElementContentType)

d xmlCopyElementContent… d pr extproc('xmlCopyElementContent') d like(xmlElementContentPtr) d content value like(xmlElementContentPtr)

d xmlFreeElementContent… d pr extproc('xmlFreeElementContent') d cur value like(xmlElementContentPtr)

* the new versions with doc argument

d xmlNewDocElementContent… d pr extproc('xmlNewDocElementContent') d like(xmlElementContentPtr) d doc value like(xmlDocPtr) d name * value const xmlChar * d type value like(xmlElementContentType)

d xmlCopyDocElementContent… d pr extproc('xmlCopyDocElementContent') d like(xmlElementContentPtr) d doc value like(xmlDocPtr) d content value like(xmlElementContentPtr)

d xmlFreeDocElementContent… d pr extproc('xmlFreeDocElementContent') d doc value like(xmlDocPtr) d cur value like(xmlElementContentPtr)

d xmlSnprintfElementContent… d pr extproc('xmlSnprintfElementContent') d buf 65535 options(*varsize) d size value like(xmlCint) d content value like(xmlElementContentPtr) d englob value like(xmlCint)

/if defined(LIBXML_OUTPUT_ENABLED)
* DEPRECATED

d xmlSprintfElementContent… d pr extproc('xmlSprintfElementContent') d buf 65535 options(*varsize) d content value like(xmlElementContentPtr) d englob value like(xmlCint)

/endif                                                                    LIBXML_OUTPUT_ENABLD

* DEPRECATED

* Element

d xmlAddElementDecl… d pr extproc('xmlAddElementDecl') d like(xmlElementPtr) d ctxt value like(xmlValidCtxtPtr) d dtd value like(xmlDtdPtr) d name * value options(*string) const xmlChar * d type value like(xmlElementTypeVal) d content value like(xmlElementContentPtr)

/if defined(LIBXML_TREE_ENABLED)

d xmlCopyElementTable… d pr extproc('xmlCopyElementTable') d like(xmlElementTablePtr) d table value like(xmlElementTablePtr)

/endif                                                                    LIBXML_TREE_ENABLED

d xmlFreeElementTable… d pr extproc('xmlFreeElementTable') d table value like(xmlElementTablePtr)

/if defined(LIBXML_OUTPUT_ENABLED)

d xmlDumpElementTable… d pr extproc('xmlDumpElementTable') d buf value like(xmlBufferPtr) d table value like(xmlElementTablePtr)

d xmlDumpElementDecl… d pr extproc('xmlDumpElementDecl') d buf value like(xmlBufferPtr) d elem value like(xmlElementPtr)

/endif                                                                    LIBXML_OUTPUT_ENABLD

* Enumeration

d xmlCreateEnumeration… d pr extproc('xmlCreateEnumeration') d like(xmlEnumerationPtr) d name * value options(*string) const xmlChar *

d xmlFreeEnumeration… d pr extproc('xmlFreeEnumeration') d cur value like(xmlEnumerationPtr)

/if defined(LIBXML_TREE_ENABLED)

d xmlCopyEnumeration… d pr extproc('xmlCopyEnumeration') d like(xmlEnumerationPtr) d cur value like(xmlEnumerationPtr)

/endif                                                                    LIBXML_TREE_ENABLED

* Attribute

d xmlAddAttributeDecl… d pr extproc('xmlAddAttributeDecl') d like(xmlAttributePtr) d ctxt value like(xmlValidCtxtPtr) d dtd value like(xmlDtdPtr) d elem * value options(*string) const xmlChar * d name * value options(*string) const xmlChar * d ns * value options(*string) const xmlChar * d type value like(xmlAttributeType) d def value like(xmlAttributeDefault) d defaultValue * value options(*string) const xmlChar * d tree value like(xmlEnumerationPtr)

/if defined(LIBXML_TREE_ENABLED)

d xmlCopyAttributeTable… d pr extproc('xmlCopyAttributeTable') d like(xmlAttributeTablePtr) d table value like(xmlAttributeTablePtr)

/endif                                                                    LIBXML_TREE_ENABLED

d xmlFreeAttributeTable… d pr extproc('xmlFreeAttributeTable') d table value like(xmlAttributeTablePtr)

/if defined(LIBXML_OUTPUT_ENABLED)

d xmlDumpAttributeTable… d pr extproc('xmlDumpAttributeTable') d buf value like(xmlBufferPtr) d table value like(xmlAttributeTablePtr)

d xmlDumpAttributeDecl… d pr extproc('xmlDumpAttributeDecl') d buf value like(xmlBufferPtr) d attr value like(xmlAttributePtr)

/endif                                                                    LIBXML_OUTPUT_ENABLD

* IDs

d xmlAddID pr extproc('xmlAddID') d like(xmlIDPtr) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d value * value options(*string) const xmlChar * d attr value like(xmlAttrPtr)

d xmlFreeIdTable pr extproc('xmlFreeIDTable') d table value like(xmlIDTablePtr)

d xmlGetID pr extproc('xmlGetID') d like(xmlAttrPtr) d doc value like(xmlDocPtr) d ID * value options(*string) const xmlChar *

d xmlIsID pr extproc('xmlIsID') d like(xmlCint) d doc value like(xmlDocPtr) d node value like(xmlNodePtr) d attr value like(xmlAttrPtr)

d xmlRemoveID pr extproc('xmlRemoveID') d like(xmlCint) d doc value like(xmlDocPtr) d attr value like(xmlAttrPtr)

* IDREFs

d xmlAddRef pr extproc('xmlAddRef') d like(xmlRefPtr) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d value * value options(*string) const xmlChar * d attr value like(xmlAttrPtr)

d xmlFreeRefTable… d pr extproc('xmlFreeRefTable') d table value like(xmlRefTablePtr)

d xmlIsRef pr extproc('xmlIsRef') d like(xmlCint) d doc value like(xmlDocPtr) d node value like(xmlNodePtr) d attr value like(xmlAttrPtr)

d xmlRemoveRef pr extproc('xmlRemoveRef') d like(xmlCint) d doc value like(xmlDocPtr) d attr value like(xmlAttrPtr)

d xmlGetRefs pr extproc('xmlGetRefs') d like(xmlListPtr) d doc value like(xmlDocPtr) d ID * value options(*string) const xmlChar *

* The public function calls related to validity checking.

/if defined(LIBXML_VALID_ENABLED)
* Allocate/Release Validation Contexts

d xmlNewValidCtxt… d pr extproc('xmlNewValidCtxt') d like(xmlValidCtxtPtr)

d xmlFreeValidCtxt… d pr extproc('xmlFreeValidCtxt') d ctxt value like(xmlValidCtxtPtr)

d xmlValidateRoot… d pr extproc('xmlValidateRoot') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr)

d xmlValidateElementDecl… d pr extproc('xmlValidateElementDecl') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlElementPtr)

d xmlValidNormalizeAttributeValue… d pr * extproc( xmlChar * d 'xmlValidNormalizeAttributeValue') d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d name * value options(*string) const xmlChar * d value * value options(*string) const xmlChar *

d xmlValidCtxtNormalizeAttributeValue… d pr * extproc('xmlValidCtxt+ xmlChar * d NormalizeAttributeValue') d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d name * value options(*string) const xmlChar * d value * value options(*string) const xmlChar *

d xmlValidateAttributeDecl… d pr extproc('xmlValidateAttributeDecl') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d attr value like(xmlAttributePtr)

d xmlValidateAttributeValue… d pr extproc('xmlValidateAttributeValue') d like(xmlCint) d type value like(xmlAttributeType) d value * value options(*string) const xmlChar *

d xmlValidateNotationDecl… d pr extproc('xmlValidateNotationDecl') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d nota value like(xmlNotationPtr)

d xmlValidateDtd pr extproc('xmlValidateDtd') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d dtd value like(xmlDtdPtr)

d xmlValidateDtdFinal… d pr extproc('xmlValidateDtdFinal') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr)

d xmlValidateDocument… d pr extproc('xmlValidateDocument') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr)

d xmlValidateElement… d pr extproc('xmlValidateElement') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr)

d xmlValidateOneElement… d pr extproc('xmlValidateOneElement') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr)

d xmlValidateOneAttribute… d pr extproc('xmlValidateOneAttribute') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d attr value like(xmlAttrPtr) d value * value options(*string) const xmlChar *

d xmlValidateOneNamespace… d pr extproc('xmlValidateOneNamespace') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d prefix * value options(*string) const xmlChar * d ns value like(xmlNsPtr) d value * value options(*string) const xmlChar *

d xmlValidateDocumentFinal… d pr extproc('xmlValidateDocumentFinal') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr)

/endif                                                                    LIBXML_VALID_ENABLED

/undefine XML_TESTVAL
/if defined(LIBXML_VALID_ENABLED)
/define XML_TESTVAL
/elseif defined(LIBXML_SCHEMAS_ENABLED)
/define XML_TESTVAL
/endif
/if defined(XML_TESTVAL)

d xmlValidateNotationUse… d pr extproc('xmlValidateNotationUse') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d notationName * value options(*string) const xmlChar *

/undefine XML_TESTVAL
/endif

d xmlIsMixedElement… d pr extproc('xmlIsMixedElement') d like(xmlCint) d doc value like(xmlDocPtr) d name * value options(*string) const xmlChar *

d xmlGetDtdAttrDesc… d pr extproc('xmlGetDtdAttrDesc') d like(xmlAttributePtr) d dtd value like(xmlDtdPtr) d elem * value options(*string) const xmlChar * d name * value options(*string) const xmlChar *

d xmlGetDtdQAttrDesc… d pr extproc('xmlGetDtdQAttrDesc') d like(xmlAttributePtr) d dtd value like(xmlDtdPtr) d elem * value options(*string) const xmlChar * d name * value options(*string) const xmlChar * d prefix * value options(*string) const xmlChar *

d xmlGetDtdNotationDesc… d pr extproc('xmlGetDtdNotationDesc') d like(xmlNotationPtr) d dtd value like(xmlDtdPtr) d name * value options(*string) const xmlChar *

d xmlGetDtdQElementDesc… d pr extproc('xmlGetDtdQElementDesc') d like(xmlElementPtr) d dtd value like(xmlDtdPtr) d name * value options(*string) const xmlChar * d prefix * value options(*string) const xmlChar *

d xmlGetDtdElementDesc… d pr extproc('xmlGetDtdElementDesc') d like(xmlElementPtr) d dtd value like(xmlDtdPtr) d name * value options(*string) const xmlChar *

/if defined(LIBXML_VALID_ENABLED)

d xmlValidGetPotentialChildren… d pr extproc( d 'xmlValidGetPotentialChildren') d like(xmlCint) d ctree * value xmlElementContent * d names * const xmlChar *(*) d len like(xmlCint) d max value like(xmlCint)

d xmlValidGetValidElements… d pr extproc('xmlValidGetValidElements') d like(xmlCint) d prev like(xmlNodePtr) d next like(xmlNodePtr) d names * const xmlChar *(*) d max value like(xmlCint)

d xmlValidateNameValue… d pr extproc('xmlValidateNameValue') d like(xmlCint) d value * value options(*string) const xmlChar *

d xmlValidateNamesValue… d pr extproc('xmlValidateNamesValue') d like(xmlCint) d value * value options(*string) const xmlChar *

d xmlValidateNmtokenValue… d pr extproc('xmlValidateNmtokenValue') d like(xmlCint) d value * value options(*string) const xmlChar *

d xmlValidateNmtokensValue… d pr extproc('xmlValidateNmtokensValue') d like(xmlCint) d value * value options(*string) const xmlChar *

/if defined(LIBXML_REGEXP_ENABLED)
* Validation based on the regexp support

d xmlValidBuildContentModel… d pr extproc('xmlValidBuildContentModel') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d elem value like(xmlElementPtr)

d xmlValidatePushElement… d pr extproc('xmlValidatePushElement') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d qname * value options(*string) const xmlChar *

d xmlValidatePushCData… d pr extproc('xmlValidatePushCData') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d data * value options(*string) const xmlChar * d len value like(xmlCint)

d xmlValidatePopElement… d pr extproc('xmlValidatePopElement') d like(xmlCint) d ctxt value like(xmlValidCtxtPtr) d doc value like(xmlDocPtr) d elem value like(xmlNodePtr) d qname * value options(*string) const xmlChar *

/endif                                                                    LIBXML_REGEXP_ENABLD
/endif                                                                    LIBXML_VALID_ENABLED
/endif                                                                    XML_VALID_H__