12#pragma convert("ISO8859-1")
18#ifdef LIBXML_SCHEMAS_ENABLED
38#ifndef LIBXML_XPATH_ENABLED
39extern double xmlXPathNAN;
40extern double xmlXPathPINF;
41extern double xmlXPathNINF;
45 xmlGenericError(xmlGenericErrorContext, \
46 "Unimplemented block at %s:%d\n", \
49#define XML_SCHEMAS_NAMESPACE_NAME \
50 (const xmlChar *)"http://www.w3.org/2001/XMLSchema"
52#define IS_WSP_REPLACE_CH(c) ((((c) == 0x9) || ((c) == 0xa)) || \
55#define IS_WSP_SPACE_CH(c) ((c) == 0x20)
57#define IS_WSP_BLANK_CH(c) IS_BLANK_CH(c)
60typedef struct _xmlSchemaValDate xmlSchemaValDate;
61typedef xmlSchemaValDate *xmlSchemaValDatePtr;
62struct _xmlSchemaValDate {
69 unsigned int tz_flag :1;
75typedef struct _xmlSchemaValDuration xmlSchemaValDuration;
76typedef xmlSchemaValDuration *xmlSchemaValDurationPtr;
77struct _xmlSchemaValDuration {
83typedef struct _xmlSchemaValDecimal xmlSchemaValDecimal;
84typedef xmlSchemaValDecimal *xmlSchemaValDecimalPtr;
85struct _xmlSchemaValDecimal {
96typedef struct _xmlSchemaValQName xmlSchemaValQName;
97typedef xmlSchemaValQName *xmlSchemaValQNamePtr;
98struct _xmlSchemaValQName {
103typedef struct _xmlSchemaValHex xmlSchemaValHex;
104typedef xmlSchemaValHex *xmlSchemaValHexPtr;
105struct _xmlSchemaValHex {
110typedef struct _xmlSchemaValBase64 xmlSchemaValBase64;
111typedef xmlSchemaValBase64 *xmlSchemaValBase64Ptr;
112struct _xmlSchemaValBase64 {
117struct _xmlSchemaVal {
118 xmlSchemaValType
type;
119 struct _xmlSchemaVal *
next;
121 xmlSchemaValDecimal decimal;
122 xmlSchemaValDate
date;
123 xmlSchemaValDuration dur;
124 xmlSchemaValQName qname;
126 xmlSchemaValBase64 base64;
134static int xmlSchemaTypesInitialized = 0;
140static xmlSchemaTypePtr xmlSchemaTypeStringDef =
NULL;
141static xmlSchemaTypePtr xmlSchemaTypeAnyTypeDef =
NULL;
142static xmlSchemaTypePtr xmlSchemaTypeAnySimpleTypeDef =
NULL;
143static xmlSchemaTypePtr xmlSchemaTypeDecimalDef =
NULL;
144static xmlSchemaTypePtr xmlSchemaTypeDatetimeDef =
NULL;
145static xmlSchemaTypePtr xmlSchemaTypeDateDef =
NULL;
146static xmlSchemaTypePtr xmlSchemaTypeTimeDef =
NULL;
147static xmlSchemaTypePtr xmlSchemaTypeGYearDef =
NULL;
148static xmlSchemaTypePtr xmlSchemaTypeGYearMonthDef =
NULL;
149static xmlSchemaTypePtr xmlSchemaTypeGDayDef =
NULL;
150static xmlSchemaTypePtr xmlSchemaTypeGMonthDayDef =
NULL;
151static xmlSchemaTypePtr xmlSchemaTypeGMonthDef =
NULL;
152static xmlSchemaTypePtr xmlSchemaTypeDurationDef =
NULL;
153static xmlSchemaTypePtr xmlSchemaTypeFloatDef =
NULL;
154static xmlSchemaTypePtr xmlSchemaTypeBooleanDef =
NULL;
155static xmlSchemaTypePtr xmlSchemaTypeDoubleDef =
NULL;
156static xmlSchemaTypePtr xmlSchemaTypeHexBinaryDef =
NULL;
157static xmlSchemaTypePtr xmlSchemaTypeBase64BinaryDef =
NULL;
158static xmlSchemaTypePtr xmlSchemaTypeAnyURIDef =
NULL;
163static xmlSchemaTypePtr xmlSchemaTypePositiveIntegerDef =
NULL;
164static xmlSchemaTypePtr xmlSchemaTypeNonPositiveIntegerDef =
NULL;
165static xmlSchemaTypePtr xmlSchemaTypeNegativeIntegerDef =
NULL;
166static xmlSchemaTypePtr xmlSchemaTypeNonNegativeIntegerDef =
NULL;
167static xmlSchemaTypePtr xmlSchemaTypeIntegerDef =
NULL;
168static xmlSchemaTypePtr xmlSchemaTypeLongDef =
NULL;
169static xmlSchemaTypePtr xmlSchemaTypeIntDef =
NULL;
170static xmlSchemaTypePtr xmlSchemaTypeShortDef =
NULL;
171static xmlSchemaTypePtr xmlSchemaTypeByteDef =
NULL;
172static xmlSchemaTypePtr xmlSchemaTypeUnsignedLongDef =
NULL;
173static xmlSchemaTypePtr xmlSchemaTypeUnsignedIntDef =
NULL;
174static xmlSchemaTypePtr xmlSchemaTypeUnsignedShortDef =
NULL;
175static xmlSchemaTypePtr xmlSchemaTypeUnsignedByteDef =
NULL;
176static xmlSchemaTypePtr xmlSchemaTypeNormStringDef =
NULL;
177static xmlSchemaTypePtr xmlSchemaTypeTokenDef =
NULL;
178static xmlSchemaTypePtr xmlSchemaTypeLanguageDef =
NULL;
179static xmlSchemaTypePtr xmlSchemaTypeNameDef =
NULL;
180static xmlSchemaTypePtr xmlSchemaTypeQNameDef =
NULL;
181static xmlSchemaTypePtr xmlSchemaTypeNCNameDef =
NULL;
182static xmlSchemaTypePtr xmlSchemaTypeIdDef =
NULL;
183static xmlSchemaTypePtr xmlSchemaTypeIdrefDef =
NULL;
184static xmlSchemaTypePtr xmlSchemaTypeIdrefsDef =
NULL;
185static xmlSchemaTypePtr xmlSchemaTypeEntityDef =
NULL;
186static xmlSchemaTypePtr xmlSchemaTypeEntitiesDef =
NULL;
187static xmlSchemaTypePtr xmlSchemaTypeNotationDef =
NULL;
188static xmlSchemaTypePtr xmlSchemaTypeNmtokenDef =
NULL;
189static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef =
NULL;
203xmlSchemaTypeErrMemory(xmlNodePtr
node,
const char *
extra)
222static xmlSchemaValPtr
223xmlSchemaNewValue(xmlSchemaValType
type) {
224 xmlSchemaValPtr
value;
235static xmlSchemaFacetPtr
236xmlSchemaNewMinLengthFacet(
int value)
238 xmlSchemaFacetPtr
ret;
240 ret = xmlSchemaNewFacet();
244 ret->type = XML_SCHEMA_FACET_MINLENGTH;
245 ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER);
261static xmlSchemaTypePtr
262xmlSchemaInitBasicType(
const char *
name, xmlSchemaValType
type,
263 xmlSchemaTypePtr baseType) {
264 xmlSchemaTypePtr
ret;
266 ret = (xmlSchemaTypePtr)
xmlMalloc(
sizeof(xmlSchemaType));
268 xmlSchemaTypeErrMemory(
NULL,
"could not initialize basic types");
273 ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME;
274 ret->type = XML_SCHEMA_TYPE_BASIC;
275 ret->baseType = baseType;
276 ret->contentType = XML_SCHEMA_CONTENT_BASIC;
281 case XML_SCHEMAS_STRING:
282 case XML_SCHEMAS_DECIMAL:
283 case XML_SCHEMAS_DATE:
284 case XML_SCHEMAS_DATETIME:
285 case XML_SCHEMAS_TIME:
286 case XML_SCHEMAS_GYEAR:
287 case XML_SCHEMAS_GYEARMONTH:
288 case XML_SCHEMAS_GMONTH:
289 case XML_SCHEMAS_GMONTHDAY:
290 case XML_SCHEMAS_GDAY:
291 case XML_SCHEMAS_DURATION:
292 case XML_SCHEMAS_FLOAT:
293 case XML_SCHEMAS_DOUBLE:
294 case XML_SCHEMAS_BOOLEAN:
295 case XML_SCHEMAS_ANYURI:
296 case XML_SCHEMAS_HEXBINARY:
297 case XML_SCHEMAS_BASE64BINARY:
298 case XML_SCHEMAS_QNAME:
299 case XML_SCHEMAS_NOTATION:
300 ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
309 case XML_SCHEMAS_ANYTYPE:
310 case XML_SCHEMAS_ANYSIMPLETYPE:
312 case XML_SCHEMAS_IDREFS:
313 case XML_SCHEMAS_NMTOKENS:
314 case XML_SCHEMAS_ENTITIES:
315 ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
316 ret->facets = xmlSchemaNewMinLengthFacet(1);
317 ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
320 ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
324 XML_SCHEMAS_NAMESPACE_NAME,
ret);
335#define UNBOUNDED (1 << 30)
337typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
338typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
339struct _xmlSchemaTreeItem {
340 xmlSchemaTypeType
type;
341 xmlSchemaAnnotPtr annot;
342 xmlSchemaTreeItemPtr
next;
343 xmlSchemaTreeItemPtr children;
346typedef struct _xmlSchemaParticle xmlSchemaParticle;
347typedef xmlSchemaParticle *xmlSchemaParticlePtr;
348struct _xmlSchemaParticle {
349 xmlSchemaTypeType
type;
350 xmlSchemaAnnotPtr annot;
351 xmlSchemaTreeItemPtr
next;
352 xmlSchemaTreeItemPtr children;
358typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
359typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
360struct _xmlSchemaModelGroup {
361 xmlSchemaTypeType
type;
362 xmlSchemaAnnotPtr annot;
363 xmlSchemaTreeItemPtr
next;
364 xmlSchemaTreeItemPtr children;
368static xmlSchemaParticlePtr
369xmlSchemaAddParticle(
void)
371 xmlSchemaParticlePtr
ret =
NULL;
373 ret = (xmlSchemaParticlePtr)
376 xmlSchemaTypeErrMemory(
NULL,
"allocating particle component");
379 memset(
ret, 0,
sizeof(xmlSchemaParticle));
380 ret->type = XML_SCHEMA_TYPE_PARTICLE;
388 xmlSchemaFreeType((xmlSchemaTypePtr)
type);
397xmlSchemaCleanupTypesInternal(
void) {
398 xmlSchemaParticlePtr particle;
403 if (xmlSchemaTypeAnyTypeDef !=
NULL) {
405 xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard);
407 particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes;
409 xmlSchemaFreeWildcard((xmlSchemaWildcardPtr)
410 particle->children->children->children);
411 xmlFree((xmlSchemaParticlePtr) particle->children->children);
413 xmlFree((xmlSchemaModelGroupPtr) particle->children);
414 xmlFree((xmlSchemaParticlePtr) particle);
415 xmlSchemaTypeAnyTypeDef->subtypes =
NULL;
416 xmlSchemaTypeAnyTypeDef =
NULL;
419 xmlHashFree(xmlSchemaTypesBank, xmlSchemaFreeTypeEntry);
420 xmlSchemaTypesBank =
NULL;
432xmlSchemaInitTypes(
void)
434 if (xmlSchemaTypesInitialized != 0)
437 if (xmlSchemaTypesBank ==
NULL) {
445 xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType(
"anyType",
448 if (xmlSchemaTypeAnyTypeDef ==
NULL)
450 xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef;
451 xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
455 xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
457 xmlSchemaParticlePtr particle;
459 xmlSchemaWildcardPtr wild;
461 particle = xmlSchemaAddParticle();
462 if (particle ==
NULL)
464 xmlSchemaTypeAnyTypeDef->subtypes = (xmlSchemaTypePtr) particle;
469 xmlSchemaTypeErrMemory(
NULL,
"allocating model group component");
473 sequence->type = XML_SCHEMA_TYPE_SEQUENCE;
474 particle->children = (xmlSchemaTreeItemPtr)
sequence;
476 particle = xmlSchemaAddParticle();
477 if (particle ==
NULL)
479 particle->minOccurs = 0;
480 particle->maxOccurs = UNBOUNDED;
481 sequence->children = (xmlSchemaTreeItemPtr) particle;
483 wild = (xmlSchemaWildcardPtr)
xmlMalloc(
sizeof(xmlSchemaWildcard));
485 xmlSchemaTypeErrMemory(
NULL,
"allocating wildcard component");
488 memset(wild, 0,
sizeof(xmlSchemaWildcard));
489 wild->type = XML_SCHEMA_TYPE_ANY;
491 wild->processContents = XML_SCHEMAS_ANY_LAX;
492 particle->children = (xmlSchemaTreeItemPtr) wild;
496 wild = (xmlSchemaWildcardPtr)
xmlMalloc(
sizeof(xmlSchemaWildcard));
498 xmlSchemaTypeErrMemory(
NULL,
"could not create an attribute "
499 "wildcard on anyType");
502 memset(wild, 0,
sizeof(xmlSchemaWildcard));
504 wild->processContents = XML_SCHEMAS_ANY_LAX;
505 xmlSchemaTypeAnyTypeDef->attributeWildcard = wild;
507 xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType(
"anySimpleType",
508 XML_SCHEMAS_ANYSIMPLETYPE,
509 xmlSchemaTypeAnyTypeDef);
510 if (xmlSchemaTypeAnySimpleTypeDef ==
NULL)
515 xmlSchemaTypeStringDef = xmlSchemaInitBasicType(
"string",
517 xmlSchemaTypeAnySimpleTypeDef);
518 if (xmlSchemaTypeStringDef ==
NULL)
520 xmlSchemaTypeDecimalDef = xmlSchemaInitBasicType(
"decimal",
522 xmlSchemaTypeAnySimpleTypeDef);
523 if (xmlSchemaTypeDecimalDef ==
NULL)
525 xmlSchemaTypeDateDef = xmlSchemaInitBasicType(
"date",
527 xmlSchemaTypeAnySimpleTypeDef);
528 if (xmlSchemaTypeDateDef ==
NULL)
530 xmlSchemaTypeDatetimeDef = xmlSchemaInitBasicType(
"dateTime",
531 XML_SCHEMAS_DATETIME,
532 xmlSchemaTypeAnySimpleTypeDef);
533 if (xmlSchemaTypeDatetimeDef ==
NULL)
535 xmlSchemaTypeTimeDef = xmlSchemaInitBasicType(
"time",
537 xmlSchemaTypeAnySimpleTypeDef);
538 if (xmlSchemaTypeTimeDef ==
NULL)
540 xmlSchemaTypeGYearDef = xmlSchemaInitBasicType(
"gYear",
542 xmlSchemaTypeAnySimpleTypeDef);
543 if (xmlSchemaTypeGYearDef ==
NULL)
545 xmlSchemaTypeGYearMonthDef = xmlSchemaInitBasicType(
"gYearMonth",
546 XML_SCHEMAS_GYEARMONTH,
547 xmlSchemaTypeAnySimpleTypeDef);
548 if (xmlSchemaTypeGYearMonthDef ==
NULL)
550 xmlSchemaTypeGMonthDef = xmlSchemaInitBasicType(
"gMonth",
552 xmlSchemaTypeAnySimpleTypeDef);
553 if (xmlSchemaTypeGMonthDef ==
NULL)
555 xmlSchemaTypeGMonthDayDef = xmlSchemaInitBasicType(
"gMonthDay",
556 XML_SCHEMAS_GMONTHDAY,
557 xmlSchemaTypeAnySimpleTypeDef);
558 if (xmlSchemaTypeGMonthDayDef ==
NULL)
560 xmlSchemaTypeGDayDef = xmlSchemaInitBasicType(
"gDay",
562 xmlSchemaTypeAnySimpleTypeDef);
563 if (xmlSchemaTypeGDayDef ==
NULL)
565 xmlSchemaTypeDurationDef = xmlSchemaInitBasicType(
"duration",
566 XML_SCHEMAS_DURATION,
567 xmlSchemaTypeAnySimpleTypeDef);
568 if (xmlSchemaTypeDurationDef ==
NULL)
570 xmlSchemaTypeFloatDef = xmlSchemaInitBasicType(
"float",
572 xmlSchemaTypeAnySimpleTypeDef);
573 if (xmlSchemaTypeFloatDef ==
NULL)
575 xmlSchemaTypeDoubleDef = xmlSchemaInitBasicType(
"double",
577 xmlSchemaTypeAnySimpleTypeDef);
578 if (xmlSchemaTypeDoubleDef ==
NULL)
580 xmlSchemaTypeBooleanDef = xmlSchemaInitBasicType(
"boolean",
582 xmlSchemaTypeAnySimpleTypeDef);
583 if (xmlSchemaTypeBooleanDef ==
NULL)
585 xmlSchemaTypeAnyURIDef = xmlSchemaInitBasicType(
"anyURI",
587 xmlSchemaTypeAnySimpleTypeDef);
588 if (xmlSchemaTypeAnyURIDef ==
NULL)
590 xmlSchemaTypeHexBinaryDef = xmlSchemaInitBasicType(
"hexBinary",
591 XML_SCHEMAS_HEXBINARY,
592 xmlSchemaTypeAnySimpleTypeDef);
593 if (xmlSchemaTypeHexBinaryDef ==
NULL)
595 xmlSchemaTypeBase64BinaryDef
596 = xmlSchemaInitBasicType(
"base64Binary", XML_SCHEMAS_BASE64BINARY,
597 xmlSchemaTypeAnySimpleTypeDef);
598 if (xmlSchemaTypeBase64BinaryDef ==
NULL)
600 xmlSchemaTypeNotationDef = xmlSchemaInitBasicType(
"NOTATION",
601 XML_SCHEMAS_NOTATION,
602 xmlSchemaTypeAnySimpleTypeDef);
603 if (xmlSchemaTypeNotationDef ==
NULL)
605 xmlSchemaTypeQNameDef = xmlSchemaInitBasicType(
"QName",
607 xmlSchemaTypeAnySimpleTypeDef);
608 if (xmlSchemaTypeQNameDef ==
NULL)
614 xmlSchemaTypeIntegerDef = xmlSchemaInitBasicType(
"integer",
616 xmlSchemaTypeDecimalDef);
617 if (xmlSchemaTypeIntegerDef ==
NULL)
619 xmlSchemaTypeNonPositiveIntegerDef =
620 xmlSchemaInitBasicType(
"nonPositiveInteger",
621 XML_SCHEMAS_NPINTEGER,
622 xmlSchemaTypeIntegerDef);
623 if (xmlSchemaTypeNonPositiveIntegerDef ==
NULL)
625 xmlSchemaTypeNegativeIntegerDef =
626 xmlSchemaInitBasicType(
"negativeInteger", XML_SCHEMAS_NINTEGER,
627 xmlSchemaTypeNonPositiveIntegerDef);
628 if (xmlSchemaTypeNegativeIntegerDef ==
NULL)
630 xmlSchemaTypeLongDef =
631 xmlSchemaInitBasicType(
"long", XML_SCHEMAS_LONG,
632 xmlSchemaTypeIntegerDef);
633 if (xmlSchemaTypeLongDef ==
NULL)
635 xmlSchemaTypeIntDef = xmlSchemaInitBasicType(
"int", XML_SCHEMAS_INT,
636 xmlSchemaTypeLongDef);
637 if (xmlSchemaTypeIntDef ==
NULL)
639 xmlSchemaTypeShortDef = xmlSchemaInitBasicType(
"short",
641 xmlSchemaTypeIntDef);
642 if (xmlSchemaTypeShortDef ==
NULL)
644 xmlSchemaTypeByteDef = xmlSchemaInitBasicType(
"byte",
646 xmlSchemaTypeShortDef);
647 if (xmlSchemaTypeByteDef ==
NULL)
649 xmlSchemaTypeNonNegativeIntegerDef =
650 xmlSchemaInitBasicType(
"nonNegativeInteger",
651 XML_SCHEMAS_NNINTEGER,
652 xmlSchemaTypeIntegerDef);
653 if (xmlSchemaTypeNonNegativeIntegerDef ==
NULL)
655 xmlSchemaTypeUnsignedLongDef =
656 xmlSchemaInitBasicType(
"unsignedLong", XML_SCHEMAS_ULONG,
657 xmlSchemaTypeNonNegativeIntegerDef);
658 if (xmlSchemaTypeUnsignedLongDef ==
NULL)
660 xmlSchemaTypeUnsignedIntDef =
661 xmlSchemaInitBasicType(
"unsignedInt", XML_SCHEMAS_UINT,
662 xmlSchemaTypeUnsignedLongDef);
663 if (xmlSchemaTypeUnsignedIntDef ==
NULL)
665 xmlSchemaTypeUnsignedShortDef =
666 xmlSchemaInitBasicType(
"unsignedShort", XML_SCHEMAS_USHORT,
667 xmlSchemaTypeUnsignedIntDef);
668 if (xmlSchemaTypeUnsignedShortDef ==
NULL)
670 xmlSchemaTypeUnsignedByteDef =
671 xmlSchemaInitBasicType(
"unsignedByte", XML_SCHEMAS_UBYTE,
672 xmlSchemaTypeUnsignedShortDef);
673 if (xmlSchemaTypeUnsignedByteDef ==
NULL)
675 xmlSchemaTypePositiveIntegerDef =
676 xmlSchemaInitBasicType(
"positiveInteger", XML_SCHEMAS_PINTEGER,
677 xmlSchemaTypeNonNegativeIntegerDef);
678 if (xmlSchemaTypePositiveIntegerDef ==
NULL)
680 xmlSchemaTypeNormStringDef = xmlSchemaInitBasicType(
"normalizedString",
681 XML_SCHEMAS_NORMSTRING,
682 xmlSchemaTypeStringDef);
683 if (xmlSchemaTypeNormStringDef ==
NULL)
685 xmlSchemaTypeTokenDef = xmlSchemaInitBasicType(
"token",
687 xmlSchemaTypeNormStringDef);
688 if (xmlSchemaTypeTokenDef ==
NULL)
690 xmlSchemaTypeLanguageDef = xmlSchemaInitBasicType(
"language",
691 XML_SCHEMAS_LANGUAGE,
692 xmlSchemaTypeTokenDef);
693 if (xmlSchemaTypeLanguageDef ==
NULL)
695 xmlSchemaTypeNameDef = xmlSchemaInitBasicType(
"Name",
697 xmlSchemaTypeTokenDef);
698 if (xmlSchemaTypeNameDef ==
NULL)
700 xmlSchemaTypeNmtokenDef = xmlSchemaInitBasicType(
"NMTOKEN",
702 xmlSchemaTypeTokenDef);
703 if (xmlSchemaTypeNmtokenDef ==
NULL)
705 xmlSchemaTypeNCNameDef = xmlSchemaInitBasicType(
"NCName",
707 xmlSchemaTypeNameDef);
708 if (xmlSchemaTypeNCNameDef ==
NULL)
710 xmlSchemaTypeIdDef = xmlSchemaInitBasicType(
"ID", XML_SCHEMAS_ID,
711 xmlSchemaTypeNCNameDef);
712 if (xmlSchemaTypeIdDef ==
NULL)
714 xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType(
"IDREF",
716 xmlSchemaTypeNCNameDef);
717 if (xmlSchemaTypeIdrefDef ==
NULL)
719 xmlSchemaTypeEntityDef = xmlSchemaInitBasicType(
"ENTITY",
721 xmlSchemaTypeNCNameDef);
722 if (xmlSchemaTypeEntityDef ==
NULL)
728 xmlSchemaTypeEntitiesDef = xmlSchemaInitBasicType(
"ENTITIES",
729 XML_SCHEMAS_ENTITIES,
730 xmlSchemaTypeAnySimpleTypeDef);
731 if (xmlSchemaTypeEntitiesDef ==
NULL)
733 xmlSchemaTypeEntitiesDef->subtypes = xmlSchemaTypeEntityDef;
735 xmlSchemaTypeIdrefsDef = xmlSchemaInitBasicType(
"IDREFS",
737 xmlSchemaTypeAnySimpleTypeDef);
738 if (xmlSchemaTypeIdrefsDef ==
NULL)
740 xmlSchemaTypeIdrefsDef->subtypes = xmlSchemaTypeIdrefDef;
743 xmlSchemaTypeNmtokensDef = xmlSchemaInitBasicType(
"NMTOKENS",
744 XML_SCHEMAS_NMTOKENS,
745 xmlSchemaTypeAnySimpleTypeDef);
746 if (xmlSchemaTypeNmtokensDef ==
NULL)
748 xmlSchemaTypeNmtokensDef->subtypes = xmlSchemaTypeNmtokenDef;
750 xmlSchemaTypesInitialized = 1;
754 xmlSchemaCleanupTypesInternal();
769xmlSchemaCleanupTypes(
void) {
770 if (xmlSchemaTypesInitialized != 0) {
771 xmlSchemaCleanupTypesInternal();
772 xmlSchemaTypesInitialized = 0;
788xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr
type,
int facetType)
792 if (
type->type != XML_SCHEMA_TYPE_BASIC)
794 switch (
type->builtInType) {
795 case XML_SCHEMAS_BOOLEAN:
796 if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
797 (facetType == XML_SCHEMA_FACET_WHITESPACE))
801 case XML_SCHEMAS_STRING:
802 case XML_SCHEMAS_NOTATION:
803 case XML_SCHEMAS_QNAME:
804 case XML_SCHEMAS_ANYURI:
805 case XML_SCHEMAS_BASE64BINARY:
806 case XML_SCHEMAS_HEXBINARY:
807 if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
808 (facetType == XML_SCHEMA_FACET_MINLENGTH) ||
809 (facetType == XML_SCHEMA_FACET_MAXLENGTH) ||
810 (facetType == XML_SCHEMA_FACET_PATTERN) ||
811 (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
812 (facetType == XML_SCHEMA_FACET_WHITESPACE))
816 case XML_SCHEMAS_DECIMAL:
817 if ((facetType == XML_SCHEMA_FACET_TOTALDIGITS) ||
818 (facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) ||
819 (facetType == XML_SCHEMA_FACET_PATTERN) ||
820 (facetType == XML_SCHEMA_FACET_WHITESPACE) ||
821 (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
822 (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
823 (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
824 (facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
825 (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
829 case XML_SCHEMAS_TIME:
830 case XML_SCHEMAS_GDAY:
831 case XML_SCHEMAS_GMONTH:
832 case XML_SCHEMAS_GMONTHDAY:
833 case XML_SCHEMAS_GYEAR:
834 case XML_SCHEMAS_GYEARMONTH:
835 case XML_SCHEMAS_DATE:
836 case XML_SCHEMAS_DATETIME:
837 case XML_SCHEMAS_DURATION:
838 case XML_SCHEMAS_FLOAT:
839 case XML_SCHEMAS_DOUBLE:
840 if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
841 (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
842 (facetType == XML_SCHEMA_FACET_WHITESPACE) ||
843 (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
844 (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
845 (facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
846 (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
866xmlSchemaGetBuiltInType(xmlSchemaValType
type)
868 if ((xmlSchemaTypesInitialized == 0) &&
869 (xmlSchemaInitTypes() < 0))
873 case XML_SCHEMAS_ANYSIMPLETYPE:
874 return (xmlSchemaTypeAnySimpleTypeDef);
875 case XML_SCHEMAS_STRING:
876 return (xmlSchemaTypeStringDef);
877 case XML_SCHEMAS_NORMSTRING:
878 return (xmlSchemaTypeNormStringDef);
879 case XML_SCHEMAS_DECIMAL:
880 return (xmlSchemaTypeDecimalDef);
881 case XML_SCHEMAS_TIME:
882 return (xmlSchemaTypeTimeDef);
883 case XML_SCHEMAS_GDAY:
884 return (xmlSchemaTypeGDayDef);
885 case XML_SCHEMAS_GMONTH:
886 return (xmlSchemaTypeGMonthDef);
887 case XML_SCHEMAS_GMONTHDAY:
888 return (xmlSchemaTypeGMonthDayDef);
889 case XML_SCHEMAS_GYEAR:
890 return (xmlSchemaTypeGYearDef);
891 case XML_SCHEMAS_GYEARMONTH:
892 return (xmlSchemaTypeGYearMonthDef);
893 case XML_SCHEMAS_DATE:
894 return (xmlSchemaTypeDateDef);
895 case XML_SCHEMAS_DATETIME:
896 return (xmlSchemaTypeDatetimeDef);
897 case XML_SCHEMAS_DURATION:
898 return (xmlSchemaTypeDurationDef);
899 case XML_SCHEMAS_FLOAT:
900 return (xmlSchemaTypeFloatDef);
901 case XML_SCHEMAS_DOUBLE:
902 return (xmlSchemaTypeDoubleDef);
903 case XML_SCHEMAS_BOOLEAN:
904 return (xmlSchemaTypeBooleanDef);
905 case XML_SCHEMAS_TOKEN:
906 return (xmlSchemaTypeTokenDef);
907 case XML_SCHEMAS_LANGUAGE:
908 return (xmlSchemaTypeLanguageDef);
909 case XML_SCHEMAS_NMTOKEN:
910 return (xmlSchemaTypeNmtokenDef);
911 case XML_SCHEMAS_NMTOKENS:
912 return (xmlSchemaTypeNmtokensDef);
913 case XML_SCHEMAS_NAME:
914 return (xmlSchemaTypeNameDef);
915 case XML_SCHEMAS_QNAME:
916 return (xmlSchemaTypeQNameDef);
917 case XML_SCHEMAS_NCNAME:
918 return (xmlSchemaTypeNCNameDef);
920 return (xmlSchemaTypeIdDef);
921 case XML_SCHEMAS_IDREF:
922 return (xmlSchemaTypeIdrefDef);
923 case XML_SCHEMAS_IDREFS:
924 return (xmlSchemaTypeIdrefsDef);
925 case XML_SCHEMAS_ENTITY:
926 return (xmlSchemaTypeEntityDef);
927 case XML_SCHEMAS_ENTITIES:
928 return (xmlSchemaTypeEntitiesDef);
929 case XML_SCHEMAS_NOTATION:
930 return (xmlSchemaTypeNotationDef);
931 case XML_SCHEMAS_ANYURI:
932 return (xmlSchemaTypeAnyURIDef);
933 case XML_SCHEMAS_INTEGER:
934 return (xmlSchemaTypeIntegerDef);
935 case XML_SCHEMAS_NPINTEGER:
936 return (xmlSchemaTypeNonPositiveIntegerDef);
937 case XML_SCHEMAS_NINTEGER:
938 return (xmlSchemaTypeNegativeIntegerDef);
939 case XML_SCHEMAS_NNINTEGER:
940 return (xmlSchemaTypeNonNegativeIntegerDef);
941 case XML_SCHEMAS_PINTEGER:
942 return (xmlSchemaTypePositiveIntegerDef);
943 case XML_SCHEMAS_INT:
944 return (xmlSchemaTypeIntDef);
945 case XML_SCHEMAS_UINT:
946 return (xmlSchemaTypeUnsignedIntDef);
947 case XML_SCHEMAS_LONG:
948 return (xmlSchemaTypeLongDef);
949 case XML_SCHEMAS_ULONG:
950 return (xmlSchemaTypeUnsignedLongDef);
951 case XML_SCHEMAS_SHORT:
952 return (xmlSchemaTypeShortDef);
953 case XML_SCHEMAS_USHORT:
954 return (xmlSchemaTypeUnsignedShortDef);
955 case XML_SCHEMAS_BYTE:
956 return (xmlSchemaTypeByteDef);
957 case XML_SCHEMAS_UBYTE:
958 return (xmlSchemaTypeUnsignedByteDef);
959 case XML_SCHEMAS_HEXBINARY:
960 return (xmlSchemaTypeHexBinaryDef);
961 case XML_SCHEMAS_BASE64BINARY:
962 return (xmlSchemaTypeBase64BinaryDef);
963 case XML_SCHEMAS_ANYTYPE:
964 return (xmlSchemaTypeAnyTypeDef);
980xmlSchemaValueAppend(xmlSchemaValPtr prev, xmlSchemaValPtr
cur) {
998xmlSchemaValueGetNext(xmlSchemaValPtr
cur) {
1015xmlSchemaValueGetAsString(xmlSchemaValPtr
val)
1019 switch (
val->type) {
1020 case XML_SCHEMAS_STRING:
1021 case XML_SCHEMAS_NORMSTRING:
1022 case XML_SCHEMAS_ANYSIMPLETYPE:
1023 case XML_SCHEMAS_TOKEN:
1024 case XML_SCHEMAS_LANGUAGE:
1025 case XML_SCHEMAS_NMTOKEN:
1026 case XML_SCHEMAS_NAME:
1027 case XML_SCHEMAS_NCNAME:
1028 case XML_SCHEMAS_ID:
1029 case XML_SCHEMAS_IDREF:
1030 case XML_SCHEMAS_ENTITY:
1031 case XML_SCHEMAS_ANYURI:
1048xmlSchemaValueGetAsBoolean(xmlSchemaValPtr
val)
1050 if ((
val ==
NULL) || (
val->type != XML_SCHEMAS_BOOLEAN))
1052 return (
val->value.b);
1069xmlSchemaNewStringValue(xmlSchemaValType
type,
1072 xmlSchemaValPtr
val;
1074 if (
type != XML_SCHEMAS_STRING)
1076 val = (xmlSchemaValPtr)
xmlMalloc(
sizeof(xmlSchemaVal));
1100 xmlSchemaValPtr
val;
1102 val = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
1123xmlSchemaNewQNameValue(
const xmlChar *namespaceName,
1126 xmlSchemaValPtr
val;
1128 val = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
1132 val->value.qname.name = (
xmlChar *) localName;
1133 val->value.qname.uri = (
xmlChar *) namespaceName;
1144xmlSchemaFreeValue(xmlSchemaValPtr
value) {
1145 xmlSchemaValPtr prev;
1148 switch (
value->type) {
1149 case XML_SCHEMAS_STRING:
1150 case XML_SCHEMAS_NORMSTRING:
1151 case XML_SCHEMAS_TOKEN:
1152 case XML_SCHEMAS_LANGUAGE:
1153 case XML_SCHEMAS_NMTOKEN:
1154 case XML_SCHEMAS_NMTOKENS:
1155 case XML_SCHEMAS_NAME:
1156 case XML_SCHEMAS_NCNAME:
1157 case XML_SCHEMAS_ID:
1158 case XML_SCHEMAS_IDREF:
1159 case XML_SCHEMAS_IDREFS:
1160 case XML_SCHEMAS_ENTITY:
1161 case XML_SCHEMAS_ENTITIES:
1162 case XML_SCHEMAS_ANYURI:
1163 case XML_SCHEMAS_ANYSIMPLETYPE:
1167 case XML_SCHEMAS_NOTATION:
1168 case XML_SCHEMAS_QNAME:
1174 case XML_SCHEMAS_HEXBINARY:
1178 case XML_SCHEMAS_BASE64BINARY:
1202 if ((xmlSchemaTypesInitialized == 0) &&
1203 (xmlSchemaInitTypes() < 0))
1220xmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr
type)
1222 if ((
type ==
NULL) || (
type->type != XML_SCHEMA_TYPE_BASIC))
1224 switch (
type->builtInType) {
1225 case XML_SCHEMAS_NMTOKENS:
1226 return (xmlSchemaTypeNmtokenDef );
1227 case XML_SCHEMAS_IDREFS:
1228 return (xmlSchemaTypeIdrefDef);
1229 case XML_SCHEMAS_ENTITIES:
1230 return (xmlSchemaTypeEntityDef);
1242#define IS_TZO_CHAR(c) \
1243 ((c == 0) || (c == 'Z') || (c == '+') || (c == '-'))
1245#define VALID_YEAR(yr) (yr != 0)
1246#define VALID_MONTH(mon) ((mon >= 1) && (mon <= 12))
1248#define VALID_DAY(day) ((day >= 1) && (day <= 31))
1249#define VALID_HOUR(hr) ((hr >= 0) && (hr <= 23))
1250#define VALID_MIN(min) ((min >= 0) && (min <= 59))
1251#define VALID_SEC(sec) ((sec >= 0) && (sec < 60))
1252#define VALID_TZO(tzo) ((tzo >= -840) && (tzo <= 840))
1254 (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
1256static const unsigned int daysInMonth[12] =
1257 { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
1258static const unsigned int daysInMonthLeap[12] =
1259 { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
1261#define MAX_DAYINMONTH(yr,mon) \
1262 (IS_LEAP(yr) ? daysInMonthLeap[mon - 1] : daysInMonth[mon - 1])
1264#define VALID_MDAY(dt) \
1265 (IS_LEAP(dt->year) ? \
1266 (dt->day <= daysInMonthLeap[dt->mon - 1]) : \
1267 (dt->day <= daysInMonth[dt->mon - 1]))
1269#define VALID_DATE(dt) \
1270 (VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt))
1272#define VALID_END_OF_DAY(dt) \
1273 ((dt)->hour == 24 && (dt)->min == 0 && (dt)->sec == 0)
1275#define VALID_TIME(dt) \
1276 (((VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \
1277 VALID_SEC(dt->sec)) || VALID_END_OF_DAY(dt)) && \
1280#define VALID_DATETIME(dt) \
1281 (VALID_DATE(dt) && VALID_TIME(dt))
1283#define SECS_PER_MIN 60
1284#define MINS_PER_HOUR 60
1285#define HOURS_PER_DAY 24
1286#define SECS_PER_HOUR (MINS_PER_HOUR * SECS_PER_MIN)
1287#define SECS_PER_DAY (HOURS_PER_DAY * SECS_PER_HOUR)
1288#define MINS_PER_DAY (HOURS_PER_DAY * MINS_PER_HOUR)
1290static const long dayInYearByMonth[12] =
1291 { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
1292static const long dayInLeapYearByMonth[12] =
1293 { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
1295#define DAY_IN_YEAR(day, month, year) \
1297 dayInLeapYearByMonth[month - 1] : \
1298 dayInYearByMonth[month - 1]) + day)
1313_xmlSchemaParseGYear (xmlSchemaValDatePtr dt,
const xmlChar **
str) {
1315 int isneg = 0, digcnt = 0;
1317 if (((*
cur <
'0') || (*
cur >
'9')) &&
1318 (*
cur !=
'-') && (*
cur !=
'+'))
1328 while ((*
cur >=
'0') && (*
cur <=
'9')) {
1343 if ((digcnt < 4) || ((digcnt > 4) && (*firstChar ==
'0')))
1347 dt->year = - dt->year;
1349 if (!VALID_YEAR(dt->year))
1367#define PARSE_2_DIGITS(num, cur, invalid) \
1368 if ((cur[0] < '0') || (cur[0] > '9') || \
1369 (cur[1] < '0') || (cur[1] > '9')) \
1372 num = (cur[0] - '0') * 10 + (cur[1] - '0'); \
1387#define PARSE_FLOAT(num, cur, invalid) \
1388 PARSE_2_DIGITS(num, cur, invalid); \
1389 if (!invalid && (*cur == '.')) { \
1392 if ((*cur < '0') || (*cur > '9')) \
1394 while ((*cur >= '0') && (*cur <= '9')) { \
1396 num += (*cur - '0') * mult; \
1413_xmlSchemaParseGMonth (xmlSchemaValDatePtr dt,
const xmlChar **
str) {
1416 unsigned int value = 0;
1422 if (!VALID_MONTH(
value))
1443_xmlSchemaParseGDay (xmlSchemaValDatePtr dt,
const xmlChar **
str) {
1446 unsigned int value = 0;
1452 if (!VALID_DAY(
value))
1473_xmlSchemaParseTime (xmlSchemaValDatePtr dt,
const xmlChar **
str) {
1493 if (!VALID_MIN(
value))
1501 PARSE_FLOAT(dt->sec,
cur,
ret);
1505 if (!VALID_TIME(dt))
1524_xmlSchemaParseTimeZone (xmlSchemaValDatePtr dt,
const xmlChar **
str) {
1546 int isneg = 0, tmp = 0;
1547 isneg = (*
cur ==
'-');
1551 PARSE_2_DIGITS(tmp,
cur,
ret);
1554 if (!VALID_HOUR(tmp))
1563 PARSE_2_DIGITS(tmp,
cur,
ret);
1566 if (!VALID_MIN(tmp))
1571 dt->tzo = - dt->tzo;
1573 if (!VALID_TZO(dt->tzo))
1596_xmlSchemaBase64Decode (
const xmlChar ch) {
1597 if ((
'A' <=
ch) && (
ch <=
'Z'))
return ch -
'A';
1598 if ((
'a' <=
ch) && (
ch <=
'z'))
return ch -
'a' + 26;
1599 if ((
'0' <=
ch) && (
ch <=
'9'))
return ch -
'0' + 52;
1600 if (
'+' ==
ch)
return 62;
1601 if (
'/' ==
ch)
return 63;
1602 if (
'=' ==
ch)
return 64;
1623#define PARSE_DIGITS(num, cur, num_type) \
1624 if ((*cur < '0') || (*cur > '9')) \
1627 while ((*cur >= '0') && (*cur <= '9')) { \
1628 num = num * 10 + (*cur - '0'); \
1645#define PARSE_NUM(num, cur, num_type) \
1647 PARSE_DIGITS(num, cur, num_type); \
1648 if (!num_type && (*cur == '.')) { \
1651 if ((*cur < '0') || (*cur > '9')) \
1655 while ((*cur >= '0') && (*cur <= '9')) { \
1657 num += (*cur - '0') * mult; \
1675xmlSchemaValidateDates (xmlSchemaValType
type,
1676 const xmlChar *dateTime, xmlSchemaValPtr *
val,
1682#define RETURN_TYPE_IF_VALID(t) \
1683 if (IS_TZO_CHAR(*cur)) { \
1684 ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur); \
1693 if (dateTime ==
NULL)
1697 while IS_WSP_BLANK_CH(*
cur)
cur++;
1699 if ((*
cur !=
'-') && (*
cur <
'0') && (*
cur >
'9'))
1702 dt = xmlSchemaNewValue(XML_SCHEMAS_UNKNOWN);
1706 if ((
cur[0] ==
'-') && (
cur[1] ==
'-')) {
1715 if (
type == XML_SCHEMAS_GMONTH)
1718 ret = _xmlSchemaParseGDay(&(dt->value.date), &
cur);
1722 RETURN_TYPE_IF_VALID(XML_SCHEMAS_GDAY);
1730 ret = _xmlSchemaParseGMonth(&(dt->value.date), &
cur);
1746 ret = _xmlSchemaParseGDay(&(dt->value.date), &
cur);
1747 if ((
ret == 0) && ((*
cur == 0) || (*
cur !=
':'))) {
1756 if (VALID_MDAY((&(dt->value.date)))) {
1758 RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTHDAY);
1771 RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTH);
1780 if ((*
cur >=
'0') && (*
cur <=
'9')) {
1781 ret = _xmlSchemaParseTime(&(dt->value.date), &
cur);
1784 RETURN_TYPE_IF_VALID(XML_SCHEMAS_TIME);
1791 ret = _xmlSchemaParseGYear(&(dt->value.date), &
cur);
1796 RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEAR);
1802 ret = _xmlSchemaParseGMonth(&(dt->value.date), &
cur);
1807 RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEARMONTH);
1813 ret = _xmlSchemaParseGDay(&(dt->value.date), &
cur);
1814 if ((
ret != 0) || !VALID_DATE((&(dt->value.date))))
1818 RETURN_TYPE_IF_VALID(XML_SCHEMAS_DATE);
1825 ret = _xmlSchemaParseTime(&(dt->value.date), &
cur);
1829 ret = _xmlSchemaParseTimeZone(&(dt->value.date), &
cur);
1831 while IS_WSP_BLANK_CH(*
cur)
cur++;
1832 if ((
ret != 0) || (*
cur != 0) || (!(VALID_DATETIME((&(dt->value.date))))))
1836 dt->type = XML_SCHEMAS_DATETIME;
1840 if ((
type != XML_SCHEMAS_UNKNOWN) && (
type != dt->type))
1847 if ((
type != XML_SCHEMAS_UNKNOWN) && (
type != dt->type)) {
1850 if ((
type == XML_SCHEMAS_TIME) && (dt->type == XML_SCHEMAS_TIME))
1853 if ((
type == XML_SCHEMAS_DATETIME) &&
1854 ((dt->type != XML_SCHEMAS_DATE) ||
1855 (dt->type != XML_SCHEMAS_GYEARMONTH) ||
1856 (dt->type != XML_SCHEMAS_GYEAR)))
1859 if ((
type == XML_SCHEMAS_DATE) &&
1860 ((dt->type != XML_SCHEMAS_GYEAR) ||
1861 (dt->type != XML_SCHEMAS_GYEARMONTH)))
1864 if ((
type == XML_SCHEMAS_GYEARMONTH) && (dt->type != XML_SCHEMAS_GYEAR))
1867 if ((
type == XML_SCHEMAS_GMONTHDAY) && (dt->type != XML_SCHEMAS_GMONTH))
1875 xmlSchemaFreeValue(dt);
1881 xmlSchemaFreeValue(dt);
1899 const xmlChar *duration, xmlSchemaValPtr *
val,
1902 xmlSchemaValPtr dur;
1904 unsigned int seq = 0;
1905 long days, secs = 0;
1906 double sec_frac = 0.0;
1908 if (duration ==
NULL)
1912 while IS_WSP_BLANK_CH(*
cur)
cur++;
1926 dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
1932 size_t has_digits = 0;
1934 const xmlChar desig[] = {
'Y',
'M',
'D',
'H',
'M',
'S'};
1937 if (seq >=
sizeof(desig))
1946 }
else if (seq == 3)
1950 while (*
cur >=
'0' && *
cur <=
'9') {
1969 while (*
cur >=
'0' && *
cur <=
'9') {
1971 sec_frac += (*
cur -
'0') * mult;
1977 while (*
cur != desig[seq]) {
1980 if (seq == 3 || seq ==
sizeof(desig))
1985 if (!has_digits || (has_frac && (seq != 5)))
2003 dur->value.dur.day =
num;
2008 if (dur->value.dur.day >
LONG_MAX - days)
2010 dur->
value.dur.day += days;
2015 days =
num / MINS_PER_DAY;
2016 if (dur->value.dur.day >
LONG_MAX - days)
2018 dur->
value.dur.day += days;
2019 secs += (
num % MINS_PER_DAY) * SECS_PER_MIN;
2023 days =
num / SECS_PER_DAY;
2024 if (dur->value.dur.day >
LONG_MAX - days)
2026 dur->
value.dur.day += days;
2027 secs +=
num % SECS_PER_DAY;
2034 days = secs / SECS_PER_DAY;
2035 if (dur->value.dur.day >
LONG_MAX - days)
2037 dur->
value.dur.day += days;
2038 dur->value.dur.sec = (secs % SECS_PER_DAY) + sec_frac;
2041 dur->value.dur.mon = -dur->value.dur.mon;
2042 dur->value.dur.day = -dur->value.dur.day;
2043 dur->value.dur.sec = -dur->value.dur.sec;
2049 xmlSchemaFreeValue(dur);
2055 xmlSchemaFreeValue(dur);
2099 while ((*
cur != 0) &&
2100 (((*
cur) != 0xd) && ((*
cur) != 0x9) && ((*
cur) != 0xa))) {
2109 if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) )
2112 }
while (*mcur != 0);
2137 }
else if ((*
end == 0xa) || (*
end == 0x9) || (*
end == 0xd)) {
2183 xmlSchemaValPtr *
ret, xmlNodePtr
node) {
2214 if (nb_values == 0) {
2220 while ((*
cur == 0) && (
cur != endval))
cur++;
2221 while (
cur != endval) {
2226 while ((*
cur == 0) && (
cur != endval))
cur++;
2251xmlSchemaParseUInt(
const xmlChar **
str,
unsigned long *llo,
2252 unsigned long *lmi,
unsigned long *lhi) {
2253 unsigned long lo = 0,
mi = 0, hi = 0;
2257 if (!((*
cur >=
'0') && (*
cur <=
'9')))
2260 while (*
cur ==
'0') {
2264 while ((*tmp != 0) && (*tmp >=
'0') && (*tmp <=
'9')) {
2272 hi = hi * 10 + (*
cur++ -
'0');
2276 mi =
mi * 10 + (*
cur++ -
'0');
2280 lo = lo * 10 + (*
cur++ -
'0');
2308 while (
cur[0] != 0) {
2309 if (!( ((
cur[0] >=
'a') && (
cur[0] <=
'z')) || ((
cur[0] >=
'A') && (
cur[0] <=
'Z'))
2313 if (
cur[0] ==
'-') {
2314 if ((
len < 1) || (
len > 8))
2323 if ((
len < 1) || (
len > 8))
2347 xmlSchemaWhitespaceValueType ws,
2348 int normOnTheFly,
int applyNorm,
int createStringValue)
2354 if ((xmlSchemaTypesInitialized == 0) &&
2355 (xmlSchemaInitTypes() < 0))
2371 if ((
type->builtInType != XML_SCHEMAS_STRING) &&
2372 (
type->builtInType != XML_SCHEMAS_ANYTYPE) &&
2373 (
type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) {
2374 if (
type->builtInType == XML_SCHEMAS_NORMSTRING)
2375 norm = xmlSchemaWhiteSpaceReplace(
value);
2383 switch (
type->builtInType) {
2384 case XML_SCHEMAS_UNKNOWN:
2386 case XML_SCHEMAS_ANYTYPE:
2387 case XML_SCHEMAS_ANYSIMPLETYPE:
2388 if ((createStringValue) && (
val !=
NULL)) {
2389 v = xmlSchemaNewValue(XML_SCHEMAS_ANYSIMPLETYPE);
2398 case XML_SCHEMAS_STRING:
2399 if (! normOnTheFly) {
2402 if (ws == XML_SCHEMA_WHITESPACE_REPLACE) {
2404 if ((*
cur == 0xd) || (*
cur == 0xa) || (*
cur == 0x9)) {
2410 }
else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
2412 if ((*
cur == 0xd) || (*
cur == 0xa) || (*
cur == 0x9)) {
2414 }
else if IS_WSP_SPACE_CH(*
cur) {
2416 if IS_WSP_SPACE_CH(*
cur)
2424 if (createStringValue && (
val !=
NULL)) {
2426 if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
2428 else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
2429 norm = xmlSchemaWhiteSpaceReplace(
value);
2433 v = xmlSchemaNewValue(XML_SCHEMAS_STRING);
2442 case XML_SCHEMAS_NORMSTRING:{
2445 if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
2448 norm = xmlSchemaWhiteSpaceReplace(
value);
2455 if ((*
cur == 0xd) || (*
cur == 0xa) || (*
cur == 0x9)) {
2463 v = xmlSchemaNewValue(XML_SCHEMAS_NORMSTRING);
2473 case XML_SCHEMAS_DECIMAL:{
2475 unsigned int len, neg, integ, hasLeadingZeroes;
2486 while IS_WSP_BLANK_CH(*
cur)
cur++;
2495 }
else if (*
cur ==
'+')
2510 hasLeadingZeroes = 0;
2514 while (*
cur ==
'0') {
2516 hasLeadingZeroes = 1;
2520 if ((*
cur >=
'0') && (*
cur <=
'9')) {
2523 }
else if (*
cur ==
'.') {
2527 if ((*
cur >=
'0') && (*
cur <=
'9')) {
2536 if ((
len == 0) && (!hasLeadingZeroes))
2544 while IS_WSP_BLANK_CH(*
cur)
cur++;
2548 v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL);
2560 while ((
len != integ) && (*(cptr-1) ==
'0')) {
2572 xmlSchemaParseUInt((
const xmlChar **)&cptr,
2573 &
v->value.decimal.lo,
2574 &
v->value.decimal.mi,
2575 &
v->value.decimal.hi);
2581 v->value.decimal.sign = neg;
2584 v->value.decimal.total = 1;
2586 v->value.decimal.total =
len;
2588 v->value.decimal.frac = 0;
2590 v->value.decimal.frac =
len - integ;
2597 case XML_SCHEMAS_TIME:
2598 case XML_SCHEMAS_GDAY:
2599 case XML_SCHEMAS_GMONTH:
2600 case XML_SCHEMAS_GMONTHDAY:
2601 case XML_SCHEMAS_GYEAR:
2602 case XML_SCHEMAS_GYEARMONTH:
2603 case XML_SCHEMAS_DATE:
2604 case XML_SCHEMAS_DATETIME:
2608 case XML_SCHEMAS_DURATION:
2612 case XML_SCHEMAS_FLOAT:
2613 case XML_SCHEMAS_DOUBLE: {
2616 int digits_before = 0;
2617 int digits_after = 0;
2620 while IS_WSP_BLANK_CH(*
cur)
cur++;
2622 if ((
cur[0] ==
'N') && (
cur[1] ==
'a') && (
cur[2] ==
'N')) {
2627 if (
type == xmlSchemaTypeFloatDef) {
2628 v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
2630 v->value.f = (
float) xmlXPathNAN;
2632 xmlSchemaFreeValue(
v);
2636 v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
2638 v->value.d = xmlXPathNAN;
2640 xmlSchemaFreeValue(
v);
2652 if ((
cur[0] ==
'I') && (
cur[1] ==
'N') && (
cur[2] ==
'F')) {
2657 if (
type == xmlSchemaTypeFloatDef) {
2658 v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
2661 v->value.f = (
float) xmlXPathNINF;
2663 v->value.f = (
float) xmlXPathPINF;
2665 xmlSchemaFreeValue(
v);
2669 v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
2672 v->value.d = xmlXPathNINF;
2674 v->value.d = xmlXPathPINF;
2676 xmlSchemaFreeValue(
v);
2684 if ((neg == 0) && (*
cur ==
'+'))
2686 if ((
cur[0] == 0) || (
cur[0] ==
'+') || (
cur[0] ==
'-'))
2688 while ((*
cur >=
'0') && (*
cur <=
'9')) {
2694 while ((*
cur >=
'0') && (*
cur <=
'9')) {
2699 if ((digits_before == 0) && (digits_after == 0))
2701 if ((*
cur ==
'e') || (*
cur ==
'E')) {
2703 if ((*
cur ==
'-') || (*
cur ==
'+'))
2705 while ((*
cur >=
'0') && (*
cur <=
'9'))
2709 while IS_WSP_BLANK_CH(*
cur)
cur++;
2714 if (
type == xmlSchemaTypeFloatDef) {
2715 v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
2723 &(
v->value.f)) == 1) {
2726 xmlSchemaFreeValue(
v);
2733 v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
2740 &(
v->value.d)) == 1) {
2743 xmlSchemaFreeValue(
v);
2753 case XML_SCHEMAS_BOOLEAN:{
2757 while IS_WSP_BLANK_CH(*
cur)
cur++;
2761 }
else if (*
cur ==
'1') {
2764 }
else if (*
cur ==
't') {
2766 if ((*
cur++ ==
'r') && (*
cur++ ==
'u') &&
2771 }
else if (*
cur ==
'f') {
2773 if ((*
cur++ ==
'a') && (*
cur++ ==
'l') &&
2774 (*
cur++ ==
's') && (*
cur++ ==
'e')) {
2781 while IS_WSP_BLANK_CH(*
cur)
cur++;
2786 if ((
cur[0] ==
'0') && (
cur[1] == 0))
2788 else if ((
cur[0] ==
'1') && (
cur[1] == 0))
2790 else if ((
cur[0] ==
't') && (
cur[1] ==
'r')
2791 && (
cur[2] ==
'u') && (
cur[3] ==
'e')
2794 else if ((
cur[0] ==
'f') && (
cur[1] ==
'a')
2795 && (
cur[2] ==
'l') && (
cur[3] ==
's')
2796 && (
cur[4] ==
'e') && (
cur[5] == 0))
2802 v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN);
2812 case XML_SCHEMAS_TOKEN:{
2815 if (! normOnTheFly) {
2817 if ((*
cur == 0xd) || (*
cur == 0xa) || (*
cur == 0x9)) {
2819 }
else if (*
cur ==
' ') {
2831 v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);
2841 case XML_SCHEMAS_LANGUAGE:
2842 if ((
norm ==
NULL) && (normOnTheFly)) {
2848 if (xmlSchemaCheckLanguageType(
value) == 1) {
2850 v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE);
2861 case XML_SCHEMAS_NMTOKEN:
2862 if (xmlValidateNMToken(
value, 1) == 0) {
2864 v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN);
2875 case XML_SCHEMAS_NMTOKENS:
2876 ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef,
2883 case XML_SCHEMAS_NAME:
2886 v = xmlSchemaNewValue(XML_SCHEMAS_NAME);
2899 case XML_SCHEMAS_QNAME:{
2924 v = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
2942 case XML_SCHEMAS_NCNAME:
2945 v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME);
2954 case XML_SCHEMAS_ID:
2957 v = xmlSchemaNewValue(XML_SCHEMAS_ID);
2966 (
node->type == XML_ATTRIBUTE_NODE)) {
2967 xmlAttrPtr
attr = (xmlAttrPtr)
node;
2972 if (
attr->atype != XML_ATTRIBUTE_ID) {
2976 strip = xmlSchemaStrip(
value);
2977 if (strip !=
NULL) {
2985 attr->atype = XML_ATTRIBUTE_ID;
2990 case XML_SCHEMAS_IDREF:
2993 v = xmlSchemaNewValue(XML_SCHEMAS_IDREF);
3000 (
node->type == XML_ATTRIBUTE_NODE)) {
3001 xmlAttrPtr
attr = (xmlAttrPtr)
node;
3004 strip = xmlSchemaStrip(
value);
3005 if (strip !=
NULL) {
3010 attr->atype = XML_ATTRIBUTE_IDREF;
3013 case XML_SCHEMAS_IDREFS:
3014 ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef,
3021 (
node->type == XML_ATTRIBUTE_NODE)) {
3022 xmlAttrPtr
attr = (xmlAttrPtr)
node;
3024 attr->atype = XML_ATTRIBUTE_IDREFS;
3027 case XML_SCHEMAS_ENTITY:{
3036 strip = xmlSchemaStrip(
value);
3037 if (strip !=
NULL) {
3043 if ((ent ==
NULL) ||
3052 (
node->type == XML_ATTRIBUTE_NODE)) {
3053 xmlAttrPtr
attr = (xmlAttrPtr)
node;
3055 attr->atype = XML_ATTRIBUTE_ENTITY;
3059 case XML_SCHEMAS_ENTITIES:
3062 ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef,
3069 (
node->type == XML_ATTRIBUTE_NODE)) {
3070 xmlAttrPtr
attr = (xmlAttrPtr)
node;
3072 attr->atype = XML_ATTRIBUTE_ENTITIES;
3075 case XML_SCHEMAS_NOTATION:{
3108 v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
3111 v->value.qname.name =
local;
3115 v->value.qname.uri =
uri;
3128 case XML_SCHEMAS_ANYURI:{
3132 if ((
norm ==
NULL) && (normOnTheFly)) {
3141 if (*cur < 32 || *cur >= 127 || *
cur ==
' ' ||
3142 *
cur ==
'<' || *
cur ==
'>' || *
cur ==
'"' ||
3143 *
cur ==
'{' || *
cur ==
'}' || *
cur ==
'|' ||
3144 *
cur ==
'\\' || *
cur ==
'^' || *
cur ==
'`' ||
3156 v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI);
3164 case XML_SCHEMAS_HEXBINARY:{
3173 while IS_WSP_BLANK_CH(*
cur)
cur++;
3176 while (((*
cur >=
'0') && (*
cur <=
'9')) ||
3177 ((*
cur >=
'A') && (*
cur <=
'F')) ||
3178 ((*
cur >=
'a') && (*
cur <=
'f'))) {
3183 while IS_WSP_BLANK_CH(*
cur)
cur++;
3192 v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY);
3201 xmlSchemaTypeErrMemory(
node,
"allocating hexbin data");
3216 v->value.hex.total =
total;
3221 case XML_SCHEMAS_BASE64BINARY:{
3239 int total,
i = 0, pad = 0;
3247 decc = _xmlSchemaBase64Decode(*
cur);
3257 decc = _xmlSchemaBase64Decode(*
cur);
3290 }
else if (pad == 1) {
3295 for (decc = _xmlSchemaBase64Decode(*
cur);
3296 (decc < 0) || (decc > 63);
3297 decc = _xmlSchemaBase64Decode(*
cur))
3304 }
else if (pad == 2) {
3309 for (decc = _xmlSchemaBase64Decode(*
cur);
3310 (decc < 0) || (decc > 63);
3311 decc = _xmlSchemaBase64Decode(*
cur))
3322 v = xmlSchemaNewValue(XML_SCHEMAS_BASE64BINARY);
3328 xmlSchemaTypeErrMemory(
node,
"allocating base64 data");
3332 v->value.base64.str =
base;
3334 if (_xmlSchemaBase64Decode(*
cur) >= 0) {
3339 v->value.base64.total =
total;
3344 case XML_SCHEMAS_INTEGER:
3345 case XML_SCHEMAS_PINTEGER:
3346 case XML_SCHEMAS_NPINTEGER:
3347 case XML_SCHEMAS_NINTEGER:
3348 case XML_SCHEMAS_NNINTEGER:{
3350 unsigned long lo,
mi, hi;
3356 while IS_WSP_BLANK_CH(*
cur)
cur++;
3360 }
else if (*
cur ==
'+')
3362 ret = xmlSchemaParseUInt(&
cur, &lo, &
mi, &hi);
3366 while IS_WSP_BLANK_CH(*
cur)
cur++;
3369 if (
type->builtInType == XML_SCHEMAS_NPINTEGER) {
3371 ((hi != 0) || (
mi != 0) || (lo != 0)))
3373 }
else if (
type->builtInType == XML_SCHEMAS_PINTEGER) {
3376 if ((hi == 0) && (
mi == 0) && (lo == 0))
3378 }
else if (
type->builtInType == XML_SCHEMAS_NINTEGER) {
3381 if ((hi == 0) && (
mi == 0) && (lo == 0))
3383 }
else if (
type->builtInType == XML_SCHEMAS_NNINTEGER) {
3385 ((hi != 0) || (
mi != 0) || (lo != 0)))
3389 v = xmlSchemaNewValue(
type->builtInType);
3393 v->value.decimal.lo = lo;
3394 v->value.decimal.mi =
mi;
3395 v->value.decimal.hi = hi;
3396 v->value.decimal.sign =
sign;
3397 v->
value.decimal.frac = 0;
3398 v->value.decimal.total =
ret;
3404 case XML_SCHEMAS_LONG:
3405 case XML_SCHEMAS_BYTE:
3406 case XML_SCHEMAS_SHORT:
3407 case XML_SCHEMAS_INT:{
3409 unsigned long lo,
mi, hi;
3415 while IS_WSP_BLANK_CH(*
cur)
cur++;
3419 }
else if (*
cur ==
'+')
3421 ret = xmlSchemaParseUInt(&
cur, &lo, &
mi, &hi);
3425 while IS_WSP_BLANK_CH(*
cur)
cur++;
3428 if (
type->builtInType == XML_SCHEMAS_LONG) {
3432 if (
mi >= 33720368) {
3435 if ((
sign == 0) && (lo > 54775807))
3437 if ((
sign == 1) && (lo > 54775808))
3441 }
else if (
type->builtInType == XML_SCHEMAS_INT) {
3447 if ((
sign == 0) && (lo > 47483647))
3449 if ((
sign == 1) && (lo > 47483648))
3452 }
else if (
type->builtInType == XML_SCHEMAS_SHORT) {
3453 if ((
mi != 0) || (hi != 0))
3455 if ((
sign == 1) && (lo > 32768))
3457 if ((
sign == 0) && (lo > 32767))
3459 }
else if (
type->builtInType == XML_SCHEMAS_BYTE) {
3460 if ((
mi != 0) || (hi != 0))
3462 if ((
sign == 1) && (lo > 128))
3464 if ((
sign == 0) && (lo > 127))
3468 v = xmlSchemaNewValue(
type->builtInType);
3470 v->value.decimal.lo = lo;
3471 v->value.decimal.mi =
mi;
3472 v->value.decimal.hi = hi;
3473 v->value.decimal.sign =
sign;
3474 v->
value.decimal.frac = 0;
3475 v->value.decimal.total =
ret;
3481 case XML_SCHEMAS_UINT:
3482 case XML_SCHEMAS_ULONG:
3483 case XML_SCHEMAS_USHORT:
3484 case XML_SCHEMAS_UBYTE:{
3486 unsigned long lo,
mi, hi;
3491 while IS_WSP_BLANK_CH(*
cur)
cur++;
3492 ret = xmlSchemaParseUInt(&
cur, &lo, &
mi, &hi);
3496 while IS_WSP_BLANK_CH(*
cur)
cur++;
3499 if (
type->builtInType == XML_SCHEMAS_ULONG) {
3503 if (
mi >= 67440737) {
3510 }
else if (
type->builtInType == XML_SCHEMAS_UINT) {
3519 }
else if (
type->builtInType == XML_SCHEMAS_USHORT) {
3520 if ((
mi != 0) || (hi != 0))
3524 }
else if (
type->builtInType == XML_SCHEMAS_UBYTE) {
3525 if ((
mi != 0) || (hi != 0))
3531 v = xmlSchemaNewValue(
type->builtInType);
3533 v->value.decimal.lo = lo;
3534 v->value.decimal.mi =
mi;
3535 v->value.decimal.hi = hi;
3536 v->value.decimal.sign = 0;
3537 v->value.decimal.frac = 0;
3538 v->value.decimal.total =
ret;
3583 xmlSchemaValPtr *
val, xmlNodePtr
node) {
3585 XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 1, 0));
3603xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr
type,
const xmlChar *
value,
3604 xmlSchemaValPtr *
val, xmlNodePtr
node) {
3606 XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 0, 1));
3622xmlSchemaValidatePredefinedType(xmlSchemaTypePtr
type,
const xmlChar *
value,
3623 xmlSchemaValPtr *
val) {
3637xmlSchemaCompareDecimals(xmlSchemaValPtr
x, xmlSchemaValPtr
y)
3639 xmlSchemaValPtr swp;
3640 int order = 1, integx, integy, dlen;
3641 unsigned long hi,
mi, lo;
3646 if ((
x->value.decimal.sign) &&
3647 ((
x->value.decimal.lo != 0) ||
3648 (
x->value.decimal.mi != 0) ||
3649 (
x->value.decimal.hi != 0))) {
3653 if ((
y->value.decimal.sign) &&
3654 ((
y->value.decimal.lo != 0) ||
3655 (
y->value.decimal.mi != 0) ||
3656 (
y->value.decimal.hi != 0)))
3666 }
else if ((
y->value.decimal.sign) &&
3667 ((
y->value.decimal.lo != 0) ||
3668 (
y->value.decimal.mi != 0) ||
3669 (
y->value.decimal.hi != 0))) {
3679 integx =
x->value.decimal.total -
x->value.decimal.frac;
3680 integy =
y->value.decimal.total -
y->value.decimal.frac;
3692 if (
x->value.decimal.lo == 0) {
3695 else if (
y->value.decimal.lo != 0)
3702 if (
y->value.decimal.lo == 0) {
3705 else if (
x->value.decimal.lo != 0)
3712 if (integx > integy)
3714 else if (integy > integx)
3725 dlen =
x->value.decimal.total -
y->value.decimal.total;
3728 hi =
y->value.decimal.hi;
3729 mi =
y->value.decimal.mi;
3730 lo =
y->value.decimal.lo;
3735 hi =
x->value.decimal.hi;
3736 mi =
x->value.decimal.mi;
3737 lo =
x->value.decimal.lo;
3746 unsigned long rem1, rem2;
3747 rem1 = (hi % 10) * 100000000L;
3749 rem2 = (
mi % 10) * 100000000L;
3750 mi = (
mi + rem1) / 10;
3751 lo = (lo + rem2) / 10;
3754 if (hi > swp->value.decimal.hi) {
3756 }
else if (hi == swp->value.decimal.hi) {
3757 if (
mi > swp->value.decimal.mi) {
3759 }
else if (
mi == swp->value.decimal.mi) {
3760 if (lo > swp->value.decimal.lo) {
3762 }
else if (lo == swp->value.decimal.lo) {
3763 if (
x->value.decimal.total ==
y->value.decimal.total) {
3785xmlSchemaCompareDurations(xmlSchemaValPtr
x, xmlSchemaValPtr
y)
3787 long carry, mon,
day;
3790 long xmon, xday, myear, minday, maxday;
3791 static const long dayRange [2][12] = {
3792 { 0, 28, 59, 89, 120, 150, 181, 212, 242, 273, 303, 334, },
3793 { 0, 31, 62, 92, 123, 153, 184, 215, 245, 276, 306, 337} };
3799 mon =
x->value.dur.mon -
y->value.dur.mon;
3802 sec =
x->value.dur.sec -
y->value.dur.sec;
3803 carry = (
long)(sec / SECS_PER_DAY);
3804 sec -= ((
double)carry) * SECS_PER_DAY;
3807 day =
x->value.dur.day -
y->value.dur.day + carry;
3825 if ((
day >= 0) && (sec >= 0.0))
3831 }
else if ((
day <= 0) && (sec <= 0.0)) {
3848 maxday = 365 * myear + (myear + 3) / 4;
3850 minday = maxday - 1;
3854 minday += dayRange[0][xmon];
3855 maxday += dayRange[1][xmon];
3857 if ((maxday == minday) && (maxday == xday))
3871#define FQUOTIENT(a,b) (floor(((double)a/(double)b)))
3872#define MODULO(a,b) (a - FQUOTIENT(a,b) * b)
3873#define FQUOTIENT_RANGE(a,low,high) (FQUOTIENT((a-low),(high-low)))
3874#define MODULO_RANGE(a,low,high) ((MODULO((a-low),(high-low)))+low)
3885static xmlSchemaValPtr
3886xmlSchemaDupVal (xmlSchemaValPtr
v)
3888 xmlSchemaValPtr
ret = xmlSchemaNewValue(
v->type);
3906xmlSchemaCopyValue(xmlSchemaValPtr
val)
3914 switch (
val->type) {
3915 case XML_SCHEMAS_ANYTYPE:
3916 case XML_SCHEMAS_IDREFS:
3917 case XML_SCHEMAS_ENTITIES:
3918 case XML_SCHEMAS_NMTOKENS:
3919 xmlSchemaFreeValue(
ret);
3921 case XML_SCHEMAS_ANYSIMPLETYPE:
3922 case XML_SCHEMAS_STRING:
3923 case XML_SCHEMAS_NORMSTRING:
3924 case XML_SCHEMAS_TOKEN:
3925 case XML_SCHEMAS_LANGUAGE:
3926 case XML_SCHEMAS_NAME:
3927 case XML_SCHEMAS_NCNAME:
3928 case XML_SCHEMAS_ID:
3929 case XML_SCHEMAS_IDREF:
3930 case XML_SCHEMAS_ENTITY:
3931 case XML_SCHEMAS_NMTOKEN:
3932 case XML_SCHEMAS_ANYURI:
3933 cur = xmlSchemaDupVal(
val);
3937 case XML_SCHEMAS_QNAME:
3938 case XML_SCHEMAS_NOTATION:
3939 cur = xmlSchemaDupVal(
val);
3940 if (
val->value.qname.name !=
NULL)
3941 cur->value.qname.name =
3943 if (
val->value.qname.uri !=
NULL)
3944 cur->value.qname.uri =
3947 case XML_SCHEMAS_HEXBINARY:
3948 cur = xmlSchemaDupVal(
val);
3949 if (
val->value.hex.str !=
NULL)
3952 case XML_SCHEMAS_BASE64BINARY:
3953 cur = xmlSchemaDupVal(
val);
3954 if (
val->value.base64.str !=
NULL)
3955 cur->value.base64.str =
3959 cur = xmlSchemaDupVal(
val);
3984static xmlSchemaValPtr
3985_xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
3987 xmlSchemaValPtr
ret, tmp;
3988 long carry, tempdays,
temp;
3989 xmlSchemaValDatePtr
r,
d;
3990 xmlSchemaValDurationPtr
u;
3995 ret = xmlSchemaNewValue(dt->type);
4000 tmp = xmlSchemaDupVal(dt);
4002 xmlSchemaFreeValue(
ret);
4006 r = &(
ret->value.date);
4007 d = &(tmp->value.date);
4008 u = &(dur->value.dur);
4015 u->sec -= (
d->tzo * 60);
4023 carry =
d->mon +
u->mon;
4024 r->mon = (
unsigned int) MODULO_RANGE(carry, 1, 13);
4025 carry = (
long) FQUOTIENT_RANGE(carry, 1, 13);
4028 r->year =
d->year + carry;
4038 r->tz_flag =
d->tz_flag;
4041 r->sec =
d->sec +
u->sec;
4042 carry = (
long) FQUOTIENT((
long)
r->sec, 60);
4043 if (
r->sec != 0.0) {
4044 r->sec = MODULO(
r->sec, 60.0);
4049 r->min = (
unsigned int) MODULO(carry, 60);
4050 carry = (
long) FQUOTIENT(carry, 60);
4054 r->hour = (
unsigned int) MODULO(carry, 24);
4055 carry = (
long)FQUOTIENT(carry, 24);
4062 if ((VALID_YEAR(
r->year)) && (VALID_MONTH(
r->mon)) &&
4063 (
d->day > MAX_DAYINMONTH(
r->year,
r->mon)))
4064 tempdays = MAX_DAYINMONTH(
r->year,
r->mon);
4065 else if (
d->day < 1)
4070 tempdays +=
u->day + carry;
4074 long tmon = (
long) MODULO_RANGE((
int)
r->mon-1, 1, 13);
4075 long tyr =
r->year + (
long)FQUOTIENT_RANGE((
int)
r->mon-1, 1, 13);
4086 tempdays += MAX_DAYINMONTH(tyr, tmon);
4088 }
else if (VALID_YEAR(
r->year) && VALID_MONTH(
r->mon) &&
4089 tempdays > (
long) MAX_DAYINMONTH(
r->year,
r->mon)) {
4090 tempdays = tempdays - MAX_DAYINMONTH(
r->year,
r->mon);
4095 temp =
r->mon + carry;
4096 r->mon = (
unsigned int) MODULO_RANGE(
temp, 1, 13);
4097 r->year =
r->year + (
long) FQUOTIENT_RANGE(
temp, 1, 13);
4111 if (
ret->type != XML_SCHEMAS_DATETIME) {
4112 if ((
r->hour) || (
r->min) || (
r->sec))
4113 ret->type = XML_SCHEMAS_DATETIME;
4114 else if (
ret->type != XML_SCHEMAS_DATE) {
4115 if ((
r->mon != 1) && (
r->day != 1))
4116 ret->type = XML_SCHEMAS_DATE;
4117 else if ((
ret->type != XML_SCHEMAS_GYEARMONTH) && (
r->mon != 1))
4118 ret->type = XML_SCHEMAS_GYEARMONTH;
4122 xmlSchemaFreeValue(tmp);
4137static xmlSchemaValPtr
4138xmlSchemaDateNormalize (xmlSchemaValPtr dt,
double offset)
4140 xmlSchemaValPtr dur,
ret;
4145 if (((dt->type != XML_SCHEMAS_TIME) &&
4146 (dt->type != XML_SCHEMAS_DATETIME) &&
4147 (dt->type != XML_SCHEMAS_DATE)) || (dt->value.date.tzo == 0))
4148 return xmlSchemaDupVal(dt);
4150 dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
4156 ret = _xmlSchemaDateAdd(dt, dur);
4160 xmlSchemaFreeValue(dur);
4178_xmlSchemaDateCastYMToDays (
const xmlSchemaValPtr dt)
4183 mon = dt->value.date.mon;
4184 if (mon <= 0) mon = 1;
4186 if (dt->value.date.year <= 0)
4187 ret = (dt->value.date.year * 365) +
4188 (((dt->value.date.year+1)/4)-((dt->value.date.year+1)/100)+
4189 ((dt->value.date.year+1)/400)) +
4190 DAY_IN_YEAR(0, mon, dt->value.date.year);
4192 ret = ((dt->value.date.year-1) * 365) +
4193 (((dt->value.date.year-1)/4)-((dt->value.date.year-1)/100)+
4194 ((dt->value.date.year-1)/400)) +
4195 DAY_IN_YEAR(0, mon, dt->value.date.year);
4208#define TIME_TO_NUMBER(dt) \
4209 ((double)((dt->value.date.hour * SECS_PER_HOUR) + \
4210 (dt->value.date.min * SECS_PER_MIN) + \
4211 (dt->value.date.tzo * SECS_PER_MIN)) + \
4225xmlSchemaCompareDates (xmlSchemaValPtr
x, xmlSchemaValPtr
y)
4227 unsigned char xmask, ymask, xor_mask, and_mask;
4228 xmlSchemaValPtr p1, p2, q1, q2;
4229 long p1d, p2d, q1d, q2d;
4234 if ((
x->value.date.year >
LONG_MAX / 366) ||
4235 (
x->value.date.year <
LONG_MIN / 366) ||
4236 (
y->value.date.year >
LONG_MAX / 366) ||
4237 (
y->value.date.year <
LONG_MIN / 366)) {
4242 if (
x->value.date.tz_flag) {
4244 if (!
y->value.date.tz_flag) {
4245 p1 = xmlSchemaDateNormalize(
x, 0);
4248 p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
4250 q1 = xmlSchemaDateNormalize(
y, (14 * SECS_PER_HOUR));
4252 xmlSchemaFreeValue(p1);
4256 q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
4258 xmlSchemaFreeValue(p1);
4259 xmlSchemaFreeValue(q1);
4261 }
else if (p1d == q1d) {
4264 sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
4266 xmlSchemaFreeValue(p1);
4267 xmlSchemaFreeValue(q1);
4272 q2 = xmlSchemaDateNormalize(
y, -(14 * SECS_PER_HOUR));
4274 xmlSchemaFreeValue(p1);
4275 xmlSchemaFreeValue(q1);
4278 q2d = _xmlSchemaDateCastYMToDays(q2) + q2->value.date.day;
4281 else if (p1d == q2d) {
4282 sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q2);
4288 xmlSchemaFreeValue(p1);
4289 xmlSchemaFreeValue(q1);
4290 xmlSchemaFreeValue(q2);
4295 xmlSchemaFreeValue(p1);
4296 xmlSchemaFreeValue(q1);
4299 }
else if (
y->value.date.tz_flag) {
4300 q1 = xmlSchemaDateNormalize(
y, 0);
4303 q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
4306 p1 = xmlSchemaDateNormalize(
x, -(14 * SECS_PER_HOUR));
4308 xmlSchemaFreeValue(q1);
4311 p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
4314 xmlSchemaFreeValue(p1);
4315 xmlSchemaFreeValue(q1);
4317 }
else if (p1d == q1d) {
4320 sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
4322 xmlSchemaFreeValue(p1);
4323 xmlSchemaFreeValue(q1);
4328 p2 = xmlSchemaDateNormalize(
x, (14 * SECS_PER_HOUR));
4330 xmlSchemaFreeValue(p1);
4331 xmlSchemaFreeValue(q1);
4334 p2d = _xmlSchemaDateCastYMToDays(p2) + p2->value.date.day;
4338 }
else if (p2d == q1d) {
4339 sec = TIME_TO_NUMBER(p2) - TIME_TO_NUMBER(q1);
4345 xmlSchemaFreeValue(p1);
4346 xmlSchemaFreeValue(q1);
4347 xmlSchemaFreeValue(p2);
4352 xmlSchemaFreeValue(p1);
4353 xmlSchemaFreeValue(q1);
4360 if (
x->type ==
y->type) {
4362 q1 = xmlSchemaDateNormalize(
y, 0);
4365 q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
4367 p1 = xmlSchemaDateNormalize(
x, 0);
4369 xmlSchemaFreeValue(q1);
4372 p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
4376 }
else if (p1d > q1d) {
4381 sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
4388 xmlSchemaFreeValue(p1);
4389 xmlSchemaFreeValue(q1);
4394 case XML_SCHEMAS_DATETIME:
4397 case XML_SCHEMAS_DATE:
4400 case XML_SCHEMAS_GYEAR:
4403 case XML_SCHEMAS_GMONTH:
4406 case XML_SCHEMAS_GDAY:
4409 case XML_SCHEMAS_GYEARMONTH:
4412 case XML_SCHEMAS_GMONTHDAY:
4415 case XML_SCHEMAS_TIME:
4424 case XML_SCHEMAS_DATETIME:
4427 case XML_SCHEMAS_DATE:
4430 case XML_SCHEMAS_GYEAR:
4433 case XML_SCHEMAS_GMONTH:
4436 case XML_SCHEMAS_GDAY:
4439 case XML_SCHEMAS_GYEARMONTH:
4442 case XML_SCHEMAS_GMONTHDAY:
4445 case XML_SCHEMAS_TIME:
4453 xor_mask = xmask ^ ymask;
4454 and_mask = xmask & ymask;
4459 else if (and_mask & 1) {
4460 if (
x->value.date.year <
y->value.date.year)
4462 else if (
x->value.date.year >
y->value.date.year)
4469 else if (and_mask & 2) {
4470 if (
x->value.date.mon <
y->value.date.mon)
4472 else if (
x->value.date.mon >
y->value.date.mon)
4479 else if (and_mask & 4) {
4480 if (
x->value.date.day <
y->value.date.day)
4482 else if (
x->value.date.day >
y->value.date.day)
4489 else if (and_mask & 8) {
4490 if (
x->value.date.hour <
y->value.date.hour)
4492 else if (
x->value.date.hour >
y->value.date.hour)
4494 else if (
x->value.date.min <
y->value.date.min)
4496 else if (
x->value.date.min >
y->value.date.min)
4498 else if (
x->value.date.sec <
y->value.date.sec)
4500 else if (
x->value.date.sec >
y->value.date.sec)
4522xmlSchemaComparePreserveReplaceStrings(
const xmlChar *
x,
4528 while ((*
x != 0) && (*
y != 0)) {
4529 if (IS_WSP_REPLACE_CH(*
y)) {
4530 if (! IS_WSP_SPACE_CH(*
x)) {
4531 if ((*
x - 0x20) < 0) {
4590xmlSchemaComparePreserveCollapseStrings(
const xmlChar *
x,
4599 while IS_WSP_BLANK_CH(*
y)
4602 while ((*
x != 0) && (*
y != 0)) {
4603 if IS_WSP_BLANK_CH(*
y) {
4604 if (! IS_WSP_SPACE_CH(*
x)) {
4608 if ((*
x - 0x20) < 0) {
4625 while IS_WSP_BLANK_CH(*
y)
4653 while IS_WSP_BLANK_CH(*
y)
4679xmlSchemaCompareReplaceCollapseStrings(
const xmlChar *
x,
4688 while IS_WSP_BLANK_CH(*
y)
4691 while ((*
x != 0) && (*
y != 0)) {
4692 if IS_WSP_BLANK_CH(*
y) {
4693 if (! IS_WSP_BLANK_CH(*
x)) {
4697 if ((*
x - 0x20) < 0) {
4714 while IS_WSP_BLANK_CH(*
y)
4717 if IS_WSP_BLANK_CH(*
x) {
4721 if ((0x20 - *
y) < 0) {
4750 while IS_WSP_BLANK_CH(*
y)
4774xmlSchemaCompareReplacedStrings(
const xmlChar *
x,
4779 while ((*
x != 0) && (*
y != 0)) {
4780 if IS_WSP_BLANK_CH(*
y) {
4781 if (! IS_WSP_BLANK_CH(*
x)) {
4782 if ((*
x - 0x20) < 0)
4788 if IS_WSP_BLANK_CH(*
x) {
4789 if ((0x20 - *
y) < 0)
4821xmlSchemaCompareNormStrings(
const xmlChar *
x,
4827 while ((*
x != 0) && (*
y != 0)) {
4867xmlSchemaCompareFloats(xmlSchemaValPtr
x, xmlSchemaValPtr
y) {
4876 if (
x->type == XML_SCHEMAS_DOUBLE)
4878 else if (
x->type == XML_SCHEMAS_FLOAT)
4883 if (
y->type == XML_SCHEMAS_DOUBLE)
4885 else if (
y->type == XML_SCHEMAS_FLOAT)
4893 if (xmlXPathIsNaN(d1)) {
4894 if (xmlXPathIsNaN(d2))
4898 if (xmlXPathIsNaN(d2))
4900 if (d1 == xmlXPathPINF) {
4901 if (d2 == xmlXPathPINF)
4905 if (d2 == xmlXPathPINF)
4907 if (d1 == xmlXPathNINF) {
4908 if (d2 == xmlXPathNINF)
4912 if (d2 == xmlXPathNINF)
4944xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
4947 xmlSchemaWhitespaceValueType xws,
4948 xmlSchemaValType ytype,
4951 xmlSchemaWhitespaceValueType yws)
4954 case XML_SCHEMAS_UNKNOWN:
4955 case XML_SCHEMAS_ANYTYPE:
4957 case XML_SCHEMAS_INTEGER:
4958 case XML_SCHEMAS_NPINTEGER:
4959 case XML_SCHEMAS_NINTEGER:
4960 case XML_SCHEMAS_NNINTEGER:
4961 case XML_SCHEMAS_PINTEGER:
4962 case XML_SCHEMAS_INT:
4963 case XML_SCHEMAS_UINT:
4964 case XML_SCHEMAS_LONG:
4965 case XML_SCHEMAS_ULONG:
4966 case XML_SCHEMAS_SHORT:
4967 case XML_SCHEMAS_USHORT:
4968 case XML_SCHEMAS_BYTE:
4969 case XML_SCHEMAS_UBYTE:
4970 case XML_SCHEMAS_DECIMAL:
4974 return(xmlSchemaCompareDecimals(
x,
y));
4975 if ((ytype == XML_SCHEMAS_DECIMAL) ||
4976 (ytype == XML_SCHEMAS_INTEGER) ||
4977 (ytype == XML_SCHEMAS_NPINTEGER) ||
4978 (ytype == XML_SCHEMAS_NINTEGER) ||
4979 (ytype == XML_SCHEMAS_NNINTEGER) ||
4980 (ytype == XML_SCHEMAS_PINTEGER) ||
4981 (ytype == XML_SCHEMAS_INT) ||
4982 (ytype == XML_SCHEMAS_UINT) ||
4983 (ytype == XML_SCHEMAS_LONG) ||
4984 (ytype == XML_SCHEMAS_ULONG) ||
4985 (ytype == XML_SCHEMAS_SHORT) ||
4986 (ytype == XML_SCHEMAS_USHORT) ||
4987 (ytype == XML_SCHEMAS_BYTE) ||
4988 (ytype == XML_SCHEMAS_UBYTE))
4989 return(xmlSchemaCompareDecimals(
x,
y));
4991 case XML_SCHEMAS_DURATION:
4994 if (ytype == XML_SCHEMAS_DURATION)
4995 return(xmlSchemaCompareDurations(
x,
y));
4997 case XML_SCHEMAS_TIME:
4998 case XML_SCHEMAS_GDAY:
4999 case XML_SCHEMAS_GMONTH:
5000 case XML_SCHEMAS_GMONTHDAY:
5001 case XML_SCHEMAS_GYEAR:
5002 case XML_SCHEMAS_GYEARMONTH:
5003 case XML_SCHEMAS_DATE:
5004 case XML_SCHEMAS_DATETIME:
5007 if ((ytype == XML_SCHEMAS_DATETIME) ||
5008 (ytype == XML_SCHEMAS_TIME) ||
5009 (ytype == XML_SCHEMAS_GDAY) ||
5010 (ytype == XML_SCHEMAS_GMONTH) ||
5011 (ytype == XML_SCHEMAS_GMONTHDAY) ||
5012 (ytype == XML_SCHEMAS_GYEAR) ||
5013 (ytype == XML_SCHEMAS_DATE) ||
5014 (ytype == XML_SCHEMAS_GYEARMONTH))
5015 return (xmlSchemaCompareDates(
x,
y));
5021 case XML_SCHEMAS_ANYSIMPLETYPE:
5022 case XML_SCHEMAS_STRING:
5023 case XML_SCHEMAS_NORMSTRING:
5024 case XML_SCHEMAS_TOKEN:
5025 case XML_SCHEMAS_LANGUAGE:
5026 case XML_SCHEMAS_NMTOKEN:
5027 case XML_SCHEMAS_NAME:
5028 case XML_SCHEMAS_NCNAME:
5029 case XML_SCHEMAS_ID:
5030 case XML_SCHEMAS_IDREF:
5031 case XML_SCHEMAS_ENTITY:
5032 case XML_SCHEMAS_ANYURI:
5047 if (ytype == XML_SCHEMAS_QNAME) {
5053 if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) ||
5054 (ytype == XML_SCHEMAS_STRING) ||
5055 (ytype == XML_SCHEMAS_NORMSTRING) ||
5056 (ytype == XML_SCHEMAS_TOKEN) ||
5057 (ytype == XML_SCHEMAS_LANGUAGE) ||
5058 (ytype == XML_SCHEMAS_NMTOKEN) ||
5059 (ytype == XML_SCHEMAS_NAME) ||
5060 (ytype == XML_SCHEMAS_NCNAME) ||
5061 (ytype == XML_SCHEMAS_ID) ||
5062 (ytype == XML_SCHEMAS_IDREF) ||
5063 (ytype == XML_SCHEMAS_ENTITY) ||
5064 (ytype == XML_SCHEMAS_ANYURI)) {
5066 if (xws == XML_SCHEMA_WHITESPACE_PRESERVE) {
5068 if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) {
5074 }
else if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
5075 return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0));
5076 else if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
5077 return (xmlSchemaComparePreserveCollapseStrings(xv, yv, 0));
5079 }
else if (xws == XML_SCHEMA_WHITESPACE_REPLACE) {
5081 if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
5082 return (xmlSchemaComparePreserveReplaceStrings(yv, xv, 1));
5083 if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
5084 return (xmlSchemaCompareReplacedStrings(xv, yv));
5085 if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
5086 return (xmlSchemaCompareReplaceCollapseStrings(xv, yv, 0));
5088 }
else if (xws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
5090 if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
5091 return (xmlSchemaComparePreserveCollapseStrings(yv, xv, 1));
5092 if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
5093 return (xmlSchemaCompareReplaceCollapseStrings(yv, xv, 1));
5094 if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
5095 return (xmlSchemaCompareNormStrings(xv, yv));
5102 case XML_SCHEMAS_QNAME:
5103 case XML_SCHEMAS_NOTATION:
5106 if ((ytype == XML_SCHEMAS_QNAME) ||
5107 (ytype == XML_SCHEMAS_NOTATION)) {
5108 if ((
xmlStrEqual(
x->value.qname.name,
y->value.qname.name)) &&
5114 case XML_SCHEMAS_FLOAT:
5115 case XML_SCHEMAS_DOUBLE:
5118 if ((ytype == XML_SCHEMAS_FLOAT) ||
5119 (ytype == XML_SCHEMAS_DOUBLE))
5120 return (xmlSchemaCompareFloats(
x,
y));
5122 case XML_SCHEMAS_BOOLEAN:
5125 if (ytype == XML_SCHEMAS_BOOLEAN) {
5126 if (
x->value.b ==
y->value.b)
5128 if (
x->value.b == 0)
5133 case XML_SCHEMAS_HEXBINARY:
5136 if (ytype == XML_SCHEMAS_HEXBINARY) {
5137 if (
x->value.hex.total ==
y->value.hex.total) {
5144 else if (
x->value.hex.total >
y->value.hex.total)
5150 case XML_SCHEMAS_BASE64BINARY:
5153 if (ytype == XML_SCHEMAS_BASE64BINARY) {
5154 if (
x->value.base64.total ==
y->value.base64.total) {
5156 y->value.base64.str);
5164 else if (
x->value.base64.total >
y->value.base64.total)
5170 case XML_SCHEMAS_IDREFS:
5171 case XML_SCHEMAS_ENTITIES:
5172 case XML_SCHEMAS_NMTOKENS:
5190xmlSchemaCompareValues(xmlSchemaValPtr
x, xmlSchemaValPtr
y) {
5191 xmlSchemaWhitespaceValueType xws, yws;
5195 if (
x->type == XML_SCHEMAS_STRING)
5196 xws = XML_SCHEMA_WHITESPACE_PRESERVE;
5197 else if (
x->type == XML_SCHEMAS_NORMSTRING)
5198 xws = XML_SCHEMA_WHITESPACE_REPLACE;
5200 xws = XML_SCHEMA_WHITESPACE_COLLAPSE;
5202 if (
y->type == XML_SCHEMAS_STRING)
5203 yws = XML_SCHEMA_WHITESPACE_PRESERVE;
5204 else if (
y->type == XML_SCHEMAS_NORMSTRING)
5205 yws = XML_SCHEMA_WHITESPACE_REPLACE;
5207 yws = XML_SCHEMA_WHITESPACE_COLLAPSE;
5209 return(xmlSchemaCompareValuesInternal(
x->type,
x,
NULL, xws,
y->type,
5226xmlSchemaCompareValuesWhtsp(xmlSchemaValPtr
x,
5227 xmlSchemaWhitespaceValueType xws,
5229 xmlSchemaWhitespaceValueType yws)
5233 return(xmlSchemaCompareValuesInternal(
x->type,
x,
NULL, xws,
y->type,
5250xmlSchemaCompareValuesWhtspExt(xmlSchemaValType xtype,
5253 xmlSchemaWhitespaceValueType xws,
5254 xmlSchemaValType ytype,
5257 xmlSchemaWhitespaceValueType yws)
5259 return(xmlSchemaCompareValuesInternal(xtype,
x, xvalue, xws, ytype,
y,
5281 if (utf[0] & 0x80) {
5282 if ((utf[1] & 0xc0) != 0x80)
5284 if ((utf[0] & 0xe0) == 0xe0) {
5285 if ((utf[2] & 0xc0) != 0x80)
5287 if ((utf[0] & 0xf0) == 0xf0) {
5288 if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
5318xmlSchemaGetFacetValueAsULong(xmlSchemaFacetPtr facet)
5323 if (facet ==
NULL || facet->val ==
NULL)
5325 return ((
unsigned long) facet->val->value.decimal.lo);
5341xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
5343 unsigned long actualLen,
5344 unsigned long *expectedLen)
5352 if (facet->type == XML_SCHEMA_FACET_LENGTH) {
5353 if (actualLen != facet->val->value.decimal.lo) {
5354 if (expectedLen !=
NULL)
5355 *expectedLen = facet->val->value.decimal.lo;
5358 }
else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
5359 if (actualLen < facet->
val->value.decimal.lo) {
5360 if (expectedLen !=
NULL)
5361 *expectedLen = facet->val->value.decimal.lo;
5364 }
else if (facet->type == XML_SCHEMA_FACET_MAXLENGTH) {
5365 if (actualLen > facet->val->value.decimal.lo) {
5366 if (expectedLen !=
NULL)
5367 *expectedLen = facet->val->value.decimal.lo;
5396xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
5397 xmlSchemaValType valType,
5399 xmlSchemaValPtr
val,
5401 xmlSchemaWhitespaceValueType ws)
5403 unsigned int len = 0;
5408 if ((facet->type != XML_SCHEMA_FACET_LENGTH) &&
5409 (facet->type != XML_SCHEMA_FACET_MAXLENGTH) &&
5410 (facet->type != XML_SCHEMA_FACET_MINLENGTH))
5417 if ((facet->val ==
NULL) ||
5418 ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
5419 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
5420 (facet->val->value.decimal.frac != 0)) {
5423 if ((
val !=
NULL) && (
val->type == XML_SCHEMAS_HEXBINARY))
5424 len =
val->value.hex.total;
5425 else if ((
val !=
NULL) && (
val->type == XML_SCHEMAS_BASE64BINARY))
5426 len =
val->value.base64.total;
5429 case XML_SCHEMAS_STRING:
5430 case XML_SCHEMAS_NORMSTRING:
5431 if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
5438 if (valType == XML_SCHEMAS_STRING)
5443 if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
5452 case XML_SCHEMAS_IDREF:
5453 case XML_SCHEMAS_TOKEN:
5454 case XML_SCHEMAS_LANGUAGE:
5455 case XML_SCHEMAS_NMTOKEN:
5456 case XML_SCHEMAS_NAME:
5457 case XML_SCHEMAS_NCNAME:
5458 case XML_SCHEMAS_ID:
5462 case XML_SCHEMAS_ANYURI:
5466 case XML_SCHEMAS_QNAME:
5467 case XML_SCHEMAS_NOTATION:
5481 if (facet->type == XML_SCHEMA_FACET_LENGTH) {
5482 if (
len != facet->val->value.decimal.lo)
5484 }
else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
5485 if (len < facet->
val->value.decimal.lo)
5488 if (
len > facet->val->value.decimal.lo)
5510xmlSchemaValidateLengthFacet(xmlSchemaTypePtr
type,
5511 xmlSchemaFacetPtr facet,
5513 xmlSchemaValPtr
val,
5518 return (xmlSchemaValidateLengthFacetInternal(facet,
5520 XML_SCHEMA_WHITESPACE_UNKNOWN));
5539xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
5540 xmlSchemaValType valType,
5542 xmlSchemaValPtr
val,
5544 xmlSchemaWhitespaceValueType ws)
5546 return (xmlSchemaValidateLengthFacetInternal(facet, valType,
value,
val,
5565xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
5566 xmlSchemaWhitespaceValueType fws,
5567 xmlSchemaValType valType,
5569 xmlSchemaValPtr
val,
5570 xmlSchemaWhitespaceValueType ws)
5577 switch (facet->type) {
5578 case XML_SCHEMA_FACET_PATTERN:
5592 ((
val->type >= XML_SCHEMAS_STRING &&
5593 val->type <= XML_SCHEMAS_NORMSTRING) ||
5594 (
val->type >= XML_SCHEMAS_TOKEN &&
5595 val->type <= XML_SCHEMAS_ENTITIES &&
5596 val->type != XML_SCHEMAS_QNAME))) {
5599 ret = xmlRegexpExec(facet->regexp,
value);
5605 case XML_SCHEMA_FACET_MAXEXCLUSIVE:
5606 ret = xmlSchemaCompareValues(
val, facet->val);
5612 case XML_SCHEMA_FACET_MAXINCLUSIVE:
5613 ret = xmlSchemaCompareValues(
val, facet->val);
5616 if ((
ret == -1) || (
ret == 0))
5619 case XML_SCHEMA_FACET_MINEXCLUSIVE:
5620 ret = xmlSchemaCompareValues(
val, facet->val);
5626 case XML_SCHEMA_FACET_MININCLUSIVE:
5627 ret = xmlSchemaCompareValues(
val, facet->val);
5630 if ((
ret == 1) || (
ret == 0))
5633 case XML_SCHEMA_FACET_WHITESPACE:
5641 case XML_SCHEMA_FACET_ENUMERATION:
5642 if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
5648 if ((facet->value !=
NULL) &&
5652 ret = xmlSchemaCompareValuesWhtspExt(facet->val->type,
5653 facet->val, facet->value, fws, valType,
val,
5661 case XML_SCHEMA_FACET_LENGTH:
5666 if ((valType == XML_SCHEMAS_QNAME) ||
5667 (valType == XML_SCHEMAS_NOTATION))
5670 case XML_SCHEMA_FACET_MAXLENGTH:
5671 case XML_SCHEMA_FACET_MINLENGTH: {
5672 unsigned int len = 0;
5674 if ((valType == XML_SCHEMAS_QNAME) ||
5675 (valType == XML_SCHEMAS_NOTATION))
5681 if ((facet->val ==
NULL) ||
5682 ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
5683 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
5684 (facet->val->value.decimal.frac != 0)) {
5687 if ((
val !=
NULL) && (
val->type == XML_SCHEMAS_HEXBINARY))
5688 len =
val->value.hex.total;
5689 else if ((
val !=
NULL) && (
val->type == XML_SCHEMAS_BASE64BINARY))
5690 len =
val->value.base64.total;
5693 case XML_SCHEMAS_STRING:
5694 case XML_SCHEMAS_NORMSTRING:
5695 if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
5702 if (valType == XML_SCHEMAS_STRING)
5707 if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
5716 case XML_SCHEMAS_IDREF:
5717 case XML_SCHEMAS_TOKEN:
5718 case XML_SCHEMAS_LANGUAGE:
5719 case XML_SCHEMAS_NMTOKEN:
5720 case XML_SCHEMAS_NAME:
5721 case XML_SCHEMAS_NCNAME:
5722 case XML_SCHEMAS_ID:
5723 case XML_SCHEMAS_ANYURI:
5731 if (facet->type == XML_SCHEMA_FACET_LENGTH) {
5732 if (
len != facet->val->value.decimal.lo)
5734 }
else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
5735 if (len < facet->
val->value.decimal.lo)
5738 if (
len > facet->val->value.decimal.lo)
5743 case XML_SCHEMA_FACET_TOTALDIGITS:
5744 case XML_SCHEMA_FACET_FRACTIONDIGITS:
5746 if ((facet->val ==
NULL) ||
5747 ((facet->val->type != XML_SCHEMAS_PINTEGER) &&
5748 (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
5749 (facet->val->value.decimal.frac != 0)) {
5753 ((
val->type != XML_SCHEMAS_DECIMAL) &&
5754 (
val->type != XML_SCHEMAS_INTEGER) &&
5755 (
val->type != XML_SCHEMAS_NPINTEGER) &&
5756 (
val->type != XML_SCHEMAS_NINTEGER) &&
5757 (
val->type != XML_SCHEMAS_NNINTEGER) &&
5758 (
val->type != XML_SCHEMAS_PINTEGER) &&
5759 (
val->type != XML_SCHEMAS_INT) &&
5760 (
val->type != XML_SCHEMAS_UINT) &&
5761 (
val->type != XML_SCHEMAS_LONG) &&
5762 (
val->type != XML_SCHEMAS_ULONG) &&
5763 (
val->type != XML_SCHEMAS_SHORT) &&
5764 (
val->type != XML_SCHEMAS_USHORT) &&
5765 (
val->type != XML_SCHEMAS_BYTE) &&
5766 (
val->type != XML_SCHEMAS_UBYTE))) {
5769 if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
5770 if (
val->value.decimal.total > facet->val->value.decimal.lo)
5773 }
else if (facet->type == XML_SCHEMA_FACET_FRACTIONDIGITS) {
5774 if (
val->value.decimal.frac > facet->val->value.decimal.lo)
5798xmlSchemaValidateFacet(xmlSchemaTypePtr
base,
5799 xmlSchemaFacetPtr facet,
5801 xmlSchemaValPtr
val)
5809 return(xmlSchemaValidateFacetInternal(facet,
5810 XML_SCHEMA_WHITESPACE_UNKNOWN,
val->type,
value,
val,
5811 XML_SCHEMA_WHITESPACE_UNKNOWN));
5813 return(xmlSchemaValidateFacetInternal(facet,
5814 XML_SCHEMA_WHITESPACE_UNKNOWN,
base->builtInType,
value,
val,
5815 XML_SCHEMA_WHITESPACE_UNKNOWN));
5837xmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet,
5838 xmlSchemaWhitespaceValueType fws,
5839 xmlSchemaValType valType,
5841 xmlSchemaValPtr
val,
5842 xmlSchemaWhitespaceValueType ws)
5844 return(xmlSchemaValidateFacetInternal(facet, fws, valType,
5853#define DBL_EPSILON 1E-9
5856#define INTEGER_DIGITS DBL_DIG
5857#define FRACTION_DIGITS (DBL_DIG + 1)
5858#define EXPONENT_DIGITS (3 + 2)
5869xmlSchemaFormatFloat(
double number,
char buffer[],
int buffersize)
5871 switch (xmlXPathIsInf(
number)) {
5873 if (buffersize > (
int)
sizeof(
"INF"))
5877 if (buffersize > (
int)
sizeof(
"-INF"))
5881 if (xmlXPathIsNaN(
number)) {
5882 if (buffersize > (
int)
sizeof(
"NaN"))
5884 }
else if (
number == 0) {
5888 char work[
DBL_DIG + EXPONENT_DIGITS + 3];
5889 int integer_place, fraction_place;
5891 char *after_fraction;
5892 double absolute_value;
5902 integer_place =
DBL_DIG + EXPONENT_DIGITS + 1;
5904 snprintf(work,
sizeof(work),
"%*.*e",
5905 integer_place, fraction_place,
number);
5908 ptr = after_fraction;
5909 while (*(--
ptr) ==
'0')
5913 while ((*
ptr++ = *after_fraction++) != 0);
5917 if (
size > buffersize) {
5918 work[buffersize - 1] = 0;
5948xmlSchemaGetCanonValue(xmlSchemaValPtr
val,
const xmlChar **retValue)
5953 switch (
val->type) {
5954 case XML_SCHEMAS_STRING:
5961 case XML_SCHEMAS_NORMSTRING:
5965 *retValue = xmlSchemaWhiteSpaceReplace(
5967 if ((*retValue) ==
NULL)
5972 case XML_SCHEMAS_TOKEN:
5973 case XML_SCHEMAS_LANGUAGE:
5974 case XML_SCHEMAS_NMTOKEN:
5975 case XML_SCHEMAS_NAME:
5976 case XML_SCHEMAS_NCNAME:
5977 case XML_SCHEMAS_ID:
5978 case XML_SCHEMAS_IDREF:
5979 case XML_SCHEMAS_ENTITY:
5980 case XML_SCHEMAS_NOTATION:
5981 case XML_SCHEMAS_ANYURI:
5986 if (*retValue ==
NULL)
5990 case XML_SCHEMAS_QNAME:
5992 if (
val->value.qname.uri ==
NULL) {
6005 case XML_SCHEMAS_DECIMAL:
6009 if ((
val->value.decimal.total == 1) &&
6010 (
val->value.decimal.lo == 0)) {
6013 xmlSchemaValDecimal
dec =
val->value.decimal;
6022 if ((
dec.frac == 0) || (
dec.frac ==
dec.total))
6030 if (
dec.frac ==
dec.total) {
6037 else if (
dec.mi != 0)
6039 "%lu%lu",
dec.mi,
dec.lo);
6044 if (
dec.frac != 0) {
6045 if (
dec.frac !=
dec.total) {
6046 int diff =
dec.total -
dec.frac;
6050 memmove(offs + diff + 1, offs + diff,
dec.frac +1);
6057 while (*(offs +
i) != 0)
6059 if (
i <
dec.total) {
6076 case XML_SCHEMAS_INTEGER:
6077 case XML_SCHEMAS_PINTEGER:
6078 case XML_SCHEMAS_NPINTEGER:
6079 case XML_SCHEMAS_NINTEGER:
6080 case XML_SCHEMAS_NNINTEGER:
6081 case XML_SCHEMAS_LONG:
6082 case XML_SCHEMAS_BYTE:
6083 case XML_SCHEMAS_SHORT:
6084 case XML_SCHEMAS_INT:
6085 case XML_SCHEMAS_UINT:
6086 case XML_SCHEMAS_ULONG:
6087 case XML_SCHEMAS_USHORT:
6088 case XML_SCHEMAS_UBYTE:
6089 if ((
val->value.decimal.total == 1) &&
6090 (
val->value.decimal.lo == 0))
6093 xmlSchemaValDecimal
dec =
val->value.decimal;
6100 if (*retValue ==
NULL)
6109 }
else if (
dec.mi != 0) {
6112 "-%lu%lu",
dec.mi,
dec.lo);
6115 "%lu%lu",
dec.mi,
dec.lo);
6124 case XML_SCHEMAS_BOOLEAN:
6130 case XML_SCHEMAS_DURATION: {
6133 unsigned long mon,
day, hour = 0,
min = 0;
6134 double sec = 0,
left;
6144 year = (
unsigned long) FQUOTIENT(
labs(
val->value.dur.mon), 12);
6145 mon =
labs(
val->value.dur.mon) - 12 * year;
6147 day = (
unsigned long) FQUOTIENT(
fabs(
val->value.dur.sec), 86400);
6150 hour = (
unsigned long) FQUOTIENT(
left, 3600);
6157 if ((
val->value.dur.mon < 0) || (
val->value.dur.sec < 0))
6158 snprintf(
buf, 100,
"P%luY%luM%luDT%luH%luM%.14gS",
6159 year, mon,
day, hour,
min, sec);
6161 snprintf(
buf, 100,
"-P%luY%luM%luDT%luH%luM%.14gS",
6162 year, mon,
day, hour,
min, sec);
6166 case XML_SCHEMAS_GYEAR: {
6174 case XML_SCHEMAS_GMONTH: {
6178 if (*retValue ==
NULL)
6180 snprintf((
char *) *retValue, 6,
"--%02u",
6181 val->value.date.mon);
6184 case XML_SCHEMAS_GDAY: {
6188 if (*retValue ==
NULL)
6190 snprintf((
char *) *retValue, 6,
"---%02u",
6191 val->value.date.day);
6194 case XML_SCHEMAS_GMONTHDAY: {
6198 if (*retValue ==
NULL)
6200 snprintf((
char *) *retValue, 8,
"--%02u-%02u",
6201 val->value.date.mon,
val->value.date.day);
6204 case XML_SCHEMAS_GYEARMONTH: {
6208 if (
val->value.date.year < 0)
6211 val->value.date.mon);
6214 val->value.date.year,
val->value.date.mon);
6218 case XML_SCHEMAS_TIME:
6222 if (
val->value.date.tz_flag) {
6223 xmlSchemaValPtr
norm;
6225 norm = xmlSchemaDateNormalize(
val, 0);
6232 "%02u:%02u:%02.14gZ",
6233 norm->value.date.hour,
6234 norm->value.date.min,
6235 norm->value.date.sec);
6236 xmlSchemaFreeValue(
norm);
6239 "%02u:%02u:%02.14g",
6240 val->value.date.hour,
6241 val->value.date.min,
6242 val->value.date.sec);
6247 case XML_SCHEMAS_DATE:
6251 if (
val->value.date.tz_flag) {
6252 xmlSchemaValPtr
norm;
6254 norm = xmlSchemaDateNormalize(
val, 0);
6263 norm->value.date.year,
norm->value.date.mon,
6264 norm->value.date.day);
6265 xmlSchemaFreeValue(
norm);
6269 val->value.date.year,
val->value.date.mon,
6270 val->value.date.day);
6275 case XML_SCHEMAS_DATETIME:
6279 if (
val->value.date.tz_flag) {
6280 xmlSchemaValPtr
norm;
6282 norm = xmlSchemaDateNormalize(
val, 0);
6289 "%04ld-%02u-%02uT%02u:%02u:%02.14gZ",
6290 norm->value.date.year,
norm->value.date.mon,
6291 norm->value.date.day,
norm->value.date.hour,
6292 norm->value.date.min,
norm->value.date.sec);
6293 xmlSchemaFreeValue(
norm);
6296 "%04ld-%02u-%02uT%02u:%02u:%02.14g",
6297 val->value.date.year,
val->value.date.mon,
6298 val->value.date.day,
val->value.date.hour,
6299 val->value.date.min,
val->value.date.sec);
6304 case XML_SCHEMAS_HEXBINARY:
6307 case XML_SCHEMAS_BASE64BINARY:
6316 case XML_SCHEMAS_FLOAT: {
6328 case XML_SCHEMAS_DOUBLE: {
6344 if (*retValue ==
NULL)
6362xmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr
val,
6364 xmlSchemaWhitespaceValueType ws)
6368 if ((ws == XML_SCHEMA_WHITESPACE_UNKNOWN) ||
6369 (ws > XML_SCHEMA_WHITESPACE_COLLAPSE))
6373 switch (
val->type) {
6374 case XML_SCHEMAS_STRING:
6377 else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
6378 *retValue = xmlSchemaCollapseString(
val->value.str);
6379 else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
6380 *retValue = xmlSchemaWhiteSpaceReplace(
val->value.str);
6381 if ((*retValue) ==
NULL)
6384 case XML_SCHEMAS_NORMSTRING:
6388 if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
6389 *retValue = xmlSchemaCollapseString(
val->value.str);
6391 *retValue = xmlSchemaWhiteSpaceReplace(
val->value.str);
6392 if ((*retValue) ==
NULL)
6397 return (xmlSchemaGetCanonValue(
val, retValue));
6411xmlSchemaGetValType(xmlSchemaValPtr
val)
6414 return(XML_SCHEMAS_UNKNOWN);
_Tp _STLP_CALL norm(const complex< _Tp > &__z)
ios_base &_STLP_CALL dec(ios_base &__s)
static DOUBLE day(DOUBLE time)
_ACRTIMP double __cdecl fabs(double)
_ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl sscanf(const char *, const char *,...) __WINE_CRT_SCANF_ATTR(2
_ACRTIMP __msvcrt_long __cdecl labs(__msvcrt_long)
_ACRTIMP char *__cdecl strchr(const char *, int)
_ACRTIMP size_t __cdecl strlen(const char *)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLenum GLuint GLsizei bufsize
GLuint GLdouble GLdouble GLint GLint order
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
XMLPUBFUN xmlEntityPtr xmlGetDocEntity(const xmlDoc *doc, const xmlChar *name)
@ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static unsigned int number
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
static float(__cdecl *square_half_float)(float x
static unsigned __int64 next
xmlMallocFunc xmlMallocAtomic
void xmlHashFree(xmlHashTablePtr hash, xmlHashDeallocator dealloc)
void * xmlHashLookup2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2)
xmlHashTablePtr xmlHashCreate(int size)
int xmlHashAddEntry2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2, void *payload)
XML_HIDDEN void XML_HIDDEN void __xmlSimpleError(int domain, int code, struct _xmlNode *node, const char *msg, const char *extra) LIBXML_ATTR_FORMAT(4
Character const *const prefix
XMLPUBFUN void xmlFreeURI(xmlURIPtr uri)
XMLPUBFUN xmlURIPtr xmlParseURI(const char *str)
XMLPUBFUN xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr)
XML_DEPRECATED XMLPUBFUN xmlRefPtr xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr)
@ XML_SCHEMAV_CVC_MININCLUSIVE_VALID
@ XML_SCHEMAV_CVC_MINLENGTH_VALID
@ XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID
@ XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID
@ XML_SCHEMAV_CVC_LENGTH_VALID
@ XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID
@ XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID
@ XML_SCHEMAV_CVC_TOTALDIGITS_VALID
@ XML_SCHEMAV_CVC_ENUMERATION_VALID
@ XML_SCHEMAV_CVC_MAXLENGTH_VALID
@ XML_SCHEMAV_CVC_PATTERN_VALID
XMLPUBFUN xmlChar * xmlStrndup(const xmlChar *cur, int len)
XMLPUBFUN int xmlUTF8Strlen(const xmlChar *utf)
XMLPUBFUN int xmlStrcmp(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN xmlChar * xmlStrcat(xmlChar *cur, const xmlChar *add)
XMLPUBFUN int xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN xmlChar * xmlStrdup(const xmlChar *cur)