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]

Reply via email to