/*
 * Summary: implementation of XML Schema Datatypes
 * Description: module providing the XML Schema Datatypes implementation
 *              both definition and validity checking
 *
 * Copy: See Copyright for the status of this software.
 *
 * Author: Daniel Veillard
 */


#ifndef __XML_SCHEMA_TYPES_H__
#define __XML_SCHEMA_TYPES_H__

#include "xmlversion.h"

#ifdef LIBXML_SCHEMAS_ENABLED

#include "schemasInternals.h"
#include "xmlschemas.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
    XML_SCHEMA_WHITESPACE_PRESERVE = 1,
    XML_SCHEMA_WHITESPACE_REPLACE = 2,
    XML_SCHEMA_WHITESPACE_COLLAPSE = 3
} xmlSchemaWhitespaceValueType;

XMLPUBFUN void XMLCALL          
                xmlSchemaInitTypes              (void);
XMLPUBFUN void XMLCALL          
                xmlSchemaCleanupTypes           (void);
XMLPUBFUN xmlSchemaTypePtr XMLCALL 
                xmlSchemaGetPredefinedType      (const xmlChar *name,
                                                 const xmlChar *ns);
XMLPUBFUN int XMLCALL           
                xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr *val);
XMLPUBFUN int XMLCALL           
                xmlSchemaValPredefTypeNode      (xmlSchemaTypePtr type,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr *val,
                                                 xmlNodePtr node);
XMLPUBFUN int XMLCALL           
                xmlSchemaValidateFacet          (xmlSchemaTypePtr base,
                                                 xmlSchemaFacetPtr facet,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr val);
XMLPUBFUN int XMLCALL
                xmlSchemaValidateFacetWhtsp     (xmlSchemaFacetPtr facet,
                                                 xmlSchemaWhitespaceValueType fws,
                                                 xmlSchemaValType valType,                                               
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr val,
                                                 xmlSchemaWhitespaceValueType ws);
XMLPUBFUN void XMLCALL          
                xmlSchemaFreeValue              (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaFacetPtr XMLCALL 
                xmlSchemaNewFacet               (void);
XMLPUBFUN int XMLCALL           
                xmlSchemaCheckFacet             (xmlSchemaFacetPtr facet,
                                                 xmlSchemaTypePtr typeDecl,
                                                 xmlSchemaParserCtxtPtr ctxt,
                                                 const xmlChar *name);
XMLPUBFUN void XMLCALL          
                xmlSchemaFreeFacet              (xmlSchemaFacetPtr facet);
XMLPUBFUN int XMLCALL           
                xmlSchemaCompareValues          (xmlSchemaValPtr x,
                                                 xmlSchemaValPtr y);
XMLPUBFUN xmlSchemaTypePtr XMLCALL              
    xmlSchemaGetBuiltInListSimpleTypeItemType   (xmlSchemaTypePtr type);
XMLPUBFUN int XMLCALL
    xmlSchemaValidateListSimpleTypeFacet        (xmlSchemaFacetPtr facet,
                                                 const xmlChar *value,
                                                 unsigned long actualLen,
                                                 unsigned long *expectedLen);
XMLPUBFUN xmlSchemaTypePtr XMLCALL
                xmlSchemaGetBuiltInType         (xmlSchemaValType type);
XMLPUBFUN int XMLCALL
                xmlSchemaIsBuiltInTypeFacet     (xmlSchemaTypePtr type, 
                                                 int facetType);
XMLPUBFUN xmlChar * XMLCALL
                xmlSchemaCollapseString         (const xmlChar *value);
XMLPUBFUN xmlChar * XMLCALL
                xmlSchemaWhiteSpaceReplace      (const xmlChar *value);
XMLPUBFUN unsigned long  XMLCALL
                xmlSchemaGetFacetValueAsULong   (xmlSchemaFacetPtr facet);
XMLPUBFUN int XMLCALL
                xmlSchemaValidateLengthFacet    (xmlSchemaTypePtr type, 
                                                 xmlSchemaFacetPtr facet,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr val,
                                                 unsigned long *length);
XMLPUBFUN int XMLCALL
                xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
                                                  xmlSchemaValType valType,
                                                  const xmlChar *value,
                                                  xmlSchemaValPtr val,                                            
                                                  unsigned long *length,
                                                  xmlSchemaWhitespaceValueType ws);
XMLPUBFUN int XMLCALL
                xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, 
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr *val, 
                                                 xmlNodePtr node);
XMLPUBFUN int XMLCALL
                xmlSchemaGetCanonValue          (xmlSchemaValPtr val,
                                                 const xmlChar **retValue);
XMLPUBFUN int XMLCALL
                xmlSchemaGetCanonValueWhtsp     (xmlSchemaValPtr val,                                            
                                                 const xmlChar **retValue,
                                                 xmlSchemaWhitespaceValueType ws);
XMLPUBFUN int XMLCALL
                xmlSchemaValueAppend            (xmlSchemaValPtr prev,
                                                 xmlSchemaValPtr cur);
XMLPUBFUN xmlSchemaValPtr XMLCALL
                xmlSchemaValueGetNext           (xmlSchemaValPtr cur);
XMLPUBFUN const xmlChar * XMLCALL
                xmlSchemaValueGetAsString       (xmlSchemaValPtr val);
XMLPUBFUN int XMLCALL
                xmlSchemaValueGetAsBoolean      (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaValPtr XMLCALL
                xmlSchemaNewStringValue         (xmlSchemaValType type,
                                                 const xmlChar *value);
XMLPUBFUN xmlSchemaValPtr XMLCALL
                xmlSchemaNewNOTATIONValue       (const xmlChar *name,
                                                 const xmlChar *ns);
XMLPUBFUN xmlSchemaValPtr XMLCALL
                xmlSchemaNewQNameValue          (const xmlChar *namespaceName,
                                                 const xmlChar *localName);
XMLPUBFUN int XMLCALL
                xmlSchemaCompareValuesWhtsp     (xmlSchemaValPtr x,
                                                 xmlSchemaWhitespaceValueType xws,
                                                 xmlSchemaValPtr y,
                                                 xmlSchemaWhitespaceValueType yws);
XMLPUBFUN xmlSchemaValPtr XMLCALL
                xmlSchemaCopyValue              (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaValType XMLCALL
                xmlSchemaGetValType             (xmlSchemaValPtr val);

#ifdef __cplusplus
}
#endif

#endif /* LIBXML_SCHEMAS_ENABLED */
#endif /* __XML_SCHEMA_TYPES_H__ */
