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