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