dbertoni    2002/07/10 00:31:03

  Modified:    c/src/XSLT XSLTEngineImpl.cpp XSLTEngineImpl.hpp
  Log:
  Temporary fix for copying namespace nodes.
  
  Revision  Changes    Path
  1.148     +30 -5     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.147
  retrieving revision 1.148
  diff -u -r1.147 -r1.148
  --- XSLTEngineImpl.cpp        10 Jul 2002 00:43:01 -0000      1.147
  +++ XSLTEngineImpl.cpp        10 Jul 2002 07:31:02 -0000      1.148
  @@ -2985,7 +2985,7 @@
   
   
   
  -void
  +bool
   XSLTEngineImpl::addResultNamespace(
                        const XalanDOMString&   thePrefix,
                        const XalanDOMString&   theName,
  @@ -3003,13 +3003,23 @@
                {
                        addResultAttribute(thePendingAttributes, theName, srcURI);
                        addResultNamespaceDecl(thePrefix, srcURI);
  +
  +                     return true;
  +             }
  +             else
  +             {
  +                     return false;
                }
        }
  +     else
  +     {
  +             return false;
  +     }
   }
   
   
   
  -void
  +bool
   XSLTEngineImpl::addResultNamespace(
                        const XalanNode&        theNode,
                        AttributeListImpl&      thePendingAttributes,
  @@ -3023,7 +3033,7 @@
        if (equals(aname, DOMServices::s_XMLNamespace) == true)
        {
                // Default namespace declaration...
  -             addResultNamespace(s_emptyString, aname, theNode, 
thePendingAttributes, fOnlyIfPrefixNotPresent);
  +             return addResultNamespace(s_emptyString, aname, theNode, 
thePendingAttributes, fOnlyIfPrefixNotPresent);
        }
        else if (startsWith(aname, DOMServices::s_XMLNamespaceWithSeparator))
        {
  @@ -3033,7 +3043,11 @@
   
                substring(aname, thePrefix, 
DOMServices::s_XMLNamespaceWithSeparatorLength);
   
  -             addResultNamespace(thePrefix, aname, theNode, thePendingAttributes, 
fOnlyIfPrefixNotPresent);
  +             return addResultNamespace(thePrefix, aname, theNode, 
thePendingAttributes, fOnlyIfPrefixNotPresent);
  +     }
  +     else
  +     {
  +             return false;
        }
   }
   
  @@ -3044,6 +3058,10 @@
   {
        const XalanNode*        parent = &src;
   
  +     XalanDOMStringPointerSetType    names;
  +
  +     XalanDOMStringPointerSetType::iterator  end = names.end();
  +
        while (parent != 0 &&
                   parent->getNodeType() == XalanNode::ELEMENT_NODE) 
        {
  @@ -3063,7 +3081,14 @@
                        const XalanNode* const  attr = nnm->item(i);
                        assert(attr != 0);
   
  -                     addResultNamespace(*attr, thePendingAttributes, true);
  +                     const XalanDOMString&   nodeName = attr->getNodeName();
  +
  +                     if (names.find(&nodeName) == end)
  +                     {
  +                             addResultNamespace(*attr, thePendingAttributes, true);
  +
  +                             names.insert(&nodeName);
  +                     }
                }
   
                parent = parent->getParentNode();
  
  
  
  1.89      +28 -2     xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
  
  Index: XSLTEngineImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- XSLTEngineImpl.hpp        10 Jul 2002 00:43:01 -0000      1.88
  +++ XSLTEngineImpl.hpp        10 Jul 2002 07:31:02 -0000      1.89
  @@ -158,6 +158,28 @@
        typedef clock_t                 ClockType;
   #endif
   
  +     struct CompareXalanDOMStringPointers
  +     {
  +             bool
  +             operator()(
  +                             const XalanDOMString*   theLHS,
  +                             const XalanDOMString*   theRHS) const
  +             {
  +                     if (theLHS == 0 && theRHS != 0)
  +                     {
  +                             return true;
  +                     }
  +                     else if (theRHS == 0)
  +                     {
  +                             return false;
  +                     }
  +                     else
  +                     {
  +                             return theLHS->compare(*theRHS) < 0 ? true : false;
  +                     }
  +             }
  +     };
  +
   #if defined(XALAN_NO_NAMESPACES)
        typedef map<XalanDOMString,
                                int,
  @@ -171,6 +193,8 @@
        typedef vector<const Locator*>                  LocatorStack;
        typedef vector<TraceListener*>                  TraceListenerVectorType;
        typedef vector<bool>                                    BoolVectorType;
  +     typedef set<const XalanDOMString*,
  +                             CompareXalanDOMStringPointers>  
XalanDOMStringPointerSetType;
   #else
        typedef std::map<XalanDOMString, int>           AttributeKeysMapType;
        typedef std::map<XalanDOMString, int>           ElementKeysMapType;
  @@ -178,6 +202,8 @@
        typedef std::vector<const Locator*>                     LocatorStack;
        typedef std::vector<TraceListener*>                     
TraceListenerVectorType;
        typedef std::vector<bool>                                       BoolVectorType;
  +     typedef std::set<const XalanDOMString*,
  +                                      CompareXalanDOMStringPointers> 
XalanDOMStringPointerSetType;
   #endif
   
        typedef XalanAutoPtr<XPathProcessor>                            
XPathProcessorPtrType;
  @@ -1490,7 +1516,7 @@
        bool
        pendingAttributesHasDefaultNS() const; 
   
  -     void
  +     bool
        addResultNamespace(
                        const XalanDOMString&   thePrefix,
                        const XalanDOMString&   theName,
  @@ -1498,7 +1524,7 @@
                        AttributeListImpl&              thePendingAttributes,
                        bool                                    
fOnlyIfPrefixNotPresent);
   
  -     void
  +     bool
        addResultNamespace(
                        const XalanNode&        theNode,
                        AttributeListImpl&      thePendingAttributes,
  
  
  

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

Reply via email to