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 2009/08/13 15:49:59 UTC
svn commit: r803885 - in /xerces/c/trunk/src/xercesc/validators/schema:
TraverseSchema.cpp identity/XercesXPath.cpp
Author: amassari
Date: Thu Aug 13 13:49:59 2009
New Revision: 803885
URL: http://svn.apache.org/viewvc?rev=803885&view=rev
Log:
Don't manipulate the XPath expression to ensure it starts with "./" before parsing; add the proper token after the scanner phase
Modified:
xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp
Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=803885&r1=803884&r2=803885&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Thu Aug 13 13:49:59 2009
@@ -109,21 +109,6 @@
chLatin_e, chLatin_d, chNull
};
-static const XMLCh fgSkip[] =
-{
- chLatin_s, chLatin_k, chLatin_i, chLatin_p, chNull
-};
-
-static const XMLCh fgLax[] =
-{
- chLatin_l, chLatin_a, chLatin_x, chNull
-};
-
-static const XMLCh fgStrict[] =
-{
- chLatin_s, chLatin_t, chLatin_r, chLatin_i, chLatin_c, chLatin_t, chNull
-};
-
static const XMLCh fgValueOne[] =
{
chDigit_1, chNull
@@ -134,21 +119,6 @@
chDigit_0, chNull
};
-static const XMLCh fgForwardSlash[] =
-{
- chForwardSlash, chNull
-};
-
-static const XMLCh fgDot[] =
-{
- chPeriod, chNull
-};
-
-static const XMLCh fgDotForwardSlash[] =
-{
- chPeriod, chForwardSlash, chNull
-};
-
static const XMLCh* fgIdentityConstraints[] =
{
SchemaSymbols::fgELT_UNIQUE,
@@ -1985,15 +1955,15 @@
ContentSpecNode::NodeTypes anyOtherType = ContentSpecNode::Any_Other;
if ((processContents && *processContents)
- && !XMLString::equals(processContents, fgStrict)) {
+ && !XMLString::equals(processContents, SchemaSymbols::fgATTVAL_STRICT)) {
- if (XMLString::equals(processContents, fgLax)) {
+ if (XMLString::equals(processContents, SchemaSymbols::fgATTVAL_LAX)) {
anyType = ContentSpecNode::Any_Lax;
anyOtherType = ContentSpecNode::Any_Other_Lax;
anyLocalType = ContentSpecNode::Any_NS_Lax;
}
- else if (XMLString::equals(processContents, fgSkip)) {
+ else if (XMLString::equals(processContents, SchemaSymbols::fgATTVAL_SKIP)) {
anyType = ContentSpecNode::Any_Skip;
anyOtherType = ContentSpecNode::Any_Other_Skip;
@@ -4548,41 +4518,12 @@
return false;
}
- fBuffer.reset();
-
- XMLSize_t startIndex = 0;
-
- while (startIndex < xpathLen) {
- if(XMLChar1_0::isWhitespace(*(xpathExpr+startIndex)))
- {
- fBuffer.append(xpathExpr + startIndex, 1);
- startIndex++;
- continue;
- }
-
- if (!XMLString::startsWith(xpathExpr + startIndex, fgForwardSlash)
- && !XMLString::startsWith(xpathExpr + startIndex, fgDot)) {
- fBuffer.append(fgDotForwardSlash);
- }
-
- int chOffset = XMLString::indexOf(xpathExpr, chPipe, startIndex, fMemoryManager);
-
- if (chOffset == -1)
- break;
-
- fBuffer.append(xpathExpr + startIndex, chOffset + 1 - startIndex);
- startIndex = chOffset + 1;
- }
-
- if (startIndex < xpathLen)
- fBuffer.append(xpathExpr + startIndex);
-
// ------------------------------------------------------------------
// Parse xpath expression
// ------------------------------------------------------------------
try {
- XercesXPath* sXPath = new (fGrammarPoolMemoryManager) XercesXPath(fBuffer.getRawBuffer(), fStringPool, fSchemaInfo->getNamespaceScope(), fEmptyNamespaceURI, true, fGrammarPoolMemoryManager);
+ XercesXPath* sXPath = new (fGrammarPoolMemoryManager) XercesXPath(xpathExpr, fStringPool, fSchemaInfo->getNamespaceScope(), fEmptyNamespaceURI, true, fGrammarPoolMemoryManager);
IC_Selector* icSelector = new (fGrammarPoolMemoryManager) IC_Selector(sXPath, ic);
ic->setSelector(icSelector);
}
@@ -4636,21 +4577,11 @@
return false;
}
- if (XMLString::startsWith(xpathExpr, fgForwardSlash)
- || XMLString::startsWith(xpathExpr, fgDot)) {
- fBuffer.set(xpathExpr);
- }
- else {
-
- fBuffer.set(fgDotForwardSlash);
- fBuffer.append(xpathExpr);
- }
-
try {
XercesXPath* fieldXPath = new (fGrammarPoolMemoryManager) XercesXPath
(
- fBuffer.getRawBuffer()
+ xpathExpr
, fStringPool
, fSchemaInfo->getNamespaceScope()
, fEmptyNamespaceURI
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp?rev=803885&r1=803884&r2=803885&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp Thu Aug 13 13:49:59 2009
@@ -420,6 +420,13 @@
ThrowXMLwithMemMgr(XPathException, XMLExcepts::XPath_NoMultipleUnion, fMemoryManager);
}
+ if(stepsVector->elementAt(0)->getAxisType()!=XercesStep::AxisType_SELF)
+ {
+ // prepend ./
+ XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::NodeType_NODE, fMemoryManager);
+ XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::AxisType_SELF, nodeTest);
+ stepsVector->insertElementAt(step, 0);
+ }
fLocationPaths->addElement(new (fMemoryManager) XercesLocationPath(stepsVector));
janSteps.orphan();
stepsVector = new (fMemoryManager) RefVectorOf<XercesStep>(16, true, fMemoryManager);
@@ -624,6 +631,10 @@
ThrowXMLwithMemMgr(XPathException, XMLExcepts::XPath_ExpectedStep3, fMemoryManager);
}
+ aToken = tokens.elementAt(i+1);
+ if(aToken == XercesXPath::EXPRTOKEN_OPERATOR_SLASH || aToken == XercesXPath::EXPRTOKEN_OPERATOR_DOUBLE_SLASH || aToken == XercesXPath::EXPRTOKEN_OPERATOR_UNION)
+ ThrowXMLwithMemMgr(XPathException, XMLExcepts::XPath_ExpectedStep3, fMemoryManager);
+
firstTokenOfLocationPath=false;
break;
}
@@ -643,6 +654,13 @@
}
}
+ if(stepsVector->elementAt(0)->getAxisType()!=XercesStep::AxisType_SELF)
+ {
+ // prepend ./
+ XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::NodeType_NODE, fMemoryManager);
+ XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::AxisType_SELF, nodeTest);
+ stepsVector->insertElementAt(step, 0);
+ }
fLocationPaths->addElement(new (fMemoryManager) XercesLocationPath(stepsVector));
janSteps.orphan();
}
@@ -842,7 +860,7 @@
ch = data[currentOffset];
} while (XMLChar1_0::isWhitespace(ch));
- if (currentOffset == endOffset || ch == chPipe) {
+ if (currentOffset == endOffset || ch == chPipe || ch == chForwardSlash) {
addToken(tokens, XercesXPath::EXPRTOKEN_PERIOD);
starIsMultiplyOperator = true;
break;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org