mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2026-01-29 23:42:18 +03:00
Synchronized the header files with the library code in order to assure that all the various conditionals (LIBXML_xxxx_ENABLED) were the same in both. Modified the API database content to more accurately reflect the conditionals. Enhanced the generation of that database. Although there was no substantial change to any of the library code's logic, a large number of files were modified to achieve the above, and the configuration script was enhanced to do some automatic enabling of features (e.g. --with-xinclude forces --with-xpath). Additionally, all the format errors discovered by apibuild.py were corrected. * configure.in: enhanced cross-checking of options * doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml, doc/libxml2-api.xml, gentest.py: changed the usage of the <cond> element in module descriptions * elfgcchack.h, testapi.c: regenerated with proper conditionals * HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c, testSAX.c: cleaned up conditionals * include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h, hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h, valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]: synchronized the conditionals with the corresponding module code * doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c: added additional conditions required for compilation * doc/*.html, doc/html/*.html: rebuilt the docs
447 lines
13 KiB
C
447 lines
13 KiB
C
/*
|
|
* Summary: The DTD validation
|
|
* Description: API for the DTD handling and the validity checking
|
|
*
|
|
* Copy: See Copyright for the status of this software.
|
|
*
|
|
* Author: Daniel Veillard
|
|
*/
|
|
|
|
|
|
#ifndef __XML_VALID_H__
|
|
#define __XML_VALID_H__
|
|
|
|
#include <libxml/xmlversion.h>
|
|
#include <libxml/xmlerror.h>
|
|
#include <libxml/tree.h>
|
|
#include <libxml/list.h>
|
|
#include <libxml/xmlautomata.h>
|
|
#include <libxml/xmlregexp.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Validation state added for non-determinist content model.
|
|
*/
|
|
typedef struct _xmlValidState xmlValidState;
|
|
typedef xmlValidState *xmlValidStatePtr;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
typedef void (*xmlValidityErrorFunc) (void *ctx,
|
|
const char *msg,
|
|
...);
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
typedef void (*xmlValidityWarningFunc) (void *ctx,
|
|
const char *msg,
|
|
...);
|
|
|
|
#ifdef IN_LIBXML
|
|
/**
|
|
* XML_CTXT_FINISH_DTD_0:
|
|
*
|
|
* Special value for finishDtd field when embedded in an xmlParserCtxt
|
|
*/
|
|
#define XML_CTXT_FINISH_DTD_0 0xabcd1234
|
|
/**
|
|
* XML_CTXT_FINISH_DTD_1:
|
|
*
|
|
* Special value for finishDtd field when embedded in an xmlParserCtxt
|
|
*/
|
|
#define XML_CTXT_FINISH_DTD_1 0xabcd1235
|
|
#endif
|
|
|
|
/*
|
|
* xmlValidCtxt:
|
|
* An xmlValidCtxt is used for error reporting when validating.
|
|
*/
|
|
typedef struct _xmlValidCtxt xmlValidCtxt;
|
|
typedef xmlValidCtxt *xmlValidCtxtPtr;
|
|
struct _xmlValidCtxt {
|
|
void *userData; /* user specific data block */
|
|
xmlValidityErrorFunc error; /* the callback in case of errors */
|
|
xmlValidityWarningFunc warning; /* the callback in case of warning */
|
|
|
|
/* Node analysis stack used when validating within entities */
|
|
xmlNodePtr node; /* Current parsed Node */
|
|
int nodeNr; /* Depth of the parsing stack */
|
|
int nodeMax; /* Max depth of the parsing stack */
|
|
xmlNodePtr *nodeTab; /* array of nodes */
|
|
|
|
unsigned int finishDtd; /* finished validating the Dtd ? */
|
|
xmlDocPtr doc; /* the document */
|
|
int valid; /* temporary validity check result */
|
|
|
|
/* state state used for non-determinist content validation */
|
|
xmlValidState *vstate; /* current state */
|
|
int vstateNr; /* Depth of the validation stack */
|
|
int vstateMax; /* Max depth of the validation stack */
|
|
xmlValidState *vstateTab; /* array of validation states */
|
|
|
|
#ifdef LIBXML_REGEXP_ENABLED
|
|
xmlAutomataPtr am; /* the automata */
|
|
xmlAutomataStatePtr state; /* used to build the automata */
|
|
#else
|
|
void *am;
|
|
void *state;
|
|
#endif
|
|
};
|
|
|
|
/*
|
|
* ALL notation declarations are stored in a table.
|
|
* There is one table per DTD.
|
|
*/
|
|
|
|
typedef struct _xmlHashTable xmlNotationTable;
|
|
typedef xmlNotationTable *xmlNotationTablePtr;
|
|
|
|
/*
|
|
* ALL element declarations are stored in a table.
|
|
* There is one table per DTD.
|
|
*/
|
|
|
|
typedef struct _xmlHashTable xmlElementTable;
|
|
typedef xmlElementTable *xmlElementTablePtr;
|
|
|
|
/*
|
|
* ALL attribute declarations are stored in a table.
|
|
* There is one table per DTD.
|
|
*/
|
|
|
|
typedef struct _xmlHashTable xmlAttributeTable;
|
|
typedef xmlAttributeTable *xmlAttributeTablePtr;
|
|
|
|
/*
|
|
* ALL IDs attributes are stored in a table.
|
|
* There is one table per document.
|
|
*/
|
|
|
|
typedef struct _xmlHashTable xmlIDTable;
|
|
typedef xmlIDTable *xmlIDTablePtr;
|
|
|
|
/*
|
|
* ALL Refs attributes are stored in a table.
|
|
* There is one table per document.
|
|
*/
|
|
|
|
typedef struct _xmlHashTable xmlRefTable;
|
|
typedef xmlRefTable *xmlRefTablePtr;
|
|
|
|
/* Notation */
|
|
XMLPUBFUN xmlNotationPtr XMLCALL
|
|
xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
|
|
xmlDtdPtr dtd,
|
|
const xmlChar *name,
|
|
const xmlChar *PublicID,
|
|
const xmlChar *SystemID);
|
|
#ifdef LIBXML_TREE_ENABLED
|
|
XMLPUBFUN xmlNotationTablePtr XMLCALL
|
|
xmlCopyNotationTable (xmlNotationTablePtr table);
|
|
#endif /* LIBXML_TREE_ENABLED */
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeNotationTable (xmlNotationTablePtr table);
|
|
#ifdef LIBXML_OUTPUT_ENABLED
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpNotationDecl (xmlBufferPtr buf,
|
|
xmlNotationPtr nota);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpNotationTable (xmlBufferPtr buf,
|
|
xmlNotationTablePtr table);
|
|
#endif /* LIBXML_OUTPUT_ENABLED */
|
|
|
|
/* Element Content */
|
|
XMLPUBFUN xmlElementContentPtr XMLCALL
|
|
xmlNewElementContent (const xmlChar *name,
|
|
xmlElementContentType type);
|
|
XMLPUBFUN xmlElementContentPtr XMLCALL
|
|
xmlCopyElementContent (xmlElementContentPtr content);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeElementContent (xmlElementContentPtr cur);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlSnprintfElementContent(char *buf,
|
|
int size,
|
|
xmlElementContentPtr content,
|
|
int glob);
|
|
#ifdef LIBXML_OUTPUT_ENABLED
|
|
/* DEPRECATED */
|
|
XMLPUBFUN void XMLCALL
|
|
xmlSprintfElementContent(char *buf,
|
|
xmlElementContentPtr content,
|
|
int glob);
|
|
#endif /* LIBXML_OUTPUT_ENABLED */
|
|
/* DEPRECATED */
|
|
|
|
/* Element */
|
|
XMLPUBFUN xmlElementPtr XMLCALL
|
|
xmlAddElementDecl (xmlValidCtxtPtr ctxt,
|
|
xmlDtdPtr dtd,
|
|
const xmlChar *name,
|
|
xmlElementTypeVal type,
|
|
xmlElementContentPtr content);
|
|
#ifdef LIBXML_TREE_ENABLED
|
|
XMLPUBFUN xmlElementTablePtr XMLCALL
|
|
xmlCopyElementTable (xmlElementTablePtr table);
|
|
#endif /* LIBXML_TREE_ENABLED */
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeElementTable (xmlElementTablePtr table);
|
|
#ifdef LIBXML_OUTPUT_ENABLED
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpElementTable (xmlBufferPtr buf,
|
|
xmlElementTablePtr table);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpElementDecl (xmlBufferPtr buf,
|
|
xmlElementPtr elem);
|
|
#endif /* LIBXML_OUTPUT_ENABLED */
|
|
|
|
/* Enumeration */
|
|
XMLPUBFUN xmlEnumerationPtr XMLCALL
|
|
xmlCreateEnumeration (const xmlChar *name);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeEnumeration (xmlEnumerationPtr cur);
|
|
#ifdef LIBXML_TREE_ENABLED
|
|
XMLPUBFUN xmlEnumerationPtr XMLCALL
|
|
xmlCopyEnumeration (xmlEnumerationPtr cur);
|
|
#endif /* LIBXML_TREE_ENABLED */
|
|
|
|
/* Attribute */
|
|
XMLPUBFUN xmlAttributePtr XMLCALL
|
|
xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
|
|
xmlDtdPtr dtd,
|
|
const xmlChar *elem,
|
|
const xmlChar *name,
|
|
const xmlChar *ns,
|
|
xmlAttributeType type,
|
|
xmlAttributeDefault def,
|
|
const xmlChar *defaultValue,
|
|
xmlEnumerationPtr tree);
|
|
#ifdef LIBXML_TREE_ENABLED
|
|
XMLPUBFUN xmlAttributeTablePtr XMLCALL
|
|
xmlCopyAttributeTable (xmlAttributeTablePtr table);
|
|
#endif /* LIBXML_TREE_ENABLED */
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeAttributeTable (xmlAttributeTablePtr table);
|
|
#ifdef LIBXML_OUTPUT_ENABLED
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpAttributeTable (xmlBufferPtr buf,
|
|
xmlAttributeTablePtr table);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlDumpAttributeDecl (xmlBufferPtr buf,
|
|
xmlAttributePtr attr);
|
|
#endif /* LIBXML_OUTPUT_ENABLED */
|
|
|
|
/* IDs */
|
|
XMLPUBFUN xmlIDPtr XMLCALL
|
|
xmlAddID (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
const xmlChar *value,
|
|
xmlAttrPtr attr);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeIDTable (xmlIDTablePtr table);
|
|
XMLPUBFUN xmlAttrPtr XMLCALL
|
|
xmlGetID (xmlDocPtr doc,
|
|
const xmlChar *ID);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlIsID (xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
xmlAttrPtr attr);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlRemoveID (xmlDocPtr doc,
|
|
xmlAttrPtr attr);
|
|
|
|
/* IDREFs */
|
|
XMLPUBFUN xmlRefPtr XMLCALL
|
|
xmlAddRef (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
const xmlChar *value,
|
|
xmlAttrPtr attr);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeRefTable (xmlRefTablePtr table);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlIsRef (xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
xmlAttrPtr attr);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlRemoveRef (xmlDocPtr doc,
|
|
xmlAttrPtr attr);
|
|
XMLPUBFUN xmlListPtr XMLCALL
|
|
xmlGetRefs (xmlDocPtr doc,
|
|
const xmlChar *ID);
|
|
|
|
/**
|
|
* The public function calls related to validity checking.
|
|
*/
|
|
#ifdef LIBXML_VALID_ENABLED
|
|
/* Allocate/Release Validation Contexts */
|
|
XMLPUBFUN xmlValidCtxtPtr XMLCALL
|
|
xmlNewValidCtxt(void);
|
|
XMLPUBFUN void XMLCALL
|
|
xmlFreeValidCtxt(xmlValidCtxtPtr);
|
|
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateRoot (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlElementPtr elem);
|
|
XMLPUBFUN xmlChar * XMLCALL
|
|
xmlValidNormalizeAttributeValue(xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
const xmlChar *name,
|
|
const xmlChar *value);
|
|
XMLPUBFUN xmlChar * XMLCALL
|
|
xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
const xmlChar *name,
|
|
const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlAttributePtr attr);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateAttributeValue(xmlAttributeType type,
|
|
const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNotationPtr nota);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateDtd (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlDtdPtr dtd);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateDocument (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateElement (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateOneElement (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
xmlAttrPtr attr,
|
|
const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
const xmlChar *prefix,
|
|
xmlNsPtr ns,
|
|
const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc);
|
|
#endif /* LIBXML_VALID_ENABLED */
|
|
|
|
#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
const xmlChar *notationName);
|
|
#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
|
|
|
|
XMLPUBFUN int XMLCALL
|
|
xmlIsMixedElement (xmlDocPtr doc,
|
|
const xmlChar *name);
|
|
XMLPUBFUN xmlAttributePtr XMLCALL
|
|
xmlGetDtdAttrDesc (xmlDtdPtr dtd,
|
|
const xmlChar *elem,
|
|
const xmlChar *name);
|
|
XMLPUBFUN xmlAttributePtr XMLCALL
|
|
xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
|
|
const xmlChar *elem,
|
|
const xmlChar *name,
|
|
const xmlChar *prefix);
|
|
XMLPUBFUN xmlNotationPtr XMLCALL
|
|
xmlGetDtdNotationDesc (xmlDtdPtr dtd,
|
|
const xmlChar *name);
|
|
XMLPUBFUN xmlElementPtr XMLCALL
|
|
xmlGetDtdQElementDesc (xmlDtdPtr dtd,
|
|
const xmlChar *name,
|
|
const xmlChar *prefix);
|
|
XMLPUBFUN xmlElementPtr XMLCALL
|
|
xmlGetDtdElementDesc (xmlDtdPtr dtd,
|
|
const xmlChar *name);
|
|
|
|
#ifdef LIBXML_VALID_ENABLED
|
|
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidGetPotentialChildren(xmlElementContent *ctree,
|
|
const xmlChar **list,
|
|
int *len,
|
|
int max);
|
|
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidGetValidElements(xmlNode *prev,
|
|
xmlNode *next,
|
|
const xmlChar **names,
|
|
int max);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNameValue (const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNamesValue (const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNmtokenValue (const xmlChar *value);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidateNmtokensValue(const xmlChar *value);
|
|
|
|
#ifdef LIBXML_REGEXP_ENABLED
|
|
/*
|
|
* Validation based on the regexp support
|
|
*/
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
|
|
xmlElementPtr elem);
|
|
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidatePushElement (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
const xmlChar *qname);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidatePushCData (xmlValidCtxtPtr ctxt,
|
|
const xmlChar *data,
|
|
int len);
|
|
XMLPUBFUN int XMLCALL
|
|
xmlValidatePopElement (xmlValidCtxtPtr ctxt,
|
|
xmlDocPtr doc,
|
|
xmlNodePtr elem,
|
|
const xmlChar *qname);
|
|
#endif /* LIBXML_REGEXP_ENABLED */
|
|
#endif /* LIBXML_VALID_ENABLED */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __XML_VALID_H__ */
|