dbertoni    2004/04/01 18:45:28

  Modified:    c/src/xalanc/XPath XPath.cpp XPath.hpp
                        XPathExecutionContext.hpp
                        XPathExecutionContextDefault.cpp
                        XPathExecutionContextDefault.hpp
  Log:
  Initial clean up of whitespace stripping.  Fixed bug with whitespace 
stripping and xsl:copy-of.
  
  Revision  Changes    Path
  1.13      +171 -12   xml-xalan/c/src/xalanc/XPath/XPath.cpp
  
  Index: XPath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.cpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XPath.cpp 26 Feb 2004 22:40:34 -0000      1.12
  +++ XPath.cpp 2 Apr 2004 02:45:27 -0000       1.13
  @@ -4362,6 +4362,7 @@
   
   
   
  +#if !defined(NDEBUG)
   XPath::eMatchScore
   XPath::nodeTest(
                        XPathExecutionContext&  executionContext,
  @@ -4391,7 +4392,11 @@
        case XPathExpression::eNODETYPE_TEXT:
                if ((XalanNode::CDATA_SECTION_NODE == nodeType ||
                         XalanNode::TEXT_NODE == nodeType) &&
  -                     executionContext.shouldStripSourceNode(*context) == 
false)
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                     executionContext.shouldStripSourceNode((const 
XalanText&)*context) == false)
  +#else
  +                     
executionContext.shouldStripSourceNode(static_cast<const XalanText&>(*context)) 
== false)
  +#endif                       
                {
                          score = eMatchScoreNodeTest;
                }
  @@ -4433,7 +4438,11 @@
                if (nodeType == XalanNode::CDATA_SECTION_NODE ||
                        nodeType == XalanNode::TEXT_NODE)
                {
  -                     if (executionContext.shouldStripSourceNode(*context) == 
false)
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                     if (executionContext.shouldStripSourceNode((const 
XalanText&)*context) == false)
  +#else
  +                     if 
(executionContext.shouldStripSourceNode(static_cast<const 
XalanText&>(*context)) == false)
  +#endif
                        {
                                score = eMatchScoreNodeTest;
                        }
  @@ -4640,6 +4649,7 @@
   
        return score;
   }
  +#endif  // !defined(NDEBUG)
   
   
   
  @@ -4764,10 +4774,11 @@
                        OpCodeMapPositionType   opPos,
                        OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType) :
  -     m_executionContext(executionContext),
  +     m_executionContext(&executionContext),
        m_targetNamespace(0),
        m_targetLocalName(0),
  -     m_testFunction(0)
  +     m_testFunction(0),
  +    m_testFunction2(&NodeTester::testDefault2)
   {
        const XPathExpression&  theExpression = xpath.getExpression();
   
  @@ -4796,8 +4807,12 @@
                }
                else
                {
  -
  -                     
executionContext.error(XalanMessageLoader::getMessage(XalanMessages::ArgLengthNodeTestIsIncorrect_1Param,
 "processing-instruction()"), 0, xpath.getLocator());
  +                     executionContext.error(
  +                XalanMessageLoader::getMessage(
  +                    XalanMessages::ArgLengthNodeTestIsIncorrect_1Param,
  +                    "processing-instruction()"),
  +                    0,
  +                    xpath.getLocator());
                }
                break;
   
  @@ -4902,6 +4917,62 @@
   
   
   
  +XPath::NodeTester::NodeTester() :
  +     m_executionContext(0),
  +     m_targetNamespace(0),
  +     m_targetLocalName(0),
  +     m_testFunction(&NodeTester::testDefault),
  +    m_testFunction2(&NodeTester::testDefault2)
  +{
  +}
  +
  +
  +
  +XPath::NodeTester::NodeTester(
  +            const XalanDOMString&   theNamespaceURI,
  +            const XalanDOMString&   theLocalName,
  +            eMatchScore&            theMatchScore) :
  +     m_executionContext(0),
  +     m_targetNamespace(0),
  +     m_targetLocalName(0),
  +     m_testFunction(&NodeTester::testDefault),
  +    m_testFunction2(0)
  +{
  +    if (theNamespaceURI.empty() == false)
  +    {
  +        m_targetNamespace = &theNamespaceURI;
  +
  +        if (theLocalName.empty() == true)
  +        {
  +            m_testFunction2 = &NodeTester::testElementNamespaceOnly2;
  +
  +            theMatchScore = eMatchScoreNSWild;
  +        }
  +        else
  +        {
  +            m_testFunction2 = &NodeTester::testElementQName2;
  +
  +            theMatchScore = eMatchScoreQName;
  +        }
  +    }
  +    else if (theLocalName.empty() == false)
  +    {
  +        m_testFunction2 = &NodeTester::testElementNCName2;
  +
  +        m_targetLocalName = &theLocalName;
  +
  +        theMatchScore = eMatchScoreQName;
  +    }
  +    else
  +    {
  +        m_testFunction2 = &NodeTester::testElementTotallyWild2;
  +
  +        theMatchScore = eMatchScoreNodeTest;
  +    }
  +}
  +
  +
  +
   // MSVC generates some really horrible code for some of these very simple 
functions when they're inlined...
   #if defined(_MSC_VER)
   #pragma auto_inline(off)
  @@ -4930,7 +5001,11 @@
                        XalanNode::NodeType             nodeType) const
   {
        if ((XalanNode::TEXT_NODE == nodeType || XalanNode::CDATA_SECTION_NODE 
== nodeType) &&
  -              shouldStripSourceNode(context) == false)
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +             shouldStripSourceNode((const XalanText&)context) == false)
  +#else
  +             shouldStripSourceNode(static_cast<const XalanText&>(context)) 
== false)
  +#endif
        {
                return eMatchScoreNodeTest;
        }
  @@ -4985,7 +5060,11 @@
                        XalanNode::NodeType             nodeType) const
   {
        if ((nodeType != XalanNode::TEXT_NODE && nodeType != 
XalanNode::CDATA_SECTION_NODE) ||
  -             shouldStripSourceNode(context) == false)
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +             shouldStripSourceNode((const XalanText&)context) == false)
  +#else
  +             shouldStripSourceNode(static_cast<const XalanText&>(context)) 
== false)
  +#endif
        {
                return eMatchScoreNodeTest;
        }
  @@ -5190,6 +5269,79 @@
   
   
   XPath::eMatchScore
  +XPath::NodeTester::testElementNCName2(const XalanNode&  context) const
  +{
  +     assert(
  +        m_targetNamespace == 0 &&
  +        m_targetLocalName != 0 &&
  +        XalanNode::ELEMENT_NODE == context.getNodeType());
  +
  +     if (matchLocalName(context) == false)
  +     {
  +             return eMatchScoreNone;
  +     }
  +     else
  +     {
  +             return eMatchScoreQName;
  +     }
  +}
  +
  +
  +
  +XPath::eMatchScore
  +XPath::NodeTester::testElementQName2(const XalanNode&   context) const
  +{
  +     assert(
  +        m_targetNamespace != 0 &&
  +        m_targetLocalName != 0 &&
  +        XalanNode::ELEMENT_NODE == context.getNodeType());
  +
  +     if (matchLocalNameAndNamespaceURI(context) == false)
  +     {
  +             return eMatchScoreNone;
  +     }
  +     else
  +     {
  +             return eMatchScoreQName;
  +     }
  +}
  +
  +
  +
  +XPath::eMatchScore
  +XPath::NodeTester::testElementNamespaceOnly2(const XalanNode&   context) 
const
  +{
  +     assert(
  +        m_targetNamespace != 0 &&
  +        m_targetLocalName == 0 &&
  +        XalanNode::ELEMENT_NODE == context.getNodeType());
  +
  +     if (matchNamespaceURI(context) == false)
  +     {
  +             return eMatchScoreNone;
  +     }
  +     else
  +     {
  +             return eMatchScoreNSWild;
  +     }
  +}
  +
  +
  +
  +XPath::eMatchScore
  +XPath::NodeTester::testElementTotallyWild2(const XalanNode&     context) 
const
  +{
  +     assert(
  +        m_targetNamespace == 0 &&
  +        m_targetLocalName == 0 &&
  +        XalanNode::ELEMENT_NODE == context.getNodeType());
  +
  +     return eMatchScoreNodeTest;
  +}
  +
  +
  +
  +XPath::eMatchScore
   XPath::NodeTester::testNamespaceNCName(
                        const XalanNode&                context,
                        XalanNode::NodeType             nodeType) const
  @@ -5240,6 +5392,14 @@
   
   
   
  +XPath::eMatchScore
  +XPath::NodeTester::testDefault2(const XalanNode&    /* context */) const
  +{
  +     return eMatchScoreNone;
  +}
  +
  +
  +
   bool
   XPath::NodeTester::matchLocalName(const XalanNode&   context) const
   {
  @@ -5283,12 +5443,11 @@
   
   
   bool
  -XPath::NodeTester::shouldStripSourceNode(const XalanNode&    context) const
  +XPath::NodeTester::shouldStripSourceNode(const XalanText&    context) const
   {
  -     assert(context.getNodeType() == XalanNode::CDATA_SECTION_NODE ||
  -                context.getNodeType() == XalanNode::TEXT_NODE);
  +     assert(m_executionContext != 0);
   
  -     return m_executionContext.shouldStripSourceNode(context);
  +    return m_executionContext->shouldStripSourceNode(context);
   }
   
   
  
  
  
  1.8       +169 -136  xml-xalan/c/src/xalanc/XPath/XPath.hpp
  
  Index: XPath.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XPath.hpp 26 Feb 2004 22:40:34 -0000      1.7
  +++ XPath.hpp 2 Apr 2004 02:45:28 -0000       1.8
  @@ -1026,6 +1026,173 @@
                m_locator = theLocator;
        }
   
  +     class NodeTester
  +     {
  +     public:
  +
  +             NodeTester(
  +                     const XPath&                    xpath,
  +                     XPathExecutionContext&  executionContext,
  +                     OpCodeMapPositionType   opPos,
  +                     OpCodeMapValueType          argLen,
  +                     OpCodeMapValueType              stepType);
  +
  +             NodeTester();
  +
  +             NodeTester(
  +            const XalanDOMString&   theNamespaceURI,
  +            const XalanDOMString&   theLocalName,
  +            eMatchScore&            theMatchScore);
  +
  +             eMatchScore
  +             operator()(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const
  +             {
  +                     assert(context.getNodeType() == nodeType);
  +
  +                     return (this->*m_testFunction)(context, nodeType);
  +             }
  +
  +             eMatchScore
  +             operator()(const XalanNode&     context) const
  +             {
  +                     return (this->*m_testFunction2)(context);
  +             }
  +
  +     private:
  +
  +             typedef eMatchScore (NodeTester::*TestFunctionPtr)(const 
XalanNode&, XalanNode::NodeType) const;
  +             typedef eMatchScore (NodeTester::*TestFunctionPtr2)(const 
XalanNode&) const;
  +
  +
  +             eMatchScore
  +             testComment(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testText(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testPI(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testPIName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testNode(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testRoot(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testAttributeNCName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testAttributeQName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testAttributeNamespaceOnly(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testAttributeTotallyWild(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testElementNCName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testElementQName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testElementNamespaceOnly(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testElementTotallyWild(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testElementNCName2(const XalanNode&     context) const;
  +
  +             eMatchScore
  +             testElementQName2(const XalanNode&              context) const;
  +
  +             eMatchScore
  +             testElementNamespaceOnly2(const XalanNode&  context) const;
  +
  +             eMatchScore
  +             testElementTotallyWild2(const XalanNode&    context) const;
  +
  +             eMatchScore
  +             testNamespaceNCName(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testNamespaceTotallyWild(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testDefault(
  +                     const XalanNode&                context,
  +                     XalanNode::NodeType             nodeType) const;
  +
  +             eMatchScore
  +             testDefault2(const XalanNode&   context) const;
  +
  +             bool
  +             matchLocalName(const XalanNode&         context) const;
  +
  +             bool
  +             matchNamespaceURI(const XalanNode&      context) const;
  +
  +             bool
  +             matchLocalNameAndNamespaceURI(const XalanNode&  context) const;
  +
  +             bool
  +             matchNamespace(const XalanNode&         context) const;
  +
  +             bool
  +             shouldStripSourceNode(const XalanText&  context) const;
  +
  +             // Data members...
  +             XPathExecutionContext*  m_executionContext;
  +
  +             const XalanDOMString*   m_targetNamespace;
  +
  +             const XalanDOMString*   m_targetLocalName;
  +
  +             TestFunctionPtr                 m_testFunction;
  +
  +        TestFunctionPtr2        m_testFunction2;
  +     };
  +
   protected:
   
        /**
  @@ -2187,142 +2354,6 @@
                        XalanNode&                              context, 
                        OpCodeMapPositionType   opPos) const;
   
  -     class NodeTester
  -     {
  -     public:
  -
  -             NodeTester(
  -                     const XPath&                    xpath,
  -                     XPathExecutionContext&  executionContext,
  -                     OpCodeMapPositionType   opPos,
  -                     OpCodeMapValueType          argLen,
  -                     OpCodeMapValueType              stepType);
  -
  -             eMatchScore
  -             operator()(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const
  -             {
  -                     assert(context.getNodeType() == nodeType);
  -
  -                     return (this->*m_testFunction)(context, nodeType);
  -             }
  -
  -     private:
  -
  -             typedef eMatchScore (NodeTester::*TestFunctionPtr)(const 
XalanNode&, XalanNode::NodeType) const;
  -
  -
  -             eMatchScore
  -             testComment(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testText(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testPI(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testPIName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testNode(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testRoot(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testAttributeNCName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testAttributeQName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testAttributeNamespaceOnly(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testAttributeTotallyWild(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testElementNCName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testElementQName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testElementNamespaceOnly(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testElementTotallyWild(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testNamespaceNCName(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testNamespaceTotallyWild(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             eMatchScore
  -             testDefault(
  -                     const XalanNode&                context,
  -                     XalanNode::NodeType             nodeType) const;
  -
  -             bool
  -             matchLocalName(const XalanNode&         context) const;
  -
  -             bool
  -             matchNamespaceURI(const XalanNode&      context) const;
  -
  -             bool
  -             matchLocalNameAndNamespaceURI(const XalanNode&  context) const;
  -
  -             bool
  -             matchNamespace(const XalanNode&         context) const;
  -
  -             bool
  -             shouldStripSourceNode(const XalanNode&  context) const;
  -
  -             // Data members...
  -             XPathExecutionContext&  m_executionContext;
  -
  -             const XalanDOMString*   m_targetNamespace;
  -
  -             const XalanDOMString*   m_targetLocalName;
  -
  -             TestFunctionPtr                 m_testFunction;
  -     };
  -
   protected:
   
        void
  @@ -2469,6 +2500,7 @@
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  +#if !defined(NDEBUG)
        eMatchScore
        nodeTest(
                        XPathExecutionContext&  executionContext,
  @@ -2477,6 +2509,7 @@
                        OpCodeMapPositionType   opPos,
                        OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType) const;
  +#endif
   
        OpCodeMapPositionType
        predicates(
  
  
  
  1.9       +1 -1      xml-xalan/c/src/xalanc/XPath/XPathExecutionContext.hpp
  
  Index: XPathExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPathExecutionContext.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XPathExecutionContext.hpp 26 Feb 2004 22:40:35 -0000      1.8
  +++ XPathExecutionContext.hpp 2 Apr 2004 02:45:28 -0000       1.9
  @@ -632,7 +632,7 @@
         * @return true if the text node should be stripped of extra whitespace
         */
        virtual bool
  -     shouldStripSourceNode(const XalanNode&  node) = 0;
  +     shouldStripSourceNode(const XalanText&  node) = 0;
   
        /**
         * Get the document associated with the given URI.
  
  
  
  1.10      +1 -1      
xml-xalan/c/src/xalanc/XPath/XPathExecutionContextDefault.cpp
  
  Index: XPathExecutionContextDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XPath/XPathExecutionContextDefault.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XPathExecutionContextDefault.cpp  11 Mar 2004 00:49:12 -0000      1.9
  +++ XPathExecutionContextDefault.cpp  2 Apr 2004 02:45:28 -0000       1.10
  @@ -453,7 +453,7 @@
   
   
   bool
  -XPathExecutionContextDefault::shouldStripSourceNode(const XalanNode& /* node 
*/)
  +XPathExecutionContextDefault::shouldStripSourceNode(const XalanText& /* node 
*/)
   {
        return false;
   }
  
  
  
  1.8       +1 -1      
xml-xalan/c/src/xalanc/XPath/XPathExecutionContextDefault.hpp
  
  Index: XPathExecutionContextDefault.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XPath/XPathExecutionContextDefault.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XPathExecutionContextDefault.hpp  26 Feb 2004 22:40:35 -0000      1.7
  +++ XPathExecutionContextDefault.hpp  2 Apr 2004 02:45:28 -0000       1.8
  @@ -297,7 +297,7 @@
                        const XalanDocument&            theDocument) const;
   
        virtual bool
  -     shouldStripSourceNode(const XalanNode&  node);
  +     shouldStripSourceNode(const XalanText&  node);
   
        virtual XalanDocument*
        getSourceDocument(const XalanDOMString&         theURI) const;
  
  
  

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

Reply via email to