You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2001/06/18 21:52:23 UTC
cvs commit: xml-xerces/c/src/validators/schema TraverseSchema.cpp TraverseSchema.hpp
knoaman 01/06/18 12:52:22
Modified: c/src/validators/schema TraverseSchema.cpp
TraverseSchema.hpp
Log:
Add support for 'fixed' facet.
Revision Changes Path
1.23 +70 -0 xml-xerces/c/src/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- TraverseSchema.cpp 2001/06/15 22:55:53 1.22
+++ TraverseSchema.cpp 2001/06/18 19:52:18 1.23
@@ -56,6 +56,9 @@
/*
* $Log: TraverseSchema.cpp,v $
+ * Revision 1.23 2001/06/18 19:52:18 knoaman
+ * Add support for 'fixed' facet.
+ *
* Revision 1.22 2001/06/15 22:55:53 knoaman
* Added constraint checking for ref on elements.
*
@@ -215,6 +218,11 @@
chLatin_s, chLatin_t, chLatin_r, chLatin_i, chLatin_c, chLatin_t, chNull
};
+const XMLCh fgValueOne[] =
+{
+ chDigit_1, chNull
+};
+
// ---------------------------------------------------------------------------
// TraverseSchema: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -2129,6 +2137,8 @@
RefVectorOf<XMLCh>* enums = 0;
XMLBuffer pattern;
DOMString facetName;
+ XMLCh fixedFlagStr[16];
+ unsigned int fixedFlag = 0;
bool isFirstPattern = true;
while (content != 0) {
@@ -2201,6 +2211,7 @@
}
else {
facets->put((void*) facetStr, new KVStringPair(facetStr, attVal));
+ checkFixedFacet(content, baseValidator, fixedFlag);
}
}
}
@@ -2219,6 +2230,13 @@
new KVStringPair(SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer()));
}
+ if (fixedFlag) {
+
+ XMLString::binToText(fixedFlag, fixedFlagStr, 15, 10);
+ facets->put((void*) SchemaSymbols::fgATT_FIXED,
+ new KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr));
+ }
+
XMLCh* qualifiedName = getQualifiedName(typeNameIndex);
try {
@@ -2545,6 +2563,8 @@
RefVectorOf<XMLCh>* enums = 0;
XMLBuffer pattern;
const XMLCh* facetName;
+ XMLCh fixedFlagStr[16];
+ unsigned int fixedFlag = 0;
int facetId;
bool isFirstPattern = true;
@@ -2603,6 +2623,7 @@
else {
facets->put((void*) facetName,
new KVStringPair(facetName,fBuffer.getRawBuffer()));
+ checkFixedFacet(content, typeInfo->getBaseDatatypeValidator(), fixedFlag);
}
}
}
@@ -2624,6 +2645,13 @@
);
}
+ if (fixedFlag) {
+
+ XMLString::binToText(fixedFlag, fixedFlagStr, 15, 10);
+ facets->put((void*) SchemaSymbols::fgATT_FIXED,
+ new KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr));
+ }
+
XMLCh* qualifiedName =
getQualifiedName(fStringPool.addOrFind(typeName));
@@ -4712,6 +4740,48 @@
}
return min;
+}
+
+void TraverseSchema::checkFixedFacet(const DOM_Element& elem,
+ const DatatypeValidator* const baseDV,
+ unsigned int& flags)
+{
+ const XMLCh* fixedFacet =
+ getElementAttValue(elem, SchemaSymbols::fgATT_FIXED);
+
+ if (fixedFacet &&
+ (!XMLString::compareString(fixedFacet, SchemaSymbols::fgATTVAL_TRUE)
+ || !XMLString::compareString(fixedFacet, fgValueOne))) {
+
+ if (!XMLString::compareString(SchemaSymbols::fgELT_MINLENGTH, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MINLENGTH;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_MAXLENGTH, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MAXLENGTH;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_MAXEXCLUSIVE, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MAXEXCLUSIVE;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_MAXINCLUSIVE, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MAXINCLUSIVE;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_MINEXCLUSIVE, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MINEXCLUSIVE;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_MININCLUSIVE, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_MININCLUSIVE;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_TOTALDIGITS, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_TOTALDIGITS;
+ }
+ else if (!XMLString::compareString(SchemaSymbols::fgELT_FRACTIONDIGITS, fixedFacet)) {
+ flags |= DatatypeValidator::FACET_FRACTIONDIGITS;
+ }
+ else if ((!XMLString::compareString(SchemaSymbols::fgELT_WHITESPACE, fixedFacet)) &&
+ baseDV->getType() == DatatypeValidator::String) {
+ flags |= DatatypeValidator::FACET_WHITESPACE;
+ }
+ }
}
// ---------------------------------------------------------------------------
1.11 +4 -1 xml-xerces/c/src/validators/schema/TraverseSchema.hpp
Index: TraverseSchema.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/TraverseSchema.hpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- TraverseSchema.hpp 2001/06/05 13:59:55 1.10
+++ TraverseSchema.hpp 2001/06/18 19:52:19 1.11
@@ -55,7 +55,7 @@
*/
/*
- * $Id: TraverseSchema.hpp,v 1.10 2001/06/05 13:59:55 knoaman Exp $
+ * $Id: TraverseSchema.hpp,v 1.11 2001/06/18 19:52:19 knoaman Exp $
*/
#if !defined(TRAVERSESCHEMA_HPP)
@@ -484,6 +484,9 @@
* a 'choice'.
*/
int getMinTotalRange(const ContentSpecNode* const specNode);
+
+ void checkFixedFacet(const DOM_Element&, const DatatypeValidator* const,
+ unsigned int&);
// -----------------------------------------------------------------------
// Private data members
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org