You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2010/04/12 10:59:44 UTC

svn commit: r933153 - in /xerces/c/trunk: samples/src/SEnumVal/SEnumVal.cpp scripts/sanityTest_ExpectedResult.log src/xercesc/validators/common/ContentSpecNode.cpp

Author: amassari
Date: Mon Apr 12 08:59:44 2010
New Revision: 933153

URL: http://svn.apache.org/viewvc?rev=933153&view=rev
Log:
The code formatting a content model was skipping the cardinality indicators (*, +, ?) [XERCESC-1914]

Modified:
    xerces/c/trunk/samples/src/SEnumVal/SEnumVal.cpp
    xerces/c/trunk/scripts/sanityTest_ExpectedResult.log
    xerces/c/trunk/src/xercesc/validators/common/ContentSpecNode.cpp

Modified: xerces/c/trunk/samples/src/SEnumVal/SEnumVal.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/samples/src/SEnumVal/SEnumVal.cpp?rev=933153&r1=933152&r2=933153&view=diff
==============================================================================
--- xerces/c/trunk/samples/src/SEnumVal/SEnumVal.cpp (original)
+++ xerces/c/trunk/samples/src/SEnumVal/SEnumVal.cpp Mon Apr 12 08:59:44 2010
@@ -497,7 +497,9 @@ void processContentSpecNode( const Conte
         case ContentSpecNode::ZeroOrOne:           XERCES_STD_QUALIFIER cout << "ZeroOrOne";      break;
         case ContentSpecNode::ZeroOrMore:          XERCES_STD_QUALIFIER cout << "ZeroOrMore";     break;
         case ContentSpecNode::OneOrMore:           XERCES_STD_QUALIFIER cout << "OneOrMore";      break;
+        case ContentSpecNode::ModelGroupChoice:    
         case ContentSpecNode::Choice:              XERCES_STD_QUALIFIER cout << "Choice";         break;
+        case ContentSpecNode::ModelGroupSequence:  
         case ContentSpecNode::Sequence:            XERCES_STD_QUALIFIER cout << "Sequence";       break;
         case ContentSpecNode::All:                 XERCES_STD_QUALIFIER cout << "All";            break;
         case ContentSpecNode::Any:                 XERCES_STD_QUALIFIER cout << "Any";            break;
@@ -509,9 +511,7 @@ void processContentSpecNode( const Conte
         case ContentSpecNode::Any_Skip:            XERCES_STD_QUALIFIER cout << "Any_Skip";       break;
         case ContentSpecNode::Any_Other_Skip:      XERCES_STD_QUALIFIER cout << "Any_Other_Skip"; break;
         case ContentSpecNode::Any_NS_Skip:         XERCES_STD_QUALIFIER cout << "Any_NS_Skip";    break;
-        case ContentSpecNode::Any_NS_Choice:       XERCES_STD_QUALIFIER cout << "Any_NS_Choice";    break;
-        case ContentSpecNode::ModelGroupSequence:  XERCES_STD_QUALIFIER cout << "ModelGroupSequence";    break;
-        case ContentSpecNode::ModelGroupChoice:    XERCES_STD_QUALIFIER cout << "ModelGroupChoice";    break;
+        case ContentSpecNode::Any_NS_Choice:       XERCES_STD_QUALIFIER cout << "Any_NS_Choice";  break;
         case ContentSpecNode::UnknownType:         XERCES_STD_QUALIFIER cout << "UnknownType";    break;
     }
     XERCES_STD_QUALIFIER cout << "\n";

Modified: xerces/c/trunk/scripts/sanityTest_ExpectedResult.log
URL: http://svn.apache.org/viewvc/xerces/c/trunk/scripts/sanityTest_ExpectedResult.log?rev=933153&r1=933152&r2=933153&view=diff
==============================================================================
--- xerces/c/trunk/scripts/sanityTest_ExpectedResult.log (original)
+++ xerces/c/trunk/scripts/sanityTest_ExpectedResult.log Mon Apr 12 08:59:44 2010
@@ -982,20 +982,20 @@ access the Schema information stored in 
 Name:			personnel
 Model Type:		Children
 Create Reason:	Declared
-ContentType:	ModelGroupSequence
-Content Model:	(person,)
+ContentType:	Sequence
+Content Model:	(person+)
 ComplexType:
 	TypeName:	,__AnonC0
-	ContentType:	ModelGroupSequence
+	ContentType:	Sequence
 --------------------------------------------
 Name:			person
 Model Type:		Children
 Create Reason:	Declared
-ContentType:	ModelGroupSequence
-Content Model:	((name,email,url),link)
+ContentType:	Sequence
+Content Model:	(name,email*,url*,link?)
 ComplexType:
 	TypeName:	,__AnonC1
-	ContentType:	ModelGroupSequence
+	ContentType:	Sequence
 Attributes:
 	Name:			id
 	Type:			ID

Modified: xerces/c/trunk/src/xercesc/validators/common/ContentSpecNode.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/common/ContentSpecNode.cpp?rev=933153&r1=933152&r2=933153&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/common/ContentSpecNode.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/common/ContentSpecNode.cpp Mon Apr 12 08:59:44 2010
@@ -100,7 +100,16 @@ static void formatNode( const   ContentS
             if (curNode->getElement()->getURI() == XMLElementDecl::fgPCDataElemId)
                 bufToFill.append(XMLElementDecl::fgPCDataElemName);
             else
+            {
                 bufToFill.append(curNode->getElement()->getRawName());
+                // show the + and * modifiers also when we have a non-infinite number of repetitions
+                if(curNode->getMinOccurs()==0 && (curNode->getMaxOccurs()==-1 || curNode->getMaxOccurs()>1))
+                    bufToFill.append(chAsterisk);
+                else if(curNode->getMinOccurs()==0 && curNode->getMaxOccurs()==1)
+                    bufToFill.append(chQuestion);
+                else if(curNode->getMinOccurs()==1 && (curNode->getMaxOccurs()==-1 || curNode->getMaxOccurs()>1))
+                    bufToFill.append(chPlus);
+            }
             break;
 
         case ContentSpecNode::ZeroOrOne :
@@ -131,27 +140,33 @@ static void formatNode( const   ContentS
             break;
 
         case ContentSpecNode::Choice :
-            if (parentType != curType)
+            if ((parentType & 0x0f) != (curType & 0x0f))
                 bufToFill.append(chOpenParen);
             formatNode(first, curType, bufToFill);
-            bufToFill.append(chPipe);
-            formatNode(second, curType, bufToFill);
-            if (parentType != curType)
+            if(second!=NULL)
+            {
+                bufToFill.append(chPipe);
+                formatNode(second, curType, bufToFill);
+            }
+            if ((parentType & 0x0f) != (curType & 0x0f))
                 bufToFill.append(chCloseParen);
             break;
 
         case ContentSpecNode::Sequence :
-            if (parentType != curType)
+            if ((parentType & 0x0f) != (curType & 0x0f))
                 bufToFill.append(chOpenParen);
             formatNode(first, curType, bufToFill);
-            bufToFill.append(chComma);
-            formatNode(second, curType, bufToFill);
-            if (parentType != curType)
+            if(second!=NULL)
+            {
+                bufToFill.append(chComma);
+                formatNode(second, curType, bufToFill);
+            }
+            if ((parentType & 0x0f) != (curType & 0x0f))
                 bufToFill.append(chCloseParen);
             break;
 
         case ContentSpecNode::All :
-            if (parentType != curType)
+            if ((parentType & 0x0f) != (curType & 0x0f))
 			{
                 bufToFill.append(chLatin_A);
                 bufToFill.append(chLatin_l);
@@ -161,7 +176,7 @@ static void formatNode( const   ContentS
             formatNode(first, curType, bufToFill);
             bufToFill.append(chComma);
             formatNode(second, curType, bufToFill);
-            if (parentType != curType)
+            if ((parentType & 0x0f) != (curType & 0x0f))
                 bufToFill.append(chCloseParen);
             break;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org