morten      01/08/03 08:23:21

  Modified:    java/src/org/apache/xalan/xsltc/compiler CopyOf.java
                        Step.java
               java/src/org/apache/xalan/xsltc/dom DOMImpl.java
                        UnionIterator.java
  Log:
  Fix for union-iterators wrapping one or more attribute-iterators.
  Attributes should be wrapped in TypedAttributeIterator objects and not
  SingletonIterator objects when they occur insude unions.
  Fix for copying attribute nodes using <xsl:copy> and <xsl:copy-of>
  PR:           bugzilla 2603
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.6       +1 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CopyOf.java
  
  Index: CopyOf.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CopyOf.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CopyOf.java       2001/06/17 12:23:27     1.5
  +++ CopyOf.java       2001/08/03 15:23:21     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: CopyOf.java,v 1.5 2001/06/17 12:23:27 curcuru Exp $
  + * @(#)$Id: CopyOf.java,v 1.6 2001/08/03 15:23:21 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -110,8 +110,6 @@
        final InstructionList il = methodGen.getInstructionList();
        final String DOM_CLASS = classGen.getDOMClass();
        final Type tselect = _select.getType();
  -
  -     
   
        if (tselect instanceof NodeSetType) {
            il.append(methodGen.loadDOM());
  
  
  
  1.8       +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java
  
  Index: Step.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Step.java 2001/08/01 11:52:58     1.7
  +++ Step.java 2001/08/03 15:23:21     1.8
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Step.java,v 1.7 2001/08/01 11:52:58 morten Exp $
  + * @(#)$Id: Step.java,v 1.8 2001/08/03 15:23:21 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -166,6 +166,7 @@
        SyntaxTreeNode parent = getParent();
        if ((parent instanceof ParentPattern) ||
            (parent instanceof ParentLocationPath) ||
  +         (parent instanceof UnionPathExpr) ||
            (parent instanceof FilterParentPath))
            return(true);
        else
  
  
  
  1.17      +21 -9     
xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
  
  Index: DOMImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- DOMImpl.java      2001/08/03 14:18:21     1.16
  +++ DOMImpl.java      2001/08/03 15:23:21     1.17
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOMImpl.java,v 1.16 2001/08/03 14:18:21 morten Exp $
  + * @(#)$Id: DOMImpl.java,v 1.17 2001/08/03 15:23:21 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -2285,8 +2285,6 @@
   
        int attr, child, col;
   
  -     if (node >= _treeNodeLimit) return;
  -
        switch(_type[node]) {
        case ROOT:
            for (child = _offsetOrChild[node];
  @@ -2305,6 +2303,9 @@
                               _offsetOrChild[node],
                               _lengthOrAttr[node]);
            break;
  +     case ATTRIBUTE:
  +         shallowCopy(node, handler);
  +         break;
        default:
            if (isElement(node)) {
                final String name = getNodeName(node);
  @@ -2335,7 +2336,6 @@
                                          makeStringValue(attr));
                    }
                }
  -             // Copy element namespace declarations ???
   
                // Copy element children
                for (child = _offsetOrChild[node];
  @@ -2343,10 +2343,13 @@
                     child = _nextSibling[child]) {
                    copy(child, handler);
                }
  +
  +             // Copy element end-tag
                handler.endElement(name);
            }
  +         // Shallow copy of attribute to output handler
            else {
  -             System.err.println("NYI: non element in copy");
  +             shallowCopy(node, handler);
            }
            break;
        }
  @@ -2396,14 +2399,23 @@
            return null;
        default:                  // element or attribute
            final String name = getNodeName(node);
  -         if (node < _treeNodeLimit) { // element
  -             handler.startElement(name);
  -             return name;
  +         if (isElement(node)) {
  +             // Copy element name - start tag
  +             int col = name.lastIndexOf(':');
  +             if (col > 0) {
  +                 final String prefix = generateNamespacePrefix();
  +                 handler.startElement(prefix+':'+name.substring(col+1));
  +                 handler.namespace(prefix, name.substring(0,col));
  +             }
  +             else {
  +                 handler.startElement(name);
  +             }
  +             handler.endElement(name);
            }
            else {                  // attribute
                handler.attribute(name, makeStringValue(node));
  -             return null;
            }
  +         return null;
        }
       }
   
  
  
  
  1.4       +5 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java
  
  Index: UnionIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- UnionIterator.java        2001/06/17 12:23:36     1.3
  +++ UnionIterator.java        2001/08/03 15:23:21     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: UnionIterator.java,v 1.3 2001/06/17 12:23:36 curcuru Exp $
  + * @(#)$Id: UnionIterator.java,v 1.4 2001/08/03 15:23:21 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -100,6 +100,7 @@
            node = markedNode;
            iterator.gotoMark();
        }
  +
       } // end of LookAheadIterator
   
       private static final int InitSize = 8;
  @@ -139,6 +140,7 @@
            System.arraycopy(_heap, 0, newArray, 0, _free);
            _heap = newArray;
        }
  +     _heapSize++;
        _heap[_free++] = new LookAheadIterator(iterator);
        return this;
       }
  @@ -151,8 +153,9 @@
                    // replace it with last
                    _heap[0] = _heap[--_heapSize];
                }
  -             else 
  +             else {
                    return END;
  +             }
            }
            else if (smallest == _last) {       // duplicate
                _heap[0].step(); // value consumed
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to