You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2001/01/25 18:06:41 UTC
cvs commit: xml-xalan/c/src/XSLT XSLTEngineImpl.cpp
dbertoni 01/01/25 09:06:41
Modified: c/src/XSLT XSLTEngineImpl.cpp
Log:
Fixed bug with proper output of CDATA sections. Fixed problem with crash when m_stylesheetRoot was null.
Revision Changes Path
1.81 +87 -85 xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
Index: XSLTEngineImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- XSLTEngineImpl.cpp 2001/01/16 02:50:03 1.80
+++ XSLTEngineImpl.cpp 2001/01/25 17:06:37 1.81
@@ -697,9 +697,6 @@
ds += fragID;
ds += XALAN_STATIC_UCODE_STRING(")");
- assert(nsNode != 0);
-
-
ElementPrefixResolverProxy theProxy(nsNode, m_xpathEnvSupport, m_domSupport);
XPathExecutionContextDefault theExecutionContext(m_xpathEnvSupport,
@@ -1693,7 +1690,7 @@
const Stylesheet::QNameVectorType& cdataElems =
m_stylesheetRoot->getCDATASectionElems();
- if(0 != cdataElems.size() && 0 != m_cdataStack.size())
+ if(0 != cdataElems.size() && 0 != m_cdataStack.size() && m_cdataStack.back() == true)
{
getFormatterListener()->cdata(ch + start, length);
@@ -2675,126 +2672,131 @@
XPathExecutionContext& executionContext,
const XalanNode& textNode) const
{
- assert(m_stylesheetRoot != 0);
-
- bool strip = false; // return value
-
- if((m_stylesheetRoot->getWhitespacePreservingElements().size() > 0 ||
- m_stylesheetRoot->getWhitespaceStrippingElements().size() > 0))
+ if (m_stylesheetRoot == 0)
+ {
+ return false;
+ }
+ else
{
- const XalanNode::NodeType type = textNode.getNodeType();
+ bool strip = false; // return value
- if(XalanNode::TEXT_NODE == type || XalanNode::CDATA_SECTION_NODE == type)
+ if((m_stylesheetRoot->getWhitespacePreservingElements().size() > 0 ||
+ m_stylesheetRoot->getWhitespaceStrippingElements().size() > 0))
{
- const XalanText& theTextNode =
+ const XalanNode::NodeType type = textNode.getNodeType();
+
+ if(XalanNode::TEXT_NODE == type || XalanNode::CDATA_SECTION_NODE == type)
+ {
+ const XalanText& theTextNode =
#if defined(XALAN_OLD_STYLE_CASTS)
- (const XalanText&)textNode;
+ (const XalanText&)textNode;
#else
- static_cast<const XalanText&>(textNode);
+ static_cast<const XalanText&>(textNode);
#endif
- if(!theTextNode.isIgnorableWhitespace())
- {
- const XalanDOMString& data = theTextNode.getData();
-
- if(0 == length(data))
+ if(!theTextNode.isIgnorableWhitespace())
{
- return true;
- }
- else if(!isXMLWhitespace(data))
- {
- return false;
+ const XalanDOMString& data = theTextNode.getData();
+
+ if(0 == length(data))
+ {
+ return true;
+ }
+ else if(!isXMLWhitespace(data))
+ {
+ return false;
+ }
}
- }
- XalanNode* parent = DOMServices::getParentOfNode(textNode);
+ XalanNode* parent = DOMServices::getParentOfNode(textNode);
- while(0 != parent)
- {
- if(parent->getNodeType() == XalanNode::ELEMENT_NODE)
+ while(0 != parent)
{
- const XalanElement* const parentElem =
+ if(parent->getNodeType() == XalanNode::ELEMENT_NODE)
+ {
+ const XalanElement* const parentElem =
#if defined(XALAN_OLD_STYLE_CASTS)
- (const XalanElement*)parent;
+ (const XalanElement*)parent;
#else
- static_cast<const XalanElement*>(parent);
+ static_cast<const XalanElement*>(parent);
#endif
- double highPreserveScore = XPath::s_MatchScoreNone;
- double highStripScore = XPath::s_MatchScoreNone;
+ double highPreserveScore = XPath::s_MatchScoreNone;
+ double highStripScore = XPath::s_MatchScoreNone;
- ElementPrefixResolverProxy theProxy(parentElem, m_xpathEnvSupport, m_domSupport);
+ ElementPrefixResolverProxy theProxy(parentElem, m_xpathEnvSupport, m_domSupport);
- {
- // $$$ ToDo: All of this should be moved into a member of
- // Stylesheet, so as not to expose these two data members...
- typedef Stylesheet::XPathVectorType XPathVectorType;
+ {
+ // $$$ ToDo: All of this should be moved into a member of
+ // Stylesheet, so as not to expose these two data members...
+ typedef Stylesheet::XPathVectorType XPathVectorType;
- const XPathVectorType& theElements =
- m_stylesheetRoot->getWhitespacePreservingElements();
+ const XPathVectorType& theElements =
+ m_stylesheetRoot->getWhitespacePreservingElements();
- const XPathVectorType::size_type nTests =
- theElements.size();
+ const XPathVectorType::size_type nTests =
+ theElements.size();
- for(XPathVectorType::size_type i = 0; i < nTests; i++)
- {
- const XPath* const matchPat = theElements[i];
- assert(matchPat != 0);
+ for(XPathVectorType::size_type i = 0; i < nTests; i++)
+ {
+ const XPath* const matchPat = theElements[i];
+ assert(matchPat != 0);
- const double score = matchPat->getMatchScore(parent, theProxy, executionContext);
+ const double score = matchPat->getMatchScore(parent, theProxy, executionContext);
- if(score > highPreserveScore)
- highPreserveScore = score;
+ if(score > highPreserveScore)
+ highPreserveScore = score;
+ }
}
- }
- {
- typedef Stylesheet::XPathVectorType XPathVectorType;
+ {
+ typedef Stylesheet::XPathVectorType XPathVectorType;
- const XPathVectorType& theElements =
- m_stylesheetRoot->getWhitespaceStrippingElements();
+ const XPathVectorType& theElements =
+ m_stylesheetRoot->getWhitespaceStrippingElements();
- const XPathVectorType::size_type nTests =
- theElements.size();
+ const XPathVectorType::size_type nTests =
+ theElements.size();
- for(XPathVectorType::size_type i = 0; i < nTests; i++)
- {
- const XPath* const matchPat =
- theElements[i];
- assert(matchPat != 0);
+ for(XPathVectorType::size_type i = 0; i < nTests; i++)
+ {
+ const XPath* const matchPat =
+ theElements[i];
+ assert(matchPat != 0);
- const double score = matchPat->getMatchScore(parent, theProxy, executionContext);
+ const double score = matchPat->getMatchScore(parent, theProxy, executionContext);
- if(score > highStripScore)
- highStripScore = score;
+ if(score > highStripScore)
+ highStripScore = score;
+ }
}
- }
- if(highPreserveScore > XPath::s_MatchScoreNone ||
- highStripScore > XPath::s_MatchScoreNone)
- {
- if(highPreserveScore > highStripScore)
- {
- strip = false;
- }
- else if(highStripScore > highPreserveScore)
- {
- strip = true;
- }
- else
+ if(highPreserveScore > XPath::s_MatchScoreNone ||
+ highStripScore > XPath::s_MatchScoreNone)
{
- warn("Match conflict between xsl:strip-space and xsl:preserve-space");
+ if(highPreserveScore > highStripScore)
+ {
+ strip = false;
+ }
+ else if(highStripScore > highPreserveScore)
+ {
+ strip = true;
+ }
+ else
+ {
+ warn("Match conflict between xsl:strip-space and xsl:preserve-space");
+ }
+ break;
}
- break;
}
- }
- parent = parent->getParentNode();
+ parent = parent->getParentNode();
+ }
}
}
- }
- return strip;
+ return strip;
+ }
}