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/05/21 17:13:24 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/runtime SAXAdapter.java TextOutput.java TransletOutputBase.java

morten      01/05/21 08:13:24

  Modified:    java/src/org/apache/xalan/xsltc TransletOutputHandler.java
               java/src/org/apache/xalan/xsltc/compiler LiteralElement.java
                        XslAttribute.java XslElement.java
               java/src/org/apache/xalan/xsltc/compiler/util
                        MethodGenerator.java
               java/src/org/apache/xalan/xsltc/dom DOMImpl.java
               java/src/org/apache/xalan/xsltc/runtime SAXAdapter.java
                        TextOutput.java TransletOutputBase.java
  Log:
  Performance: Improved the way in which translets pass namespace declarations
  to the output post-processor. Previously this was done by constructing a
  "xmlns:<prefix>" string for the attribute name and an "<uri>" string for the
  attribute value, and then passing the two strings to the handlers
  attribute() method. The output handler now as a namespace() method that
  receives the prefix/uri pair as two separate, clean strings.
  PR:		none
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.3       +2 -1      xml-xalan/java/src/org/apache/xalan/xsltc/TransletOutputHandler.java
  
  Index: TransletOutputHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/TransletOutputHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransletOutputHandler.java	2001/05/17 14:28:50	1.2
  +++ TransletOutputHandler.java	2001/05/21 15:12:14	1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransletOutputHandler.java,v 1.2 2001/05/17 14:28:50 tmiller Exp $
  + * @(#)$Id: TransletOutputHandler.java,v 1.3 2001/05/21 15:12:14 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -75,6 +75,7 @@
       public void endElement(String elementName) throws TransletException;
       public void attribute(String attributeName, String attributeValue)
   	throws TransletException;
  +    public void namespace(String prefix, String uri) throws TransletException;
       public void comment(String comment) throws TransletException;
       public void processingInstruction(String target, String data)
   	throws TransletException;
  
  
  
  1.4       +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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LiteralElement.java	2001/05/02 10:24:53	1.3
  +++ LiteralElement.java	2001/05/21 15:12:26	1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: LiteralElement.java,v 1.3 2001/05/02 10:24:53 morten Exp $
  + * @(#)$Id: LiteralElement.java,v 1.4 2001/05/21 15:12:26 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -82,6 +82,9 @@
       private Hashtable _accessedPrefixes = null;
       private LiteralElement _parent;
   
  +    private final static String XMLNS_STRING = "xmlns";
  +    private final static String EMPTY_STRING = "";
  +
       /**
        * Returns the QName for this literal element
        */
  @@ -158,9 +161,9 @@
   
   	// Treat default namespace as "" and not null
   	if (prefix == null)
  -	    prefix = "";
  -	else if (prefix.equals("xmlns"))
  -	    return("xmlns:"+localname);
  +	    prefix = EMPTY_STRING;
  +	else if (prefix.equals(XMLNS_STRING))
  +	    return(XMLNS_STRING);
   	
   	// Check if we must translate the prefix
   	final String alternative = stable.lookupPrefixAlias(prefix);
  @@ -177,7 +180,7 @@
   	registerNamespace(prefix,uri,stable,false);
   
   	// Construct the new name for the element (may be unchanged)
  -	if (!prefix.equals(""))
  +	if (!prefix.equals(EMPTY_STRING))
   	    return(prefix+":"+localname);
   	else
   	    return(localname);
  @@ -228,7 +231,7 @@
   	    else {
   		// Namespace declarations are handled separately !!!
   		final String name = translateQName(qname,stable);
  -		if (!name.startsWith("xmlns"))
  +		if (name != XMLNS_STRING)
   		    addElement(new LiteralAttribute(name, val, parser));
   	    }
   	}
  @@ -295,12 +298,9 @@
   		final String prefix = (String)e.nextElement();
   		final String uri = (String)_accessedPrefixes.get(prefix);
   		il.append(methodGen.loadHandler());
  -		if (prefix.equals(""))
  -		    il.append(new PUSH(cpg,"xmlns"));
  -		else
  -		    il.append(new PUSH(cpg,"xmlns:"+prefix));
  +		il.append(new PUSH(cpg,prefix));
   		il.append(new PUSH(cpg,uri));
  -		il.append(methodGen.attribute());
  +		il.append(methodGen.namespace());
   	    }
   	}
   
  
  
  
  1.3       +3 -6      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java
  
  Index: XslAttribute.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XslAttribute.java	2001/05/02 10:25:20	1.2
  +++ XslAttribute.java	2001/05/21 15:12:31	1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: XslAttribute.java,v 1.2 2001/05/02 10:25:20 morten Exp $
  + * @(#)$Id: XslAttribute.java,v 1.3 2001/05/21 15:12:31 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -201,12 +201,9 @@
   	if (_namespace != null) {
   	    // public void attribute(final String name, final String value)
   	    il.append(methodGen.loadHandler());
  -	    if (_prefix == "")
  -		il.append(new PUSH(cpg,"xmlns"));
  -	    else
  -		il.append(new PUSH(cpg,"xmlns:"+_prefix));
  +	    il.append(new PUSH(cpg,_prefix));
   	    _namespace.translate(classGen,methodGen);
  -	    il.append(methodGen.attribute());
  +	    il.append(methodGen.namespace());
   	}
   
   	// Save the current handler base on the stack
  
  
  
  1.4       +3 -6      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java
  
  Index: XslElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XslElement.java	2001/05/02 10:25:22	1.3
  +++ XslElement.java	2001/05/21 15:12:33	1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: XslElement.java,v 1.3 2001/05/02 10:25:22 morten Exp $
  + * @(#)$Id: XslElement.java,v 1.4 2001/05/21 15:12:33 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -197,12 +197,9 @@
   	    if (_namespace != null) {
   		// public void attribute(final String name, final String value)
   		il.append(methodGen.loadHandler());
  -		if (_namespacePrefix == "")
  -		    il.append(new PUSH(cpg,"xmlns"));
  -		else
  -		    il.append(new PUSH(cpg,"xmlns:"+_namespacePrefix));
  +		il.append(new PUSH(cpg,_namespacePrefix));
   		_namespace.translate(classGen,methodGen);
  -		il.append(methodGen.attribute());
  +		il.append(methodGen.namespace());
   	    }
   	}
   
  
  
  
  1.2       +15 -1     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/MethodGenerator.java
  
  Index: MethodGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/MethodGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MethodGenerator.java	2001/04/17 18:52:16	1.1
  +++ MethodGenerator.java	2001/05/21 15:12:51	1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: MethodGenerator.java,v 1.1 2001/04/17 18:52:16 sboag Exp $
  + * @(#)$Id: MethodGenerator.java,v 1.2 2001/05/21 15:12:51 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -95,6 +95,7 @@
       private final Instruction _startDocument;
       private final Instruction _endDocument;
       private final Instruction _attribute;
  +    private final Instruction _namespace;
   
       private final Instruction _setStartNode;
       private final Instruction _nextNode;
  @@ -134,6 +135,15 @@
   				      + STRING_SIG
   				      + ")V");
   	_attribute = new INVOKEINTERFACE(attribute, 3);
  +
  +	final int namespace =
  +	    cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
  +				      "namespace", 
  +				      "("
  +				      + STRING_SIG
  +				      + STRING_SIG
  +				      + ")V");
  +	_namespace = new INVOKEINTERFACE(namespace, 3);
   	
   	int index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
   					      "startDocument",
  @@ -293,6 +303,10 @@
   
       public final Instruction attribute() {
   	return _attribute;
  +    }
  +
  +    public final Instruction namespace() {
  +	return _namespace;
       }
   
       public Instruction loadCurrentNode() {
  
  
  
  1.7       +2 -3      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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DOMImpl.java	2001/05/21 09:42:43	1.6
  +++ DOMImpl.java	2001/05/21 15:13:00	1.7
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOMImpl.java,v 1.6 2001/05/21 09:42:43 morten Exp $
  + * @(#)$Id: DOMImpl.java,v 1.7 2001/05/21 15:13:00 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -2229,7 +2229,7 @@
   		if (col > 0) {
   		    final String prefix = generateNamespacePrefix();
   		    handler.startElement(prefix+':'+name.substring(col+1));
  -		    handler.attribute("xmlns:"+prefix, name.substring(0,col));
  +		    handler.namespace(prefix, name.substring(0,col));
   		}
   		else {
   		    handler.startElement(name);
  @@ -2246,8 +2246,7 @@
   		    }
   		    else {
   			final String prefix = generateNamespacePrefix();
  -			handler.attribute("xmlns:"+prefix,
  -					  aname.substring(0,col));
  +			handler.namespace(prefix,aname.substring(0,col));
   			handler.attribute(prefix+':'+aname.substring(col+1),
   					  makeStringValue(attr));
   		    }
  
  
  
  1.4       +6 -1      xml-xalan/java/src/org/apache/xalan/xsltc/runtime/SAXAdapter.java
  
  Index: SAXAdapter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/SAXAdapter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SAXAdapter.java	2001/05/17 14:27:42	1.3
  +++ SAXAdapter.java	2001/05/21 15:13:08	1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SAXAdapter.java,v 1.3 2001/05/17 14:27:42 tmiller Exp $
  + * @(#)$Id: SAXAdapter.java,v 1.4 2001/05/21 15:13:08 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -145,6 +145,11 @@
   	}
       }
       
  +    public void namespace(String prefix, String uri)
  +	throws TransletException {
  +	// ???
  +    }
  +
       public void comment(String comment) throws TransletException {
   	try {
   	    maybeEmitStartElement();
  
  
  
  1.5       +8 -14     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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TextOutput.java	2001/05/17 14:27:44	1.4
  +++ TextOutput.java	2001/05/21 15:13:11	1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TextOutput.java,v 1.4 2001/05/17 14:27:44 tmiller Exp $
  + * @(#)$Id: TextOutput.java,v 1.5 2001/05/21 15:13:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -552,7 +552,7 @@
   	if (_startTagOpen) {
   	    // Intercept namespace declarations and handle them separately
   	    if (name.startsWith("xmlns"))
  -		declareNamespace(name,value);
  +		namespace(name.substring(6),value);
   	    else
   		_attributes.add(name,escapeChars(value));
   	}
  @@ -720,23 +720,17 @@
        * declaration will not be include if the namespace is already in scope
        * with the same prefix.
        */
  -    public void declareNamespace(final String name, final String uri)
  +    public void namespace(final String prefix, final String uri)
   	throws TransletException {
   	try {
  -	    if (_startTagOpen) {
  -		if (name.indexOf(':') == -1)
  -		    pushNamespace(EMPTYSTRING,uri);
  -		else
  -		    pushNamespace(name.substring(6),uri);
  -	    }
  -	    else if (_cdataTagOpen) {
  +	    if (_startTagOpen)
  +		pushNamespace(prefix, uri);
  +	    else if (_cdataTagOpen)
   		throw new TransletException("namespace declaration within "+
   					    "CDATA element");
  -	    }
  -	    else {
  -		throw new TransletException("namespace declaration '"+name+
  +	    else
  +		throw new TransletException("namespace declaration '"+prefix+
   					    "'='"+uri+"' outside of element");
  -	    }
   	}
   	catch (SAXException e) {
   	    throw new TransletException(e);
  
  
  
  1.3       +3 -1      xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TransletOutputBase.java
  
  Index: TransletOutputBase.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TransletOutputBase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransletOutputBase.java	2001/05/17 14:27:47	1.2
  +++ TransletOutputBase.java	2001/05/21 15:13:14	1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransletOutputBase.java,v 1.2 2001/05/17 14:27:47 tmiller Exp $
  + * @(#)$Id: TransletOutputBase.java,v 1.3 2001/05/21 15:13:14 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -74,6 +74,8 @@
       public void startElement(String elementName) throws TransletException {}
       public void endElement(String elementName) throws TransletException {}
       public void attribute(String attributeName, String attributeValue)
  +	throws TransletException {}
  +    public void namespace(String prefix, String uri)
   	throws TransletException {}
       public void comment(String comment) throws TransletException {}
       public void processingInstruction(String target, String data)
  
  
  

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