You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sb...@apache.org on 2001/05/07 15:16:17 UTC
cvs commit: xml-xalan/java/src/org/apache/xpath/patterns FunctionPattern.java NodeTest.java
sboag 01/05/07 06:16:16
Modified: java/src/org/apache/xalan/stree Tag: DTM_EXP
SourceTreeHandler.java
java/src/org/apache/xalan/templates Tag: DTM_EXP
ElemCopyOf.java ElemVariable.java FuncDocument.java
java/src/org/apache/xalan/transformer Tag: DTM_EXP
ClonerToResultTree.java NodeSorter.java
ResultTreeHandler.java TransformerImpl.java
TreeWalker2Result.java
java/src/org/apache/xml/dtm Tag: DTM_EXP DTMIterator.java
DTMManagerDefault.java
java/src/org/apache/xml/dtm/dom2dtm Tag: DTM_EXP
DOM2DTM.java
java/src/org/apache/xpath Tag: DTM_EXP NodeSet.java
SourceTreeManager.java XPathContext.java
java/src/org/apache/xpath/axes Tag: DTM_EXP
DescendantIterator.java LocPathIterator.java
UnionPathIterator.java
java/src/org/apache/xpath/objects Tag: DTM_EXP XNodeSet.java
XNull.java XObject.java XRTreeFrag.java
XString.java
java/src/org/apache/xpath/patterns Tag: DTM_EXP
FunctionPattern.java NodeTest.java
Log:
Periodic checkin. Result tree fragments now work, as well as the
document() function. idkey01 goes in infinite loop due to xsl:number
issue. You must use -Dorg.apache.xml.dtm.DTMManager="org.apache.xalan.stree.StreeDTMManager".
Revision Changes Path
No revision
No revision
1.35.2.3 +36 -0 xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java
Index: SourceTreeHandler.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java,v
retrieving revision 1.35.2.2
retrieving revision 1.35.2.3
diff -u -r1.35.2.2 -r1.35.2.3
--- SourceTreeHandler.java 2001/05/06 02:09:25 1.35.2.2
+++ SourceTreeHandler.java 2001/05/07 13:14:47 1.35.2.3
@@ -154,7 +154,37 @@
m_shouldCheckWhitespace =
transformer.getStylesheet().shouldCheckWhitespace();
}
+
+ /**
+ * Create a SourceTreeHandler that will start a transformation as
+ * soon as a startDocument occurs.
+ *
+ * @param transformer The transformer this will use to transform a
+ * source tree into a result tree.
+ */
+ public SourceTreeHandler(TransformerImpl transformer, DTMManager dtm, boolean doFragment)
+ {
+// m_id = m_idCount++;
+ m_transformer = transformer;
+
+ XPathContext xctxt = transformer.getXPathContext();
+ xctxt.setDOMHelper(new StreeDOMHelper());
+
+ if(doFragment)
+ {
+ m_root = new DocumentFragmentImpl(1024);
+ m_docFrag = (DocumentFragmentImpl)m_root;
+ }
+ else
+ {
+ m_root = new DocumentImpl(this);
+ }
+ m_initedRoot = false;
+ m_shouldCheckWhitespace =
+ transformer.getStylesheet().shouldCheckWhitespace();
+ }
+
/**
* Create a SourceTreeHandler.
*/
@@ -187,6 +217,12 @@
public int getDTMRoot()
{
return m_DTMroot;
+ }
+
+ /** Set the DTM root for the DTM2DOM **/
+ public void setDTMRoot(int root)
+ {
+ root = m_DTMroot;
}
/** If this is non-null, the fragment where the nodes will be added. */
No revision
No revision
1.10.2.2 +1 -1 xml-xalan/java/src/org/apache/xalan/templates/ElemCopyOf.java
Index: ElemCopyOf.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemCopyOf.java,v
retrieving revision 1.10.2.1
retrieving revision 1.10.2.2
diff -u -r1.10.2.1 -r1.10.2.2
--- ElemCopyOf.java 2001/04/10 18:44:47 1.10.2.1
+++ ElemCopyOf.java 2001/05/07 13:14:55 1.10.2.2
@@ -193,7 +193,7 @@
while (DTM.NULL != (pos = nl.nextNode()))
{
- DTM dtm = nl.getDTM(pos);
+ DTM dtm = xctxt.getDTMManager().getDTM(pos);
short t = dtm.getNodeType(pos);
// If we just copy the whole document, a startDoc and endDoc get
1.10.2.2 +1 -1 xml-xalan/java/src/org/apache/xalan/templates/ElemVariable.java
Index: ElemVariable.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemVariable.java,v
retrieving revision 1.10.2.1
retrieving revision 1.10.2.2
diff -u -r1.10.2.1 -r1.10.2.2
--- ElemVariable.java 2001/04/10 18:44:52 1.10.2.1
+++ ElemVariable.java 2001/05/07 13:14:56 1.10.2.2
@@ -294,7 +294,7 @@
// Use result tree fragment
int df = transformer.transformToRTF(this);
XPathContext xctxt = transformer.getXPathContext();
- var = new XRTreeFrag(xctxt.createDTMIterator(df));
+ var = new XRTreeFrag(df, xctxt);
}
return var;
1.19.2.3 +6 -6 xml-xalan/java/src/org/apache/xalan/templates/FuncDocument.java
Index: FuncDocument.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/FuncDocument.java,v
retrieving revision 1.19.2.2
retrieving revision 1.19.2.3
diff -u -r1.19.2.2 -r1.19.2.3
--- FuncDocument.java 2001/05/06 02:09:29 1.19.2.2
+++ FuncDocument.java 2001/05/07 13:14:57 1.19.2.3
@@ -182,7 +182,7 @@
}
XNodeSet nodes = new XNodeSet(xctxt.getDTMManager());
-// NodeSet mnl = nodes.mutableNodeset();
+ NodeSet mnl = nodes.mutableNodeset();
DTMIterator iterator = (XObject.CLASS_NODESET == arg.getType())
? arg.nodeset() : null;
int pos = DTM.NULL;
@@ -222,11 +222,11 @@
// nodes.mutableNodeset().addNode(newDoc);
if (DTM.NULL != newDoc)
{
-
// TODO: mnl.addNodeInDocOrder(newDoc, true, xctxt); ??
- // %TBD%
-// if (!mnl.contains(newDoc))
-// mnl.addElement(newDoc);
+ if (!mnl.contains(newDoc))
+ {
+ mnl.addElement(newDoc);
+ }
}
if (null == iterator || newDoc == DTM.NULL)
@@ -379,7 +379,7 @@
}
else
{
-
+ // %REVIEW%
// TBD: What to do about XLocator?
// xctxt.getSourceTreeManager().associateXLocatorToNode(newDoc, url, null);
}
No revision
No revision
1.9.2.2 +0 -1 xml-xalan/java/src/org/apache/xalan/transformer/ClonerToResultTree.java
Index: ClonerToResultTree.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/ClonerToResultTree.java,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- ClonerToResultTree.java 2001/04/10 18:45:01 1.9.2.1
+++ ClonerToResultTree.java 2001/05/07 13:15:03 1.9.2.2
@@ -141,7 +141,6 @@
if (shouldCloneAttributes)
{
- // %TBD%
m_rth.addAttributes(node);
m_rth.processNSDecls(node);
}
1.9.2.3 +4 -0 xml-xalan/java/src/org/apache/xalan/transformer/NodeSorter.java
Index: NodeSorter.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/NodeSorter.java,v
retrieving revision 1.9.2.2
retrieving revision 1.9.2.3
diff -u -r1.9.2.2 -r1.9.2.3
--- NodeSorter.java 2001/05/06 02:09:33 1.9.2.2
+++ NodeSorter.java 2001/05/07 13:15:05 1.9.2.3
@@ -123,6 +123,10 @@
// QuickSort2(v, 0, v.size() - 1 );
int n = v.getLength();
+ // %OPT% Change mergesort to just take a DTMIterator?
+ // We would also have to adapt DTMIterator to have the function
+ // of NodeCompareElem.
+
// Create a vector of node compare elements
// based on the input vector of nodes
Vector nodes = new Vector();
1.37.2.3 +3 -5 xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java
Index: ResultTreeHandler.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java,v
retrieving revision 1.37.2.2
retrieving revision 1.37.2.3
diff -u -r1.37.2.2 -r1.37.2.3
--- ResultTreeHandler.java 2001/05/06 02:09:34 1.37.2.2
+++ ResultTreeHandler.java 2001/05/07 13:15:07 1.37.2.3
@@ -794,11 +794,9 @@
public void outputResultTreeFragment(XObject obj, XPathContext support)
throws org.xml.sax.SAXException
{
-
- DTMIterator docFrag = obj.rtree(support);
- int doc = docFrag.nextNode();
- DTM dtm = docFrag.getDTM(doc);
-
+ int doc = obj.rtree();
+ DTM dtm = support.getDTM(doc);
+
for (int n = dtm.getFirstChild(doc); DTM.NULL != n; n = dtm.getNextSibling(n))
{
flushPending(EVT_NODE); // I think.
1.90.2.3 +40 -1 xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
retrieving revision 1.90.2.2
retrieving revision 1.90.2.3
diff -u -r1.90.2.2 -r1.90.2.3
--- TransformerImpl.java 2001/05/06 02:09:35 1.90.2.2
+++ TransformerImpl.java 2001/05/07 13:15:09 1.90.2.3
@@ -1634,7 +1634,7 @@
// %REVIEW% Make sure current node is pushed.
int df = transformToRTF(xslParamElement);
- var = new XRTreeFrag(xctxt.createDTMIterator(df));
+ var = new XRTreeFrag(df, xctxt);
}
vars.setSearchStart(paramReferenceContext);
@@ -1810,6 +1810,7 @@
ContentHandler rtfHandler;
int resultFragment = DTM.NULL;
+ // %TODO% Use SAX2DTM here (I think)
rtfHandler = new SourceTreeHandler(this, true);
((SourceTreeHandler)rtfHandler).setUseMultiThreading(false);
((SourceTreeHandler)rtfHandler).setShouldTransformAtEnd(false);
@@ -2870,6 +2871,18 @@
}
/**
+ * Set the exception thrown by the secondary thread (normally
+ * the transform thread).
+ *
+ * @param e The thrown exception, or null if no exception was
+ * thrown.
+ */
+ public void setExceptionThrown(Exception e)
+ {
+ m_exceptionThrown = e;
+ }
+
+ /**
* This is just a way to set the document for run().
*
* @param doc A non-null reference to the root of the
@@ -2879,6 +2892,18 @@
{
m_doc = doc;
}
+
+
+ /** Set the input source for the source tree, which is needed if the
+ * parse thread is not the main thread, in order for the parse
+ * thread's run method to get to the input source.
+ *
+ * @param source The input source for the source tree.
+ */
+ public void setXMLSource(Source source)
+ {
+ m_xmlSource = source;
+ }
/**
* Tell if the transform method is completed.
@@ -2891,6 +2916,20 @@
synchronized(this)
{
return m_isTransformDone;
+ }
+ }
+
+ /**
+ * Set if the transform method is completed.
+ *
+ * @param done True if transformNode has completed, or
+ * an exception was thrown.
+ */
+ public void setIsTransformDone(boolean done)
+ {
+ synchronized(this)
+ {
+ m_isTransformDone = done;
}
}
1.9.2.2 +19 -68 xml-xalan/java/src/org/apache/xalan/transformer/TreeWalker2Result.java
Index: TreeWalker2Result.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TreeWalker2Result.java,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- TreeWalker2Result.java 2001/04/10 18:45:04 1.9.2.1
+++ TreeWalker2Result.java 2001/05/07 13:15:10 1.9.2.2
@@ -125,10 +125,10 @@
protected void startNode(int node) throws org.xml.sax.SAXException
{
-// try
+ try
{
- if ((DTM.ELEMENT_NODE == m_dtm.getNodeType(node)) && (m_startNode == node))
+ if (DTM.ELEMENT_NODE == m_dtm.getNodeType(node))
{
String elemName = m_dtm.getNodeName(node);
String localName = m_dtm.getLocalName(node);
@@ -136,78 +136,29 @@
m_handler.startElement(namespace, localName, elemName, null);
- // %TBD% But, the code below is strange...
-// for (int parent = node; parent != null;
-// parent = m_dtm.getParentNode(parent))
-// {
-// if (Node.ELEMENT_NODE != parent.getNodeType())
-// continue;
-//
-// NamedNodeMap atts = ((Element) parent).getAttributes();
-// int n = atts.getLength();
-//
-// for (int attr = m_dtm.getFirstAttribute(parent);
-// DTM.NULL != attr; attr = m_dtm.getNextAttribute(attr))
-// {
-// String nsDeclPrefix = null;
-//
-// String name = m_dtm.getNodeName(attr);
-// String value = m_dtm.getStringValue(attr);
-//
-// /*
-// else if(nsDeclPrefix != null)
-// {
-// String desturi = m_processor.getURI(nsDeclPrefix);
-// // Look for an alias for this URI. If one is found, use it as the result URI
-// String aliasURI = m_elem.m_stylesheet.lookForAlias(value);
-// if(aliasURI.equals(desturi)) // TODO: Check for extension namespaces
-// {
-// continue;
-// }
-// }
-// */
-// m_handler.addAttribute(dhelper.getNamespaceOfNode(attr),
-// dhelper.getLocalNameOfNode(attr), name,
-// "CDATA", value);
-//
-// // Make sure namespace is not in the excluded list then
-// // add to result tree
-//
-// /*
-// if(!m_handler.getPendingAttributes().contains(name))
-// {
-// if(nsDeclPrefix == null)
-// {
-// m_handler.addAttribute(name, "CDATA", value);
-// }
-// else
-// {
-// String desturi
-// = m_handler.getURI(nsDeclPrefix);
-// if(null == desturi)
-// {
-// m_handler.addAttribute(name, "CDATA", value);
-// }
-// else if(!desturi.equals(value))
-// {
-// m_handler.addAttribute(name, "CDATA", value);
-// }
-// }
-// }
-// */
-// }
-// }
+ if (DTM.ELEMENT_NODE == m_dtm.getNodeType(node))
+ {
+ for (int attr = m_dtm.getFirstAttribute(node);
+ DTM.NULL != attr; attr = m_dtm.getNextAttribute(node))
+ {
+ String name = m_dtm.getNodeName(attr);
+ String value = m_dtm.getStringValue(attr);
- // m_handler.processResultNS(m_elem);
+ m_handler.addAttribute(m_dtm.getNamespaceURI(attr),
+ m_dtm.getLocalName(attr), name,
+ "CDATA", value);
+
+ }
+ }
}
else
{
super.startNode(node);
}
+ }
+ catch(javax.xml.transform.TransformerException te)
+ {
+ throw new org.xml.sax.SAXException(te);
}
-// catch(javax.xml.transform.TransformerException te)
-// {
-// throw new org.xml.sax.SAXException(te);
-// }
}
}
No revision
No revision
1.1.2.7 +8 -0 xml-xalan/java/src/org/apache/xml/dtm/Attic/DTMIterator.java
Index: DTMIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/Attic/DTMIterator.java,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- DTMIterator.java 2001/05/06 02:09:40 1.1.2.6
+++ DTMIterator.java 2001/05/07 13:15:20 1.1.2.7
@@ -269,6 +269,14 @@
* @param b true if the nodes should be cached.
*/
public void setShouldCacheNodes(boolean b);
+
+ /**
+ * Tells if this iterator can have nodes added to it or set via
+ * the <code>setItem(int node, int index)</code> method.
+ *
+ * @return True if the nodelist can be mutated.
+ */
+ public boolean isMutable();
/** Get the current position within the cached list, which is one
* less than the next nextNode() call will retrieve. i.e. if you
1.1.2.3 +3 -2 xml-xalan/java/src/org/apache/xml/dtm/Attic/DTMManagerDefault.java
Index: DTMManagerDefault.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/Attic/DTMManagerDefault.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- DTMManagerDefault.java 2001/05/06 02:09:41 1.1.2.2
+++ DTMManagerDefault.java 2001/05/07 13:15:22 1.1.2.3
@@ -75,7 +75,7 @@
*/
public class DTMManagerDefault extends DTMManager
{
- Vector m_dtms = new Vector();
+ protected Vector m_dtms = new Vector();
/**
* Constructor DTMManagerDefault
@@ -105,7 +105,8 @@
if(source instanceof DOMSource)
{
- DTM dtm = new DOM2DTM(this, (DOMSource)source, m_dtms.size(), whiteSpaceFilter);
+ int documentID = m_dtms.size() << 20;
+ DTM dtm = new DOM2DTM(this, (DOMSource)source, documentID, whiteSpaceFilter);
m_dtms.add(dtm);
return dtm;
}
No revision
No revision
1.1.2.7 +3 -4 xml-xalan/java/src/org/apache/xml/dtm/dom2dtm/Attic/DOM2DTM.java
Index: DOM2DTM.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/dom2dtm/Attic/DOM2DTM.java,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- DOM2DTM.java 2001/05/06 02:09:46 1.1.2.6
+++ DOM2DTM.java 2001/05/07 13:15:29 1.1.2.7
@@ -141,9 +141,6 @@
protected int m_dtmIdent;
/** %TBD% Doc */
- protected int m_dtmRoot;
-
- /** %TBD% Doc */
protected int m_mask;
/** %TBD% Doc */
@@ -1126,7 +1123,9 @@
int type = getNodeType(nodeHandle);
Node node = getNode(nodeHandle);
- if(DTM.ELEMENT_NODE == type || DTM.DOCUMENT_NODE == type)
+ // %REVIEW%
+ if(DTM.ELEMENT_NODE == type || DTM.DOCUMENT_NODE == type
+ || DTM.DOCUMENT_FRAGMENT_NODE == type)
{
FastStringBuffer buf = StringBufferPool.get();
String s;
No revision
No revision
1.10.2.3 +10 -0 xml-xalan/java/src/org/apache/xpath/NodeSet.java
Index: NodeSet.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/NodeSet.java,v
retrieving revision 1.10.2.2
retrieving revision 1.10.2.3
diff -u -r1.10.2.2 -r1.10.2.3
--- NodeSet.java 2001/05/06 02:09:48 1.10.2.2
+++ NodeSet.java 2001/05/07 13:15:33 1.10.2.3
@@ -1163,6 +1163,16 @@
m_mutable = true;
}
+ /**
+ * Tells if this iterator can have nodes added to it or set via
+ * the <code>setItem(int node, int index)</code> method.
+ *
+ * @return True if the nodelist can be mutated.
+ */
+ public boolean isMutable()
+ {
+ return m_mutable;
+ }
transient private int m_last = 0;
1.24.2.3 +8 -5 xml-xalan/java/src/org/apache/xpath/SourceTreeManager.java
Index: SourceTreeManager.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/SourceTreeManager.java,v
retrieving revision 1.24.2.2
retrieving revision 1.24.2.3
diff -u -r1.24.2.2 -r1.24.2.3
--- SourceTreeManager.java 2001/05/06 02:09:48 1.24.2.2
+++ SourceTreeManager.java 2001/05/07 13:15:35 1.24.2.3
@@ -240,7 +240,6 @@
return DTM.NULL;
int n = m_sourceTree.size();
- ;
// System.out.println("getNode: "+n);
for (int i = 0; i < n; i++)
@@ -337,9 +336,13 @@
{
try
- {
- // %TBD% I think I need a TransformerImpl here?
- DTM dtm = xctxt.getDTM(source, false, null);
+ {
+ Object xowner = xctxt.getOwnerObject();
+ DTM dtm;
+ if(null != xowner && xowner instanceof org.apache.xml.dtm.DTMWSFilter)
+ dtm = xctxt.getDTM(source, false, (org.apache.xml.dtm.DTMWSFilter)xowner);
+ else
+ dtm = xctxt.getDTM(source, false, null);
return dtm.getDocument();
}
catch (Exception e)
@@ -365,7 +368,7 @@
*
* @throws TransformerException if the reader can not be created.
*/
- public XMLReader getXMLReader(Source inputSource, SourceLocator locator)
+ public static XMLReader getXMLReader(Source inputSource, SourceLocator locator)
throws TransformerException
{
1.20.2.4 +6 -24 xml-xalan/java/src/org/apache/xpath/XPathContext.java
Index: XPathContext.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/XPathContext.java,v
retrieving revision 1.20.2.3
retrieving revision 1.20.2.4
diff -u -r1.20.2.3 -r1.20.2.4
--- XPathContext.java 2001/05/06 02:09:48 1.20.2.3
+++ XPathContext.java 2001/05/07 13:15:37 1.20.2.4
@@ -109,6 +109,8 @@
import org.apache.xml.dtm.DTM;
import org.apache.xml.dtm.DTMWSFilter;
+import org.apache.xpath.axes.DescendantIterator;
+
/**
* <meta name="usage" content="advanced"/>
* Default class for the runtime execution context for XPath.
@@ -266,7 +268,10 @@
*/
public DTMIterator createDTMIterator(int node)
{
- return m_dtmManager.createDTMIterator(node);
+ DescendantIterator iter = new DescendantIterator();
+ iter.initContext(this, node);
+ return iter;
+ // return m_dtmManager.createDTMIterator(node);
}
/**
@@ -853,27 +858,4 @@
}
}
- /**
- * Get the value of a node as a number.
- * @param n Node to be converted to a number. May be null.
- * @return value of n as a number.
- */
- public final double toNumber(int n)
- {
- // %TBD%
-// return XNodeSet.getNumberFromNode(n);
- return 0;
- }
-
- /**
- * Get the value of a node as a string.
- * @param n Node to be converted to a string. May be null.
- * @return value of n as a string, or an empty string if n is null.
- */
- public final String toString(int n)
- {
- // %TBD%
-// return XNodeSet.getStringFromNode(n);
- return null;
- }
}
No revision
No revision
1.8.2.3 +19 -0 xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java
Index: DescendantIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java,v
retrieving revision 1.8.2.2
retrieving revision 1.8.2.3
diff -u -r1.8.2.2 -r1.8.2.3
--- DescendantIterator.java 2001/05/06 02:09:50 1.8.2.2
+++ DescendantIterator.java 2001/05/07 13:15:46 1.8.2.3
@@ -132,6 +132,25 @@
}
/**
+ * Create a DescendantIterator object.
+ *
+ * @param compiler A reference to the Compiler that contains the op map.
+ * @param opPos The position within the op map, which contains the
+ * location path expression for this itterator.
+ *
+ * @throws javax.xml.transform.TransformerException
+ */
+ public DescendantIterator()
+ {
+ super(null);
+ m_orSelf = true;
+ m_fromRoot = true;
+ int whatToShow = DTMFilter.SHOW_ALL;
+ initNodeTest(whatToShow);
+ }
+
+
+ /**
* Get a cloned Iterator that is reset to the beginning
* of the query.
*
1.24.2.3 +38 -0 xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java
Index: LocPathIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java,v
retrieving revision 1.24.2.2
retrieving revision 1.24.2.3
diff -u -r1.24.2.2 -r1.24.2.3
--- LocPathIterator.java 2001/05/06 02:09:50 1.24.2.2
+++ LocPathIterator.java 2001/05/07 13:15:47 1.24.2.3
@@ -331,7 +331,33 @@
this.m_varStackContext = vars.getContextPos();
}
}
+
+ /**
+ * Initialize the context values for this expression
+ * after it is cloned.
+ *
+ * @param execContext The XPath runtime context for this
+ * transformation.
+ */
+ public void initContext(XPathContext execContext, int context)
+ {
+ this.m_context = context;
+ m_cdtm = execContext.getDTM(m_context);
+ this.m_currentContextNode = context;
+ this.m_execContext = execContext;
+ this.m_prefixResolver = execContext.getNamespaceContext();
+ this.m_dhelper = execContext.getDOMHelper();
+
+ if (m_isTopLevel)
+ {
+ VariableStack vars = execContext.getVarStack();
+
+ this.m_varStackPos = vars.getSearchStartOrTop();
+ this.m_varStackContext = vars.getContextPos();
+ }
+ }
+
/**
* Set the next position index of this iterator.
*
@@ -379,6 +405,18 @@
else
m_cachedNodes = null;
}
+
+ /**
+ * Tells if this iterator can have nodes added to it or set via
+ * the <code>setItem(int node, int index)</code> method.
+ *
+ * @return True if the nodelist can be mutated.
+ */
+ public boolean isMutable()
+ {
+ return (m_cachedNodes != null);
+ }
+
/**
* Get cached nodes.
1.15.2.3 +11 -0 xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java
Index: UnionPathIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java,v
retrieving revision 1.15.2.2
retrieving revision 1.15.2.3
diff -u -r1.15.2.2 -r1.15.2.3
--- UnionPathIterator.java 2001/05/06 02:09:51 1.15.2.2
+++ UnionPathIterator.java 2001/05/07 13:15:49 1.15.2.3
@@ -212,6 +212,17 @@
else
m_cachedNodes = null;
}
+
+ /**
+ * Tells if this iterator can have nodes added to it or set via
+ * the <code>setItem(int node, int index)</code> method.
+ *
+ * @return True if the nodelist can be mutated.
+ */
+ public boolean isMutable()
+ {
+ return (m_cachedNodes != null);
+ }
/**
* Set the current position in the node set.
No revision
No revision
1.10.2.3 +38 -48 xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java
Index: XNodeSet.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java,v
retrieving revision 1.10.2.2
retrieving revision 1.10.2.3
diff -u -r1.10.2.2 -r1.10.2.3
--- XNodeSet.java 2001/05/06 02:09:56 1.10.2.2
+++ XNodeSet.java 2001/05/07 13:15:56 1.10.2.3
@@ -97,7 +97,8 @@
}
/**
- * Construct an empty XNodeSet object.
+ * Construct an empty XNodeSet object. This is used to create a mutable
+ * nodeset to which random nodes may be added.
*/
public XNodeSet(DTMManager dtmMgr)
{
@@ -216,27 +217,28 @@
return (node != DTM.NULL) ? getStringFromNode(node) : "";
}
- /**
- * Cast result object to a result tree fragment.
- *
- * @param support The XPath context to use for the conversion
- *
- * @return the nodeset as a result tree fragment.
- */
- public DTMIterator rtree(XPathContext support)
- {
- DTM frag = support.createDocumentFragment();
-
- DTMIterator nl = nodeset();
- int node;
-
- while (DTM.NULL != (node = nl.nextNode()))
- {
- frag.appendChild(node, true, true);
- }
-
- return support.createDTMIterator(frag.getDocument());
- }
+ // %REVIEW%
+// /**
+// * Cast result object to a result tree fragment.
+// *
+// * @param support The XPath context to use for the conversion
+// *
+// * @return the nodeset as a result tree fragment.
+// */
+// public DTMIterator rtree(XPathContext support)
+// {
+// DTM frag = support.createDocumentFragment();
+//
+// DTMIterator nl = nodeset();
+// int node;
+//
+// while (DTM.NULL != (node = nl.nextNode()))
+// {
+// frag.appendChild(node, true, true);
+// }
+//
+// return support.createDTMIterator(frag.getDocument());
+// }
/**
* Cast result object to a nodelist.
@@ -249,34 +251,22 @@
// System.out.println("In XNodeSet.nodeset()");
DTMIterator ns = (DTMIterator) m_obj;
- // System.out.println("Got NodeIterator");
- // %TBD% !!!
-// if (ns instanceof ContextNodeList)
-// {
-//
-// // System.out.println("Is a ContextNodeList: "+ns);
-// if (((ContextNodeList) ns).isFresh()) // bit of a hack...
-// {
-// return ns;
-// }
-// else
-// {
-// try
-// {
-// return ((ContextNodeList) ns).cloneWithReset();
-// }
-// catch (CloneNotSupportedException cnse)
-// {
-// throw new RuntimeException(cnse.getMessage());
-// }
-// }
-// }
-// else
+ // System.out.println("Is a ContextNodeList: "+ns);
+ if (ns.isFresh()) // bit of a hack...
{
-
- // System.out.println("Returning node iterator");
return ns;
}
+ else
+ {
+ try
+ {
+ return ns.cloneWithReset();
+ }
+ catch (CloneNotSupportedException cnse)
+ {
+ throw new RuntimeException(cnse.getMessage());
+ }
+ }
}
/**
@@ -289,7 +279,7 @@
NodeSet mnl;
- if (m_obj instanceof NodeSet)
+ if(m_obj instanceof NodeSet)
{
mnl = (NodeSet) m_obj;
}
1.5.2.2 +4 -3 xml-xalan/java/src/org/apache/xpath/objects/XNull.java
Index: XNull.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XNull.java,v
retrieving revision 1.5.2.1
retrieving revision 1.5.2.2
diff -u -r1.5.2.1 -r1.5.2.2
--- XNull.java 2001/04/10 18:45:43 1.5.2.1
+++ XNull.java 2001/05/07 13:15:58 1.5.2.2
@@ -140,10 +140,11 @@
*
* @return The object as a result tree fragment.
*/
- public DTMIterator rtree(XPathContext support)
+ public int rtree(XPathContext support)
{
- DTM frag = support.createDocumentFragment();
- return support.createDTMIterator(frag.getDocument());
+ // DTM frag = support.createDocumentFragment();
+ // %REVIEW%
+ return DTM.NULL;
}
/**
1.8.2.2 +6 -6 xml-xalan/java/src/org/apache/xpath/objects/XObject.java
Index: XObject.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XObject.java,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -u -r1.8.2.1 -r1.8.2.2
--- XObject.java 2001/04/10 18:45:43 1.8.2.1
+++ XObject.java 2001/05/07 13:16:00 1.8.2.2
@@ -272,18 +272,18 @@
*
* @return the objec as a result tree fragment.
*/
- public DTMIterator rtree(XPathContext support)
+ public int rtree(XPathContext support)
{
- DTMIterator result = rtree();
+ int result = rtree();
- if (null == result)
+ if (DTM.NULL == result)
{
DTM frag = support.createDocumentFragment();
// %OPT%
frag.appendTextChild(str());
- support.createDTMIterator(frag.getDocument());
+ result = frag.getDocument();
}
return result;
@@ -294,9 +294,9 @@
*
* @return null
*/
- public DTMIterator rtree()
+ public int rtree()
{
- return null;
+ return DTM.NULL;
}
/**
1.13.2.2 +30 -11 xml-xalan/java/src/org/apache/xpath/objects/XRTreeFrag.java
Index: XRTreeFrag.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XRTreeFrag.java,v
retrieving revision 1.13.2.1
retrieving revision 1.13.2.2
diff -u -r1.13.2.1 -r1.13.2.2
--- XRTreeFrag.java 2001/04/10 18:45:44 1.13.2.1
+++ XRTreeFrag.java 2001/05/07 13:16:01 1.13.2.2
@@ -64,6 +64,7 @@
import org.apache.xml.dtm.DTMFilter;
import org.apache.xpath.DOMHelper;
+import org.apache.xpath.XPathContext;
/**
* <meta name="usage" content="general"/>
@@ -72,16 +73,36 @@
*/
public class XRTreeFrag extends XObject
{
-
+ DTM m_dtm;
+ int m_dtmRoot;
+ XPathContext m_xctxt;
+
+// /**
+// * Create an XRTreeFrag Object.
+// *
+// * @param frag Document fragment this will wrap
+// */
+// public XRTreeFrag(DTMIterator frag)
+// {
+// super(frag);
+//
+// // Obviously, this constructor should be avoided when possible.
+// m_dtmRoot = frag.cloneWithReset().nextNode();
+// }
+
/**
* Create an XRTreeFrag Object.
- * %REVIEW%
*
* @param frag Document fragment this will wrap
*/
- public XRTreeFrag(DTMIterator frag)
+ public XRTreeFrag(int root, XPathContext xctxt)
{
- super(frag);
+ super(null);
+
+ // Obviously, this constructor should be avoided when possible.
+ m_dtmRoot = root;
+ m_xctxt = xctxt;
+ m_dtm = xctxt.getDTM(root);
}
/**
@@ -117,8 +138,7 @@
// java.text.NumberFormat.getNumberInstance();
double result;
- int node = ((DTMIterator)m_obj).nextNode();
- String s = ((DTMIterator)m_obj).getDTM(node).getStringValue(node);
+ String s = m_dtm.getStringValue(m_dtmRoot);
if (null != s)
{
@@ -164,8 +184,7 @@
*/
public String str()
{
- int node = ((DTMIterator)m_obj).nextNode();
- String str = ((DTMIterator)m_obj).getDTM(node).getStringValue(node);
+ String str = m_dtm.getStringValue(m_dtmRoot);
return (null == str) ? "" : str;
}
@@ -175,9 +194,9 @@
*
* @return The document fragment this wraps
*/
- public DTMIterator rtree()
+ public int rtree()
{
- return (DTMIterator) m_obj;
+ return m_dtmRoot;
}
/**
@@ -187,7 +206,7 @@
*/
public DTMIterator asNodeIterator()
{
- return (DTMIterator) m_obj;
+ return m_xctxt.createDTMIterator(m_dtmRoot);
}
// %TBD%
1.6.2.2 +2 -2 xml-xalan/java/src/org/apache/xpath/objects/XString.java
Index: XString.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XString.java,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -u -r1.6.2.1 -r1.6.2.2
--- XString.java 2001/04/10 18:45:44 1.6.2.1
+++ XString.java 2001/05/07 13:16:02 1.6.2.2
@@ -203,12 +203,12 @@
*
* @return A document fragment with this string as a child node
*/
- public DTMIterator rtree(XPathContext support)
+ public int rtree(XPathContext support)
{
DTM frag = support.createDocumentFragment();
frag.appendTextChild(str());
- return support.createDTMIterator(frag.getDocument());
+ return frag.getDocument();
}
/**
No revision
No revision
1.7.2.2 +1 -2 xml-xalan/java/src/org/apache/xpath/patterns/FunctionPattern.java
Index: FunctionPattern.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/patterns/FunctionPattern.java,v
retrieving revision 1.7.2.1
retrieving revision 1.7.2.2
diff -u -r1.7.2.1 -r1.7.2.2
--- FunctionPattern.java 2001/04/10 18:45:46 1.7.2.1
+++ FunctionPattern.java 2001/05/07 13:16:11 1.7.2.2
@@ -126,8 +126,7 @@
int context = xctxt.getCurrentNode();
XObject obj = m_functionExpr.execute(xctxt);
- // %TBD%
- DTMIterator nl = null; /* obj.nodeset(); */
+ DTMIterator nl = obj.nodeset();
XNumber score = SCORE_NONE;
1.20.2.4 +0 -27 xml-xalan/java/src/org/apache/xpath/patterns/NodeTest.java
Index: NodeTest.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/patterns/NodeTest.java,v
retrieving revision 1.20.2.3
retrieving revision 1.20.2.4
diff -u -r1.20.2.3 -r1.20.2.4
--- NodeTest.java 2001/05/06 02:09:57 1.20.2.3
+++ NodeTest.java 2001/05/07 13:16:12 1.20.2.4
@@ -393,33 +393,6 @@
DTM dtm = xctxt.getDTM(context);
short nodeType = dtm.getNodeType(context);
- // Yuck! Blech! -sb
- if((DTM.TEXT_NODE == nodeType || DTM.CDATA_SECTION_NODE == nodeType)
- && !dtm.supportsPreStripping())
- {
- int parent = dtm.getParent(context);
- if(DTM.NULL != parent && DTM.ELEMENT_NODE == dtm.getNodeType(parent))
- {
- String data = dtm.getNodeValue(context);
-
- if(org.apache.xml.utils.XMLCharacterRecognizer.isWhiteSpace(data))
- {
- // Ugly trick for now.
- PrefixResolver resolver = xctxt.getNamespaceContext();
- if(resolver instanceof WhitespaceStrippingElementMatcher)
- {
- WhitespaceStrippingElementMatcher wsem =
- (WhitespaceStrippingElementMatcher)resolver;
- // %TBD%
-// if(wsem.shouldStripWhiteSpace(xctxt, (org.w3c.dom.Element)parent))
-// {
-// return SCORE_NONE;
-// }
- }
- }
- }
- }
-
if (m_whatToShow == DTMFilter.SHOW_ALL)
return m_score;
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org