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...@locus.apache.org on 2000/08/10 19:52:05 UTC
cvs commit: xml-xalan/c/src/DOMSupport DOMServices.cpp DOMServices.hpp
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