mkwan 2003/02/11 13:39:36
Modified: java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
MultiDOM.java XSLTCDTMManager.java
java/src/org/apache/xalan/xsltc/runtime Tag: XSLTC_DTM
BasisLibrary.java
java/src/org/apache/xml/dtm/ref/sax2dtm Tag: XSLTC_DTM
SAX2DTM2.java
Log:
Fix two bugs and make a small change in how SAX2DTM handle XMLString.
1. Use a safer algorithm in MultiDOM.addDOMAdapter() to decide whether
we need to grow the internal array. The DTM ids might not always be
sequential,
as is the case when the stylesheet uses both RTFs and the document function.
The old algorithm might fail under this scenario.
2. In BasisLibrary.nodeList2Iterator(), use the same DTMManager to create
the DOMImpl. This is required to make some of the EXSLT extensions to work.
3. Make a small change in SAX2DTM2.getStringValue(). There is really no need
to override this method in SAX2DTM2, because XSLTC will not use it. However,
it is currently used by some of the EXSLT extensions. The change is to ensure
that if an XMLStringFactory is provided, we continue to create the XMLString
using the factory. This will make both Xalan and XSLTC happy.
Revision Changes Path
No revision
No revision
1.16.10.12 +9 -4
xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java
Index: MultiDOM.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java,v
retrieving revision 1.16.10.11
retrieving revision 1.16.10.12
diff -u -r1.16.10.11 -r1.16.10.12
--- MultiDOM.java 30 Jan 2003 18:41:47 -0000 1.16.10.11
+++ MultiDOM.java 11 Feb 2003 21:39:35 -0000 1.16.10.12
@@ -303,9 +303,14 @@
dtmManager.getDTMIdentity((DTM)((DOMAdapter)dom).getDOMImpl())
>>> DTMManager.IDENT_DTM_NODE_BITS;
- if (domNo == _size) {
- final DOMAdapter[] newArray = new DOMAdapter[_size *= 2];
- System.arraycopy(_adapters, 0, newArray, 0, domNo);
+ if (domNo >= _size) {
+ int oldSize = _size;
+ do {
+ _size *= 2;
+ } while (_size <= domNo);
+
+ final DOMAdapter[] newArray = new DOMAdapter[_size];
+ System.arraycopy(_adapters, 0, newArray, 0, oldSize);
_adapters = newArray;
}
_adapters[domNo] = dom;
1.1.2.10 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/XSLTCDTMManager.java
Index: XSLTCDTMManager.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/XSLTCDTMManager.java,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -r1.1.2.9 -r1.1.2.10
--- XSLTCDTMManager.java 11 Feb 2003 19:17:18 -0000 1.1.2.9
+++ XSLTCDTMManager.java 11 Feb 2003 21:39:35 -0000 1.1.2.10
@@ -323,10 +323,10 @@
SAXImpl dtm;
if (size <= 0) {
dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,
- xstringFactory, doIndexing);
+ null, doIndexing);
} else {
dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,
- xstringFactory, doIndexing, size);
+ null, doIndexing, size);
}
// Go ahead and add the DTM to the lookup table. This needs to be
No revision
No revision
1.35.2.16 +8 -8
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
Index: BasisLibrary.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
retrieving revision 1.35.2.15
retrieving revision 1.35.2.16
diff -u -r1.35.2.15 -r1.35.2.16
--- BasisLibrary.java 10 Feb 2003 19:36:45 -0000 1.35.2.15
+++ BasisLibrary.java 11 Feb 2003 21:39:35 -0000 1.35.2.16
@@ -1171,22 +1171,22 @@
copyNodes(nodeList, doc, topElementNode);
// w3cDOM -> DTM -> DOMImpl
- DTMManager dtmManager = XSLTCDTMManager.newInstance();
-
- DOMImpl idom = (DOMImpl)dtmManager.getDTM(new DOMSource(doc), false,
- null, true, false);
-
if (dom instanceof MultiDOM) {
final MultiDOM multiDOM = (MultiDOM) dom;
+ DTMDefaultBase dtm =
(DTMDefaultBase)((DOMAdapter)multiDOM.getMain()).getDOMImpl();
+ DTMManager dtmManager = dtm.getManager();
+ DOMImpl idom = (DOMImpl)dtmManager.getDTM(new DOMSource(doc), false,
+ null, true, false);
+
// Create DOMAdapter and register with MultiDOM
DOMAdapter domAdapter = new DOMAdapter(idom,
translet.getNamesArray(),
translet.getNamespaceArray());
multiDOM.addDOMAdapter(domAdapter);
- DTMAxisIterator iter1 = multiDOM.getAxisIterator(Axis.CHILD);
- DTMAxisIterator iter2 = multiDOM.getAxisIterator(Axis.CHILD);
+ DTMAxisIterator iter1 = idom.getAxisIterator(Axis.CHILD);
+ DTMAxisIterator iter2 = idom.getAxisIterator(Axis.CHILD);
DTMAxisIterator iter = new AbsoluteIterator(
new StepIterator(iter1, iter2));
No revision
No revision
1.1.2.8 +8 -3
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java
Index: SAX2DTM2.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -u -r1.1.2.7 -r1.1.2.8
--- SAX2DTM2.java 11 Feb 2003 19:17:18 -0000 1.1.2.7
+++ SAX2DTM2.java 11 Feb 2003 21:39:35 -0000 1.1.2.8
@@ -59,6 +59,7 @@
import org.apache.xml.dtm.*;
import org.apache.xml.dtm.ref.*;
import org.apache.xml.utils.XMLString;
+import org.apache.xml.utils.XMLStringDefault;
import org.apache.xml.utils.XMLStringFactory;
import org.apache.xml.res.XMLMessages;
import org.apache.xml.res.XMLErrorResources;
@@ -2062,8 +2063,9 @@
/**
* Override SAX2DTM.getStringValue(int)
*
- * This implementation just calls getStringValueX(int) and creates
- * a XMLString wrapper from the returned String.
+ * If the caller supplies an XMLStringFactory, the getStringValue()
interface
+ * in SAX2DTM will be called. Otherwise just calls getStringValueX() and
+ * wraps the returned String in an XMLString.
*
* Get the string-value of a node as a String object
* (see http://www.w3.org/TR/xpath#data-model
@@ -2075,7 +2077,10 @@
*/
public XMLString getStringValue(int nodeHandle)
{
- return m_xstrf.newstr(getStringValueX(nodeHandle));
+ if (m_xstrf != null)
+ return super.getStringValue(nodeHandle);
+ else
+ return new XMLStringDefault(getStringValueX(nodeHandle));
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]