| /* libxml2 - Library for parsing XML documents |
| * Copyright (C) 2006-2019 Free Software Foundation, Inc. |
| * |
| * This file is not part of the GNU gettext program, but is used with |
| * GNU gettext. |
| * |
| * The original copyright notice is as follows: |
| */ |
| |
| /* |
| * Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is fur- |
| * nished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- |
| * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| * |
| * Author: Daniel Veillard |
| */ |
| |
| /* |
| * Summary: implementation of the Relax-NG validation |
| * Description: implementation of the Relax-NG validation |
| */ |
| |
| #ifndef __XML_RELAX_NG__ |
| #define __XML_RELAX_NG__ |
| |
| #include <libxml/xmlversion.h> |
| #include <libxml/hash.h> |
| #include <libxml/xmlstring.h> |
| |
| #ifdef LIBXML_SCHEMAS_ENABLED |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef struct _xmlRelaxNG xmlRelaxNG; |
| typedef xmlRelaxNG *xmlRelaxNGPtr; |
| |
| |
| /** |
| * xmlRelaxNGValidityErrorFunc: |
| * @ctx: the validation context |
| * @msg: the message |
| * @...: extra arguments |
| * |
| * Signature of an error callback from a Relax-NG validation |
| */ |
| typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, |
| const char *msg, |
| ...) LIBXML_ATTR_FORMAT(2,3); |
| |
| /** |
| * xmlRelaxNGValidityWarningFunc: |
| * @ctx: the validation context |
| * @msg: the message |
| * @...: extra arguments |
| * |
| * Signature of a warning callback from a Relax-NG validation |
| */ |
| typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, |
| const char *msg, |
| ...) LIBXML_ATTR_FORMAT(2,3); |
| |
| /** |
| * A schemas validation context |
| */ |
| typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt; |
| typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr; |
| |
| typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt; |
| typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr; |
| |
| /* |
| * xmlRelaxNGValidErr: |
| * |
| * List of possible Relax NG validation errors |
| */ |
| typedef enum { |
| XML_RELAXNG_OK = 0, |
| XML_RELAXNG_ERR_MEMORY, |
| XML_RELAXNG_ERR_TYPE, |
| XML_RELAXNG_ERR_TYPEVAL, |
| XML_RELAXNG_ERR_DUPID, |
| XML_RELAXNG_ERR_TYPECMP, |
| XML_RELAXNG_ERR_NOSTATE, |
| XML_RELAXNG_ERR_NODEFINE, |
| XML_RELAXNG_ERR_LISTEXTRA, |
| XML_RELAXNG_ERR_LISTEMPTY, |
| XML_RELAXNG_ERR_INTERNODATA, |
| XML_RELAXNG_ERR_INTERSEQ, |
| XML_RELAXNG_ERR_INTEREXTRA, |
| XML_RELAXNG_ERR_ELEMNAME, |
| XML_RELAXNG_ERR_ATTRNAME, |
| XML_RELAXNG_ERR_ELEMNONS, |
| XML_RELAXNG_ERR_ATTRNONS, |
| XML_RELAXNG_ERR_ELEMWRONGNS, |
| XML_RELAXNG_ERR_ATTRWRONGNS, |
| XML_RELAXNG_ERR_ELEMEXTRANS, |
| XML_RELAXNG_ERR_ATTREXTRANS, |
| XML_RELAXNG_ERR_ELEMNOTEMPTY, |
| XML_RELAXNG_ERR_NOELEM, |
| XML_RELAXNG_ERR_NOTELEM, |
| XML_RELAXNG_ERR_ATTRVALID, |
| XML_RELAXNG_ERR_CONTENTVALID, |
| XML_RELAXNG_ERR_EXTRACONTENT, |
| XML_RELAXNG_ERR_INVALIDATTR, |
| XML_RELAXNG_ERR_DATAELEM, |
| XML_RELAXNG_ERR_VALELEM, |
| XML_RELAXNG_ERR_LISTELEM, |
| XML_RELAXNG_ERR_DATATYPE, |
| XML_RELAXNG_ERR_VALUE, |
| XML_RELAXNG_ERR_LIST, |
| XML_RELAXNG_ERR_NOGRAMMAR, |
| XML_RELAXNG_ERR_EXTRADATA, |
| XML_RELAXNG_ERR_LACKDATA, |
| XML_RELAXNG_ERR_INTERNAL, |
| XML_RELAXNG_ERR_ELEMWRONG, |
| XML_RELAXNG_ERR_TEXTWRONG |
| } xmlRelaxNGValidErr; |
| |
| /* |
| * xmlRelaxNGParserFlags: |
| * |
| * List of possible Relax NG Parser flags |
| */ |
| typedef enum { |
| XML_RELAXNGP_NONE = 0, |
| XML_RELAXNGP_FREE_DOC = 1, |
| XML_RELAXNGP_CRNG = 2 |
| } xmlRelaxNGParserFlag; |
| |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGInitTypes (void); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGCleanupTypes (void); |
| |
| /* |
| * Interfaces for parsing. |
| */ |
| XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL |
| xmlRelaxNGNewParserCtxt (const char *URL); |
| XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL |
| xmlRelaxNGNewMemParserCtxt (const char *buffer, |
| int size); |
| XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL |
| xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc); |
| |
| XMLPUBFUN int XMLCALL |
| xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt, |
| int flag); |
| |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, |
| xmlRelaxNGValidityErrorFunc err, |
| xmlRelaxNGValidityWarningFunc warn, |
| void *ctx); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, |
| xmlRelaxNGValidityErrorFunc *err, |
| xmlRelaxNGValidityWarningFunc *warn, |
| void **ctx); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGSetParserStructuredErrors( |
| xmlRelaxNGParserCtxtPtr ctxt, |
| xmlStructuredErrorFunc serror, |
| void *ctx); |
| XMLPUBFUN xmlRelaxNGPtr XMLCALL |
| xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGFree (xmlRelaxNGPtr schema); |
| #ifdef LIBXML_OUTPUT_ENABLED |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGDump (FILE *output, |
| xmlRelaxNGPtr schema); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGDumpTree (FILE * output, |
| xmlRelaxNGPtr schema); |
| #endif /* LIBXML_OUTPUT_ENABLED */ |
| /* |
| * Interfaces for validating |
| */ |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, |
| xmlRelaxNGValidityErrorFunc err, |
| xmlRelaxNGValidityWarningFunc warn, |
| void *ctx); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, |
| xmlRelaxNGValidityErrorFunc *err, |
| xmlRelaxNGValidityWarningFunc *warn, |
| void **ctx); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt, |
| xmlStructuredErrorFunc serror, void *ctx); |
| XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL |
| xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema); |
| XMLPUBFUN void XMLCALL |
| xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt, |
| xmlDocPtr doc); |
| /* |
| * Interfaces for progressive validation when possible |
| */ |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt, |
| xmlDocPtr doc, |
| xmlNodePtr elem); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt, |
| const xmlChar *data, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt, |
| xmlDocPtr doc, |
| xmlNodePtr elem); |
| XMLPUBFUN int XMLCALL |
| xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt, |
| xmlDocPtr doc, |
| xmlNodePtr elem); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* LIBXML_SCHEMAS_ENABLED */ |
| |
| #endif /* __XML_RELAX_NG__ */ |