knoaman     2003/11/06 11:28:11

  Modified:    c/src/xercesc/framework/psvi XSAnnotation.cpp
                        XSAnnotation.hpp
               c/src/xercesc/util Janitor.c Janitor.hpp
               c/src/xercesc/validators/schema SchemaGrammar.cpp
                        SchemaGrammar.hpp TraverseSchema.cpp
                        TraverseSchema.hpp
  Log:
  PSVI support for annotations.
  
  Revision  Changes    Path
  1.2       +25 -9     xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.cpp
  
  Index: XSAnnotation.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XSAnnotation.cpp  16 Sep 2003 14:33:36 -0000      1.1
  +++ XSAnnotation.cpp  6 Nov 2003 19:28:11 -0000       1.2
  @@ -56,20 +56,35 @@
   
   /*
    * $Log$
  + * Revision 1.2  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.1  2003/09/16 14:33:36  neilg
    * PSVI/schema component model classes, with Makefile/configuration changes 
necessary to build them
    *
    */
   
   #include <xercesc/framework/psvi/XSAnnotation.hpp>
  +#include <xercesc/util/XMLString.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  -XSAnnotation::XSAnnotation( MemoryManager * const manager):
  -            XSObject(XSConstants::ANNOTATION, manager )
  +XSAnnotation::XSAnnotation(const XMLCh* const content,
  +                           MemoryManager * const manager):
  +    XSObject(XSConstants::ANNOTATION, manager)
  +    , fContents(XMLString::replicate(content, manager))
  +    , fNext(0)
   {
   }
   
  +XSAnnotation::~XSAnnotation()
  +{
  +    fMemoryManager->deallocate(fContents);
  +
  +    if (fNext)
  +        delete fNext;
  +}
  +
   // XSAnnotation methods
   
   /**
  @@ -94,14 +109,15 @@
       return false;
   }
   
  -/**
  - * A text representation of annotation.
  - */
  -const XMLCh *XSAnnotation::getAnnotationString()
  +void XSAnnotation::setNext(XSAnnotation* const nextAnnotation)
   {
  -    // REVISIT
  -    return 0;
  +    if (fNext)
  +        fNext->setNext(nextAnnotation);
  +    else
  +        fNext = nextAnnotation;
   }
  +
  +
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  
  1.2       +26 -8     xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.hpp
  
  Index: XSAnnotation.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XSAnnotation.hpp  16 Sep 2003 14:33:36 -0000      1.1
  +++ XSAnnotation.hpp  6 Nov 2003 19:28:11 -0000       1.2
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.2  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.1  2003/09/16 14:33:36  neilg
    * PSVI/schema component model classes, with Makefile/configuration changes 
necessary to build them
    *
  @@ -106,8 +109,11 @@
         *
         * @param  manager     The configurable memory manager
         */
  -    XSAnnotation( 
  -                MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  +    XSAnnotation
  +    (
  +        const XMLCh* const contents
  +        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  +    );
   
       //@};
   
  @@ -131,18 +137,18 @@
        * @param target  A target pointer to the annotation target object, i.e. 
        *   <code>DOMDocument</code>, 
        *   <code>DOMElement</code>, 
  -     *   <code>ContentHandler</code>. 
  +     *   <code>ContentHandler</code>.
        * @param targetType  A target type. 
        * @return If the <code>target</code> is a recognized type that is supported by 
        *   this implementation, and the operation succeeds, return true; otherwise 
return false. 
        */
  -    bool writeAnnotation(void *target, 
  -                                   ANNOTATION_TARGET targetType);
  +    bool writeAnnotation(void *target, ANNOTATION_TARGET targetType);
   
       /**
        * A text representation of annotation.
        */
  -    const XMLCh *getAnnotationString();
  +    const XMLCh *getAnnotationString() const;
  +    XMLCh *getAnnotationString();
   
       //@}
   
  @@ -150,6 +156,7 @@
       // methods needed by implementation
   
       // @{
  +    void setNext(XSAnnotation* const nextAnnotation);
   
       //@}
   private:
  @@ -165,8 +172,19 @@
       // -----------------------------------------------------------------------
       //  data members
       // -----------------------------------------------------------------------
  +    XMLCh*        fContents;
  +    XSAnnotation* fNext;
   };
  -inline XSAnnotation::~XSAnnotation() {}
  +
  +inline const XMLCh *XSAnnotation::getAnnotationString() const
  +{
  +    return fContents;
  +}
  +
  +inline XMLCh *XSAnnotation::getAnnotationString()
  +{
  +    return fContents;
  +}
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  
  1.5       +12 -2     xml-xerces/c/src/xercesc/util/Janitor.c
  
  Index: Janitor.c
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Janitor.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Janitor.c 21 May 2003 03:34:52 -0000      1.4
  +++ Janitor.c 6 Nov 2003 19:28:11 -0000       1.5
  @@ -56,6 +56,9 @@
   
   /**
    * $Log$
  + * Revision 1.5  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.4  2003/05/21 03:34:52  jberry
    * Cast away CodeWarrior complaint of casting away const if we're holding a const 
obj
    *
  @@ -161,8 +164,15 @@
   
   template <class T> void Janitor<T>::reset(T* p)
   {
  -     delete fData;
  -     fData = p;
  +    if (fData)
  +        delete fData;
  +
  +    fData = p;
  +}
  +
  +template <class T> bool Janitor<T>::isDataNull()
  +{
  +    return (fData == 0);
   }
   
   
  
  
  
  1.4       +11 -7     xml-xerces/c/src/xercesc/util/Janitor.hpp
  
  Index: Janitor.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Janitor.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Janitor.hpp       15 May 2003 19:04:35 -0000      1.3
  +++ Janitor.hpp       6 Nov 2003 19:28:11 -0000       1.4
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.4  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.3  2003/05/15 19:04:35  knoaman
    * Partial implementation of the configurable memory manager.
    *
  @@ -117,18 +120,19 @@
       // -----------------------------------------------------------------------
       void orphan();
   
  -     //      small amount of auto_ptr compatibility
  -     T&      operator*() const;
  -     T*      operator->() const;
  -     T*      get() const;
  -     T*      release();
  -     void reset(T* p = 0);
  +    //  small amount of auto_ptr compatibility
  +    T& operator*() const;
  +    T* operator->() const;
  +    T* get() const;
  +    T* release();
  +    void reset(T* p = 0);
  +    bool isDataNull();
   
   private :
       // -----------------------------------------------------------------------
       //  Unimplemented constructors and operators
       // -----------------------------------------------------------------------
  -     Janitor();
  +    Janitor();
       Janitor(const Janitor<T>&);
   
       // -----------------------------------------------------------------------
  
  
  
  1.14      +29 -3     xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.cpp
  
  Index: SchemaGrammar.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SchemaGrammar.cpp 5 Nov 2003 16:38:08 -0000       1.13
  +++ SchemaGrammar.cpp 6 Nov 2003 19:28:11 -0000       1.14
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.14  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.13  2003/11/05 16:38:08  peiyongz
    * serialize DatatypeValidatorFactory first
    *
  @@ -143,6 +146,8 @@
   #include <xercesc/validators/schema/XercesAttGroupInfo.hpp>
   #include <xercesc/validators/schema/XMLSchemaDescriptionImpl.hpp>
   #include <xercesc/util/OutOfMemoryException.hpp>
  +#include <xercesc/util/HashPtr.hpp>
  +#include <xercesc/framework/psvi/XSAnnotation.hpp>
   
   #include <xercesc/internal/XTemplateSerializer.hpp>
   
  @@ -168,6 +173,7 @@
       , fValidated(false)
       , fDatatypeRegistry(manager)
       , fGramDesc(0)
  +    , fAnnotations(0)
   {
       //
       //  Init all the pool members.
  @@ -189,6 +195,12 @@
           //REVISIT: use grammarPool to create
           fGramDesc = new (fMemoryManager) 
XMLSchemaDescriptionImpl(XMLUni::fgXMLNSURIName, fMemoryManager);
   
  +        // Create annotation table
  +        fAnnotations = new (fMemoryManager) RefHashTableOf<XSAnnotation>
  +        (
  +            29, true, new (fMemoryManager) HashPtr(), fMemoryManager
  +        );
  +
           //
           //  Call our own reset method. This lets us have the pool setup stuff
           //  done in just one place (because this stame setup stuff has to be
  @@ -289,6 +301,7 @@
           fElemNonDeclPool->removeAll();
       fGroupElemDeclPool->removeAll();
       fNotationDeclPool->removeAll();
  +    fAnnotations->removeAll();
       fValidated = false;
   }
   
  @@ -310,7 +323,7 @@
       delete fValidSubstitutionGroups;
       delete fIDRefList;
       delete fGramDesc;
  -
  +    delete fAnnotations;
   }
   
   void SchemaGrammar::setGrammarDescription(XMLGrammarDescription* gramDesc)
  @@ -326,9 +339,22 @@
       fGramDesc = (XMLSchemaDescription*) gramDesc;
   }
   
  -XMLGrammarDescription* SchemaGrammar::getGrammarDescription() const
  +// ---------------------------------------------------------------------------
  +//  SchemaGrammar: Helper methods
  +// ---------------------------------------------------------------------------
  +void SchemaGrammar::putAnnotation(void* key, XSAnnotation* const annotation)
  +{
  +    fAnnotations->put(key, annotation);
  +}
  +
  +void SchemaGrammar::addAnnotation(XSAnnotation* const annotation)
   {
  -    return fGramDesc;
  +    XSAnnotation* lAnnot = fAnnotations->get(this);
  +     
  +    if (lAnnot)
  +        lAnnot->setNext(annotation);
  +    else
  +        fAnnotations->put(this, annotation);
   }
   
   /***
  
  
  
  1.11      +67 -0     xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp
  
  Index: SchemaGrammar.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SchemaGrammar.hpp 14 Oct 2003 15:22:28 -0000      1.10
  +++ SchemaGrammar.hpp 6 Nov 2003 19:28:11 -0000       1.11
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.11  2003/11/06 19:28:11  knoaman
  + * PSVI support for annotations.
  + *
    * Revision 1.10  2003/10/14 15:22:28  peiyongz
    * Implementation of Serialization/Deserialization
    *
  @@ -162,6 +165,7 @@
   class NamespaceScope;
   class XercesGroupInfo;
   class XercesAttGroupInfo;
  +class XSAnnotation;
   
   // ---------------------------------------------------------------------------
   //  typedef declaration
  @@ -303,6 +307,43 @@
           XMLElementDecl* const elemDecl
       )   const;
   
  +    // -----------------------------------------------------------------------
  +    // Annotation management methods
  +    // -----------------------------------------------------------------------
  +    /**
  +      * Add annotation to the list of annotations for a given key
  +      */
  +    void putAnnotation(void* key, XSAnnotation* const annotation);
  +
  +    /**
  +      * Add global annotation
  +      *
  +      * Note: XSAnnotation acts as a linked list
  +      */
  +    void addAnnotation(XSAnnotation* const annotation);
  +
  +    /**
  +     * Retrieve the annotation that is associated with the specified key
  +     *
  +     * @param  key   represents a schema component object (i.e. SchemaGrammar)
  +     * @return XSAnnotation associated with the key object
  +     */
  +    XSAnnotation* getAnnotation(const void* const key);
  +
  +    /**
  +     * Retrieve the annotation that is associated with the specified key
  +     *
  +     * @param  key   represents a schema component object (i.e. SchemaGrammar)
  +     * @return XSAnnotation associated with the key object
  +     */
  +    const XSAnnotation* getAnnotation(const void* const key) const;
  +
  +    /**
  +      * Get global annotation
  +      */
  +    XSAnnotation* getAnnotation();
  +    const XSAnnotation* getAnnotation() const;
  +
       /***
        * Support for Serialization/De-serialization
        ***/
  @@ -388,6 +429,7 @@
       bool                                   fValidated;
       DatatypeValidatorFactory               fDatatypeRegistry;
       XMLSchemaDescription*                  fGramDesc;
  +    RefHashTableOf<XSAnnotation>*          fAnnotations;
   };
   
   
  @@ -442,6 +484,31 @@
   inline RefHashTableOf<XMLRefInfo>* SchemaGrammar::getIDRefList() const {
   
       return fIDRefList;
  +}
  +
  +inline XMLGrammarDescription* SchemaGrammar::getGrammarDescription() const
  +{
  +    return fGramDesc;
  +}
  +
  +inline XSAnnotation* SchemaGrammar::getAnnotation(const void* const key)
  +{
  +    return fAnnotations->get(key);
  +}
  +
  +inline const XSAnnotation* SchemaGrammar::getAnnotation(const void* const key) const
  +{
  +    return fAnnotations->get(key);
  +}
  +
  +inline XSAnnotation* SchemaGrammar::getAnnotation()
  +{
  +    return fAnnotations->get(this);
  +}
  +
  +inline const XSAnnotation* SchemaGrammar::getAnnotation() const
  +{
  +    return fAnnotations->get(this);
   }
   
   // -----------------------------------------------------------------------
  
  
  
  1.91      +248 -51   xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
  
  Index: TraverseSchema.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
  retrieving revision 1.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- TraverseSchema.cpp        6 Nov 2003 15:30:08 -0000       1.90
  +++ TraverseSchema.cpp        6 Nov 2003 19:28:11 -0000       1.91
  @@ -90,9 +90,11 @@
   #include <xercesc/validators/schema/XSDDOMParser.hpp>
   #include <xercesc/util/HashPtr.hpp>
   #include <xercesc/dom/DOMNamedNodeMap.hpp>
  +#include <xercesc/dom/DOMText.hpp>
   #include <xercesc/dom/impl/XSDElementNSImpl.hpp>
   #include <xercesc/util/OutOfMemoryException.hpp>
   #include <xercesc/util/XMLEntityResolver.hpp>
  +#include <xercesc/framework/psvi/XSAnnotation.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -447,14 +449,15 @@
   }
   
   
  -void TraverseSchema::traverseAnnotationDecl(const DOMElement* const annotationElem,
  -                                            const bool topLevel) {
  +XSAnnotation* TraverseSchema::traverseAnnotationDecl(const DOMElement* const 
annotationElem,
  +                                                     const bool topLevel) {
   
       // -----------------------------------------------------------------------
       // Check Attributes
       // -----------------------------------------------------------------------
       fAttributeCheck.checkAttributes(annotationElem, 
GeneralAttributeCheck::E_Annotation, this, topLevel);
   
  +    const XMLCh* contents = 0;
       for (DOMElement* child = XUtil::getFirstChildElement(annotationElem);
            child != 0;
            child = XUtil::getNextSiblingElement(child)) {
  @@ -462,15 +465,30 @@
           const XMLCh* name = child->getLocalName();
   
           if (XMLString::equals(name, SchemaSymbols::fgELT_APPINFO)) {
  +
  +            DOMNode* textContent = child->getFirstChild();
  +            if (textContent && textContent->getNodeType() == DOMNode::TEXT_NODE)
  +                contents = ((DOMText*) textContent)->getData();
  +
               fAttributeCheck.checkAttributes(child, 
GeneralAttributeCheck::E_Appinfo, this);
           }
           else if (XMLString::equals(name, SchemaSymbols::fgELT_DOCUMENTATION)) {
  +
  +            DOMNode* textContent = child->getFirstChild();
  +            if (textContent && textContent->getNodeType() == DOMNode::TEXT_NODE)
  +                contents = ((DOMText*) textContent)->getData();
  +
               fAttributeCheck.checkAttributes(child, 
GeneralAttributeCheck::E_Documentation, this);
           }
           else {
               reportSchemaError(child, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidAnnotationContent);
           }
       }
  +
  +    if (contents)
  +        return new (fGrammarPoolMemoryManager) XSAnnotation(contents, 
fGrammarPoolMemoryManager);
  +
  +    return 0;
   }
   
   
  @@ -494,9 +512,11 @@
       // ------------------------------------------------------------------
       // First, handle any ANNOTATION declaration
       // ------------------------------------------------------------------
  -    if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
  +    if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0)
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::OnlyAnnotationExpected);
  -    }
  +
  +    if (fAnnotation)
  +        fSchemaGrammar->addAnnotation(fAnnotation);
   
       // ------------------------------------------------------------------
       // Get 'schemaLocation' attribute
  @@ -639,9 +659,11 @@
       // ------------------------------------------------------------------
       // First, handle any ANNOTATION declaration
       // ------------------------------------------------------------------
  -    if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
  +    if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0)
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::OnlyAnnotationExpected);
  -    }
  +
  +    if (fAnnotation)
  +        fSchemaGrammar->addAnnotation(fAnnotation);
   
       // ------------------------------------------------------------------
       // Handle 'namespace' attribute
  @@ -901,6 +923,7 @@
       // Process contents
       // ------------------------------------------------------------------
       DOMElement* child = checkContent(elem, XUtil::getFirstChildElement(elem), true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
       ContentSpecNode* left = 0;
       ContentSpecNode* right = 0;
       bool hadContent = false;
  @@ -1007,6 +1030,9 @@
               , true
               , fGrammarPoolMemoryManager
           );
  +
  +        if (!janAnnot.isDataNull())
  +            fSchemaGrammar->putAnnotation(left, janAnnot.release());
       }
   
       return left;
  @@ -1081,9 +1107,9 @@
           int finalSet = parseFinalSet(childElem, S_Final);
   
           // annotation?,(list|restriction|union)
  -        DOMElement* content= checkContent(childElem,
  -                                          XUtil::getFirstChildElement(childElem),
  -                                          false);
  +        DOMElement* content= checkContent(
  +            childElem, XUtil::getFirstChildElement(childElem), false);
  +        Janitor<XSAnnotation> janAnnot(fAnnotation);
   
           if (content == 0) {
   
  @@ -1104,27 +1130,26 @@
                   return 0;
               }
   
  -            DatatypeValidator *tmpDV = traverseByList(childElem, content, name, 
fullName, finalSet);
  -            if(tmpDV && nameEmpty)
  -                tmpDV->setAnonymous();
  -            return tmpDV;
  +            dv = traverseByList(childElem, content, name, fullName, finalSet, 
&janAnnot);
           }
           else if (XMLString::equals(varietyName, SchemaSymbols::fgELT_RESTRICTION)) 
{ //traverse Restriction
  -            DatatypeValidator *tmpDV = traverseByRestriction(childElem, content, 
name, fullName, finalSet);
  -            if(tmpDV && nameEmpty)
  -                tmpDV->setAnonymous();
  -            return tmpDV;
  +            dv = traverseByRestriction(childElem, content, name, fullName, 
finalSet, &janAnnot);
           }
           else if (XMLString::equals(varietyName, SchemaSymbols::fgELT_UNION)) { 
//traverse union
  -            DatatypeValidator *tmpDV = traverseByUnion(childElem, content, name, 
fullName, finalSet, baseRefContext);
  -            if(tmpDV && nameEmpty)
  -                tmpDV->setAnonymous();
  -            return tmpDV;
  +            dv = traverseByUnion(childElem, content, name, fullName, finalSet, 
baseRefContext, &janAnnot);
           }
           else {
               reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::FeatureUnsupported, varietyName);
               popCurrentTypeNameStack();
           }
  +
  +        if (dv) {
  +            if (nameEmpty)
  +                dv->setAnonymous();
  +
  +            if (!janAnnot.isDataNull())
  +                fSchemaGrammar->putAnnotation(dv, janAnnot.release());
  +        }
       }
   
       return dv;
  @@ -1249,6 +1274,7 @@
       // First, handle any ANNOTATION declaration and get next child
       // ------------------------------------------------------------------
       DOMElement* child = checkContent(elem, XUtil::getFirstChildElement(elem), true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       // ------------------------------------------------------------------
       // Process the content of the complex type declaration
  @@ -1275,7 +1301,7 @@
               if (XMLString::equals(childName, SchemaSymbols::fgELT_SIMPLECONTENT)) {
   
                   // SIMPLE CONTENT element
  -                traverseSimpleContentDecl(name, fullName, child, typeInfo);
  +                traverseSimpleContentDecl(name, fullName, child, typeInfo, 
&janAnnot);
   
                   if (XUtil::getNextSiblingElement(child) != 0) {
                       reportSchemaError(child, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidChildFollowingSimpleContent);
  @@ -1284,7 +1310,7 @@
               else if (XMLString::equals(childName, 
SchemaSymbols::fgELT_COMPLEXCONTENT)) {
   
                   // COMPLEX CONTENT element
  -                traverseComplexContentDecl(name, child, typeInfo, isMixed);
  +                traverseComplexContentDecl(name, child, typeInfo, isMixed, 
&janAnnot);
   
                   if (XUtil::getNextSiblingElement(child) != 0) {
                       reportSchemaError(child, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidChildFollowingConplexContent);
  @@ -1330,6 +1356,10 @@
           }
       }
   
  +    // Store Annotation
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(typeInfo, janAnnot.release());
  +
       // ------------------------------------------------------------------
       // Before exiting, restore the scope, mainly for nested anonymous types
       // ------------------------------------------------------------------
  @@ -1382,11 +1412,6 @@
       fAttributeCheck.checkAttributes(elem, scope, this, topLevel);
   
       // ------------------------------------------------------------------
  -    // Check for annotations
  -    // ------------------------------------------------------------------
  -    DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  -
  -    // ------------------------------------------------------------------
       // Handle "ref="
       // ------------------------------------------------------------------
       if (!topLevel) {
  @@ -1398,9 +1423,6 @@
           return processGroupRef(elem, ref);
       }
   
  -    // ------------------------------------------------------------------
  -    // Process contents of global groups
  -    // ------------------------------------------------------------------
       // name must be a valid NCName
       if (!XMLString::isValidNCName(name)) {
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidDeclarationName,
  @@ -1420,6 +1442,15 @@
           return groupInfo;
       }
   
  +    // ------------------------------------------------------------------
  +    // Check for annotations
  +    // ------------------------------------------------------------------
  +    DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
  +
  +    // ------------------------------------------------------------------
  +    // Process contents of global groups
  +    // ------------------------------------------------------------------
       int saveScope = fCurrentScope;
       ContentSpecNode* specNode = 0;
       XercesGroupInfo* saveGroupInfo = fCurrentGroupInfo;
  @@ -1479,6 +1510,10 @@
       fCurrentGroupInfo = saveGroupInfo;
       fCurrentScope = saveScope;
   
  +    // Store Annotation
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(groupInfo, janAnnot.release());
  +
       if (fFullConstraintChecking) {
   
           XSDLocator* aLocator = new (fGrammarPoolMemoryManager) XSDLocator();
  @@ -1565,6 +1600,7 @@
       // Check for annotations
       // ------------------------------------------------------------------
       DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       // ------------------------------------------------------------------
       // Process contents of global attributeGroups
  @@ -1638,6 +1674,10 @@
           }
       }
   
  +    // Store annotation
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release());
  +
       return attGroupInfo;
   }
   
  @@ -1691,6 +1731,7 @@
       if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::OnlyAnnotationExpected);
       }
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       // ------------------------------------------------------------------
       // Get attributes
  @@ -1826,6 +1867,10 @@
           delete nameSpaceTokens;
       }
   
  +    // Store annotation
  +    if (retSpecNode && !janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(retSpecNode, janAnnot.release());
  +
       return retSpecNode;
   }
   
  @@ -1853,6 +1898,7 @@
       // Process contents
       // ------------------------------------------------------------------
       DOMElement* child = checkContent(elem, XUtil::getFirstChildElement(elem), true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       if (child == 0) {
           return 0;
  @@ -1921,6 +1967,9 @@
               , true
               , fGrammarPoolMemoryManager
           );
  +
  +        if (!janAnnot.isDataNull())
  +            fSchemaGrammar->putAnnotation(left, janAnnot.release());
       }
   
       return left;
  @@ -1982,6 +2031,7 @@
       const XMLCh* attForm = getElementAttValue(elem, SchemaSymbols::fgATT_FORM);
       const XMLCh* dvType = getElementAttValue(elem, SchemaSymbols::fgATT_TYPE);
       DOMElement* simpleType = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
       bool         badContent = false;
   
       while (simpleType != 0) {
  @@ -2265,6 +2315,9 @@
           attDef->setValue(valueToCheck);
       }
   
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(attDef, janAnnot.release());
  +
       if (topLevel) {
           fAttributeDeclRegistry->put((void*) 
fStringPool->getValueForId(fStringPool->addOrFind(name)), attDef);
       }
  @@ -2411,6 +2464,7 @@
   
       // Resolve the type for the element
       const DOMElement*  content = checkContent(elem, 
XUtil::getFirstChildElement(elem), true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       if (content != 0) {
   
  @@ -2707,6 +2761,9 @@
           elemDecl->setModelType(contentSpecType);
           elemDecl->setContentSpec(contentSpecNode);
   
  +        if (!janAnnot.isDataNull())
  +            fSchemaGrammar->putAnnotation(elemDecl, janAnnot.release());
  +
           if (isAnyType) {
               elemDecl->setAttWildCard(new (fGrammarPoolMemoryManager) 
SchemaAttDef(XMLUni::fgZeroLenString,
                                                         XMLUni::fgZeroLenString,
  @@ -2816,6 +2873,8 @@
   
       //we don't really care if something inside <notation> is wrong..
       checkContent(elem, XUtil::getFirstChildElement(elem), true);
  +    if (fAnnotation)
  +        fSchemaGrammar->putAnnotation(decl, fAnnotation);
   
       return name;
   }
  @@ -2882,7 +2941,8 @@
                                  const DOMElement* const contentElem,
                                  const XMLCh* const typeName,
                                  const XMLCh* const qualifiedName,
  -                               const int finalSet) {
  +                               const int finalSet,
  +                               Janitor<XSAnnotation>* const janAnnot) {
   
       DatatypeValidator* baseValidator = 0;
       const XMLCh*       baseTypeName = getElementAttValue(contentElem, 
SchemaSymbols::fgATT_ITEMTYPE);
  @@ -2899,6 +2959,14 @@
   
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
false);
   
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
  +
           if (!content) {
   
               reportSchemaError(contentElem, XMLUni::fgXMLErrDomain, 
XMLErrs::ExpectedSimpleTypeInList, typeName);
  @@ -2922,6 +2990,14 @@
   
           baseValidator = findDTValidator(contentElem, typeName, baseTypeName, 
SchemaSymbols::XSD_LIST);
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
true);
  +
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
       }
   
       DatatypeValidator* newDV = 0;
  @@ -2969,7 +3045,8 @@
                                         const DOMElement* const contentElem,
                                         const XMLCh* const typeName,
                                         const XMLCh* const qualifiedName,
  -                                      const int finalSet) {
  +                                      const int finalSet,
  +                                      Janitor<XSAnnotation>* const janAnnot) {
   
       DatatypeValidator* baseValidator = 0;
       DatatypeValidator* newDV = 0;
  @@ -2987,6 +3064,14 @@
   
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
false);
   
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
  +
           if (content == 0) {
   
               reportSchemaError(contentElem, XMLUni::fgXMLErrDomain, 
XMLErrs::ExpectedSimpleTypeInRestriction);
  @@ -3011,6 +3096,13 @@
   
           baseValidator = findDTValidator(contentElem, typeName, baseTypeName, 
SchemaSymbols::XSD_RESTRICTION);
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
true);
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
       }
   
       if (baseValidator) {
  @@ -3019,6 +3111,8 @@
           RefHashTableOf<KVStringPair>* facets = 0;
           RefArrayVectorOf<XMLCh>*      enums = 0;
           XMLBuffer                     pattern(128, fGrammarPoolMemoryManager);
  +        Janitor<XSAnnotation>         janEnumAnnot(0);
  +        Janitor<XSAnnotation>         janPatternAnnot(0);
           XMLCh                         fixedFlagStr[16];
           unsigned int                  fixedFlag = 0;
           unsigned short                scope = 0;
  @@ -3044,6 +3138,11 @@
                       continue;
                   }
   
  +                // REVISIT
  +                // check for annotation content - we are not checking whether the
  +                // return is empty or not. If not empty we should report an error
  +                checkContent(rootElem, XUtil::getFirstChildElement(content), true);
  +
                   const XMLCh* attValue = 
content->getAttribute(SchemaSymbols::fgATT_VALUE);
                   fAttributeCheck.checkAttributes(content, scope, this);
   
  @@ -3053,6 +3152,13 @@
   
                   if (XMLString::equals(facetName, SchemaSymbols::fgELT_ENUMERATION)) 
{
   
  +                    if (fAnnotation) {
  +                        if (janEnumAnnot.isDataNull())
  +                            janEnumAnnot.reset(fAnnotation);
  +                        else
  +                            janEnumAnnot.get()->setNext(fAnnotation);
  +                    }
  +
                       // REVISIT
                       // if validator is a notation datatype validator, we need
                       // to get the qualified name first before adding it to the
  @@ -3083,6 +3189,13 @@
                   }
                   else if (XMLString::equals(facetName, 
SchemaSymbols::fgELT_PATTERN)) {
   
  +                    if (fAnnotation) {
  +                        if (janPatternAnnot.isDataNull())
  +                            janPatternAnnot.reset(fAnnotation);
  +                        else
  +                            janPatternAnnot.get()->setNext(fAnnotation);
  +                    }
  +
                       if (isFirstPattern) { // fBuffer.isEmpty() - overhead call
   
                           isFirstPattern = false;
  @@ -3097,6 +3210,9 @@
                   else {
   
                       if (facets->containsKey(facetName)) {
  +
  +                        if (fAnnotation)
  +                            delete fAnnotation;
                           reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::DuplicateFacet, facetName);
                       }
                       else {
  @@ -3104,29 +3220,35 @@
                           if (XMLString::equals(facetName, 
SchemaSymbols::fgELT_WHITESPACE)
                               && baseValidator->getType() != DatatypeValidator::String
                               && !XMLString::equals(attValue, 
SchemaSymbols::fgWS_COLLAPSE)) {
  +
  +                            if (fAnnotation)
  +                                delete fAnnotation;
                               reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::WS_CollapseExpected, attValue);
                           }
                           else {
   
                               const XMLCh* facetStr = 
fStringPool->getValueForId(fStringPool->addOrFind(facetName));
  -                            facets->put((void*) facetStr, new 
(fGrammarPoolMemoryManager) KVStringPair(facetStr, attValue, 
fGrammarPoolMemoryManager));
  +                            KVStringPair* kv = new (fGrammarPoolMemoryManager) 
KVStringPair(facetStr, attValue, fGrammarPoolMemoryManager);
  +
  +                            if (fAnnotation)
  +                                fSchemaGrammar->putAnnotation(kv, fAnnotation);
  +
  +                            facets->put((void*) facetStr, kv);
                               checkFixedFacet(content, facetStr, baseValidator, 
fixedFlag);
                           }
                       }
                   }
  -
  -                // REVISIT
  -                // check for annotation content - we are not checking whether the
  -                // return is empty or not. If not empty we should report an error
  -                checkContent(rootElem, XUtil::getFirstChildElement(content), true);
               }
   
               content = XUtil::getNextSiblingElement(content);
           } // end while
   
           if (!pattern.isEmpty()) {
  -            facets->put((void*) SchemaSymbols::fgELT_PATTERN,
  -                        new (fGrammarPoolMemoryManager) 
KVStringPair(SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer(), 
fGrammarPoolMemoryManager));
  +
  +            KVStringPair* kv = new (fGrammarPoolMemoryManager) 
KVStringPair(SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer(), 
fGrammarPoolMemoryManager);
  +            if (!janPatternAnnot.isDataNull())
  +                fSchemaGrammar->putAnnotation(kv, janPatternAnnot.release());
  +            facets->put((void*) SchemaSymbols::fgELT_PATTERN, kv);
           }
   
           if (fixedFlag) {
  @@ -3136,6 +3258,9 @@
                           new (fGrammarPoolMemoryManager) 
KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr, fGrammarPoolMemoryManager));
           }
   
  +        if (enums && !janEnumAnnot.isDataNull())
  +            fSchemaGrammar->putAnnotation(enums, janEnumAnnot.release());
  +
           try {
               newDV = fDatatypeRegistry->createDatatypeValidator(qualifiedName, 
baseValidator, facets, enums, false, finalSet);
           }
  @@ -3163,7 +3288,8 @@
                                   const XMLCh* const typeName,
                                   const XMLCh* const qualifiedName,
                                   const int finalSet,
  -                                int baseRefContext) {
  +                                int baseRefContext,
  +                                Janitor<XSAnnotation>* const janAnnot) {
   
       fAttributeCheck.checkAttributes(contentElem, GeneralAttributeCheck::E_Union, 
this);
   
  @@ -3199,10 +3325,24 @@
           }
   
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
true);
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
       }
       else { // must 'see' <simpleType>
   
           content = checkContent(rootElem, XUtil::getFirstChildElement(contentElem), 
false);
  +        if (fAnnotation)
  +        {
  +            if (janAnnot->isDataNull())
  +                janAnnot->reset(fAnnotation);
  +            else
  +                janAnnot->get()->setNext(fAnnotation);
  +        }
   
           if (content == 0) {
   
  @@ -3298,7 +3438,8 @@
   void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName,
                                                  const XMLCh* const qualifiedName,
                                                  const DOMElement* const contentDecl,
  -                                               ComplexTypeInfo* const typeInfo)
  +                                               ComplexTypeInfo* const typeInfo,
  +                                               Janitor<XSAnnotation>* const 
janAnnot)
   {
       // -----------------------------------------------------------------------
       // Check Attributes
  @@ -3310,7 +3451,17 @@
       // -----------------------------------------------------------------------
       typeInfo->setContentType(SchemaElementDecl::Simple);
   
  +    // -----------------------------------------------------------------------
  +    // Process annotation if any
  +    // -----------------------------------------------------------------------
       DOMElement* simpleContent = checkContent(contentDecl, 
XUtil::getFirstChildElement(contentDecl), false);
  +    if (fAnnotation)
  +    {
  +        if (janAnnot->isDataNull())
  +            janAnnot->reset(fAnnotation);
  +        else
  +            janAnnot->get()->setNext(fAnnotation);
  +    }
   
       // If there are no children, return
       if (simpleContent == 0) {
  @@ -3414,6 +3565,13 @@
       // -----------------------------------------------------------------------
       //Skip over any annotations in the restriction or extension elements
       DOMElement* content = checkContent(simpleContent, 
XUtil::getFirstChildElement(simpleContent), true);
  +    if (fAnnotation)
  +    {
  +        if (janAnnot->isDataNull())
  +            janAnnot->reset(fAnnotation);
  +        else
  +            janAnnot->get()->setNext(fAnnotation);
  +    }
   
       if (typeInfo->getDerivedBy() == SchemaSymbols::XSD_RESTRICTION) {
   
  @@ -3657,7 +3815,8 @@
   void TraverseSchema::traverseComplexContentDecl(const XMLCh* const typeName,
                                                   const DOMElement* const contentDecl,
                                                   ComplexTypeInfo* const typeInfo,
  -                                                const bool isMixed)
  +                                                const bool isMixed,
  +                                                Janitor<XSAnnotation>* const 
janAnnot)
   {
       // ------------------------------------------------------------------
       // Check attributes
  @@ -3690,6 +3849,13 @@
       typeInfo->setBaseDatatypeValidator(0);
   
       DOMElement* complexContent = 
checkContent(contentDecl,XUtil::getFirstChildElement(contentDecl),false);
  +    if (fAnnotation)
  +    {
  +        if (janAnnot->isDataNull())
  +            janAnnot->reset(fAnnotation);
  +        else
  +            janAnnot->get()->setNext(fAnnotation);
  +    }
   
       // If there are no children, return
       if (complexContent == 0) {
  @@ -3756,6 +3922,13 @@
       // -----------------------------------------------------------------------
       //Skip over any annotations in the restriction or extension elements
       DOMElement* content = checkContent(complexContent, 
XUtil::getFirstChildElement(complexContent), true);
  +    if (fAnnotation)
  +    {
  +        if (janAnnot->isDataNull())
  +            janAnnot->reset(fAnnotation);
  +        else
  +            janAnnot->get()->setNext(fAnnotation);
  +    }
   
       processComplexContent(complexContent, typeName, content, typeInfo, baseName, 
localPart,
                             uri, mixedContent, isBaseAnyType);
  @@ -3787,6 +3960,7 @@
       if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::AnyAttributeContentError);
       }
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       // ------------------------------------------------------------------
       // Get attributes
  @@ -3872,6 +4046,8 @@
                                               uriIndex, attType, attDefType,
                                               fGrammarPoolMemoryManager);
   
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(attDef, janAnnot.release());
   
       if (namespaceList.size()) {
          attDef->setNamespaceList(&namespaceList);
  @@ -4094,6 +4270,7 @@
       // First, handle any ANNOTATION declaration
       // ------------------------------------------------------------------
       DOMElement* elem = checkContent(icElem, XUtil::getFirstChildElement(icElem), 
false);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
       // ------------------------------------------------------------------
       // Get selector
  @@ -4112,6 +4289,13 @@
   
       fAttributeCheck.checkAttributes(elem, GeneralAttributeCheck::E_Selector, this);
       checkContent(icElem, XUtil::getFirstChildElement(elem), true);
  +    if (fAnnotation)
  +    {
  +        if (janAnnot.isDataNull())
  +            janAnnot.reset(fAnnotation);
  +        else
  +            janAnnot.get()->setNext(fAnnotation);
  +    }
   
       // ------------------------------------------------------------------
       // Get xpath attribute
  @@ -4183,6 +4367,13 @@
               // General Attribute Checking
               fAttributeCheck.checkAttributes(elem, GeneralAttributeCheck::E_Field, 
this);
               checkContent(icElem, XUtil::getFirstChildElement(elem), true);
  +            if (fAnnotation)
  +                     {
  +                if (janAnnot.isDataNull())
  +                    janAnnot.reset(fAnnotation);
  +                else
  +                    janAnnot.get()->setNext(fAnnotation);
  +            }
   
               // xpath expression parsing
               xpathExpr = getElementAttValue(elem, SchemaSymbols::fgATT_XPATH, true);
  @@ -4227,6 +4418,9 @@
           elem = XUtil::getNextSiblingElement(elem);
       }
   
  +    if (!janAnnot.isDataNull())
  +        fSchemaGrammar->putAnnotation(ic, janAnnot.release());
  +
       if (ic->getFieldCount() == 0) {
           return false;
       }
  @@ -4287,7 +4481,7 @@
           const XMLCh* name = child->getLocalName();
   
           if (XMLString::equals(name, SchemaSymbols::fgELT_ANNOTATION)) {
  -            traverseAnnotationDecl(child, true);
  +            fSchemaGrammar->addAnnotation(traverseAnnotationDecl(child, true));
           }
           else if (XMLString::equals(name, SchemaSymbols::fgELT_INCLUDE)) {
               traverseInclude(child);
  @@ -4319,7 +4513,7 @@
           }
   
           if (XMLString::equals(name, SchemaSymbols::fgELT_ANNOTATION)) {
  -            traverseAnnotationDecl(child, true);
  +            fSchemaGrammar->addAnnotation(traverseAnnotationDecl(child, true));
           }
           else if (XMLString::equals(name, SchemaSymbols::fgELT_SIMPLETYPE)) {
   
  @@ -4485,6 +4679,7 @@
       DOMElement* content = contentElem;
       const XMLCh* name = getElementAttValue(rootElem,SchemaSymbols::fgATT_NAME);
   
  +    fAnnotation = 0;
       if (!content) {
   
          if (!isEmpty) {
  @@ -4496,7 +4691,7 @@
   
       if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ANNOTATION)) {
   
  -        traverseAnnotationDecl(content);
  +        fAnnotation = traverseAnnotationDecl(content);
           content = XUtil::getNextSiblingElement(content);
   
           if (!content) { // must be followed by content
  @@ -4658,10 +4853,10 @@
                                                const XMLCh* const refName) {
   
       DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
   
  -    if (content != 0) {
  +    if (content != 0)
           reportSchemaError(elem, XMLUni::fgValidityDomain, 
XMLValid::NoContentForRef, SchemaSymbols::fgELT_ELEMENT);
  -    }
   
       const XMLCh* prefix = getPrefix(refName);
       const XMLCh* localPart = getLocalPart(refName);
  @@ -6699,6 +6894,7 @@
           reportSchemaError(elem, XMLUni::fgValidityDomain, 
XMLValid::NoContentForRef, SchemaSymbols::fgELT_GROUP);
       }
   
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
       const XMLCh* prefix = getPrefix(refName);
       const XMLCh* localPart = getLocalPart(refName);
       const XMLCh* uriStr = resolvePrefixToURI(elem, prefix);
  @@ -6805,10 +7001,11 @@
                                            const XMLCh* const refName,
                                            ComplexTypeInfo* const typeInfo) {
   
  -if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
  +    if (checkContent(elem, XUtil::getFirstChildElement(elem), true) != 0) {
           reportSchemaError(elem ,XMLUni::fgValidityDomain, 
XMLValid::NoContentForRef, SchemaSymbols::fgELT_ATTRIBUTEGROUP);
       }
   
  +    Janitor<XSAnnotation> janAnnot(fAnnotation);
       const                XMLCh* prefix = getPrefix(refName);
       const                XMLCh* localPart = getLocalPart(refName);
       const                XMLCh* uriStr = resolvePrefixToURI(elem, prefix);
  
  
  
  1.28      +13 -7     xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp
  
  Index: TraverseSchema.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- TraverseSchema.hpp        30 Oct 2003 21:37:32 -0000      1.27
  +++ TraverseSchema.hpp        6 Nov 2003 19:28:11 -0000       1.28
  @@ -171,7 +171,7 @@
       void                preprocessSchema(DOMElement* const schemaRoot,
                                            const XMLCh* const schemaURL);
       void                traverseSchemaHeader(const DOMElement* const schemaRoot);
  -    void                traverseAnnotationDecl(const DOMElement* const childElem,
  +    XSAnnotation*       traverseAnnotationDecl(const DOMElement* const childElem,
                                                  const bool topLevel = false);
       void                traverseInclude(const DOMElement* const childElem);
       void                traverseImport(const DOMElement* const childElem);
  @@ -182,11 +182,13 @@
       void                traverseSimpleContentDecl(const XMLCh* const typeName,
                                                     const XMLCh* const qualifiedName,
                                                     const DOMElement* const 
contentDecl,
  -                                                  ComplexTypeInfo* const typeInfo);
  +                                                  ComplexTypeInfo* const typeInfo,
  +                                                  Janitor<XSAnnotation>* const 
janAnnot);
       void                traverseComplexContentDecl(const XMLCh* const typeName,
                                                     const DOMElement* const 
contentDecl,
                                                     ComplexTypeInfo* const typeInfo,
  -                                                  const bool isMixed);
  +                                                  const bool isMixed,
  +                                                  Janitor<XSAnnotation>* const 
janAnnot);
       DatatypeValidator*  traverseSimpleTypeDecl(const DOMElement* const childElem,
                                                  const bool topLevel = true,
                                                  int baseRefContext = 
SchemaSymbols::XSD_EMPTYSET);
  @@ -197,18 +199,21 @@
                                          const DOMElement* const contentElem,
                                          const XMLCh* const typeName,
                                          const XMLCh* const qualifiedName,
  -                                       const int finalSet);
  +                                       const int finalSet,
  +                                       Janitor<XSAnnotation>* const janAnnot);
       DatatypeValidator*  traverseByRestriction(const DOMElement* const rootElem,
                                                 const DOMElement* const contentElem,
                                                 const XMLCh* const typeName,
                                                 const XMLCh* const qualifiedName,
  -                                              const int finalSet);
  +                                              const int finalSet,
  +                                              Janitor<XSAnnotation>* const 
janAnnot);
       DatatypeValidator*  traverseByUnion(const DOMElement* const rootElem,
                                           const DOMElement* const contentElem,
                                           const XMLCh* const typeName,
                                           const XMLCh* const qualifiedName,
                                           const int finalSet,
  -                                        int baseRefContext);
  +                                        int baseRefContext,
  +                                        Janitor<XSAnnotation>* const janAnnot);
       QName*              traverseElementDecl(const DOMElement* const childElem,
                                               const bool topLevel = false);
       const XMLCh*        traverseNotationDecl(const DOMElement* const childElem);
  @@ -785,6 +790,7 @@
       XSDLocator*                                    fLocator;
       MemoryManager*                                 fMemoryManager;
       MemoryManager*                                 fGrammarPoolMemoryManager;
  +    XSAnnotation*                                  fAnnotation;
       GeneralAttributeCheck                          fAttributeCheck;
   
       friend class GeneralAttributeCheck;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to