You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@locus.apache.org on 2000/12/08 02:21:51 UTC
cvs commit: xml-xalan/java/src/org/apache/xpath DOMHelper.java
mmidy 00/12/07 17:21:50
Modified: java/src/org/apache/xalan/stree SourceTreeHandler.java
StreeDOMBuilder.java
java/src/org/apache/xalan/transformer TransformerImpl.java
java/src/org/apache/xpath DOMHelper.java
Log:
Use Stree for resultTreeFragments if the source node is an Stree node.
Revision Changes Path
1.22 +12 -1 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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- SourceTreeHandler.java 2000/11/23 04:57:38 1.21
+++ SourceTreeHandler.java 2000/12/08 01:21:45 1.22
@@ -72,6 +72,7 @@
import org.apache.xalan.templates.WhiteSpaceInfo;
import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
import org.xml.sax.Attributes;
import org.xml.sax.ext.LexicalHandler;
@@ -156,6 +157,13 @@
/** Flag indicating whether we should check whitespaces */
boolean m_shouldCheckWhitespace = false;
+
+ boolean m_shouldTransformAtEnd = true;
+
+ public void setShouldTransformAtEnd(boolean b)
+ {
+ m_shouldTransformAtEnd = b;
+ }
/**
* Get the root document of tree that is being or will be created.
@@ -300,6 +308,9 @@
((DocumentImpl) m_root).setLevel(new Integer(1).shortValue());
((DocumentImpl) m_root).setUseMultiThreading(getUseMultiThreading());
+ if (m_root.getNodeType() == Node.DOCUMENT_FRAGMENT_NODE)
+ m_sourceTreeHandler = new StreeDOMBuilder(m_root, (DocumentFragment)m_root);
+ else
m_sourceTreeHandler = new StreeDOMBuilder(m_root);
pushShouldStripWhitespace(false);
@@ -349,7 +360,7 @@
m_sourceTreeHandler.endDocument();
popShouldStripWhitespace();
- if (!m_useMultiThreading && (null != m_transformer))
+ if (!m_useMultiThreading && (null != m_transformer) && m_shouldTransformAtEnd)
{
try
{
1.9 +17 -2 xml-xalan/java/src/org/apache/xalan/stree/StreeDOMBuilder.java
Index: StreeDOMBuilder.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/stree/StreeDOMBuilder.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StreeDOMBuilder.java 2000/11/30 16:26:48 1.8
+++ StreeDOMBuilder.java 2000/12/08 01:21:45 1.9
@@ -322,12 +322,27 @@
*
*/
void appendAccumulatedText(Node currentNode, char ch[], int start, int length)
+ throws org.xml.sax.SAXException
{
// Get the text node. It should be the last node that was
// added to the current node. (Text nodes are never made to be
// the currentNode).
- TextImpl textNode = (TextImpl)((Parent)currentNode).m_last;
- textNode.appendText(ch, start, length);
+ // Note that we are checking for a null current node, because
+ // if this is document fragment, the current node could be null.
+ if (null == currentNode)
+ {
+ currentNode = m_docFrag;
+ }
+ if (null != currentNode)
+ {
+ TextImpl textNode = (TextImpl)((Parent)currentNode).m_last;
+ textNode.appendText(ch, start, length);
+ }
+ else
+ {
+ append(new TextImpl(m_docImpl, ch, start, length));
+ setPreviousIsText(true);
+ }
}
}
1.58 +42 -24 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.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- TransformerImpl.java 2000/12/07 18:36:56 1.57
+++ TransformerImpl.java 2000/12/08 01:21:47 1.58
@@ -70,6 +70,7 @@
// Xalan imports
import org.apache.xalan.res.XSLTErrorResources;
import org.apache.xalan.stree.SourceTreeHandler;
+import org.apache.xalan.stree.DocumentImpl;
import org.apache.xalan.templates.Constants;
import org.apache.xalan.templates.ElemAttributeSet;
import org.apache.xalan.templates.ElemTemplateElement;
@@ -1564,7 +1565,6 @@
* <meta name="usage" content="advanced"/>
* Given a stylesheet element, create a result tree fragment from it's
* contents.
- * @param stylesheetTree The stylesheet object that holds the fragment.
* @param templateParent The template element that holds the fragment.
* @param sourceNode The current source context node.
* @param mode The mode under which the template is operating.
@@ -1579,35 +1579,50 @@
// XPathContext xctxt = getXPathContext();
// Document docFactory = xctxt.getDOMHelper().getDOMFactory();
- if (null == m_docBuilder)
+ ContentHandler rtfHandler;
+ DocumentFragment resultFragment;
+
+ // If this is an Stree instance, handle it with SourceTreeHandler
+ // and bypass the whole DOM process.
+ if (sourceNode instanceof org.apache.xalan.stree.Child)
+ {
+ rtfHandler = new SourceTreeHandler(this);
+ ((SourceTreeHandler)rtfHandler).setUseMultiThreading(false);
+ ((SourceTreeHandler)rtfHandler).setShouldTransformAtEnd(false);
+ // Create a ResultTreeFrag object.
+ DocumentImpl doc = (DocumentImpl)((SourceTreeHandler)rtfHandler).getRoot();
+ resultFragment = doc.createDocumentFragment();
+ ((SourceTreeHandler)rtfHandler).setRoot((Document)resultFragment);
+ }
+ else
{
- try
+ if (null == m_docBuilder)
{
- DocumentBuilderFactory dfactory =
- DocumentBuilderFactory.newInstance();
+ try
+ {
+ DocumentBuilderFactory dfactory =
+ DocumentBuilderFactory.newInstance();
- dfactory.setNamespaceAware(true);
- dfactory.setValidating(true);
+ dfactory.setNamespaceAware(true);
+ dfactory.setValidating(true);
- m_docBuilder = dfactory.newDocumentBuilder();
- }
- catch (ParserConfigurationException pce)
- {
- throw new TransformerException(pce); //"createDocument() not supported in XPathContext!");
+ m_docBuilder = dfactory.newDocumentBuilder();
+ }
+ catch (ParserConfigurationException pce)
+ {
+ throw new TransformerException(pce); //"createDocument() not supported in XPathContext!");
- // return null;
- }
+ // return null;
+ }
+ }
+ Document docFactory = m_docBuilder.newDocument();
+ // Create a ResultTreeFrag object.
+ resultFragment = docFactory.createDocumentFragment();
+ // Create a DOMBuilder object that will handle the SAX events
+ // and build the ResultTreeFrag nodes.
+ rtfHandler = new DOMBuilder(docFactory, resultFragment);
}
- Document docFactory = m_docBuilder.newDocument();
-
- // Create a ResultTreeFrag object.
- DocumentFragment resultFragment = docFactory.createDocumentFragment();
-
- // Create a DOMBuilder object that will handle the SAX events
- // and build the ResultTreeFrag nodes.
- ContentHandler rtfHandler = new DOMBuilder(docFactory, resultFragment);
-
// Save the current result tree handler.
ResultTreeHandler savedRTreeHandler = this.m_resultTreeHandler;
@@ -1627,9 +1642,12 @@
throw new TransformerException(se);
}
+ finally
+ {
// Restore the previous result tree handler.
this.m_resultTreeHandler = savedRTreeHandler;
-
+ }
+
return resultFragment;
}
1.13 +1 -1 xml-xalan/java/src/org/apache/xpath/DOMHelper.java
Index: DOMHelper.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/DOMHelper.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- DOMHelper.java 2000/12/07 19:58:27 1.12
+++ DOMHelper.java 2000/12/08 01:21:49 1.13
@@ -86,7 +86,7 @@
* Used as a helper for handling DOM issues. May be subclassed to take advantage
* of specific DOM implementations.
*
- * NEEDSDOC ($objectName$) @return
+ * @return The DOM Document object to build a DOM tree with.
*/
public Document createDocument()
{