imgtools/imgcheck/libxml/valid.h
changeset 2 39c28ec933dd
equal deleted inserted replaced
1:820b22e13ff1 2:39c28ec933dd
       
     1 /*
       
     2  * Summary: The DTD validation
       
     3  * Description: API for the DTD handling and the validity checking
       
     4  *
       
     5  * Copy: See Copyright for the status of this software.
       
     6  *
       
     7  * Author: Daniel Veillard
       
     8  */
       
     9 
       
    10 
       
    11 #ifndef __XML_VALID_H__
       
    12 #define __XML_VALID_H__
       
    13 
       
    14 #include <libxml/xmlversion.h>
       
    15 #include <libxml/xmlerror.h>
       
    16 #include <libxml/tree.h>
       
    17 #include <libxml/list.h>
       
    18 #include <libxml/xmlautomata.h>
       
    19 #include <libxml/xmlregexp.h>
       
    20 
       
    21 #ifdef __cplusplus
       
    22 extern "C" {
       
    23 #endif
       
    24 
       
    25 /*
       
    26  * Validation state added for non-determinist content model.
       
    27  */
       
    28 typedef struct _xmlValidState xmlValidState;
       
    29 typedef xmlValidState *xmlValidStatePtr;
       
    30 
       
    31 /**
       
    32  * xmlValidityErrorFunc:
       
    33  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
       
    34  *        but comes from ctxt->userData (which normally contains such
       
    35  *        a pointer); ctxt->userData can be changed by the user.
       
    36  * @msg:  the string to format *printf like vararg
       
    37  * @...:  remaining arguments to the format
       
    38  *
       
    39  * Callback called when a validity error is found. This is a message
       
    40  * oriented function similar to an *printf function.
       
    41  */
       
    42 typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
       
    43 			     const char *msg,
       
    44 			     ...);
       
    45 
       
    46 /**
       
    47  * xmlValidityWarningFunc:
       
    48  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
       
    49  *        but comes from ctxt->userData (which normally contains such
       
    50  *        a pointer); ctxt->userData can be changed by the user.
       
    51  * @msg:  the string to format *printf like vararg
       
    52  * @...:  remaining arguments to the format
       
    53  *
       
    54  * Callback called when a validity warning is found. This is a message
       
    55  * oriented function similar to an *printf function.
       
    56  */
       
    57 typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
       
    58 			       const char *msg,
       
    59 			       ...);
       
    60 
       
    61 #ifdef IN_LIBXML
       
    62 /**
       
    63  * XML_CTXT_FINISH_DTD_0:
       
    64  *
       
    65  * Special value for finishDtd field when embedded in an xmlParserCtxt
       
    66  */
       
    67 #define XML_CTXT_FINISH_DTD_0 0xabcd1234
       
    68 /**
       
    69  * XML_CTXT_FINISH_DTD_1:
       
    70  *
       
    71  * Special value for finishDtd field when embedded in an xmlParserCtxt
       
    72  */
       
    73 #define XML_CTXT_FINISH_DTD_1 0xabcd1235
       
    74 #endif
       
    75 
       
    76 /*
       
    77  * xmlValidCtxt:
       
    78  * An xmlValidCtxt is used for error reporting when validating.
       
    79  */
       
    80 typedef struct _xmlValidCtxt xmlValidCtxt;
       
    81 typedef xmlValidCtxt *xmlValidCtxtPtr;
       
    82 struct _xmlValidCtxt {
       
    83     void *userData;			/* user specific data block */
       
    84     xmlValidityErrorFunc error;		/* the callback in case of errors */
       
    85     xmlValidityWarningFunc warning;	/* the callback in case of warning */
       
    86 
       
    87     /* Node analysis stack used when validating within entities */
       
    88     xmlNodePtr         node;          /* Current parsed Node */
       
    89     int                nodeNr;        /* Depth of the parsing stack */
       
    90     int                nodeMax;       /* Max depth of the parsing stack */
       
    91     xmlNodePtr        *nodeTab;       /* array of nodes */
       
    92 
       
    93     unsigned int     finishDtd;       /* finished validating the Dtd ? */
       
    94     xmlDocPtr              doc;       /* the document */
       
    95     int                  valid;       /* temporary validity check result */
       
    96 
       
    97     /* state state used for non-determinist content validation */
       
    98     xmlValidState     *vstate;        /* current state */
       
    99     int                vstateNr;      /* Depth of the validation stack */
       
   100     int                vstateMax;     /* Max depth of the validation stack */
       
   101     xmlValidState     *vstateTab;     /* array of validation states */
       
   102 
       
   103 #ifdef LIBXML_REGEXP_ENABLED
       
   104     xmlAutomataPtr            am;     /* the automata */
       
   105     xmlAutomataStatePtr    state;     /* used to build the automata */
       
   106 #else
       
   107     void                     *am;
       
   108     void                  *state;
       
   109 #endif
       
   110 };
       
   111 
       
   112 /*
       
   113  * ALL notation declarations are stored in a table.
       
   114  * There is one table per DTD.
       
   115  */
       
   116 
       
   117 typedef struct _xmlHashTable xmlNotationTable;
       
   118 typedef xmlNotationTable *xmlNotationTablePtr;
       
   119 
       
   120 /*
       
   121  * ALL element declarations are stored in a table.
       
   122  * There is one table per DTD.
       
   123  */
       
   124 
       
   125 typedef struct _xmlHashTable xmlElementTable;
       
   126 typedef xmlElementTable *xmlElementTablePtr;
       
   127 
       
   128 /*
       
   129  * ALL attribute declarations are stored in a table.
       
   130  * There is one table per DTD.
       
   131  */
       
   132 
       
   133 typedef struct _xmlHashTable xmlAttributeTable;
       
   134 typedef xmlAttributeTable *xmlAttributeTablePtr;
       
   135 
       
   136 /*
       
   137  * ALL IDs attributes are stored in a table.
       
   138  * There is one table per document.
       
   139  */
       
   140 
       
   141 typedef struct _xmlHashTable xmlIDTable;
       
   142 typedef xmlIDTable *xmlIDTablePtr;
       
   143 
       
   144 /*
       
   145  * ALL Refs attributes are stored in a table.
       
   146  * There is one table per document.
       
   147  */
       
   148 
       
   149 typedef struct _xmlHashTable xmlRefTable;
       
   150 typedef xmlRefTable *xmlRefTablePtr;
       
   151 
       
   152 /* Notation */
       
   153 XMLPUBFUN xmlNotationPtr XMLCALL	    
       
   154 		xmlAddNotationDecl	(xmlValidCtxtPtr ctxt,
       
   155 					 xmlDtdPtr dtd,
       
   156 					 const xmlChar *name,
       
   157 					 const xmlChar *PublicID,
       
   158 					 const xmlChar *SystemID);
       
   159 #ifdef LIBXML_TREE_ENABLED
       
   160 XMLPUBFUN xmlNotationTablePtr XMLCALL 
       
   161 		xmlCopyNotationTable	(xmlNotationTablePtr table);
       
   162 #endif /* LIBXML_TREE_ENABLED */
       
   163 XMLPUBFUN void XMLCALL		    
       
   164 		xmlFreeNotationTable	(xmlNotationTablePtr table);
       
   165 #ifdef LIBXML_OUTPUT_ENABLED
       
   166 XMLPUBFUN void XMLCALL		    
       
   167 		xmlDumpNotationDecl	(xmlBufferPtr buf,
       
   168 					 xmlNotationPtr nota);
       
   169 XMLPUBFUN void XMLCALL		    
       
   170 		xmlDumpNotationTable	(xmlBufferPtr buf,
       
   171 					 xmlNotationTablePtr table);
       
   172 #endif /* LIBXML_OUTPUT_ENABLED */
       
   173 
       
   174 /* Element Content */
       
   175 /* the non Doc version are being deprecated */
       
   176 XMLPUBFUN xmlElementContentPtr XMLCALL 
       
   177 		xmlNewElementContent	(const xmlChar *name,
       
   178 					 xmlElementContentType type);
       
   179 XMLPUBFUN xmlElementContentPtr XMLCALL 
       
   180 		xmlCopyElementContent	(xmlElementContentPtr content);
       
   181 XMLPUBFUN void XMLCALL		     
       
   182 		xmlFreeElementContent	(xmlElementContentPtr cur);
       
   183 /* the new versions with doc argument */
       
   184 XMLPUBFUN xmlElementContentPtr XMLCALL 
       
   185 		xmlNewDocElementContent	(xmlDocPtr doc,
       
   186 					 const xmlChar *name,
       
   187 					 xmlElementContentType type);
       
   188 XMLPUBFUN xmlElementContentPtr XMLCALL 
       
   189 		xmlCopyDocElementContent(xmlDocPtr doc,
       
   190 					 xmlElementContentPtr content);
       
   191 XMLPUBFUN void XMLCALL		     
       
   192 		xmlFreeDocElementContent(xmlDocPtr doc,
       
   193 					 xmlElementContentPtr cur);
       
   194 XMLPUBFUN void XMLCALL		     
       
   195 		xmlSnprintfElementContent(char *buf,
       
   196 					 int size,
       
   197 	                                 xmlElementContentPtr content,
       
   198 					 int englob);
       
   199 #ifdef LIBXML_OUTPUT_ENABLED
       
   200 /* DEPRECATED */
       
   201 XMLPUBFUN void XMLCALL		     
       
   202 		xmlSprintfElementContent(char *buf,
       
   203 	                                 xmlElementContentPtr content,
       
   204 					 int englob);
       
   205 #endif /* LIBXML_OUTPUT_ENABLED */
       
   206 /* DEPRECATED */
       
   207 
       
   208 /* Element */
       
   209 XMLPUBFUN xmlElementPtr XMLCALL	   
       
   210 		xmlAddElementDecl	(xmlValidCtxtPtr ctxt,
       
   211 					 xmlDtdPtr dtd,
       
   212 					 const xmlChar *name,
       
   213 					 xmlElementTypeVal type,
       
   214 					 xmlElementContentPtr content);
       
   215 #ifdef LIBXML_TREE_ENABLED
       
   216 XMLPUBFUN xmlElementTablePtr XMLCALL 
       
   217 		xmlCopyElementTable	(xmlElementTablePtr table);
       
   218 #endif /* LIBXML_TREE_ENABLED */
       
   219 XMLPUBFUN void XMLCALL		   
       
   220 		xmlFreeElementTable	(xmlElementTablePtr table);
       
   221 #ifdef LIBXML_OUTPUT_ENABLED
       
   222 XMLPUBFUN void XMLCALL		   
       
   223 		xmlDumpElementTable	(xmlBufferPtr buf,
       
   224 					 xmlElementTablePtr table);
       
   225 XMLPUBFUN void XMLCALL		   
       
   226 		xmlDumpElementDecl	(xmlBufferPtr buf,
       
   227 					 xmlElementPtr elem);
       
   228 #endif /* LIBXML_OUTPUT_ENABLED */
       
   229 
       
   230 /* Enumeration */
       
   231 XMLPUBFUN xmlEnumerationPtr XMLCALL 
       
   232 		xmlCreateEnumeration	(const xmlChar *name);
       
   233 XMLPUBFUN void XMLCALL		   
       
   234 		xmlFreeEnumeration	(xmlEnumerationPtr cur);
       
   235 #ifdef LIBXML_TREE_ENABLED
       
   236 XMLPUBFUN xmlEnumerationPtr XMLCALL  
       
   237 		xmlCopyEnumeration	(xmlEnumerationPtr cur);
       
   238 #endif /* LIBXML_TREE_ENABLED */
       
   239 
       
   240 /* Attribute */
       
   241 XMLPUBFUN xmlAttributePtr XMLCALL	    
       
   242 		xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt,
       
   243 					 xmlDtdPtr dtd,
       
   244 					 const xmlChar *elem,
       
   245 					 const xmlChar *name,
       
   246 					 const xmlChar *ns,
       
   247 					 xmlAttributeType type,
       
   248 					 xmlAttributeDefault def,
       
   249 					 const xmlChar *defaultValue,
       
   250 					 xmlEnumerationPtr tree);
       
   251 #ifdef LIBXML_TREE_ENABLED
       
   252 XMLPUBFUN xmlAttributeTablePtr XMLCALL 
       
   253 		xmlCopyAttributeTable  (xmlAttributeTablePtr table);
       
   254 #endif /* LIBXML_TREE_ENABLED */
       
   255 XMLPUBFUN void XMLCALL		     
       
   256 		xmlFreeAttributeTable  (xmlAttributeTablePtr table);
       
   257 #ifdef LIBXML_OUTPUT_ENABLED
       
   258 XMLPUBFUN void XMLCALL		     
       
   259 		xmlDumpAttributeTable  (xmlBufferPtr buf,
       
   260 					xmlAttributeTablePtr table);
       
   261 XMLPUBFUN void XMLCALL		     
       
   262 		xmlDumpAttributeDecl   (xmlBufferPtr buf,
       
   263 					xmlAttributePtr attr);
       
   264 #endif /* LIBXML_OUTPUT_ENABLED */
       
   265 
       
   266 /* IDs */
       
   267 XMLPUBFUN xmlIDPtr XMLCALL	
       
   268 		xmlAddID	       (xmlValidCtxtPtr ctxt,
       
   269 					xmlDocPtr doc,
       
   270 					const xmlChar *value,
       
   271 					xmlAttrPtr attr);
       
   272 XMLPUBFUN void XMLCALL		
       
   273 		xmlFreeIDTable	       (xmlIDTablePtr table);
       
   274 XMLPUBFUN xmlAttrPtr XMLCALL	
       
   275 		xmlGetID	       (xmlDocPtr doc,
       
   276 					const xmlChar *ID);
       
   277 XMLPUBFUN int XMLCALL		
       
   278 		xmlIsID		       (xmlDocPtr doc,
       
   279 					xmlNodePtr elem,
       
   280 					xmlAttrPtr attr);
       
   281 XMLPUBFUN int XMLCALL		
       
   282 		xmlRemoveID	       (xmlDocPtr doc, 
       
   283 					xmlAttrPtr attr);
       
   284 
       
   285 /* IDREFs */
       
   286 XMLPUBFUN xmlRefPtr XMLCALL	
       
   287 		xmlAddRef	       (xmlValidCtxtPtr ctxt,
       
   288 					xmlDocPtr doc,
       
   289 					const xmlChar *value,
       
   290 					xmlAttrPtr attr);
       
   291 XMLPUBFUN void XMLCALL		
       
   292 		xmlFreeRefTable	       (xmlRefTablePtr table);
       
   293 XMLPUBFUN int XMLCALL		
       
   294 		xmlIsRef	       (xmlDocPtr doc,
       
   295 					xmlNodePtr elem,
       
   296 					xmlAttrPtr attr);
       
   297 XMLPUBFUN int XMLCALL		
       
   298 		xmlRemoveRef	       (xmlDocPtr doc, 
       
   299 					xmlAttrPtr attr);
       
   300 XMLPUBFUN xmlListPtr XMLCALL	
       
   301 		xmlGetRefs	       (xmlDocPtr doc,
       
   302 					const xmlChar *ID);
       
   303 
       
   304 /**
       
   305  * The public function calls related to validity checking.
       
   306  */
       
   307 #ifdef LIBXML_VALID_ENABLED
       
   308 /* Allocate/Release Validation Contexts */
       
   309 XMLPUBFUN xmlValidCtxtPtr XMLCALL	    
       
   310 		xmlNewValidCtxt(void);
       
   311 XMLPUBFUN void XMLCALL		    
       
   312 		xmlFreeValidCtxt(xmlValidCtxtPtr);
       
   313 
       
   314 XMLPUBFUN int XMLCALL		
       
   315 		xmlValidateRoot		(xmlValidCtxtPtr ctxt,
       
   316 					 xmlDocPtr doc);
       
   317 XMLPUBFUN int XMLCALL		
       
   318 		xmlValidateElementDecl	(xmlValidCtxtPtr ctxt,
       
   319 					 xmlDocPtr doc,
       
   320 		                         xmlElementPtr elem);
       
   321 XMLPUBFUN xmlChar * XMLCALL	
       
   322 		xmlValidNormalizeAttributeValue(xmlDocPtr doc,
       
   323 					 xmlNodePtr elem,
       
   324 					 const xmlChar *name,
       
   325 					 const xmlChar *value);
       
   326 XMLPUBFUN xmlChar * XMLCALL	
       
   327 		xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
       
   328 					 xmlDocPtr doc,
       
   329 					 xmlNodePtr elem,
       
   330 					 const xmlChar *name,
       
   331 					 const xmlChar *value);
       
   332 XMLPUBFUN int XMLCALL		
       
   333 		xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
       
   334 					 xmlDocPtr doc,
       
   335 		                         xmlAttributePtr attr);
       
   336 XMLPUBFUN int XMLCALL		
       
   337 		xmlValidateAttributeValue(xmlAttributeType type,
       
   338 					 const xmlChar *value);
       
   339 XMLPUBFUN int XMLCALL		
       
   340 		xmlValidateNotationDecl	(xmlValidCtxtPtr ctxt,
       
   341 					 xmlDocPtr doc,
       
   342 		                         xmlNotationPtr nota);
       
   343 XMLPUBFUN int XMLCALL		
       
   344 		xmlValidateDtd		(xmlValidCtxtPtr ctxt,
       
   345 					 xmlDocPtr doc,
       
   346 					 xmlDtdPtr dtd);
       
   347 XMLPUBFUN int XMLCALL		
       
   348 		xmlValidateDtdFinal	(xmlValidCtxtPtr ctxt,
       
   349 					 xmlDocPtr doc);
       
   350 XMLPUBFUN int XMLCALL		
       
   351 		xmlValidateDocument	(xmlValidCtxtPtr ctxt,
       
   352 					 xmlDocPtr doc);
       
   353 XMLPUBFUN int XMLCALL		
       
   354 		xmlValidateElement	(xmlValidCtxtPtr ctxt,
       
   355 					 xmlDocPtr doc,
       
   356 					 xmlNodePtr elem);
       
   357 XMLPUBFUN int XMLCALL		
       
   358 		xmlValidateOneElement	(xmlValidCtxtPtr ctxt,
       
   359 					 xmlDocPtr doc,
       
   360 		                         xmlNodePtr elem);
       
   361 XMLPUBFUN int XMLCALL	
       
   362 		xmlValidateOneAttribute	(xmlValidCtxtPtr ctxt,
       
   363 					 xmlDocPtr doc,
       
   364 					 xmlNodePtr	elem,
       
   365 					 xmlAttrPtr attr,
       
   366 					 const xmlChar *value);
       
   367 XMLPUBFUN int XMLCALL		
       
   368 		xmlValidateOneNamespace	(xmlValidCtxtPtr ctxt,
       
   369 					 xmlDocPtr doc,
       
   370 					 xmlNodePtr elem,
       
   371 					 const xmlChar *prefix,
       
   372 					 xmlNsPtr ns,
       
   373 					 const xmlChar *value);
       
   374 XMLPUBFUN int XMLCALL		
       
   375 		xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
       
   376 					 xmlDocPtr doc);
       
   377 #endif /* LIBXML_VALID_ENABLED */
       
   378 
       
   379 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
       
   380 XMLPUBFUN int XMLCALL		
       
   381 		xmlValidateNotationUse	(xmlValidCtxtPtr ctxt,
       
   382 					 xmlDocPtr doc,
       
   383 					 const xmlChar *notationName);
       
   384 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
       
   385 
       
   386 XMLPUBFUN int XMLCALL		
       
   387 		xmlIsMixedElement	(xmlDocPtr doc,
       
   388 					 const xmlChar *name);
       
   389 XMLPUBFUN xmlAttributePtr XMLCALL	
       
   390 		xmlGetDtdAttrDesc	(xmlDtdPtr dtd,
       
   391 					 const xmlChar *elem,
       
   392 					 const xmlChar *name);
       
   393 XMLPUBFUN xmlAttributePtr XMLCALL	
       
   394 		xmlGetDtdQAttrDesc	(xmlDtdPtr dtd,
       
   395 					 const xmlChar *elem,
       
   396 					 const xmlChar *name,
       
   397 					 const xmlChar *prefix);
       
   398 XMLPUBFUN xmlNotationPtr XMLCALL	
       
   399 		xmlGetDtdNotationDesc	(xmlDtdPtr dtd,
       
   400 					 const xmlChar *name);
       
   401 XMLPUBFUN xmlElementPtr XMLCALL	
       
   402 		xmlGetDtdQElementDesc	(xmlDtdPtr dtd,
       
   403 					 const xmlChar *name,
       
   404 					 const xmlChar *prefix);
       
   405 XMLPUBFUN xmlElementPtr XMLCALL	
       
   406 		xmlGetDtdElementDesc	(xmlDtdPtr dtd,
       
   407 					 const xmlChar *name);
       
   408 
       
   409 #ifdef LIBXML_VALID_ENABLED
       
   410 
       
   411 XMLPUBFUN int XMLCALL		
       
   412 		xmlValidGetPotentialChildren(xmlElementContent *ctree,
       
   413 					 const xmlChar **names,
       
   414 					 int *len,
       
   415 					 int max);
       
   416 
       
   417 XMLPUBFUN int XMLCALL		
       
   418 		xmlValidGetValidElements(xmlNode *prev,
       
   419 					 xmlNode *next,
       
   420 					 const xmlChar **names,
       
   421 					 int max);
       
   422 XMLPUBFUN int XMLCALL		
       
   423 		xmlValidateNameValue	(const xmlChar *value);
       
   424 XMLPUBFUN int XMLCALL		
       
   425 		xmlValidateNamesValue	(const xmlChar *value);
       
   426 XMLPUBFUN int XMLCALL		
       
   427 		xmlValidateNmtokenValue	(const xmlChar *value);
       
   428 XMLPUBFUN int XMLCALL		
       
   429 		xmlValidateNmtokensValue(const xmlChar *value);
       
   430 
       
   431 #ifdef LIBXML_REGEXP_ENABLED
       
   432 /*
       
   433  * Validation based on the regexp support
       
   434  */
       
   435 XMLPUBFUN int XMLCALL		
       
   436 		xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
       
   437 					 xmlElementPtr elem);
       
   438 
       
   439 XMLPUBFUN int XMLCALL		
       
   440 		xmlValidatePushElement	(xmlValidCtxtPtr ctxt,
       
   441 					 xmlDocPtr doc,
       
   442 					 xmlNodePtr elem,
       
   443 					 const xmlChar *qname);
       
   444 XMLPUBFUN int XMLCALL		
       
   445 		xmlValidatePushCData	(xmlValidCtxtPtr ctxt,
       
   446 					 const xmlChar *data,
       
   447 					 int len);
       
   448 XMLPUBFUN int XMLCALL		
       
   449 		xmlValidatePopElement	(xmlValidCtxtPtr ctxt,
       
   450 					 xmlDocPtr doc,
       
   451 					 xmlNodePtr elem,
       
   452 					 const xmlChar *qname);
       
   453 #endif /* LIBXML_REGEXP_ENABLED */
       
   454 #endif /* LIBXML_VALID_ENABLED */
       
   455 #ifdef __cplusplus
       
   456 }
       
   457 #endif
       
   458 #endif /* __XML_VALID_H__ */