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/08 19:12:24 UTC
cvs commit: xml-xalan/c/src/DOMSupport DOMServices.cpp DOMServices.hpp DOMSupport.hpp DOMSupportDefault.cpp DOMSupportDefault.hpp
dbertoni 01/01/08 10:12:24
Modified: c/src/DOMSupport DOMServices.cpp DOMServices.hpp
DOMSupport.hpp DOMSupportDefault.cpp
DOMSupportDefault.hpp
Log:
Made some functions inline. Added new functions to DOMSupport.
Revision Changes Path
1.22 +55 -0 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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- DOMServices.cpp 2001/01/03 19:27:05 1.21
+++ DOMServices.cpp 2001/01/08 18:12:24 1.22
@@ -788,3 +788,58 @@
return isNodeAfterSibling;
}
+
+
+
+XalanNode*
+DOMServices::findOwnerElement(
+ const XalanNode& attr,
+ XalanNode& element)
+{
+
+ XalanNode* parent = 0;
+
+ const XalanNamedNodeMap* const attrs = element.getAttributes();
+
+ if(attrs != 0)
+ {
+ const unsigned int nAttrs = attrs->getLength();
+
+ for(unsigned int i = 0; i < nAttrs; i++)
+ {
+ if(attrs->item(i) == &attr)
+ {
+ parent = &element;
+
+ break;
+ }
+ }
+ }
+
+ if(parent == 0)
+ {
+ bool fFound = false;
+
+ XalanNode* child = element.getFirstChild();
+
+ while(child != 0 && fFound == false)
+ {
+ if(child->getNodeType() == XalanNode::ELEMENT_NODE)
+ {
+ parent = findOwnerElement(attr, *child);
+
+ if(parent != 0)
+ {
+ fFound = true;
+ }
+ }
+
+ if (fFound == false)
+ {
+ child = child->getNextSibling();
+ }
+ }
+ }
+
+ return parent;
+}
1.17 +46 -5 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- DOMServices.hpp 2001/01/03 19:27:06 1.16
+++ DOMServices.hpp 2001/01/08 18:12:24 1.17
@@ -67,6 +67,7 @@
#include <XalanDOM/XalanDOMString.hpp>
#include <XalanDOM/XalanAttr.hpp>
#include <XalanDOM/XalanComment.hpp>
+#include <XalanDOM/XalanDocument.hpp>
#include <XalanDOM/XalanElement.hpp>
#include <XalanDOM/XalanProcessingInstruction.hpp>
#include <XalanDOM/XalanText.hpp>
@@ -389,11 +390,11 @@
{
if(node.getNodeType() == XalanNode::ATTRIBUTE_NODE)
{
- #if defined(XALAN_OLD_STYLE_CASTS)
- return ((const XalanAttr&)node).getOwnerElement();
- #else
- return static_cast<const XalanAttr&>(node).getOwnerElement();
- #endif
+#if defined(XALAN_OLD_STYLE_CASTS)
+ return findOwnerElement((const XalanAttr&)node);
+#else
+ return findOwnerElement(static_cast<const XalanAttr&>(node));
+#endif
}
else
{
@@ -438,6 +439,46 @@
const XalanNode& parent,
const XalanNode& child1,
const XalanNode& child2);
+
+private:
+
+ /**
+ * If necessary, do a brute-force search for an owner element. This is
+ * necessary when a given DOM implementation returns 0 for
+ * XalanAttr::getOwnerElement()
+ *
+ * @param attr The XalanAttr instance for which to find the owner element
+ * @return A pointer to the element node that owns the attribute
+ */
+ static XalanNode*
+ findOwnerElement(const XalanAttr& attr)
+ {
+ XalanNode* const theOwnerElement = attr.getOwnerElement();
+
+ if (theOwnerElement != 0)
+ {
+ return theOwnerElement;
+ }
+ else
+ {
+ return findOwnerElement(attr, *attr.getOwnerDocument()->getDocumentElement());
+ }
+ }
+
+ /**
+ * If necessary, do a brute-force search for an owner element. This is
+ * necessary when a given DOM implementation returns 0 for
+ * XalanAttr::getOwnerElement()
+ *
+ * @param attr The XalanAttr instance for which to find the owner element
+ * @param element The document element
+ * @return A pointer to the element node that owns the attribute
+ */
+ static XalanNode*
+ findOwnerElement(
+ const XalanNode& attr,
+ XalanNode& element);
+
};
1.7 +18 -4 xml-xalan/c/src/DOMSupport/DOMSupport.hpp
Index: DOMSupport.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/DOMSupport/DOMSupport.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DOMSupport.hpp 2000/12/30 17:55:33 1.6
+++ DOMSupport.hpp 2001/01/08 18:12:24 1.7
@@ -97,13 +97,15 @@
// These interfaces are new to DOMSupport...
/**
- * Retrieve namespace corresponding to a DOM node
+ * Retrieve the URI corresponding to a namespace prefix
*
- * @param theNode DOM node whose namespace is queried
- * @return namespace corresponding to 'theNode'
+ * @param prefix prefix for a namespace
+ * @return URI corresponding to namespace
*/
virtual const XalanDOMString&
- getNamespaceOfNode(const XalanNode& theNode) const = 0;
+ getNamespaceForPrefix(
+ const XalanDOMString& prefix,
+ const XalanElement& namespaceContext) const = 0;
/**
* Retrieves the URI of the named unparsed entity
@@ -117,6 +119,18 @@
getUnparsedEntityURI(
const XalanDOMString& theName,
const XalanDocument& theDocument) const = 0;
+
+ /**
+ * Determine if a node is after another node, in document order.
+ *
+ * @param node1 The first node
+ * @param node2 The second node
+ * @return true if node1 one is after node2, or false if it is not.
+ */
+ virtual bool
+ isNodeAfter(
+ const XalanNode& node1,
+ const XalanNode& node2) const = 0;
};
1.9 +14 -4 xml-xalan/c/src/DOMSupport/DOMSupportDefault.cpp
Index: DOMSupportDefault.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/DOMSupport/DOMSupportDefault.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DOMSupportDefault.cpp 2000/12/30 17:55:33 1.8
+++ DOMSupportDefault.cpp 2001/01/08 18:12:24 1.9
@@ -80,7 +80,6 @@
DOMSupportDefault::DOMSupportDefault() :
DOMSupport(),
- m_resolver(),
m_pool()
{
}
@@ -96,15 +95,16 @@
void
DOMSupportDefault::reset()
{
- m_resolver.reset();
}
const XalanDOMString&
-DOMSupportDefault::getNamespaceOfNode(const XalanNode& theNode) const
+DOMSupportDefault::getNamespaceForPrefix(
+ const XalanDOMString& prefix,
+ const XalanElement& namespaceContext) const
{
- return m_resolver.getNamespaceOfNode(theNode);
+ return DOMServices::getNamespaceForPrefix(prefix, namespaceContext);
}
@@ -172,4 +172,14 @@
#else
return m_pool.get(theURI);
#endif
+}
+
+
+
+bool
+DOMSupportDefault::isNodeAfter(
+ const XalanNode& node1,
+ const XalanNode& node2) const
+{
+ return DOMServices::isNodeAfter(node1, node2);
}
1.7 +10 -4 xml-xalan/c/src/DOMSupport/DOMSupportDefault.hpp
Index: DOMSupportDefault.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/DOMSupport/DOMSupportDefault.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DOMSupportDefault.hpp 2000/12/30 17:55:33 1.6
+++ DOMSupportDefault.hpp 2001/01/08 18:12:24 1.7
@@ -69,7 +69,6 @@
#include <DOMSupport/DOMSupport.hpp>
-#include <DOMSupport/NamespaceResolver.hpp>
@@ -87,18 +86,25 @@
virtual void
reset();
+
// These interfaces are inherited from DOMSupport...
+
virtual const XalanDOMString&
- getNamespaceOfNode(const XalanNode& theNode) const;
+ getNamespaceForPrefix(
+ const XalanDOMString& prefix,
+ const XalanElement& namespaceContext) const;
virtual const XalanDOMString&
getUnparsedEntityURI(
const XalanDOMString& theName,
const XalanDocument& theDocument) const;
-private:
+ virtual bool
+ isNodeAfter(
+ const XalanNode& node1,
+ const XalanNode& node2) const;
- NamespaceResolver m_resolver;
+private:
mutable XalanDOMStringPool m_pool;
};