neilg       2003/11/27 09:06:40

  Modified:    c/src/xercesc/internal IGXMLScanner2.cpp SGXMLScanner.cpp
  Log:
  create XSModels if a PSVIHandler has been set on the scanner.  Make PSVI production 
more robust
  
  Revision  Changes    Path
  1.44      +19 -23    xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp
  
  Index: IGXMLScanner2.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- IGXMLScanner2.cpp 27 Nov 2003 06:10:31 -0000      1.43
  +++ IGXMLScanner2.cpp 27 Nov 2003 17:06:40 -0000      1.44
  @@ -141,7 +141,7 @@
           return 0;
   
       // PSVI handling
  -    if(fGrammarType == Grammar::SchemaGrammarType && getPSVIHandler())
  +    if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType )
           fPSVIAttrList->reset();
       PSVIItem::VALIDITY_STATE attrValid = PSVIItem::VALIDITY_VALID;
       PSVIItem::ASSESSMENT_TYPE attrAssessed = PSVIItem::VALIDATION_FULL;
  @@ -271,7 +271,7 @@
                                   );
                                   if(fGrammarType == Grammar::SchemaGrammarType) {
                                       ((SchemaAttDef 
*)(attDef))->setValidity(PSVIDefs::INVALID);
  -                                    if (getPSVIHandler())
  +                                    if(getPSVIHandler() )
                                       {
                                           attrValid = PSVIItem::VALIDITY_INVALID;
                                       }                                
  @@ -292,7 +292,7 @@
                                   );
                                   if(fGrammarType == Grammar::SchemaGrammarType) {
                                       ((SchemaAttDef 
*)(attDef))->setValidity(PSVIDefs::INVALID);
  -                                    if (getPSVIHandler())
  +                                    if(getPSVIHandler() )
                                       {
                                           attrValid = PSVIItem::VALIDITY_INVALID;
                                       }
  @@ -387,7 +387,7 @@
                       ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::VALID);
                   ((SchemaAttDef *)(attDef))->setValidationAttempted(PSVIDefs::FULL);
               }
  -            if(getPSVIHandler())
  +            if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType )
               {
                   // if we've found either an attDef or an attDefForWildCard,
                   // then we're doing full validation and it may still be valid.
  @@ -534,7 +534,8 @@
                               , elemDecl
                           );
                           attrValidator = 
((SchemaValidator*)fValidator)->getMostRecentAttrValidator();
  -                        if(getPSVIHandler() && ((SchemaValidator 
*)fValidator)->getErrorOccurred())
  +                        if(getPSVIHandler() && fGrammarType == 
Grammar::SchemaGrammarType
  +                                && ((SchemaValidator 
*)fValidator)->getErrorOccurred())
                               attrValid = PSVIItem::VALIDITY_INVALID;
                       }
                       else if(fGrammarType == Grammar::SchemaGrammarType)
  @@ -559,7 +560,7 @@
               }
   
               // now fill in the PSVIAttributes entry for this attribute:
  -             if(getPSVIHandler())
  +            if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType)
                {
                    SchemaAttDef *actualAttDef = 0;
                    if(attDef)
  @@ -617,7 +618,7 @@
               if((uriId == fXMLNSNamespaceId)
                     || XMLString::equals(getURIText(uriId), SchemaSymbols::fgURI_XSI))
                   attrValidator = 
DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI);
  -            if(getPSVIHandler())
  +            if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType)
               {
                    PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); 
                    XSSimpleTypeDefinition *validatingType = (attrValidator)
  @@ -803,7 +804,7 @@
                       // Indicate it was not explicitly specified and bump count
                       curAtt->setSpecified(false);
                       retCount++;
  -                    if(getPSVIHandler())
  +                    if(getPSVIHandler() && fGrammarType == 
Grammar::SchemaGrammarType)
                       {
                           PSVIAttribute *defAttrToFill = 
fPSVIAttrList->getPSVIAttributeToFill();
                           XSAttributeDeclaration *defAttrDecl = 
(XSAttributeDeclaration *)fModel->getXSObject((void *)curDef);
  @@ -964,11 +965,9 @@
                            fValidator->emitError(XMLValid::NoAttNormForStandalone, 
attName);
                            if(fGrammarType == Grammar::SchemaGrammarType && attDef) {
                                ((SchemaAttDef 
*)(attDef))->setValidity(PSVIDefs::INVALID);
  -                            if (getPSVIHandler())
  -                            {
  -                                // REVISIT:                                   
  -                                // 
PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID); 
  -                            }
  +                            // note that schema attributes won't be
  +                            // subject to this constraint (standalone only relates
  +                            // to DTD's)
                            }
   
                       }
  @@ -1011,11 +1010,7 @@
                               fValidator->emitError(XMLValid::NoAttNormForStandalone, 
attName);
                               if(fGrammarType == Grammar::SchemaGrammarType && 
attDef) {
                                   ((SchemaAttDef 
*)(attDef))->setValidity(PSVIDefs::INVALID);
  -                                if (getPSVIHandler())
  -                                {
  -                                    // REVISIT:                                   
  -                                    // 
PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID);                   
  -                                }
  +                                // only relates to DTD attributes
                               }
                           }
                       }
  @@ -1830,6 +1825,9 @@
               fValidator->setGrammar(fGrammar);
           }
       }
  +    // fModel may need updating:
  +    if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType)
  +        fModel = fGrammarResolver->getXSModel();
   }
   
   InputSource* IGXMLScanner::resolveSystemId(const XMLCh* const sysId)
  @@ -1976,6 +1974,8 @@
               if (toCache) {
                   fGrammarResolver->cacheGrammars();
               }
  +            if(getPSVIHandler())
  +                fModel = fGrammarResolver->getXSModel();
   
               return grammar;
           }
  @@ -2280,11 +2280,7 @@
   
                               if(fGrammarType == Grammar::SchemaGrammarType) {
                                   ((SchemaAttDef 
*)attDef)->setValidity(PSVIDefs::INVALID);
  -                                if (getPSVIHandler())
  -                                {
  -                                    // REVISIT:                                   
  -                                    // 
PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID);
  -                                }
  +                                // only relates to DTD validation
                                }
                           }
                           nextCh = chSpace;
  
  
  
  1.53      +7 -0      xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp
  
  Index: SGXMLScanner.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- SGXMLScanner.cpp  27 Nov 2003 06:10:31 -0000      1.52
  +++ SGXMLScanner.cpp  27 Nov 2003 17:06:40 -0000      1.53
  @@ -3656,6 +3656,10 @@
               fValidator->setGrammar(fGrammar);
           }
       }
  +    // update fModel; rely on the grammar resolver to do this
  +    // efficiently
  +    if(getPSVIHandler())
  +        fModel = fGrammarResolver->getXSModel();
   }
   
   InputSource* SGXMLScanner::resolveSystemId(const XMLCh* const sysId)
  @@ -3794,6 +3798,9 @@
               if (toCache) {
                   fGrammarResolver->cacheGrammars();
               }
  +
  +            if(getPSVIHandler())
  +                fModel = fGrammarResolver->getXSModel();
   
               return grammar;
           }
  
  
  

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

Reply via email to