zongaro     2002/08/13 14:21:14

  Modified:    java/src/org/apache/xalan/templates Tag: XSLTC_DTM
                        ElemValueOf.java
               java/src/org/apache/xalan/xsltc Tag: XSLTC_DTM
                        TransletOutputHandler.java
               java/src/org/apache/xalan/xsltc/compiler Tag: XSLTC_DTM
                        Expression.java FunctionAvailableCall.java
                        ParameterRef.java VariableRef.java
               java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
                        LoadDocument.java
               java/src/org/apache/xalan/xsltc/runtime Tag: XSLTC_DTM
                        BasisLibrary.java SAXAdapter.java TextOutput.java
                        TransletOutputBase.java
               java/src/org/apache/xalan/xsltc/runtime/output Tag:
                        XSLTC_DTM SAXHTMLOutput.java
               java/src/org/apache/xalan/xsltc/trax Tag: XSLTC_DTM
                        DOM2SAX.java TemplatesHandlerImpl.java
                        TemplatesImpl.java TransformerFactoryImpl.java
                        TransformerHandlerImpl.java
  Log:
  Merged in latest changes from MAIN branch.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.18.2.1  +5 -0      
xml-xalan/java/src/org/apache/xalan/templates/ElemValueOf.java
  
  Index: ElemValueOf.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemValueOf.java,v
  retrieving revision 1.18
  retrieving revision 1.18.2.1
  diff -u -r1.18 -r1.18.2.1
  --- ElemValueOf.java  24 Mar 2002 00:57:53 -0000      1.18
  +++ ElemValueOf.java  13 Aug 2002 21:21:13 -0000      1.18.2.1
  @@ -334,6 +334,11 @@
       {
         throw new TransformerException(se);
       }
  +    catch (RuntimeException re) {
  +     TransformerException te = new TransformerException(re);
  +     te.setLocator(this);
  +     throw te;
  +    }
       finally
       {
         if (TransformerImpl.S_DEBUG)
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.7.10.2  +3 -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.7.10.1
  retrieving revision 1.7.10.2
  diff -u -r1.7.10.1 -r1.7.10.2
  --- TransletOutputHandler.java        29 Jul 2002 00:01:21 -0000      1.7.10.1
  +++ TransletOutputHandler.java        13 Aug 2002 21:21:13 -0000      1.7.10.2
  @@ -82,6 +82,8 @@
       public void comment(String comment) throws TransletException;
       public void processingInstruction(String target, String data)
        throws TransletException;
  +    public void startCDATA() throws TransletException;
  +    public void endCDATA() throws TransletException;
       public void setType(int type);
       public void setIndent(boolean indent);
       public void omitHeader(boolean value);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.3  +2 -10     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java
  
  Index: Expression.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java,v
  retrieving revision 1.11.2.2
  retrieving revision 1.11.2.3
  diff -u -r1.11.2.2 -r1.11.2.3
  --- Expression.java   1 Aug 2002 19:55:30 -0000       1.11.2.2
  +++ Expression.java   13 Aug 2002 21:21:13 -0000      1.11.2.3
  @@ -180,15 +180,7 @@
            return;             // nothing to do
        }
   
  -     if (this instanceof VariableRefBase) {
  -         // The method cloneIterator() also does resetting
  -         final int clone =
  -             cpg.addInterfaceMethodref(NODE_ITERATOR,
  -                                       "cloneIterator",
  -                                       "()" + NODE_ITERATOR_SIG);
  -         il.append(new INVOKEINTERFACE(clone, 1));
  -     }
  -     else {
  +     if ( (this instanceof VariableRefBase) == false ) {
            il.append(methodGen.loadContextNode());
            il.append(methodGen.setStartNode());
        }
  
  
  
  1.5.6.2   +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionAvailableCall.java
  
  Index: FunctionAvailableCall.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionAvailableCall.java,v
  retrieving revision 1.5.6.1
  retrieving revision 1.5.6.2
  diff -u -r1.5.6.1 -r1.5.6.2
  --- FunctionAvailableCall.java        29 Jul 2002 00:01:22 -0000      1.5.6.1
  +++ FunctionAvailableCall.java        13 Aug 2002 21:21:13 -0000      1.5.6.2
  @@ -241,6 +241,7 @@
   
           if (_namespaceOfFunct == null ||
               _namespaceOfFunct.equals(EMPTYSTRING) ||
  +         _namespaceOfFunct.equals(EXT_XALAN) ||
            _namespaceOfFunct.equals(TRANSLET_URI))
           {
               final Parser parser = getParser();
  
  
  
  1.10.6.1  +7 -5      
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.10
  retrieving revision 1.10.6.1
  diff -u -r1.10 -r1.10.6.1
  --- ParameterRef.java 1 Feb 2002 20:07:08 -0000       1.10
  +++ ParameterRef.java 13 Aug 2002 21:21:13 -0000      1.10.6.1
  @@ -112,10 +112,12 @@
        }
   
        if (_variable.getType() instanceof NodeSetType) {
  -         final int reset = cpg.addInterfaceMethodref(NODE_ITERATOR,
  -                                                     "reset",
  -                                                     "()"+NODE_ITERATOR_SIG);
  -         il.append(new INVOKEINTERFACE(reset,1));        
  +         // The method cloneIterator() also does resetting
  +            final int clone = cpg.addInterfaceMethodref(NODE_ITERATOR,
  +                                                       "cloneIterator",
  +                                                       "()" +
  +                                                        NODE_ITERATOR_SIG);
  +            il.append(new INVOKEINTERFACE(clone, 1));
        }
   
       }
  
  
  
  1.11.6.1  +7 -5      
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.11
  retrieving revision 1.11.6.1
  diff -u -r1.11 -r1.11.6.1
  --- VariableRef.java  1 Feb 2002 20:07:08 -0000       1.11
  +++ VariableRef.java  13 Aug 2002 21:21:13 -0000      1.11.6.1
  @@ -135,10 +135,12 @@
        }
   
        if (_variable.getType() instanceof NodeSetType) {
  -         final int reset = cpg.addInterfaceMethodref(NODE_ITERATOR,
  -                                                     "reset",
  -                                                     "()"+NODE_ITERATOR_SIG);
  -         il.append(new INVOKEINTERFACE(reset,1));        
  +         // The method cloneIterator() also does resetting
  +         final int clone = cpg.addInterfaceMethodref(NODE_ITERATOR,
  +                                                    "cloneIterator",
  +                                                    "()" + 
  +                                                     NODE_ITERATOR_SIG);
  +         il.append(new INVOKEINTERFACE(clone, 1));
        }
   
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.11.10.2 +22 -13    
xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java
  
  Index: LoadDocument.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java,v
  retrieving revision 1.11.10.1
  retrieving revision 1.11.10.2
  diff -u -r1.11.10.1 -r1.11.10.2
  --- LoadDocument.java 17 Apr 2002 18:13:44 -0000      1.11.10.1
  +++ LoadDocument.java 13 Aug 2002 21:21:13 -0000      1.11.10.2
  @@ -62,8 +62,9 @@
   
   package org.apache.xalan.xsltc.dom;
   
  -import java.io.File;
   import java.net.URL;
  +import java.io.File;
  +import java.io.FileNotFoundException;
   
   import javax.xml.parsers.SAXParser;
   import javax.xml.parsers.SAXParserFactory;
  @@ -98,22 +99,24 @@
        */
       public static DTMAxisIterator document(String uri, String base,
                                        AbstractTranslet translet, DOM dom)
  -     throws Exception {
  -
  +     throws Exception 
  +    {
  +     final String originalUri = uri;
        MultiDOM multiplexer = (MultiDOM)dom;
   
        // Return an empty iterator if the URI is clearly invalid
        // (to prevent some unncessary MalformedURL exceptions).
  -     if ((uri == null) || (uri.equals("")))
  +     if (uri == null || uri.equals("")) {
            return(new SingletonIterator(DTM.NULL,true));
  +     }
   
        // Prepend URI base to URI (from context)
  -     if ((base != null) && (!base.equals(""))) {
  -         if ((!uri.startsWith(base)) &&     // unless URI contains base
  -             (!uri.startsWith("/")) &&      // unless URI is abs. file path
  -             (!uri.startsWith("http:/")) && // unless URI is abs. http URL
  -             (!uri.startsWith("file:/"))) { // unless URI is abs. file URL
  -             uri = base+uri;
  +     if (base != null && !base.equals("")) {
  +         if (!uri.startsWith(base)     &&   // unless URI contains base
  +             !uri.startsWith("/")      &&   // unless URI is abs. file path
  +             !uri.startsWith("http:/") &&   // unless URI is abs. http URL
  +             !uri.startsWith("file:/")) {   // unless URI is abs. file URL
  +             uri = base + uri;
            }
        }
   
  @@ -137,7 +140,11 @@
        mask = multiplexer.nextMask(); // peek
   
        if (cache != null) {
  -         newdom = cache.retrieveDocument(uri, mask, translet);
  +         newdom = cache.retrieveDocument(originalUri, mask, translet);
  +         if (newdom == null) {
  +             final Exception e = new FileNotFoundException(originalUri);
  +             throw new TransletException(e);
  +         }
        }
        else 
     {
  @@ -263,8 +270,10 @@
                throw new IllegalArgumentException(err);
            }
        }
  +     catch (TransletException e) {
  +         throw e;
  +     }
        catch (Exception e) {
  -         e.printStackTrace();
            throw new TransletException(e);
        }
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.35.2.3  +8 -3      
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.35.2.2
  retrieving revision 1.35.2.3
  diff -u -r1.35.2.2 -r1.35.2.3
  --- BasisLibrary.java 29 Jul 2002 00:01:28 -0000      1.35.2.2
  +++ BasisLibrary.java 13 Aug 2002 21:21:13 -0000      1.35.2.3
  @@ -69,6 +69,7 @@
   import java.util.Locale;
   import java.util.ResourceBundle;
   
  +import java.text.NumberFormat;
   import java.text.MessageFormat;
   import java.text.FieldPosition;
   import java.text.DecimalFormat;
  @@ -869,7 +870,9 @@
       private static String defaultPattern = "";
   
       static {
  -     defaultFormatter = new DecimalFormat();
  +     NumberFormat f = NumberFormat.getInstance(Locale.getDefault());
  +     defaultFormatter = (f instanceof DecimalFormat) ?
  +         (DecimalFormat) f : new DecimalFormat();
        defaultFormatter.setGroupingUsed(false);
       }
   
  @@ -914,7 +917,9 @@
                                      DecimalFormat formatter) {
        try {
            StringBuffer result = new StringBuffer();
  -         formatter.applyLocalizedPattern(pattern);
  +         if (pattern != defaultPattern) {
  +             formatter.applyLocalizedPattern(pattern);
  +         }
   
            //------------------------------------------------------
            // bug fix # 9179 - make sure localized pattern contains
  
  
  
  1.10.2.4  +3 -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.10.2.3
  retrieving revision 1.10.2.4
  diff -u -r1.10.2.3 -r1.10.2.4
  --- SAXAdapter.java   29 Jul 2002 00:01:28 -0000      1.10.2.3
  +++ SAXAdapter.java   13 Aug 2002 21:21:13 -0000      1.10.2.4
  @@ -193,6 +193,8 @@
       }
   
       // The SAX handler does not handle these:
  +    public void startCDATA() throws TransletException {}
  +    public void endCDATA() throws TransletException {}
       public void setType(int type) {}
       public void setHeader(String header) {}
       public void setIndent(boolean indent) {}
  
  
  
  1.54.2.2  +9 -1      
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.54.2.1
  retrieving revision 1.54.2.2
  diff -u -r1.54.2.1 -r1.54.2.2
  --- TextOutput.java   29 Jul 2002 00:01:28 -0000      1.54.2.1
  +++ TextOutput.java   13 Aug 2002 21:21:14 -0000      1.54.2.2
  @@ -384,6 +384,14 @@
        _cdataTagOpen = false;
       }
   
  +    public void startCDATA() throws TransletException {
  +     // This class is deprecated - use runtime.output package
  +    }
  +
  +    public void endCDATA() throws TransletException {
  +     // This class is deprecated - use runtime.output package
  +    }
  +
       /**
        * Send characters to the output document
        */
  
  
  
  1.7.10.2  +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.7.10.1
  retrieving revision 1.7.10.2
  diff -u -r1.7.10.1 -r1.7.10.2
  --- TransletOutputBase.java   29 Jul 2002 00:01:28 -0000      1.7.10.1
  +++ TransletOutputBase.java   13 Aug 2002 21:21:14 -0000      1.7.10.2
  @@ -85,6 +85,8 @@
        throws TransletException {}
       public boolean setEscaping(boolean escape) 
        throws TransletException { return true; }
  +    public void startCDATA() throws TransletException {}
  +    public void endCDATA() throws TransletException {}
       public String expandQName(String withPrefix) { return(withPrefix); }
       public void setType(int type) {}
       public void setIndent(boolean indent) {}
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.8.4.2   +17 -19    
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXHTMLOutput.java
  
  Index: SAXHTMLOutput.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXHTMLOutput.java,v
  retrieving revision 1.8.4.1
  retrieving revision 1.8.4.2
  diff -u -r1.8.4.1 -r1.8.4.2
  --- SAXHTMLOutput.java        8 Aug 2002 15:19:03 -0000       1.8.4.1
  +++ SAXHTMLOutput.java        13 Aug 2002 21:21:14 -0000      1.8.4.2
  @@ -140,7 +140,7 @@
               if (_startTagOpen) {
                closeStartTag();
            }
  -            _saxHandler.endElement(EMPTYSTRING, EMPTYSTRING, elementName);
  +            _saxHandler.endElement(EMPTYSTRING, elementName, elementName);
           } 
        catch (SAXException e) {
               throw new TransletException(e);
  @@ -151,22 +151,20 @@
       public void attribute(String name, final String value) 
        throws TransletException
       {
  -     final String patchedName = patchName(name);
  -     final String localName = getLocalName(patchedName);
  -     final int index = _attributes.getIndex(name); 
  -
  -     if (!_startTagOpen) {
  -            BasisLibrary.runTimeError(BasisLibrary.STRAY_ATTRIBUTE_ERR,name);
  -        }
  -
  -        if (index >= 0) {
  -            _attributes.setAttribute(index, EMPTYSTRING, localName,
  -                    name, "CDATA", value);
  -        }
  -        else {
  -            _attributes.addAttribute(EMPTYSTRING, localName,
  +     if (_startTagOpen) {
  +         final String patchedName = patchName(name);
  +         final String localName = getLocalName(patchedName);
  +         final int index = _attributes.getIndex(name); 
  +
  +         if (index >= 0) {
  +             _attributes.setAttribute(index, EMPTYSTRING, localName,
  +                     name, "CDATA", value);
  +         }
  +         else {
  +             _attributes.addAttribute(EMPTYSTRING, localName,
                   name, "CDATA", value);
  -        }
  +         }
  +     }
       }
   
       /**
  @@ -194,8 +192,8 @@
               _startTagOpen = false;
   
               // Now is time to send the startElement event
  -            _saxHandler.startElement(null, _elementName, _elementName, 
  -             _attributes);
  +            _saxHandler.startElement(EMPTYSTRING, _elementName, 
  +             _elementName, _attributes);
           }
           catch (SAXException e) {
               throw new TransletException(e);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.2  +12 -2     
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.11.2.1
  retrieving revision 1.11.2.2
  diff -u -r1.11.2.1 -r1.11.2.2
  --- DOM2SAX.java      29 Jul 2002 00:01:29 -0000      1.11.2.1
  +++ DOM2SAX.java      13 Aug 2002 21:21:14 -0000      1.11.2.2
  @@ -188,7 +188,17 @@
   
       public void parse() throws IOException, SAXException {
        if (_dom != null) {
  -         parse(_dom);
  +         boolean isIncomplete = 
  +             (_dom.getNodeType() != org.w3c.dom.Node.DOCUMENT_NODE);
  +
  +         if (isIncomplete) {
  +             _sax.startDocument();
  +             parse(_dom);
  +             _sax.endDocument();
  +         }
  +         else {
  +             parse(_dom);
  +         }
        }
       }
   
  
  
  
  1.5.2.2   +16 -7     
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java
  
  Index: TemplatesHandlerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java,v
  retrieving revision 1.5.2.1
  retrieving revision 1.5.2.2
  diff -u -r1.5.2.1 -r1.5.2.2
  --- TemplatesHandlerImpl.java 29 Jul 2002 00:01:29 -0000      1.5.2.1
  +++ TemplatesHandlerImpl.java 13 Aug 2002 21:21:14 -0000      1.5.2.2
  @@ -94,16 +94,21 @@
        */
       private URIResolver _uriResolver = null;
   
  -    // Temporary
  -    private boolean _oldOutputSystem;
  +    /**
  +     * A reference to the transformer factory that this templates
  +     * object belongs to.
  +     */
  +    private TransformerFactoryImpl _tfactory = null;
   
       /**
        * Default constructor
        */
  -    protected TemplatesHandlerImpl(int indentNumber, boolean 
oldOutputSystem) {
  +    protected TemplatesHandlerImpl(int indentNumber, 
  +     TransformerFactoryImpl tfactory) 
  +    {
        super(null);
        _indentNumber = indentNumber;
  -     _oldOutputSystem = oldOutputSystem;
  +     _tfactory = tfactory;
       }
   
       /**
  @@ -184,6 +189,10 @@
                stylesheet.setSystemId(_systemId);
                stylesheet.setParentStylesheet(null);
                setCurrentStylesheet(stylesheet);
  +
  +             // Set it as top-level in the XSLTC object
  +             xsltc.setStylesheet(stylesheet);
  +
                // Create AST under the Stylesheet element 
                createAST(stylesheet);
            }
  @@ -200,8 +209,7 @@
                if (bytecodes != null) {
                    final TemplatesImpl templates = 
                        new TemplatesImpl(xsltc.getBytecodes(), transletName, 
  -                         getOutputProperties(), _indentNumber, 
  -                         _oldOutputSystem);
  +                         getOutputProperties(), _indentNumber, _tfactory);
   
                    // Set URIResolver on templates object
                    if (_uriResolver != null) {
  @@ -223,6 +231,7 @@
        * of the location of the parsed document. 
        */
       public void setDocumentLocator(Locator locator) {
  +     super.setDocumentLocator(locator);
        setSystemId(locator.getSystemId());
       }
   
  
  
  
  1.10.2.2  +9 -6      
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java
  
  Index: TemplatesImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java,v
  retrieving revision 1.10.2.1
  retrieving revision 1.10.2.2
  diff -u -r1.10.2.1 -r1.10.2.2
  --- TemplatesImpl.java        29 Jul 2002 00:01:29 -0000      1.10.2.1
  +++ TemplatesImpl.java        13 Aug 2002 21:21:14 -0000      1.10.2.2
  @@ -128,8 +128,11 @@
        */
       private URIResolver _uriResolver = null;
   
  -    // Temporary
  -    private boolean _oldOutputSystem;
  +    /**
  +     * A reference to the transformer factory that this templates
  +     * object belongs to.
  +     */
  +    private TransformerFactoryImpl _tfactory = null;
   
       private class TransletClassLoader extends ClassLoader {
   
  @@ -148,13 +151,13 @@
        */
       protected TemplatesImpl(byte[][] bytecodes, String transletName,
        Properties outputProperties, int indentNumber,
  -     boolean oldOutputSystem) 
  +     TransformerFactoryImpl tfactory) 
       {
        _bytecodes = bytecodes;
        _name      = transletName;
        _outputProperties = outputProperties;
        _indentNumber = indentNumber;
  -     _oldOutputSystem = oldOutputSystem;
  +     _tfactory = tfactory;
       }
   
       public synchronized void writeExternal(ObjectOutput out) 
  @@ -334,7 +337,7 @@
       {
        final TransformerImpl transformer =
            new TransformerImpl(getTransletInstance(), _outputProperties,
  -                             _indentNumber, _oldOutputSystem);
  +                             _indentNumber, _tfactory);
        if (_uriResolver != null) {
            transformer.setURIResolver(_uriResolver);
        }
  
  
  
  1.34.2.2  +24 -64    
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
  
  Index: TransformerFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
  retrieving revision 1.34.2.1
  retrieving revision 1.34.2.2
  diff -u -r1.34.2.1 -r1.34.2.2
  --- TransformerFactoryImpl.java       29 Jul 2002 00:01:29 -0000      1.34.2.1
  +++ TransformerFactoryImpl.java       13 Aug 2002 21:21:14 -0000      1.34.2.2
  @@ -72,15 +72,16 @@
   import java.net.MalformedURLException;
   import java.util.Vector;
   import java.util.Hashtable;
  +import java.util.Properties;
   
   import javax.xml.transform.*;
   import javax.xml.transform.sax.*;
   import javax.xml.transform.dom.*;
   import javax.xml.transform.stream.*;
  +import javax.xml.parsers.SAXParserFactory;
   
  +import org.xml.sax.*;
   import org.w3c.dom.Document;
  -import org.xml.sax.XMLFilter;
  -import org.xml.sax.InputSource;
   
   import org.apache.xalan.xsltc.Translet;
   import org.apache.xalan.xsltc.runtime.AbstractTranslet;
  @@ -120,21 +121,6 @@
       protected static String _defaultTransletName = "GregorSamsa";
   
       /**
  -     * Cache for the newTransformer() method - see method for details
  -     */
  -    private Transformer _copyTransformer = null;
  -
  -    /**
  -     * XSL document for the default transformer
  -     */
  -    private static final String COPY_TRANSLET_CODE =
  -     "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\";>"+
  -     "<xsl:template match=\"/\">"+
  -     "  <xsl:copy-of select=\".\"/>"+
  -     "</xsl:template>"+
  -     "</xsl:stylesheet>";
  -
  -    /**
        * This Hashtable is used to store parameters for locating
        * <?xml-stylesheet ...?> processing instructions in XML docs.
        */
  @@ -170,8 +156,10 @@
        */
       private int _indentNumber = -1;
   
  -    // Temporary
  -    private boolean _oldOutputSystem = false;
  +    /**
  +     * A reference to an XML reader for parsing.
  +     */
  +    private XMLReader _xmlReader = null;
   
       /**
        * javax.xml.transform.sax.TransformerFactory implementation.
  @@ -268,16 +256,6 @@
                return;
            }
        }
  -     else if (name.equals("old-output")) {
  -         if (value instanceof Boolean) {
  -             _oldOutputSystem = ((Boolean) value).booleanValue();
  -             return;
  -         }
  -         else if (value instanceof String) {
  -             _oldOutputSystem = ((String) value).equalsIgnoreCase("true");
  -             return;
  -         }
  -     }
        else if (name.equals("indent-number")) {
            if (value instanceof String) {
                try {
  @@ -395,40 +373,12 @@
       public Transformer newTransformer()
        throws TransformerConfigurationException 
       { 
  -     if (_copyTransformer != null) {
  -         if (_uriResolver != null) {
  -             _copyTransformer.setURIResolver(_uriResolver);
  -         }
  -         return _copyTransformer;
  -     }
  -
  -     XSLTC xsltc = new XSLTC();
  -     if (_debug) xsltc.setDebug(true);
  -     if (_disableInlining) xsltc.setTemplateInlining(false);
  -     xsltc.init();
  -
  -     // Compile the default copy-stylesheet
  -     byte[] bytes = COPY_TRANSLET_CODE.getBytes();
  -     ByteArrayInputStream bytestream = new ByteArrayInputStream(bytes);
  -     InputSource input = new InputSource(bytestream);
  -     input.setSystemId(_defaultTransletName);
  -     byte[][] bytecodes = xsltc.compile(_defaultTransletName, input);
  -
  -     // Check that the transformation went well before returning
  -     if (bytecodes == null) {
  -         ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
  -         throw new TransformerConfigurationException(err.toString());
  -     }
  -
  -     // Create a Transformer object and store for other calls
  -     Templates templates = new TemplatesImpl(bytecodes, _defaultTransletName,
  -         xsltc.getOutputProperties(), _indentNumber, _oldOutputSystem);
  -
  -     _copyTransformer = templates.newTransformer();
  +     TransformerImpl result = new TransformerImpl(new Properties(), 
  +         _indentNumber, this);
        if (_uriResolver != null) {
  -         _copyTransformer.setURIResolver(_uriResolver);
  +         result.setURIResolver(_uriResolver);
        }
  -     return _copyTransformer;
  +     return result;
       }
   
       /**
  @@ -556,7 +506,7 @@
        }
   
        return new TemplatesImpl(bytecodes, transletName, 
  -         xsltc.getOutputProperties(), _indentNumber, _oldOutputSystem);
  +         xsltc.getOutputProperties(), _indentNumber, this);
       }
   
       /**
  @@ -571,7 +521,7 @@
        throws TransformerConfigurationException 
       { 
        final TemplatesHandlerImpl handler = 
  -         new TemplatesHandlerImpl(_indentNumber, _oldOutputSystem);
  +         new TemplatesHandlerImpl(_indentNumber, this);
        handler.init();
        if (_uriResolver != null) {
            handler.setURIResolver(_uriResolver);
  @@ -772,5 +722,15 @@
            // Falls through
        }
        return null;
  +    }
  +
  +    public XMLReader getXMLReader() throws Exception {
  +     if (_xmlReader == null) {
  +         final SAXParserFactory pfactory 
  +             = SAXParserFactory.newInstance();
  +         pfactory.setNamespaceAware(true);
  +         _xmlReader = pfactory.newSAXParser().getXMLReader();
  +     }
  +     return _xmlReader;
       }
   }
  
  
  
  1.6.10.4  +93 -37    
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java
  
  Index: TransformerHandlerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java,v
  retrieving revision 1.6.10.3
  retrieving revision 1.6.10.4
  diff -u -r1.6.10.3 -r1.6.10.4
  --- TransformerHandlerImpl.java       6 Aug 2002 14:40:09 -0000       1.6.10.3
  +++ TransformerHandlerImpl.java       13 Aug 2002 21:21:14 -0000      1.6.10.4
  @@ -63,7 +63,9 @@
   package org.apache.xalan.xsltc.trax;
   
   import org.xml.sax.*;
  +import org.xml.sax.ext.LexicalHandler;
   import org.xml.sax.ext.DeclHandler;
  +import org.xml.sax.helpers.DefaultHandler;
   
   import javax.xml.transform.*;
   import javax.xml.transform.sax.*;
  @@ -72,6 +74,7 @@
   import org.apache.xml.dtm.DTMManager;
   
   import org.apache.xalan.xsltc.Translet;
  +import org.apache.xalan.xsltc.TransletOutputHandler;
   import org.apache.xalan.xsltc.dom.DOMImpl;
   import org.apache.xalan.xsltc.dom.SAXImpl;
   import org.apache.xalan.xsltc.dom.DOMBuilder;
  @@ -89,7 +92,8 @@
       private AbstractTranslet _translet = null;
       private String           _systemId;
       private SAXImpl          _dom = null;
  -    private DOMBuilder       _handler = null;
  +    private ContentHandler   _handler = null;
  +    private LexicalHandler   _lexHandler = null;
       private DTDMonitor       _dtd = null;
       private Result           _result = null;
       private Locator          _locator = null;
  @@ -97,17 +101,30 @@
       private boolean          _done = false; // Set in endDocument()
   
       /**
  +     * A flag indicating whether this transformer handler implements the 
  +     * identity transform.
  +     */
  +    private boolean _isIdentity = false;
  +
  +    /**
        * Cosntructor - pass in reference to a TransformerImpl object
        */
       protected TransformerHandlerImpl(TransformerImpl transformer) {
        // Save the reference to the transformer
        _transformer = transformer;
   
  -     // Get a reference to the translet wrapped inside the transformer
  -     _translet = _transformer.getTranslet();
  +     if (transformer.isIdentity()) {
  +         // Set initial handler to the empty handler
  +         _handler = new DefaultHandler();
  +         _isIdentity = true;
  +     }
  +     else {
  +         // Get a reference to the translet wrapped inside the transformer
  +         _translet = _transformer.getTranslet();
   
  -     // Create a new DTD monitor
  -     _dtd = new DTDMonitor();
  +         // Create a new DTD monitor
  +         _dtd = new DTDMonitor();
  +     }
       }
   
       /**
  @@ -150,8 +167,22 @@
       public void setResult(Result result) throws IllegalArgumentException {
        _result = result;
   
  -     // Run the transformation now, if not already done
  -     if (_done) {
  +     if (_isIdentity) {
  +         try {
  +             // Connect this object with output system directly
  +             TransletOutputHandler outputHandler =
  +                 _transformer.getOutputHandler(result);
  +             _transformer.transferOutputProperties(outputHandler);
  +
  +             _handler = new SAX2TO(outputHandler);
  +             _lexHandler = (LexicalHandler) _handler;
  +         }
  +         catch (TransformerException e) {
  +             _result = null;
  +         }
  +     }
  +     else if (_done) {
  +         // Run the transformation now, if not already done
            try {
                _transformer.setDOM(_dom);
                _transformer.transform(null, _result);
  @@ -184,14 +215,20 @@
            throw new SAXException(err.toString());
        }
   
  -     // Create an internal DOM (not W3C) and get SAX2 input handler
  -        DTMManager dtmManager = XSLTCDTMManager.newInstance(
  +        if (!_isIdentity) {
  +         // Create an internal DOM (not W3C) and get SAX2 input handler
  +            DTMManager dtmManager = XSLTCDTMManager.newInstance(
                    org.apache.xpath.objects.XMLStringFactoryImpl.getFactory());
   
  -        // Construct the DTM using the SAX events that come through
  -        _dom = (SAXImpl)dtmManager.getDTM(null, false, null, true, true);
  -     _handler = _dom.getBuilder();
  +            // Construct the DTM using the SAX events that come through
  +            _dom = (SAXImpl)dtmManager.getDTM(null, false, null, true, true);
  +         _handler = _dom.getBuilder();
  +         _lexHandler = (LexicalHandler) _handler;
  +         // Set document URI
  +         _dom.setDocumentURI(_systemId);
  +        }
   
  +        // Make sure to set any document locator that was squirreled away
           if (_locator != null) {
               _handler.setDocumentLocator(_locator);
           }
  @@ -208,22 +245,24 @@
        // Signal to the DOMBuilder that the document is complete
        _handler.endDocument();
   
  -     // Run the transformation now if we have a reference to a Result object
  -     if (_result != null) {
  -         try {
  -             _transformer.setDOM(_dom);
  -             _transformer.setDTDMonitor(_dtd);       // for id/key
  -             _transformer.transform(null, _result);
  -         }
  -         catch (TransformerException e) {
  -             throw new SAXException(e);
  +     if (!_isIdentity) {
  +         // Run the transformation now if we have a reference to a Result 
object
  +         if (_result != null) {
  +             try {
  +                 _transformer.setDOM(_dom);
  +                 _transformer.setDTDMonitor(_dtd);   // for id/key
  +                 _transformer.transform(null, _result);
  +             }
  +             catch (TransformerException e) {
  +                 throw new SAXException(e);
  +             }
            }
  -     }
  -     // Signal that the internal DOM is build (see 'setResult()').
  -     _done = true;
  +         // Signal that the internal DOM is built (see 'setResult()').
  +         _done = true;
   
  -     // Set this DOM as the transformer's DOM
  -     _transformer.setDOM(_dom);
  +         // Set this DOM as the transformer's DOM
  +         _transformer.setDOM(_dom);
  +     }
       }
        
       /**
  @@ -232,7 +271,8 @@
        */
       public void startElement(String uri, String localName,
                             String qname, Attributes attributes)
  -     throws SAXException {
  +     throws SAXException 
  +    {
        _handler.startElement(uri, localName, qname, attributes);
       }
        
  @@ -241,7 +281,8 @@
        * Receive notification of the end of an element.
        */
       public void endElement(String namespaceURI, String localName, String 
qname)
  -     throws SAXException {
  +     throws SAXException 
  +    {
        _handler.endElement(namespaceURI, localName, qname);
       }
   
  @@ -250,7 +291,8 @@
        * Receive notification of a processing instruction.
        */
       public void processingInstruction(String target, String data)
  -     throws SAXException {
  +     throws SAXException 
  +    {
        _handler.processingInstruction(target, data);
       }
   
  @@ -258,14 +300,18 @@
        * Implements org.xml.sax.ext.LexicalHandler.startCDATA()
        */
       public void startCDATA() throws SAXException { 
  -     _handler.startCDATA();
  +     if (_lexHandler != null) {
  +         _lexHandler.startCDATA();
  +     }
       }
   
       /**
        * Implements org.xml.sax.ext.LexicalHandler.endCDATA()
        */
       public void endCDATA() throws SAXException { 
  -     _handler.endCDATA();
  +     if (_lexHandler != null) {
  +         _lexHandler.endCDATA();
  +     }
       }
   
       /**
  @@ -275,7 +321,9 @@
       public void comment(char[] ch, int start, int length) 
        throws SAXException 
       { 
  -     _handler.comment(ch, start, length);
  +     if (_lexHandler != null) {
  +         _lexHandler.comment(ch, start, length);
  +     }
       }
   
       /**
  @@ -332,28 +380,36 @@
       public void startDTD(String name, String publicId, String systemId) 
        throws SAXException
       { 
  -     _handler.startDTD(name, publicId, systemId);
  +     if (_lexHandler != null) {
  +         _lexHandler.startDTD(name, publicId, systemId);
  +     }
       }
   
       /**
        * Implements org.xml.sax.ext.LexicalHandler.endDTD()
        */
       public void endDTD() throws SAXException {
  -     _handler.endDTD();
  +     if (_lexHandler != null) {
  +         _lexHandler.endDTD();
  +     }
       }
   
       /**
        * Implements org.xml.sax.ext.LexicalHandler.startEntity()
        */
       public void startEntity(String name) throws SAXException { 
  -     _handler.startEntity(name);
  +     if (_lexHandler != null) {
  +         _lexHandler.startEntity(name);
  +     }
       }
   
       /**
        * Implements org.xml.sax.ext.LexicalHandler.endEntity()
        */
       public void endEntity(String name) throws SAXException { 
  -     _handler.endEntity(name);
  +     if (_lexHandler != null) {
  +         _lexHandler.endEntity(name);
  +     }
       }
   
       /**
  
  
  

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

Reply via email to