dbertoni    00/08/10 10:52:05

  Modified:    c/src/DOMSupport DOMServices.cpp DOMServices.hpp
  Log:
  Broke up code into separate functions.  Fixed problems with isNodeAfter().
  
  Revision  Changes    Path
  1.14      +147 -67   xml-xalan/c/src/DOMSupport/DOMServices.cpp
  
  Index: DOMServices.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/DOMSupport/DOMServices.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DOMServices.cpp   2000/07/25 14:41:50     1.13
  +++ DOMServices.cpp   2000/08/10 17:52:01     1.14
  @@ -63,7 +63,9 @@
   
   
   #include <XalanDOM/XalanAttr.hpp>
  +#include <XalanDOM/XalanCDATASection.hpp>
   #include <XalanDOM/XalanDocument.hpp>
  +#include <XalanDOM/XalanDocumentFragment.hpp>
   #include <XalanDOM/XalanElement.hpp>
   #include <XalanDOM/XalanNamedNodeMap.hpp>
   #include <XalanDOM/XalanNodeList.hpp>
  @@ -156,45 +158,39 @@
        {
        case XalanNode::DOCUMENT_FRAGMENT_NODE:
                {
  -                     const XalanNodeList* const      mnl = 
node.getChildNodes();
  -                     assert(mnl != 0);
  -
  -                     const unsigned int      n = mnl->getLength();
  -
  -                     for(unsigned int i = 0; i < n; ++i)
  -                     {
  -                             assert(mnl->item(i) != 0);
  -
  -                             const XalanDOMString    nodeData =
  -                                     getNodeData(*mnl->item(i));
  -
  -                             if(0 < length(nodeData))
  -                             {
  -                                     data += nodeData;
  -                             }
  -                     }
  +                     const XalanDocumentFragment&            
theDocumentFragment =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (const XalanDocumentFragment&)node;
  +#else
  +                             static_cast<const XalanDocumentFragment&>(node);
  +#endif
  +                     data = getNodeData(theDocumentFragment);
                }
                break;
   
        case XalanNode::DOCUMENT_NODE:
  -     case XalanNode::ELEMENT_NODE:
                {
  -                     const XalanNode*        child = node.getFirstChild();
  -
  -                     while(child != 0)
  -                     {
  -                             const XalanDOMString    nodeData =
  -                                     getNodeData(*child);
  -
  -                             if(0 < length(nodeData))
  -                             {
  -                                     data += nodeData;
  -                             }
  +                     const XalanDocument&    theDocument =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (const XalanDocument&)node;
  +#else
  +                             static_cast<const XalanDocument&>(node);
  +#endif
  +                     data = getNodeData(theDocument);
  +             }
  +             break;
   
  -                             child = child->getNextSibling();
  -                     }
  +     case XalanNode::ELEMENT_NODE:
  +             {
  +                     const XalanElement&             theElement =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (const XalanElement&)node;
  +#else
  +                             static_cast<const XalanElement&>(node);
  +#endif
  +                     data = getNodeData(theElement);
                }
  -       break;
  +             break;
   
        case XalanNode::TEXT_NODE:
        case XalanNode::CDATA_SECTION_NODE:
  @@ -206,16 +202,20 @@
                                static_cast<const XalanText&>(node);
   #endif
   
  -                     // This is commented out because it turns out that it's 
incorrect...
  -//                   if(theResolver.isIgnorableWhitespace(theTextNode) == 
false)
  -//                   {
  -                             data = theTextNode.getData();
  -//                   }
  +                             data = getNodeData(theTextNode);
                }
                break;
   
        case XalanNode::ATTRIBUTE_NODE:
  -             data = node.getNodeValue();
  +             {
  +                     const XalanAttr&                theAttr =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (const XalanAttr&)node;
  +#else
  +                             static_cast<const XalanAttr&>(node);
  +#endif
  +                     data = getNodeData(theAttr);
  +             }
                break;
   
        default:
  @@ -229,6 +229,100 @@
   
   
   XalanDOMString
  +DOMServices::getNodeData(const XalanAttr&    attribute)
  +{
  +     return attribute.getNodeValue();
  +}
  +
  +
  +
  +XalanDOMString
  +DOMServices::getNodeData(const XalanDocument&        document)
  +{
  +     XalanDOMString  data;
  +
  +     const XalanNode*        child = document.getFirstChild();
  +
  +     while(child != 0)
  +     {
  +             const XalanDOMString    nodeData =
  +                                     getNodeData(*child);
  +
  +             if(0 < length(nodeData))
  +             {
  +                     data += nodeData;
  +             }
  +
  +             child = child->getNextSibling();
  +     }
  +
  +     return data;
  +}
  +
  +
  +
  +XalanDOMString
  +DOMServices::getNodeData(const XalanDocumentFragment&        
documentFragment)
  +{
  +     XalanDOMString  data;
  +
  +     const XalanNodeList* const      nl = documentFragment.getChildNodes();
  +     assert(nl != 0);
  +
  +     const unsigned int      n = nl->getLength();
  +
  +     for(unsigned int i = 0; i < n; ++i)
  +     {
  +             assert(nl->item(i) != 0);
  +
  +             const XalanDOMString    nodeData =
  +                                     getNodeData(*nl->item(i));
  +
  +             if(0 < length(nodeData))
  +             {
  +                     data += nodeData;
  +             }
  +     }
  +
  +     return data;
  +}
  +
  +
  +
  +XalanDOMString
  +DOMServices::getNodeData(const XalanElement& element)
  +{
  +     XalanDOMString  data;
  +
  +     const XalanNode*        child = element.getFirstChild();
  +
  +     while(child != 0)
  +     {
  +             const XalanDOMString    nodeData =
  +                                     getNodeData(*child);
  +
  +             if(0 < length(nodeData))
  +             {
  +                     data += nodeData;
  +             }
  +
  +             child = child->getNextSibling();
  +     }
  +
  +     return data;
  +}
  +
  +
  +
  +XalanDOMString
  +DOMServices::getNodeData(const XalanText&    text)
  +{
  +     return text.getData();
  +}
  +
  +
  +
  +XalanDOMString
   DOMServices::getNameOfNode(const XalanNode&          n)
   {
        XalanDOMString  theResult;
  @@ -271,17 +365,11 @@
   XalanDOMString
   DOMServices::getLocalNameOfNode(const XalanNode&     n)
   {
  -     // $$$ ToDo: When Xerces finishes their DOM level 2 stuff, we
  -     // can enable this code.
  -#if 0
  -     return n.getLocalName();
  -#else
        const XalanDOMString    qname = n.getNodeName();
   
        const unsigned int              index = indexOf(qname, ':');
   
        return index == length(qname) ? qname : substring(qname, index + 1);
  -#endif
   }
   
   
  @@ -489,27 +577,20 @@
   
   
   
  -
  -
  -
   bool
   DOMServices::isNodeAfter(
                        const XalanNode&        node1,
                        const XalanNode&        node2)
   {
  -     bool            isNodeAfter = false;
  +     assert(node1.getOwnerDocument() == node2.getOwnerDocument());
  +     assert(node1.getNodeType() != XalanNode::DOCUMENT_NODE &&
  +                     node2.getNodeType() != XalanNode::DOCUMENT_NODE);
   
  -     // Doesn't matter in this case ...
  -     if (XalanNode::DOCUMENT_NODE == node1.getNodeType()
  -                     && XalanNode::DOCUMENT_NODE == node2.getNodeType()) 
return false;
  -     
  +     bool    isNodeAfter = false;
  +
        const XalanNode*        parent1 = getParentOfNode(node1);
  -// @@ Could be document node
  -//   assert(parent1 != 0);
   
        const XalanNode*        parent2 = getParentOfNode(node2);
  -// @@ Could be document node
  -//   assert(parent2 != 0);
   
        // Optimize for most common case
        if(parent1 == parent2) // then we know they are siblings
  @@ -525,7 +606,7 @@
                // first common ancestor, at which point we can do a 
                // sibling compare.  Edge condition where one is the 
                // ancestor of the other.
  -       
  +
                // Count parents, so we can see if one of the chains 
                // needs to be equalized.
                int nParents1 = 2;
  @@ -573,7 +654,7 @@
                // so we can "back up"
                const XalanNode*        prevChild1 = 0;
                const XalanNode*        prevChild2 = 0;
  -       
  +               
                // Loop up the ancestor chain looking for common parent.
                while(0 != startNode1)
                {
  @@ -597,17 +678,16 @@
                        }
   
                        prevChild1 = startNode1;
  -// @@ Could be document node
  -//                   assert(prevChild1 != 0);
  +                     assert(prevChild1 != 0);
   
                        startNode1 = getParentOfNode(*startNode1);
  -//                   assert(startNode1 != 0);
  +                     assert(startNode1 != 0);
   
                        prevChild2 = startNode2;
  -//                   assert(prevChild2 != 0);
  +                     assert(prevChild2 != 0);
   
                        startNode2 = getParentOfNode(*startNode2);
  -//                   assert(startNode2 != 0);
  +                     assert(startNode2 != 0);
                }
        }
   
  @@ -656,7 +736,7 @@
                        {
                                if(found2 == true)
                                {
  -                                     isNodeAfterSibling = false;
  +                                     isNodeAfterSibling = true;
                                        break;
                                }
                  
  @@ -666,7 +746,7 @@
                        {
                                if(found1 == true)
                                {
  -                                     isNodeAfterSibling = true;
  +                                     isNodeAfterSibling = false;
                                        break;
                                }
                  
  @@ -687,7 +767,7 @@
                        {
                                if(found2 == true)
                                {
  -                                     isNodeAfterSibling = false;
  +                                     isNodeAfterSibling = true;
                                        break;
                                }
   
  @@ -697,7 +777,7 @@
                        {
                                if(found1 == true)
                                {
  -                                     isNodeAfterSibling = true;
  +                                     isNodeAfterSibling = false;
                                        break;
                                }
   
  
  
  
  1.11      +50 -2     xml-xalan/c/src/DOMSupport/DOMServices.hpp
  
  Index: DOMServices.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/DOMSupport/DOMServices.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DOMServices.hpp   2000/06/01 16:23:41     1.10
  +++ DOMServices.hpp   2000/08/10 17:52:01     1.11
  @@ -74,8 +74,11 @@
   
   
   
  -class XalanNode;
  +class XalanAttr;
  +class XalanDocument;
  +class XalanDocumentFragment;
   class XalanElement;
  +class XalanNode;
   class XalanText;
   
   
  @@ -149,11 +152,56 @@
        /**
         * Retrieves data for node
         * 
  -      * @param node        DOM node whose data is to be returned
  +      * @param node DOM node whose data is to be returned
         * @return a string representation of the node's data
         */
        static XalanDOMString
        getNodeData(const XalanNode&    node);
  +
  +     /**
  +      * Retrieves data for node
  +      * 
  +      * @param attribute DOM node whose data is to be returned
  +      * @return a string representation of the node's data
  +      */
  +     static XalanDOMString
  +     getNodeData(const XalanAttr&    attribute);
  +
  +     /**
  +      * Retrieves data for node
  +      * 
  +      * @param document DOM node whose data is to be returned
  +      * @return a string representation of the node's data
  +      */
  +     static XalanDOMString
  +     getNodeData(const XalanDocument&        document);
  +
  +     /**
  +      * Retrieves data for node
  +      * 
  +      * @param documentFragment DOM node whose data is to be returned
  +      * @return a string representation of the node's data
  +      */
  +     static XalanDOMString
  +     getNodeData(const XalanDocumentFragment&        documentFragment);
  +
  +     /**
  +      * Retrieves data for node
  +      * 
  +      * @param element DOM node whose data is to be returned
  +      * @return a string representation of the node's data
  +      */
  +     static XalanDOMString
  +     getNodeData(const XalanElement&         element);
  +
  +     /**
  +      * Retrieves data for node
  +      * 
  +      * @param node DOM node whose data is to be returned
  +      * @return a string representation of the node's data
  +      */
  +     static XalanDOMString
  +     getNodeData(const XalanText&    text);
   
        /**
         * Retrieve the name of the node, taking into
  
  
  

Reply via email to