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: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to