You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/09/17 10:20:55 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax DOM2SAX.java

morten      01/09/17 01:20:55

  Modified:    java/src/org/apache/xalan/xsltc/compiler LiteralElement.java
                        Param.java ParameterRef.java
                        ParentLocationPath.java Variable.java
                        VariableBase.java VariableRef.java
               java/src/org/apache/xalan/xsltc/dom DOMImpl.java
                        MatchingIterator.java ReverseIterator.java
                        StepIterator.java
               java/src/org/apache/xalan/xsltc/runtime BasisLibrary.java
                        TextOutput.java
               java/src/org/apache/xalan/xsltc/trax DOM2SAX.java
  Log:
  Several bugfixes and fixes for regressions recently introduced by other
  bugfixes.
  PR:		n/a
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.11      +11 -11    xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java
  
  Index: LiteralElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- LiteralElement.java	2001/08/14 11:51:26	1.10
  +++ LiteralElement.java	2001/09/17 08:20:54	1.11
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: LiteralElement.java,v 1.10 2001/08/14 11:51:26 morten Exp $
  + * @(#)$Id: LiteralElement.java,v 1.11 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -360,16 +360,6 @@
   	il.append(DUP2); // duplicate these 2 args for endElement
   	il.append(methodGen.startElement());
   
  -	// Output all attributes
  -	if (_attributeElements != null) {
  -	    final int count = _attributeElements.size();
  -	    for (int i = 0; i < count; i++) {
  -		SyntaxTreeNode node = 
  -		    (SyntaxTreeNode)_attributeElements.elementAt(i);
  -		node.translate(classGen, methodGen);
  -	    }
  -	}
  -
   	// Compile code to emit namespace attributes
   	if (_accessedPrefixes != null) {
   	    Enumeration e = _accessedPrefixes.keys();
  @@ -383,6 +373,16 @@
   		    il.append(new PUSH(cpg,uri));
   		    il.append(methodGen.namespace());
   		}
  +	    }
  +	}
  +
  +	// Output all attributes
  +	if (_attributeElements != null) {
  +	    final int count = _attributeElements.size();
  +	    for (int i = 0; i < count; i++) {
  +		SyntaxTreeNode node = 
  +		    (SyntaxTreeNode)_attributeElements.elementAt(i);
  +		node.translate(classGen, methodGen);
   	    }
   	}
   	
  
  
  
  1.12      +1 -26     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Param.java
  
  Index: Param.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Param.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Param.java	2001/08/28 12:43:08	1.11
  +++ Param.java	2001/09/17 08:20:54	1.12
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Param.java,v 1.11 2001/08/28 12:43:08 morten Exp $
  + * @(#)$Id: Param.java,v 1.12 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -173,31 +173,6 @@
   	// element itself does not).
   	return Type.Void;
       }
  -
  -    /**
  -     * Compile the value of the parameter, which is either in an expression in
  -     * a 'select' attribute, or in the parameter element's body
  -     */
  -    public void translateValue(ClassGenerator classGen,
  -			       MethodGenerator methodGen) {
  -	// Compile expression is 'select' attribute if present
  -	if (_select != null) {
  -	    _select.translate(classGen, methodGen);
  -	    _type.translateBox(classGen, methodGen);
  -	    _select.startResetIterator(classGen, methodGen);
  -	}
  -	// If not, compile result tree from parameter body if present.
  -	else if (hasContents()) {
  -	    compileResultTree(classGen, methodGen);
  -	}
  -	// If neither are present then store empty string in parameter slot
  -	else {
  -	    final ConstantPoolGen cpg = classGen.getConstantPool();
  -	    final InstructionList il = methodGen.getInstructionList();
  -	    il.append(new PUSH(cpg, Constants.EMPTYSTRING));
  -	}
  -    }
  -
   
       public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
   
  
  
  
  1.7       +3 -3      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParameterRef.java
  
  Index: ParameterRef.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParameterRef.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ParameterRef.java	2001/08/28 12:43:08	1.6
  +++ ParameterRef.java	2001/09/17 08:20:54	1.7
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: ParameterRef.java,v 1.6 2001/08/28 12:43:08 morten Exp $
  + * @(#)$Id: ParameterRef.java,v 1.7 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -82,8 +82,8 @@
       public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
   	final ConstantPoolGen cpg = classGen.getConstantPool();
   	final InstructionList il = methodGen.getInstructionList();
  -		
  -	String name = _variable.getVariable();
  +
  +	final String name = _variable.getVariable();
   
   	if (_variable.isLocal()) {
   	    if (classGen.isExternal()) {
  
  
  
  1.6       +1 -10     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParentLocationPath.java
  
  Index: ParentLocationPath.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParentLocationPath.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ParentLocationPath.java	2001/09/13 12:30:15	1.5
  +++ ParentLocationPath.java	2001/09/17 08:20:54	1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: ParentLocationPath.java,v 1.5 2001/09/13 12:30:15 tmiller Exp $
  + * @(#)$Id: ParentLocationPath.java,v 1.6 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -122,15 +122,6 @@
   	}
   	return(false);
       }
  -
  -    /*
  -    public void blockIteratorReset() {
  -	if (_path instanceof RelativeLocationPath)
  -	    ((RelativeLocationPath)_path).blockIteratorReset();
  -	if (_step instanceof Step)
  -	    ((Step)_step).blockIteratorReset();
  -    }
  -    */
   
       public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
   	final ConstantPoolGen cpg = classGen.getConstantPool();
  
  
  
  1.16      +1 -24     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java
  
  Index: Variable.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Variable.java	2001/09/12 14:30:46	1.15
  +++ Variable.java	2001/09/17 08:20:54	1.16
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Variable.java,v 1.15 2001/09/12 14:30:46 morten Exp $
  + * @(#)$Id: Variable.java,v 1.16 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -209,29 +209,6 @@
   	    else
   		il.append(new ACONST_NULL()); // and 'null' for anything else
   	    il.append(_type.STORE(_local.getIndex()));
  -	}
  -    }
  -
  -    /**
  -     * Compile the value of the variable, which is either in an expression in
  -     * a 'select' attribute, or in the variable elements body
  -     */
  -    public void translateValue(ClassGenerator classGen,
  -			       MethodGenerator methodGen) {
  -	// Compile expression is 'select' attribute if present
  -	if (_select != null) {
  -	    _select.translate(classGen, methodGen);
  -	    _select.startResetIterator(classGen, methodGen);
  -	}
  -	// If not, compile result tree from parameter body if present.
  -	else if (hasContents()) {
  -	    compileResultTree(classGen, methodGen);
  -	}
  -	// If neither are present then store empty string in variable
  -	else {
  -	    final ConstantPoolGen cpg = classGen.getConstantPool();
  -	    final InstructionList il = methodGen.getInstructionList();
  -	    il.append(new PUSH(cpg, Constants.EMPTYSTRING));
   	}
       }
   
  
  
  
  1.4       +24 -1     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableBase.java
  
  Index: VariableBase.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableBase.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- VariableBase.java	2001/08/28 12:43:08	1.3
  +++ VariableBase.java	2001/09/17 08:20:54	1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: VariableBase.java,v 1.3 2001/08/28 12:43:08 morten Exp $
  + * @(#)$Id: VariableBase.java,v 1.4 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -234,6 +234,29 @@
        */
       public boolean isLocal() {
   	return _isLocal;
  +    }
  +
  +    /**
  +     * Compile the value of the variable, which is either in an expression in
  +     * a 'select' attribute, or in the variable elements body
  +     */
  +    public void translateValue(ClassGenerator classGen,
  +			       MethodGenerator methodGen) {
  +	// Compile expression is 'select' attribute if present
  +	if (_select != null) {
  +	    _select.translate(classGen, methodGen);
  +	    _select.startResetIterator(classGen, methodGen);
  +	}
  +	// If not, compile result tree from parameter body if present.
  +	else if (hasContents()) {
  +	    compileResultTree(classGen, methodGen);
  +	}
  +	// If neither are present then store empty string in variable
  +	else {
  +	    final ConstantPoolGen cpg = classGen.getConstantPool();
  +	    final InstructionList il = methodGen.getInstructionList();
  +	    il.append(new PUSH(cpg, Constants.EMPTYSTRING));
  +	}
       }
   
   }
  
  
  
  1.8       +3 -3      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRef.java
  
  Index: VariableRef.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRef.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- VariableRef.java	2001/08/28 12:43:08	1.7
  +++ VariableRef.java	2001/09/17 08:20:54	1.8
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: VariableRef.java,v 1.7 2001/08/28 12:43:08 morten Exp $
  + * @(#)$Id: VariableRef.java,v 1.8 2001/09/17 08:20:54 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -102,12 +102,12 @@
   	final ConstantPoolGen cpg = classGen.getConstantPool();
   	final InstructionList il = methodGen.getInstructionList();
   		
  -	String name = _variable.getVariable();
  -
   	if (_type.implementedAsMethod()) {
   	    // Fall-through for variables that are implemented as methods
   	    return;
   	}
  +
  +	final String name = _variable.getVariable();
   
   	if (_variable.isLocal()) {
   	    if (classGen.isExternal() || _escaped) {
  
  
  
  1.25      +11 -5     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.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- DOMImpl.java	2001/09/12 14:56:00	1.24
  +++ DOMImpl.java	2001/09/17 08:20:55	1.25
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOMImpl.java,v 1.24 2001/09/12 14:56:00 morten Exp $
  + * @(#)$Id: DOMImpl.java,v 1.25 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -1438,7 +1438,12 @@
   	    }
   	    return END;
   	}
  -    
  +
  +	public NodeIterator reset() {
  +	    _source.reset();
  +	    return this;
  +	}
  +
   	public void setMark() {
   	    _source.setMark();
   	}
  @@ -1743,7 +1748,7 @@
        * Returns the (String) value of any node in the tree
        */
       public String getNodeValue(final int node) {
  -	if (node == NULL) return EMPTYSTRING;
  +	if ((node == NULL) || (node > _treeNodeLimit)) return EMPTYSTRING;
   	switch(_type[node]) {
   	case ROOT:
   	    return getNodeValue(_offsetOrChild[node]);
  @@ -2460,8 +2465,9 @@
   	     child != NULL;
   	     child = _nextSibling[child]) {
   	    switch (_type[child]) {
  -	    case TEXT:
   	    case COMMENT:
  +		break;
  +	    case TEXT:
   		buffer.append(_text,
   			      _offsetOrChild[child],
   			      _lengthOrAttr[child]);
  @@ -2898,7 +2904,7 @@
   	    shiftAttributes(_currentNode);
   	    resizeArrays(_currentNode + _currentAttributeNode, _currentNode);
   	    appendAttributes();
  -	    _treeNodeLimit = _currentNode;
  +	    _treeNodeLimit = _currentNode + _currentAttributeNode;
   
   	    // Fill the _namespace[] and _uriArray[] array
   	    _namespace = new short[namesSize];
  
  
  
  1.2       +5 -4      xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java
  
  Index: MatchingIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MatchingIterator.java	2001/04/17 18:52:32	1.1
  +++ MatchingIterator.java	2001/09/17 08:20:55	1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: MatchingIterator.java,v 1.1 2001/04/17 18:52:32 sboag Exp $
  + * @(#)$Id: MatchingIterator.java,v 1.2 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -69,7 +69,7 @@
   public final class MatchingIterator extends NodeIteratorBase {
       private NodeIterator _source;
       private final int    _match;
  -    private int _matchPos, _matchLast = -1;
  +    private int          _matchPos, _matchLast = -1;
   	
       public MatchingIterator(int match, NodeIterator source) {
   	_source = source;
  @@ -92,7 +92,7 @@
       public NodeIterator setStartNode(int node) {
   	if (_isRestartable) {
   	    // iterator is not a clone
  -	    _source.setStartNode(_startNode = node);
  +	    _source.setStartNode(node);
   
   	    // Calculate the position of the node in the set
   	    final int match = _match;
  @@ -107,7 +107,8 @@
       }
   
       public NodeIterator reset() {
  -	return this;	// should not be called
  +	_source.reset();
  +	return this;
       }
       
       public int next() {
  
  
  
  1.3       +7 -3      xml-xalan/java/src/org/apache/xalan/xsltc/dom/ReverseIterator.java
  
  Index: ReverseIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/ReverseIterator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ReverseIterator.java	2001/08/14 12:50:13	1.2
  +++ ReverseIterator.java	2001/09/17 08:20:55	1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: ReverseIterator.java,v 1.2 2001/08/14 12:50:13 morten Exp $
  + * @(#)$Id: ReverseIterator.java,v 1.3 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -98,11 +98,15 @@
   		_data[_last++] = node;
   	    }
   	}
  +	_startNode = _current = _last;
  +	return this;
  +    }
   
  -	_current = _last;
  +    public NodeIterator reset() {
  +	_current = _startNode;
   	return this;
       }
  -	
  +
       public int getPosition() {
   	return (_last - _current);
       }
  
  
  
  1.4       +2 -2      xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java
  
  Index: StepIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StepIterator.java	2001/08/16 12:06:45	1.3
  +++ StepIterator.java	2001/09/17 08:20:55	1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: StepIterator.java,v 1.3 2001/08/16 12:06:45 morten Exp $
  + * @(#)$Id: StepIterator.java,v 1.4 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -105,7 +105,7 @@
       }
   
       public NodeIterator reset() {
  -	_source.setStartNode(_startNode);
  +	//_source.setStartNode(_startNode);
   	_source.reset();
   	int node = _source.next();
   	_iterator.setStartNode(node);
  
  
  
  1.13      +2 -6      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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- BasisLibrary.java	2001/08/27 09:07:21	1.12
  +++ BasisLibrary.java	2001/09/17 08:20:55	1.13
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: BasisLibrary.java,v 1.12 2001/08/27 09:07:21 morten Exp $
  + * @(#)$Id: BasisLibrary.java,v 1.13 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -89,11 +89,7 @@
        * Standard function count(node-set)
        */
       public static int countF(NodeIterator iterator) {
  -	int counter = 0;
  -	while (iterator.next() != NodeIterator.END) {
  -	    ++counter;
  -	}
  -	return counter;
  +	return(iterator.getLast());
       }
   
       /**
  
  
  
  1.28      +35 -16    xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TextOutput.java
  
  Index: TextOutput.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TextOutput.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- TextOutput.java	2001/09/12 12:23:04	1.27
  +++ TextOutput.java	2001/09/17 08:20:55	1.28
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TextOutput.java,v 1.27 2001/09/12 12:23:04 morten Exp $
  + * @(#)$Id: TextOutput.java,v 1.28 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -461,7 +461,7 @@
   	    // Output escaped characters if required. Non-ASCII characters
               // within HTML attributes should _NOT_ be escaped.
   	    else if (_escapeChars) {
  -		if (_outputType == HTML) {
  +		if ((_outputType == HTML) && (!_qnameStack.isEmpty())) {
   		    final String qname = (String)_qnameStack.peek();
   		    if ((qname.equals("style")) || (qname.equals("script"))) {
   			_saxHandler.characters(ch, off, len);
  @@ -520,7 +520,6 @@
   
   	    _qnameStack.push(elementName);
   
  -	    // bug fix 2807, <se...@fmr.com>
   	    if (_cdata != null) {
   		if (_cdata.get(elementName) != null) {
   		    _cdataStack.push(new Integer(_depth));
  @@ -596,30 +595,50 @@
   	if (_startTagOpen) {
   
   	    // URL-encode href attributes in HTML output
  -	    if ((_outputType == HTML) && (name.equals("href"))) {
  -		_attributes.add(name, URLEncoder.encode(value));
  -		return;
  +	    if (_outputType == HTML) {
  +		if  (name.toLowerCase().equals("href")) {
  +		    if (value.startsWith("http")) {
  +			_attributes.add(name, URLEncoder.encode(value));
  +			return;
  +		    }
  +		}
   	    }
   
   	    // Intercept namespace declarations and handle them separately
  -	    if (name.startsWith("xmlns")) {
  -		if (name.length() == 5)
  -		    namespace(EMPTYSTRING,value);
  -		else
  -		    namespace(name.substring(6),value);
  +	    if (name.startsWith("xml")) {
  +		if (name.startsWith("xmlns")) {
  +		    if (name.length() == 5)
  +			namespace(EMPTYSTRING, value);
  +		    else
  +			namespace(name.substring(6),value);
  +		}
  +		else {
  +		    namespace(name, value);
  +		}
   	    }
   	    else {
  -		final int col = name.lastIndexOf(':');
  -		if (col > 0) {
  -		    final String prefix = name.substring(0,col);
  -		    final String localname = name.substring(col+1);
  +		// If this attribute was created using an <xsl:attribute>
  +		// element with a 'namespace' attribute and a 'name' attribute
  +		// containing an AVT, then we might get an attribute name on
  +		// a strange format like 'prefix1:prefix2:localpart', where
  +		// prefix1 is from the AVT and prefix2 from the namespace.
  +		final int endcol = name.lastIndexOf(':');
  +		final int startcol = name.indexOf(':');
  +		if (endcol > 0) {
  +		    final String localname = name.substring(endcol+1);
  +		    final String prefix = name.substring(0,startcol);
   		    final String uri = lookupNamespace(prefix);
   		    if (uri == null) {
   			throw new TransletException("Namespace for prefix "+
   						    prefix+" has not been "+
   						    "declared.");
   		    }
  -		    if (uri.equals(EMPTYSTRING)) name = localname;
  +		    // Omit prefix (use default) if the namespace URI is null
  +		    if (uri.equals(EMPTYSTRING))
  +			name = localname;
  +		    // Construct new QName if we've got two alt. prefixes
  +		    else if (endcol != startcol)
  +			name = prefix+':'+localname;
   		}
   		if (_outputType == HTML)
   		    _attributes.add(name, value);
  
  
  
  1.7       +96 -102   xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2SAX.java
  
  Index: DOM2SAX.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2SAX.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DOM2SAX.java	2001/08/03 13:32:37	1.6
  +++ DOM2SAX.java	2001/09/17 08:20:55	1.7
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOM2SAX.java,v 1.6 2001/08/03 13:32:37 tmiller Exp $
  + * @(#)$Id: DOM2SAX.java,v 1.7 2001/09/17 08:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -81,31 +81,38 @@
   import org.w3c.dom.Entity;
   import org.w3c.dom.Notation;
   
  +import org.apache.xalan.xsltc.runtime.AttributeList;
  +
   public class DOM2SAX implements XMLReader , Locator {
       private Document _dom = null;
  -    private ContentHandler _contentHdlr = null;
  +    private ContentHandler _sax = null;
    
       public DOM2SAX(Node root) {
   	_dom = (Document)root;
       }
   
       public ContentHandler getContentHandler() { 
  -	return _contentHdlr;
  +	return _sax;
       }
  +
       public DTDHandler getDTDHandler() { 
   	return null;
       }
  +
       public ErrorHandler getErrorHandler() {
   	return null;
       }
  +
       public boolean getFeature(String name) throws SAXNotRecognizedException,
   	SAXNotSupportedException
       {
   	return false;
       }
  +
       public void setFeature(String name, boolean value) throws 
   	SAXNotRecognizedException, SAXNotSupportedException 
       {
  +	
       }
   
       public void parse(InputSource unused) throws IOException, SAXException {
  @@ -113,82 +120,69 @@
           parse(currNode);
       }
   
  -    private void parse(Node currNode) throws IOException, SAXException {
  +    private void parse(Node node) throws IOException, SAXException {
           Node first = null;
  - 	if (currNode == null ) return;
  + 	if (node == null ) return;
   
  -        switch (currNode.getNodeType()) {
  -            case Node.ATTRIBUTE_NODE :
  -                    break;
  -            case Node.CDATA_SECTION_NODE :
  -                    break;
  -            case Node.COMMENT_NODE :
  -                    break;
  -            case Node.DOCUMENT_FRAGMENT_NODE :
  -                    break;
  -            case Node.DOCUMENT_NODE :
  -                    _contentHdlr.setDocumentLocator(this);
  -                    _contentHdlr.startDocument();
  -                    Node next = currNode.getFirstChild();
  -                    while ( next != null ) {
  -                        parse(next);
  -                        next = next.getNextSibling();
  -                    }
  -                    _contentHdlr.endDocument();
  -                    break;
  -            case Node.DOCUMENT_TYPE_NODE :
  -                    break;
  -            case Node.ELEMENT_NODE :
  -                    AttributesImpl attrList = new AttributesImpl();
  -                    NamedNodeMap map = currNode.getAttributes();
  -                    int length = map.getLength();
  -                    for (int i=0; i<length; i++ ){
  -                        Node attrNode = map.item(i);
  -                        short code = attrNode.getNodeType();
  -                        attrList.addAttribute(attrNode.getNamespaceURI(),
  -                            attrNode.getLocalName(),
  -                            attrNode.getNodeName(),
  -                            getNodeTypeFromCode(code),  // must be better way
  -                            attrNode.getNodeValue());
  -                    }
  -                    _contentHdlr.startElement(currNode.getNamespaceURI(),
  -                        currNode.getLocalName(), currNode.getNodeName(),
  -                        attrList);
  -                    next = currNode.getFirstChild();
  -                    while ( next != null ) {
  -                        parse(next);
  -                        next = next.getNextSibling();
  -                    }
  -                    _contentHdlr.endElement(currNode.getNamespaceURI(),
  -                        currNode.getLocalName(), currNode.getNodeName());
  -                    break;
  -            case Node.ENTITY_NODE :
  -                    //Entity edecl = (Entity)currNode;
  -                    //String name = edecl.getNotationName();
  -                    //if ( name != null ) {
  -                    //   _contentHdlr.unparsedEntityDecl(currNode.getNodeName(),
  -                    //      edecl.getPublicId(), edecl.getSystemId(), name);
  -                    //}
  -                    break;
  -             case Node.ENTITY_REFERENCE_NODE :
  -                    break;
  -             case Node.NOTATION_NODE :
  -                    //Notation ndecl = (Notation)currNode;
  -                    //_contentHdlr.notationDecl(currNode.getNodeName(),
  -                     //   ndecl.getPublicId(), ndecl.getSystemId());
  -                    break;
  -             case Node.PROCESSING_INSTRUCTION_NODE :
  -                    _contentHdlr.processingInstruction(currNode.getNodeName(),
  -                        currNode.getNodeValue());
  -                    break;
  -             case Node.TEXT_NODE :
  -                    String data = currNode.getNodeValue();
  -                    length = data.length();
  -                    char[] array = new char[length];
  -                    data.getChars(0, length, array, 0);
  -                    _contentHdlr.characters(array, 0, length);
  -                    break;
  -            }
  +        switch (node.getNodeType()) {
  +	case Node.ATTRIBUTE_NODE:         // handled by ELEMENT_NODE
  +	case Node.COMMENT_NODE:           // should be handled!!!
  +	case Node.CDATA_SECTION_NODE:
  +	case Node.DOCUMENT_FRAGMENT_NODE:
  +	case Node.DOCUMENT_TYPE_NODE :
  +	case Node.ENTITY_NODE :
  +	case Node.ENTITY_REFERENCE_NODE:
  +	case Node.NOTATION_NODE :
  +	    // These node types are ignored!!!
  +	    break;
  +
  +	case Node.DOCUMENT_NODE:
  +	    _sax.setDocumentLocator(this);
  +	    _sax.startDocument();
  +	    Node next = node.getFirstChild();
  +	    while (next != null) {
  +		parse(next);
  +		next = next.getNextSibling();
  +	    }
  +	    _sax.endDocument();
  +	    break;
  +
  +	case Node.ELEMENT_NODE:
  +	    // Gather all attribute node of the element
  +	    AttributeList attrs = new AttributeList();
  +	    NamedNodeMap map = node.getAttributes();
  +	    int length = map.getLength();
  +	    for (int i=0; i<length; i++ ) {
  +		Node attr = map.item(i);
  +		attrs.add(attr.getNodeName(), attr.getNodeValue());
  +	    }
  +
  +	    // Generate SAX event to start element
  +	    _sax.startElement(node.getNamespaceURI(), node.getLocalName(),
  +			      node.getNodeName(), attrs);
  +
  +	    // Traverse all child nodes of the element (if any)
  +	    next = node.getFirstChild();
  +	    while ( next != null ) {
  +		parse(next);
  +		next = next.getNextSibling();
  +	    }
  +
  +	    // Generate SAX event to close element
  +	    _sax.endElement(node.getNamespaceURI(),
  +				    node.getLocalName(), node.getNodeName());
  +	    break;
  +
  +	case Node.PROCESSING_INSTRUCTION_NODE:
  +	    _sax.processingInstruction(node.getNodeName(),
  +				       node.getNodeValue());
  +	    break;
  +
  +	case Node.TEXT_NODE:
  +	    final String data = node.getNodeValue();
  +	    _sax.characters(data.toCharArray(), 0, data.length());
  +	    break;
  +	}
       }
   
       public void parse(String sysId) throws IOException, SAXException {
  @@ -198,7 +192,7 @@
   	NullPointerException 
       {
   	if (handler == null ) throw new NullPointerException();
  -	_contentHdlr = handler;
  +	_sax = handler;
       }
       public void setDTDHandler(DTDHandler handler) throws NullPointerException {
   	if (handler == null )  throw new NullPointerException();
  @@ -236,30 +230,30 @@
       private String getNodeTypeFromCode(short code) {
   	String retval = null;
   	switch (code) {
  -                case Node.ATTRIBUTE_NODE : 
  -		    retval = "ATTRIBUTE_NODE"; break; 
  -                case Node.CDATA_SECTION_NODE :
  -		    retval = "CDATA_SECTION_NODE"; break; 
  -                case Node.COMMENT_NODE :
  -		    retval = "COMMENT_NODE"; break; 
  -                case Node.DOCUMENT_FRAGMENT_NODE :
  -		    retval = "DOCUMENT_FRAGMENT_NODE"; break; 
  -                case Node.DOCUMENT_NODE :
  -		    retval = "DOCUMENT_NODE"; break; 
  -                case Node.DOCUMENT_TYPE_NODE :
  -		    retval = "DOCUMENT_TYPE_NODE"; break; 
  -                case Node.ELEMENT_NODE :
  -		    retval = "ELEMENT_NODE"; break; 
  -                case Node.ENTITY_NODE :
  -		    retval = "ENTITY_NODE"; break; 
  -                case Node.ENTITY_REFERENCE_NODE :
  -		    retval = "ENTITY_REFERENCE_NODE"; break; 
  -                case Node.NOTATION_NODE :
  -		    retval = "NOTATION_NODE"; break; 
  -                case Node.PROCESSING_INSTRUCTION_NODE :
  -		    retval = "PROCESSING_INSTRUCTION_NODE"; break; 
  -                case Node.TEXT_NODE:
  -		    retval = "TEXT_NODE"; break; 
  +	case Node.ATTRIBUTE_NODE : 
  +	    retval = "ATTRIBUTE_NODE"; break; 
  +	case Node.CDATA_SECTION_NODE :
  +	    retval = "CDATA_SECTION_NODE"; break; 
  +	case Node.COMMENT_NODE :
  +	    retval = "COMMENT_NODE"; break; 
  +	case Node.DOCUMENT_FRAGMENT_NODE :
  +	    retval = "DOCUMENT_FRAGMENT_NODE"; break; 
  +	case Node.DOCUMENT_NODE :
  +	    retval = "DOCUMENT_NODE"; break; 
  +	case Node.DOCUMENT_TYPE_NODE :
  +	    retval = "DOCUMENT_TYPE_NODE"; break; 
  +	case Node.ELEMENT_NODE :
  +	    retval = "ELEMENT_NODE"; break; 
  +	case Node.ENTITY_NODE :
  +	    retval = "ENTITY_NODE"; break; 
  +	case Node.ENTITY_REFERENCE_NODE :
  +	    retval = "ENTITY_REFERENCE_NODE"; break; 
  +	case Node.NOTATION_NODE :
  +	    retval = "NOTATION_NODE"; break; 
  +	case Node.PROCESSING_INSTRUCTION_NODE :
  +	    retval = "PROCESSING_INSTRUCTION_NODE"; break; 
  +	case Node.TEXT_NODE:
  +	    retval = "TEXT_NODE"; break; 
           }
   	return retval;
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org