morten      01/07/18 08:36:01

  Modified:    java/src/org/apache/xalan/xsltc TransletOutputHandler.java
               java/src/org/apache/xalan/xsltc/cmdline Transform.java
               java/src/org/apache/xalan/xsltc/compiler Output.java
                        Stylesheet.java
               java/src/org/apache/xalan/xsltc/runtime
                        AbstractTranslet.java DefaultRun.java
                        DefaultSAXOutputHandler.java SAXAdapter.java
                        StringValueHandler.java TextOutput.java
                        TransletOutputBase.java
  Log:
  A series of changes to the XSLTC output handling to accomodate the
  set/getOutputSettings() methods in the TrAX API.
  PR:           n/a
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.4       +5 -3      
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TransletOutputHandler.java        2001/05/21 15:12:14     1.3
  +++ TransletOutputHandler.java        2001/07/18 15:36:01     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransletOutputHandler.java,v 1.3 2001/05/21 15:12:14 morten Exp $
  + * @(#)$Id: TransletOutputHandler.java,v 1.4 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -65,8 +65,10 @@
   package org.apache.xalan.xsltc;
   
   import java.io.*;
  +import org.apache.xalan.xsltc.runtime.Hashtable;
   
   public interface TransletOutputHandler {
  +
       public void startDocument() throws TransletException;
       public void endDocument() throws TransletException;
       public void characters(char[] characters, int offset, int length)
  @@ -81,7 +83,7 @@
        throws TransletException;
       public void setType(int type);
       public void setIndent(boolean indent);
  -    public void omitXmlDecl(boolean value);
  +    public void omitHeader(boolean value);
       public boolean setEscaping(boolean escape) throws TransletException;
  -    public void insertCdataElement(String elementName);
  +    public void setCdataElements(Hashtable elements);
   }
  
  
  
  1.2       +3 -4      
xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Transform.java
  
  Index: Transform.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Transform.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Transform.java    2001/07/12 11:32:27     1.1
  +++ Transform.java    2001/07/18 15:36:01     1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Transform.java,v 1.1 2001/07/12 11:32:27 morten Exp $
  + * @(#)$Id: Transform.java,v 1.2 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -170,13 +170,12 @@
            }
   
            // Transform the document
  -         String encoding = translet.getOutputEncoding();
  -         if (encoding == null) encoding = "UTF-8";
  +         String encoding = _translet._encoding;
   
            //TextOutput textOutput = new TextOutput(System.out, encoding);
            DefaultSAXOutputHandler saxHandler = new 
                DefaultSAXOutputHandler(System.out, encoding);
  -         TextOutput textOutput = new TextOutput(saxHandler, encoding);
  +         TextOutput textOutput = new TextOutput(saxHandler);
            translet.transform(dom, textOutput);
   
            if (_debug) {
  
  
  
  1.5       +150 -123  
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Output.java
  
  Index: Output.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Output.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Output.java       2001/06/06 10:45:18     1.4
  +++ Output.java       2001/07/18 15:36:01     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Output.java,v 1.4 2001/06/06 10:45:18 morten Exp $
  + * @(#)$Id: Output.java,v 1.5 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -76,22 +76,27 @@
   
   final class Output extends TopLevelElement {
   
  -    // These attributes are extracted from the xsl:output element
  -    private String  _method;
  +    // These attributes are extracted from the xsl:output element. They also
  +    // appear as fields (with the same type, only public) in the translet
       private String  _version;
  +    private String  _method;
       private String  _encoding;
  -    private boolean _omitXmlDeclaration = false;
  +    private boolean _omitHeader = false;
       private String  _standalone;
  -    private String  _doctypePublic;  // IGNORED!!!
  -    private String  _doctypeSystem;  // IGNORED!!!
  -    private String  _cdataElements;
  +    private String  _doctypePublic;
  +    private String  _doctypeSystem;
  +    private String  _cdata;
       private boolean _indent = false;
       private String  _mediaType;
   
  +    // Disables this output element (when other element has higher 
precedence)
       private boolean _disabled = false;
   
  -    // This is generated from the above data.
  -    private String _header;
  +    // Some global constants
  +    private final static String STRING_SIG = "Ljava/lang/String;";
  +    private final static String ONE_DOT_ZERO_STRING = "1.0";
  +    private final static String OUTPUT_VERSION_ERROR =
  +     "Output XML document type should be 1.0";
   
       /**
        * Displays the contents of this element (for debugging)
  @@ -101,36 +106,13 @@
        Util.println("Output " + _method);
       }
   
  -    public void disable() {
  -     _disabled = true;
  -    }
  -
       /**
  -     * Generates the XML output document header
  +     * Disables this <xsl:output> element in case where there are some other
  +     * <xsl:output> element (from a different imported/included stylesheet)
  +     * with higher precedence.
        */
  -    private String generateXmlHeader() {
  -        // No header if user doesn't want one.
  -        if (_omitXmlDeclaration) return(Constants.EMPTYSTRING);
  -
  -     // Start off XML header
  -        final StringBuffer hdr = new StringBuffer("<?xml ");
  -     
  -     if ((_version != null) && (_version !=Constants.EMPTYSTRING))
  -         hdr.append("version=\"" + _version + "\" ");
  -     else
  -         hdr.append("version=\"1.0\" ");
  -
  -     if ((_encoding != null) && (_encoding !=Constants.EMPTYSTRING))
  -         hdr.append("encoding=\"" + _encoding + "\" ");
  -     else
  -         hdr.append("encoding=\"utf-8\" ");
  -
  -     if ((_standalone != null) && (_standalone != Constants.EMPTYSTRING))
  -         hdr.append("standalone=\"" + _standalone + "\" ");
  -
  -     // Finish off XML header and return string.
  -     hdr.append("?>");
  -     return(hdr.toString());
  +    public void disable() {
  +     _disabled = true;
       }
   
       /**
  @@ -138,114 +120,159 @@
        */
       public void parseContents(Parser parser) {
   
  -     _method        = getAttribute("method");
  -     _version       = getAttribute("version");
  -     _encoding      = getAttribute("encoding");
  -     _doctypeSystem = getAttribute("doctype-system");
  -     _doctypePublic = getAttribute("doctype-public");
  -     _cdataElements = getAttribute("cdata-section-elements");
  -     _mediaType     = getAttribute("media-type");
  -     _standalone    = getAttribute("standalone");
  -
  -     if ((_method == null) || (_method == Constants.EMPTYSTRING))
  -         _method = "xml";
  +     // Do nothing if other <xsl:output> element has higher precedence
  +     if (_disabled) return;
   
  -     String attrib = getAttribute("omit-xml-declaration");
  -     if ((attrib != null) && (attrib.equals("yes")))
  -         _omitXmlDeclaration = true;
  +     String attrib = null;
   
  -     if (_method.equals("xml") || _method.equals("html")) {
  -         attrib = getAttribute("indent");
  -         if ((attrib != null) && (attrib.equals("yes")))
  -             _indent = true;
  +     // Get the output XML version - only version "1.0" should be used
  +     _version = getAttribute("version");
  +     if ((_version == null) || (_version.equals(Constants.EMPTYSTRING))) {
  +         _version = ONE_DOT_ZERO_STRING;
        }
  +     if (!_version.equals(ONE_DOT_ZERO_STRING)) {
  +         ErrorMsg msg = new ErrorMsg(OUTPUT_VERSION_ERROR);
  +         parser.reportError(Constants.WARNING, msg);
  +     }
  +
  +     // Get the output method - "xml", "html", "text" or <qname>
  +     _method = getAttribute("method");
  +     if (_method.equals(Constants.EMPTYSTRING)) _method = null;
  +     if (_method != null) _method = _method.toLowerCase();
  +
  +     // Get the output encoding - any value accepted here
  +     _encoding = getAttribute("encoding");
  +     if (_encoding.equals(Constants.EMPTYSTRING)) _encoding = null;
  +
  +     // Should the XML header be omitted - translate to true/false
  +     attrib = getAttribute("omit-xml-declaration");
  +     if ((attrib != null) && (attrib.equals("yes"))) _omitHeader = true;
  +
  +     // Add 'standalone' decaration to output - use text as is
  +     _standalone = getAttribute("standalone");
  +     if (_standalone.equals(Constants.EMPTYSTRING)) _standalone = null;
   
  -     if (_method.equals("xml"))
  -         _header = generateXmlHeader();
  -     else
  -         _header = null;
  +     // Get system/public identifiers for output DOCTYPE declaration
  +     _doctypeSystem = getAttribute("doctype-system");
  +     if (_doctypeSystem.equals(Constants.EMPTYSTRING)) _doctypeSystem = null;
  +     _doctypePublic = getAttribute("doctype-public");
  +     if (_doctypePublic.equals(Constants.EMPTYSTRING)) _doctypePublic = null;
  +
  +     // Names the elements of whose text contents should be output as CDATA
  +     _cdata = getAttribute("cdata-section-elements");
  +     if ((_cdata != null) && (_cdata.equals(Constants.EMPTYSTRING)))
  +         _cdata = null;
  +
  +     // Get the indent setting - only has effect for xml and html output
  +     attrib = getAttribute("indent");
  +     if ((attrib != null) && (attrib.equals("yes"))) _indent = true;
  +
  +     // Get the MIME type for the output file - we don't do anythign with it,
  +     // but our client may use it to specify a data transport type, etc.
  +     _mediaType = getAttribute("media-type");
  +     if (_mediaType.equals(Constants.EMPTYSTRING)) _mediaType = null;
   
  -     parseChildren(parser);
  +     // parseChildren(parser); - the element is always empty
   
        parser.setOutput(this);
       }
   
       /**
  -     * Compile code to set the appropriate output type and 
  -     * output header (if any).
  +     * Compile code that passes the information in this <xsl:output> element
  +     * to the appropriate fields in the translet
        */
  -    public void translate(ClassGenerator classGen,
  -                       MethodGenerator methodGen) {
  -     
  +    public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
  +
  +     // Do nothing if other <xsl:output> element has higher precedence
        if (_disabled) return;
   
        ConstantPoolGen cpg = classGen.getConstantPool();
        InstructionList il = methodGen.getInstructionList();
   
  -     // bug fix # 1406, Compile code to set xml header on/off
  -     if ( _omitXmlDeclaration ) {
  -         final int omitXmlDecl = cpg.addInterfaceMethodref(OUTPUT_HANDLER,
  -                                              "omitXmlDecl","(Z)V");
  -         il.append(methodGen.loadHandler());
  -         il.append(new PUSH(cpg, true));
  -         il.append(new INVOKEINTERFACE(omitXmlDecl,2));
  -     }
  -
  -     // Compile code to set the appropriate output type.
  -     final int type = cpg.addInterfaceMethodref(OUTPUT_HANDLER,
  -                                                "setType", "(I)V");
  -     il.append(methodGen.loadHandler());
  -     if (_method.equals("text")) {
  -         il.append(new PUSH(cpg, TextOutput.TEXT));
  -     }
  -     else if (_method.equals("xml")) {
  -         // Handle any XML elements that should be turned into
  -         // CDATA elements in the XML output document.
  -         if ((_cdataElements != null) && 
  -             (_cdataElements != Constants.EMPTYSTRING)) {
  -             StringTokenizer st = new StringTokenizer(_cdataElements,",");
  -             final int cdata = cpg.addInterfaceMethodref(OUTPUT_HANDLER,
  -                                                "insertCdataElement",
  -                                                "("+STRING_SIG+")V");
  -             while (st.hasMoreElements()) {
  -                 il.append(DUP); // Reference to handler on stack
  -                 il.append(new PUSH(cpg,st.nextToken()));
  -                 il.append(new INVOKEINTERFACE(cdata,2));
  -             }
  -         }
  -         il.append(new PUSH(cpg, TextOutput.XML));
  +     int field = 0;
  +        il.append(classGen.loadTranslet());
  +
  +     // Only update _version field if set and different from default
  +     if ((_version != null) && (!_version.equals(ONE_DOT_ZERO_STRING))) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_version", STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _version));
  +         il.append(new PUTFIELD(field));
        }
  -     else if (_method.equals("html")) {
  -         il.append(new PUSH(cpg, TextOutput.HTML));
  +
  +     // Only update _method field if "method" attribute used
  +     if (_method != null) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_method", STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _method));
  +         il.append(new PUTFIELD(field));
        }
  -     else {
  -         il.append(new PUSH(cpg, TextOutput.QNAME));
  +
  +     // Only update if _encoding field is "encoding" attribute used
  +     if (_encoding != null) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_encoding", STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _encoding));
  +         il.append(new PUTFIELD(field));
        }
  -     il.append(new INVOKEINTERFACE(type,2));
   
  +     // Only update if "omit-xml-declaration" used and set to 'yes'
  +     if (_omitHeader) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_omitHeader", "Z");
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _omitHeader));
  +         il.append(new PUTFIELD(field));
  +     }
  +
  +     // Add 'standalone' decaration to output - use text as is
  +     if (_standalone != null) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_standalone", STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _standalone));
  +         il.append(new PUTFIELD(field));
  +     }
  +
  +     // Set system/public doctype only if both are set
  +     if ((_doctypePublic != null) && (_doctypeSystem != null)) {
  +         field = cpg.addFieldref(TRANSLET_CLASS,"_doctypeSystem",STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _doctypeSystem));
  +         il.append(new PUTFIELD(field));
  +         field = cpg.addFieldref(TRANSLET_CLASS,"_doctypePublic",STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _doctypePublic));
  +         il.append(new PUTFIELD(field));
  +     }
  +     
  +     // Add 'medye-type' decaration to output - if used
  +     if (_mediaType != null) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_mediaType", STRING_SIG);
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _mediaType));
  +         il.append(new PUTFIELD(field));
  +     }
  +
        // Compile code to set output indentation on/off
  -     if ( _indent ) {
  -         final int indent = cpg.addInterfaceMethodref(OUTPUT_HANDLER,
  -                                                      "setIndent","(Z)V");
  -         il.append(methodGen.loadHandler());
  -         il.append(new PUSH(cpg, true));
  -         il.append(new INVOKEINTERFACE(indent,2));
  +     if (_indent ) {
  +         field = cpg.addFieldref(TRANSLET_CLASS, "_indent", "Z");
  +         il.append(DUP);
  +         il.append(new PUSH(cpg, _indent));
  +         il.append(new PUTFIELD(field));
        }
  -    }
   
  -    /**
  -     *  Sets the character encoding in the translet. This method is   
  -     *  called from org.apache.xalan.xsltc.compiler.Stylesheet in order to
  -     *  have the value of the encoding  that was specified in the
  -     *  stylesheet (<xsl:output> element) available in the translets
  -     *  constructor.  
  -     */
  -    public void translateEncoding(ClassGenerator classGen, InstructionList 
il) {
  -     ConstantPoolGen cpg = classGen.getConstantPool();
  -        il.append(classGen.loadTranslet());
  -        il.append(new PUSH(cpg, _encoding));
  -        il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
  -                                            "_encoding",
  -                                            "Ljava/lang/String;")));
  +     // Forward to the translet any elements that should be output as CDATA
  +     if (_cdata != null) {
  +         int index = cpg.addMethodref(TRANSLET_CLASS,
  +                                      "addCdataElement",
  +                                      "(Ljava/lang/String;)V");
  +         StringTokenizer tokens = new StringTokenizer(_cdata);
  +         while (tokens.hasMoreTokens()) {
  +             il.append(DUP);
  +             il.append(new PUSH(cpg, tokens.nextToken()));
  +             il.append(new INVOKEVIRTUAL(index));
  +         }
  +     }
  +     il.append(POP); // Cleanup - pop last translet reference off stack
       }
  +
   }
  
  
  
  1.11      +29 -18    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java
  
  Index: Stylesheet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Stylesheet.java   2001/07/09 10:17:41     1.10
  +++ Stylesheet.java   2001/07/18 15:36:01     1.11
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Stylesheet.java,v 1.10 2001/07/09 10:17:41 morten Exp $
  + * @(#)$Id: Stylesheet.java,v 1.11 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -405,9 +405,6 @@
        
        addDOMField(classGen);
   
  -     // Compile a default constructor to init the namesIndex table
  -     //compileConstructor(classGen);
  -
        // Compile transform() to initialize parameters, globals & output
        // and run the transformation
        compileTransform(classGen);
  @@ -447,15 +444,27 @@
            getXSLTC().dumpClass(classGen.getJavaClass());
        }
       }
  -     
  +
  +    /**
  +     * Compile the translet's constructor
  +     */
       private void compileConstructor(ClassGenerator classGen, Output output) {
   
        final ConstantPoolGen cpg = classGen.getConstantPool();
        final InstructionList il = new InstructionList();
  +
  +     final MethodGenerator constructor =
  +         new MethodGenerator(ACC_PUBLIC,
  +                             de.fub.bytecode.generic.Type.VOID, 
  +                             null, null, "<init>", 
  +                             _className, il, cpg);
  +
  +     // Call the constructor in the AbstractTranslet superclass
        il.append(classGen.loadTranslet());
        il.append(new INVOKESPECIAL(cpg.addMethodref(TRANSLET_CLASS,
                                                     "<init>", "()V")));
   
  +     // Put the names array into the translet - used for dom/translet mapping
        final Vector names = getXSLTC().getNamesIndex();
        il.append(classGen.loadTranslet());
        il.append(new PUSH(cpg, names.size()));
  @@ -472,6 +481,7 @@
                                               NAMES_INDEX,
                                               NAMES_INDEX_SIG)));
   
  +     // Put the namespace names array into the translet
        final Vector namespaces = getXSLTC().getNamespaceIndex();
        il.append(classGen.loadTranslet());
        il.append(new PUSH(cpg, namespaces.size()));
  @@ -488,17 +498,12 @@
                                               NAMESPACE_INDEX,
                                               NAMESPACE_INDEX_SIG)));
   
  -     // Introduces bytecodes to set encoding from <xsl:output> if exists. 
  +     // Compile in code to set the output configuration from <xsl:output>
        if (output != null) {
  -         output.translateEncoding(classGen, il);
  +         // Set all the output settings files in the translet
  +         output.translate(classGen, constructor);
        }
   
  -     final MethodGenerator constructor =
  -         new MethodGenerator(ACC_PUBLIC,
  -                             de.fub.bytecode.generic.Type.VOID, 
  -                             null, null, "<init>", 
  -                             _className, il, cpg);
  -     
        // Compile default decimal formatting symbols.
        // This is an implicit, nameless xsl:decimal-format top-level element.
        if (_numberFormattingUsed)
  @@ -510,10 +515,8 @@
        constructor.setMaxLocals();
        constructor.setMaxStack();
        classGen.addMethod(constructor.getMethod());
  -
       }
   
  -
       /**
        * Compile a topLevel() method into the output class. This method is 
        * called from transform() to handle all non-template top-level 
elemtents.
  @@ -571,12 +574,12 @@
        // Compile code for other top-level elements
        while (elements.hasMoreElements()) {
            final Object element = elements.nextElement();
  +         /*
            // xsl:output
            if (element instanceof Output) {
                ((Output)element).translate(classGen, toplevel);
            }
            // xsl:key
  -         /*
            else if (element instanceof Key) {
                final Key key = (Key)element;
                key.translate(classGen, toplevel);
  @@ -584,7 +587,7 @@
            }
            */
            // xsl:decimal-format
  -         else if (element instanceof DecimalFormatting) {
  +         if (element instanceof DecimalFormatting) {
                ((DecimalFormatting)element).translate(classGen,toplevel);
            }
            // xsl:strip/preserve-space
  @@ -771,7 +774,15 @@
        // continue with globals initialization
        il.append(new PUSH(cpg, DOM.ROOTNODE));
        il.append(new ISTORE(current.getIndex()));
  -     
  +
  +     // Transfer the output settings to the output post-processor
  +     il.append(classGen.loadTranslet());
  +     il.append(transf.loadHandler());
  +     final int index = cpg.addMethodref(TRANSLET_CLASS,
  +                                        "transferOutputSettings",
  +                                        "("+OUTPUT_HANDLER_SIG+")V");
  +     il.append(new INVOKEVIRTUAL(index));
  +
        // Look for top-level elements that need handling
        final Enumeration toplevel = elements();
        if ((_globals.size() > 0) || (toplevel.hasMoreElements())) {
  
  
  
  1.12      +77 -20    
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
  
  Index: AbstractTranslet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- AbstractTranslet.java     2001/07/12 15:54:50     1.11
  +++ AbstractTranslet.java     2001/07/18 15:36:01     1.12
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: AbstractTranslet.java,v 1.11 2001/07/12 15:54:50 morten Exp $
  + * @(#)$Id: AbstractTranslet.java,v 1.12 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -79,6 +79,19 @@
   
   public abstract class AbstractTranslet implements Translet {
   
  +    // These attributes are extracted from the xsl:output element. They also
  +    // appear as fields (with the same type, only public) in Output.java
  +    public String  _version = "1.0";
  +    public String  _method = null;
  +    public String  _encoding = "utf-8";
  +    public boolean _omitHeader = false;
  +    public String  _standalone = null;
  +    public String  _doctypePublic = null;
  +    public String  _doctypeSystem = null;
  +    public boolean _indent = false;
  +    public String  _mediaType = null;
  +    public Hashtable _cdata = null;
  +
       // DOM/translet handshaking - the arrays are set by the compiled translet
       protected String[] namesArray;
       protected String[] namespaceArray;
  @@ -498,31 +511,75 @@
        handler.characters(string.toCharArray(), 0, length);
       }
   
  -    // Holds output encoding - set by code compiled by compiler/Output
  -    protected String _encoding = "utf-8";
  -
       /**
  -     * Pass the output encoding setting to the output handler.
  +     * Add's a name of an element whose text contents should be output as 
CDATA
        */
  -    public String getOutputEncoding() {
  -             return _encoding; 
  -    } 
  -
  -    // Holds the translet's name - God only knows what it is used for
  -    private String _transletName;
  -
  -    /**
  -     * Set the translet's name (default is class name)
  -     */
  -    public void setTransletName(String name) {
  -     _transletName = name;
  +    public void addCdataElement(String name) {
  +     if (_cdata == null) _cdata = new Hashtable();
  +     _cdata.put(name, name);
       }
   
       /**
  -     * Get the translet's name (default is class name)
  +     * Transfer the output settings to the output post-processor
        */
  -    public String getTransletName() {
  -     return _transletName;
  +    protected void transferOutputSettings(TransletOutputHandler output) {
  +
  +     // It is an error if this method is called with anything else than
  +     // the translet post-processor (TextOutput)
  +     if (!(output instanceof TextOutput)) {
  +         System.err.println("output is "+output);
  +         return;
  +     }
  +
  +     TextOutput handler = (TextOutput)output;
  +
  +     // Transfer the output method setting
  +     if (_method != null) {
  +         // Transfer all settings relevant to XML output
  +         if (_method.equals("xml")) {
  +             handler.setType(TextOutput.XML);
  +             handler.setCdataElements(_cdata);
  +             if (_version != null) handler.setVersion(_version);
  +             if (_standalone != null) handler.setStandalone(_standalone);
  +             if (_omitHeader) handler.omitHeader(true);
  +             if (_indent) handler.setIndent(_indent);
  +             if ((_doctypePublic != null) && (_doctypeSystem != null))
  +                 handler.setDoctype(_doctypeSystem, _doctypePublic);
  +         }
  +         // Transfer all output settings relevant to HTML output
  +         else if (_method.equals("html")) {
  +             handler.setType(TextOutput.HTML);
  +             if (_indent)
  +                 handler.setIndent(_indent);
  +             else
  +                 handler.setIndent(true);
  +             if ((_doctypePublic != null) && (_doctypeSystem != null))
  +                 handler.setDoctype(_doctypeSystem, _doctypePublic);
  +             if (_mediaType != null) handler.setMediaType(_mediaType);
  +         }
  +         else if (_method.equals("text")) {
  +             handler.setType(TextOutput.TEXT);
  +         }
  +         else {
  +             handler.setType(TextOutput.QNAME);
  +         }
  +     }
  +     else {
  +         handler.setCdataElements(_cdata);
  +         if (_version != null) handler.setVersion(_version);
  +         if (_standalone != null) handler.setStandalone(_standalone);
  +         if (_omitHeader) handler.omitHeader(true);
  +         if (_indent) handler.setIndent(_indent);
  +         if ((_doctypePublic != null) && (_doctypeSystem != null))
  +             handler.setDoctype(_doctypeSystem, _doctypePublic);
  +     }
       }
  +
  +    /*
  +    // Holds the translet's name - God only knows what it is used for
  +    private String _transletName;
  +    public void setTransletName(String name) { _transletName = name; }
  +    public String getTransletName() { return _transletName; }
  +    */
   
   }
  
  
  
  1.10      +3 -5      
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultRun.java
  
  Index: DefaultRun.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultRun.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DefaultRun.java   2001/07/12 11:32:30     1.9
  +++ DefaultRun.java   2001/07/18 15:36:01     1.10
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DefaultRun.java,v 1.9 2001/07/12 11:32:30 morten Exp $
  + * @(#)$Id: DefaultRun.java,v 1.10 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -167,13 +167,11 @@
            }
   
            // Transform the document
  -         String encoding = translet.getOutputEncoding();
  -         if (encoding == null) encoding = "UTF-8";
  +         String encoding = _translet._encoding;
   
  -         //TextOutput textOutput = new TextOutput(System.out, encoding);
            DefaultSAXOutputHandler saxHandler = new 
                DefaultSAXOutputHandler(System.out, encoding);
  -         TextOutput textOutput = new TextOutput(saxHandler, encoding);
  +         TextOutput textOutput = new TextOutput(saxHandler);
            translet.transform(dom, textOutput);
   
            if (_debug) {
  
  
  
  1.7       +40 -21    
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultSAXOutputHandler.java
  
  Index: DefaultSAXOutputHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultSAXOutputHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DefaultSAXOutputHandler.java      2001/06/06 15:17:33     1.6
  +++ DefaultSAXOutputHandler.java      2001/07/18 15:36:01     1.7
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DefaultSAXOutputHandler.java,v 1.6 2001/06/06 15:17:33 morten 
Exp $
  + * @(#)$Id: DefaultSAXOutputHandler.java,v 1.7 2001/07/18 15:36:01 morten 
Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -89,19 +89,17 @@
       // Contains the name of the last opened element (set in startElement())
       private String _element = null;
   
  -    // Contains the output document type (XML, HTML or TEXT).
  -    private int      _outputType = TextOutput.UNKNOWN;
  -    // Contains the name of the output encoding (default is utf-8).
  -    private String _encoding = "utf-8";
  +    // Settings passed on from TextOutput
  +    private int          _outputType = TextOutput.UNKNOWN;
  +    private String  _encoding   = "utf-8";
  +    private String  _version    = "1.0";
  +    private String  _standalone = null;
  +    private boolean _indent = false;
  +    private boolean _omitHeader = false;
   
       // This variable is set to 'true' when a start tag is left open
       private boolean _startTagOpen = false;
   
  -    // XML output header (used only for XML output).
  -    private static final String XML_HEADER_BEG  =
  -     "<?xml version=\"1.0\" encoding=\"";
  -    private static final String XML_HEADER_END  = "\" ?>\n";
  -
       // Commonly used strings are stored as char arrays for speed
       private static final char[] BEGPI    = "<?".toCharArray();
       private static final char[] ENDPI    = "?>".toCharArray();
  @@ -117,8 +115,6 @@
   
       private static final String EMPTYSTRING = "";
   
  -    private boolean   _indent = false;
  -    private boolean   _omitXmlDecl = false;
       private boolean   _indentNextEndTag = false;
       private boolean   _linefeedNextStartTag = false;
       private int       _indentLevel = 0;
  @@ -186,14 +182,22 @@
        * Utility method - outputs an XML header
        */
       private void emitHeader() throws SAXException {
  -     if (_omitXmlDecl) {
  -         // if true then stylesheet contained an xsl:output element
  -         // with the omit-xml-declaration attribute set to "yes". 
  -         return;
  +     // First check if the 'omit-xml-declaration' was set to yes in the
  +     // stylesheet's <xsl:output> element (if any)
  +     if (_omitHeader) return;
  +
  +     // If not go ahead and output the XML header
  +     StringBuffer buffer = new StringBuffer();
  +     buffer.append("<?xml version=\"");
  +     buffer.append(_version);
  +     buffer.append("\" encoding=\"");
  +     buffer.append(_encoding);
  +     if (_standalone != null) {
  +         buffer.append("\" standalone=\"");
  +         buffer.append(_standalone);
        }
  -     characters(XML_HEADER_BEG);
  -     characters(_encoding);
  -     characters(XML_HEADER_END);
  +     buffer.append("\" ?>\n");
  +     characters(buffer.toString());
       }
   
       /**
  @@ -464,13 +468,28 @@
       }
   
       /**
  +     * Sets the version number that will be output in the XML header.
  +     */
  +    public void setVersion(String version) {
  +     _version = version;
  +    }
  +
  +    /**
  +     * Sets the 'standalone' attribute that will be output in the XML header.
  +     * The attribute will be omitted unless this method is called.
  +     */
  +    public void setStandalone(String standalone) {
  +     _standalone = standalone;
  +    }
  +
  +    /**
        * Turns xml declaration generation on/off, dependent on the attribute
        * omit-xml-declaration in any xsl:output element. 
        * Breaks the SAX HandlerBase interface, but TextOutput will only call
        * this method of the SAX handler is an instance of this class.
        */
  -    public void omitXmlDecl(boolean value) {
  -        _omitXmlDecl = value;
  +    public void omitHeader(boolean value) {
  +        _omitHeader = value;
       }
   
       /**
  
  
  
  1.5       +3 -3      
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SAXAdapter.java   2001/05/21 15:13:08     1.4
  +++ SAXAdapter.java   2001/07/18 15:36:01     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SAXAdapter.java,v 1.4 2001/05/21 15:13:08 morten Exp $
  + * @(#)$Id: SAXAdapter.java,v 1.5 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -174,8 +174,8 @@
       public void setType(int type) {}
       public void setHeader(String header) {}
       public void setIndent(boolean indent) {}
  -    public void omitXmlDecl(boolean value) {}
  -    public void insertCdataElement(String elementName) {}
  +    public void omitHeader(boolean value) {}
  +    public void setCdataElements(Hashtable elements) { }
       public boolean setEscaping(boolean escape)  throws TransletException {
           return(true);
       }
  
  
  
  1.2       +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/StringValueHandler.java
  
  Index: StringValueHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/StringValueHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StringValueHandler.java   2001/04/17 18:52:45     1.1
  +++ StringValueHandler.java   2001/07/18 15:36:01     1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: StringValueHandler.java,v 1.1 2001/04/17 18:52:45 sboag Exp $
  + * @(#)$Id: StringValueHandler.java,v 1.2 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -67,6 +67,7 @@
   import org.apache.xalan.xsltc.*;
   
   public final class StringValueHandler extends TransletOutputBase {
  +
       private char[] _buffer = new char[32];
       private int _free = 0;
        
  
  
  
  1.12      +125 -102  
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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TextOutput.java   2001/07/09 10:17:56     1.11
  +++ TextOutput.java   2001/07/18 15:36:01     1.12
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TextOutput.java,v 1.11 2001/07/09 10:17:56 morten Exp $
  + * @(#)$Id: TextOutput.java,v 1.12 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -73,23 +73,26 @@
   
   public final class TextOutput implements TransletOutputHandler {
   
  -    public static final int UNKNOWN = -1;
  +    // These are the various output types we handle
  +    public static final int UNKNOWN = -1; // determine type from output 
contents
       public static final int TEXT    = 0;
       public static final int XML     = 1;
       public static final int HTML    = 2;
  -    public static final int QNAME   = 3;
  +    public static final int QNAME   = 3;  // no special handling
   
  -    private int            _outputType;
  +    // These parameters are set by the <xsl:output> element, or by the
  +    // get/setOutputProperty() methods in TrAX
  +    private int         _outputType = UNKNOWN;
  +    private String _encoding;
  +    private String _mediaType = "text/html";
   
       private boolean   _escapeChars = false;
       private boolean   _startTagOpen = false;
       private boolean   _cdataTagOpen = false;
       private boolean   _headTagOpen = false;
   
  -    // Contains commonly used attributes (for speeding up output)
  -    private Hashtable _attributeTemplates = new Hashtable();
       // Contains all elements that should be output as CDATA sections
  -    private Hashtable _cdataElements = new Hashtable();
  +    private Hashtable _cdata = null;
   
       private static final String XML_PREFIX = "xml";
   
  @@ -117,7 +120,6 @@
   
       private AttributeList _attributes = new AttributeList();
       private String        _elementName = null;
  -    private String        _header;
   
       private Hashtable _namespaces;
       private Stack     _nodeStack;
  @@ -126,13 +128,15 @@
   
       // Holds the current tree depth (see startElement() and endElement()).
       private int _depth = 0;
  -
  -    private String _encoding;
   
  +    // Reference to the SAX2 handler that consumes this handler's output
       private ContentHandler _saxHandler;
   
       /**
  -     * Constructor
  +     * Creates a new translet output post-processor
  +     *
  +     * @param handler A SAX2 handler to consume the generated SAX events 
  +     * @throws IOException
        */
       public TextOutput(ContentHandler handler) throws IOException {
           _saxHandler = handler;
  @@ -140,7 +144,11 @@
       }
   
       /**
  -     * Constructor
  +     * Creates a new translet output post-processor
  +     *
  +     * @param handler A SAX2 handler to consume the generated SAX events 
  +     * @param encoding The default encoding to use (set in <xsl:output>)
  +     * @throws IOException
        */
       public TextOutput(ContentHandler handler, String encoding)
        throws IOException {
  @@ -153,36 +161,26 @@
        * Initialise global variables
        */
       private void init() throws IOException {
  +     // Reset all output configuration from <xsl:output>
  +     _outputType = UNKNOWN;
  +     _encoding = "utf-8";
  +     _mediaType = "text/html";
  +
  +     // Reset all internal variables and tables
        _escapeChars  = false;
        _startTagOpen = false;
        _cdataTagOpen = false;
  -     _outputType   = UNKNOWN;
  -     _header       = null;
  -     _encoding     = "utf-8";
  -
  -     _qnameStack   = new Stack();
  -
  -     // Empty all our hashtables
  -     _attributeTemplates.clear();
  -     _cdataElements.clear();
  +     _qnameStack = new Stack();
  +
  +     // Reset our internal namespace handling
        initNamespaces();
       }
   
       /**
  -     * Set the output type. The type must be wither TEXT, XML or HTML.
  +     * This method is used internally when the output type was initially
  +     * undefined and the type is set (by this handler) based on the contents
  +     * of the output. Set the default values for some output paramters.
        */
  -    public void setType(int type)  {
  -     try {
  -         _outputType = type;
  -         if (_encoding == null) _encoding = "utf-8";
  -         if (_saxHandler instanceof DefaultSAXOutputHandler)
  -             ((DefaultSAXOutputHandler)_saxHandler).setOutputType(type);
  -     }
  -     catch (SAXException e) {
  -
  -     }
  -    }
  -
       private void setTypeInternal(int type) {
        if (type == XML) {
            _escapeChars = true;
  @@ -198,40 +196,17 @@
        * Emit header through the SAX handler
        */
       private void emitHeader() throws SAXException {
  -     // Make sure the _encoding string contains something
  -     if ((_encoding == null) || (_encoding == EMPTYSTRING))
  -         _encoding = "utf-8";
  -
        // Output HTML header as META element
        if (_outputType == HTML) {
            AttributeList attrs = new AttributeList();
  -         attrs.add("http-equiv","Content-Type");
  -         attrs.add("content","text/html; charset="+_encoding);
  +         attrs.add("http-equiv", "Content-Type");
  +         attrs.add("content", _mediaType+"; charset="+_encoding);
            _saxHandler.startElement(null, null, "meta", attrs);
            _saxHandler.endElement(null, null, "meta");
        }
       }
   
       /**
  -     * Turns output indentation on/off. Should only be set to on
  -     * if the output type is XML or HTML.
  -     */
  -    public void setIndent(boolean indent) {
  -     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  -            ((DefaultSAXOutputHandler)_saxHandler).setIndent(indent);
  -     }
  -    } 
  -
  -    /**
  -     * Directive to turn xml header declaration  on/off. 
  -     */
  -    public void omitXmlDecl(boolean value) {
  -     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  -            ((DefaultSAXOutputHandler)_saxHandler).omitXmlDecl(value);
  -     }
  -    } 
  -
  -    /**
        * This method is called when all the data needed for a call to the
        * SAX handler's startElement() method has been gathered.
        */
  @@ -240,7 +215,7 @@
            _startTagOpen = false;
            
            // Output current element, either as element or CDATA section
  -         if (_cdataElements.containsKey(_elementName)) {
  +         if ((_cdata != null) && (_cdata.containsKey(_elementName))) {
                characters(BEGCDATA);
                _cdataTagOpen = true;
            }
  @@ -298,44 +273,14 @@
       }
   
       /**
  -     * Output document stream flush
  -     */ 
  -    /*
  -    public void flush() throws IOException {
  -     //_saxHandler.flush();
  -    }
  -    */
  -
  -    /**
  -     * Output document stream close
  -     */ 
  -    /*
  -    public void close() throws IOException {
  -     //_saxHandler.close();
  -    }
  -    */
  -
  -    /**
  -     * The <xsl:output method="xml"/> instruction can specify that certain
  -     * XML elements should be output as CDATA sections. This methods allows
  -     * the translet to insert these elements into a hashtable of strings.
  -     * Every output element is looked up in this hashtable before it is
  -     * output.
  -     */ 
  -    public void insertCdataElement(String elementName) {
  -     _cdataElements.put(elementName,EMPTYSTRING);
  -    }
  -
  -    /**
        * Starts the output document. Outputs the document header if the
        * output type is set to XML.
        */
       public void startDocument() throws TransletException {
           try {
               _saxHandler.startDocument();
  -            if (_outputType == XML) {
  -                _escapeChars = true;
  -            }
  +         // Output escaping is _ALWAYS_ enabled for XML output
  +            if (_outputType == XML) _escapeChars = true;
           } catch (SAXException e) {
               throw new TransletException(e);
           }
  @@ -387,14 +332,8 @@
        throws TransletException {
           try {
            // Close any open start tag
  -         if (_startTagOpen) {
  -             closeStartTag();
  -         }
  -            else if (_cdataTagOpen) {
  -                characters(ENDCDATA);
  -                _cdataTagOpen = false;
  -            }
  -
  +         if (_startTagOpen) closeStartTag();
  +         
               // Set output type to XML (the default) if still unknown.
               if (_outputType == UNKNOWN) setTypeInternal(XML);
   
  @@ -597,6 +536,8 @@
        if (_outputType == TEXT) return;
    
        try {
  +         boolean closeElement = true;
  +
            // Close any open element
            if (_startTagOpen) {
                closeStartTag();
  @@ -604,10 +545,11 @@
            else if (_cdataTagOpen) {
                characters(ENDCDATA);
                _cdataTagOpen = false;
  +             closeElement = false;
            }
   
            final String qname = (String)(_qnameStack.pop());
  -            _saxHandler.endElement(null, null, qname);
  +            if (closeElement) _saxHandler.endElement(null, null, qname);
   
               popNamespaces();
               _depth--;
  @@ -785,5 +727,86 @@
        else
            return(uri+":"+local);
       }
  -    
  +
  +    /************************************************************************
  +     * The following are all methods for configuring the output settings
  +     
************************************************************************/
  +    /**
  +     * Set the output type. The type must be wither TEXT, XML or HTML.
  +     */
  +    public void setType(int type)  {
  +     try {
  +         _outputType = type;
  +         if (_encoding == null) _encoding = "utf-8";
  +         if (_saxHandler instanceof DefaultSAXOutputHandler)
  +             ((DefaultSAXOutputHandler)_saxHandler).setOutputType(type);
  +     }
  +     catch (SAXException e) { }
  +    }
  +
  +    /**
  +     * Turns output indentation on/off. Should only be set to on
  +     * if the output type is XML or HTML.
  +     */
  +    public void setIndent(boolean indent) {
  +     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  +            ((DefaultSAXOutputHandler)_saxHandler).setIndent(indent);
  +     }
  +    } 
  +
  +    /**
  +     * Directive to turn xml header declaration  on/off. 
  +     */
  +    public void omitHeader(boolean value) {
  +     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  +            ((DefaultSAXOutputHandler)_saxHandler).omitHeader(value);
  +     }
  +    }
  +
  +    /**
  +     * Set the XML output document version - should be 1.0
  +     */
  +    public void setVersion(String version) {
  +     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  +            ((DefaultSAXOutputHandler)_saxHandler).setVersion(version);
  +     }
  +    }
  +
  +    /**
  +     * Set the XML standalone attribute - must be "yes" or "no"
  +     */
  +    public void setStandalone(String standalone) {
  +     if (_saxHandler instanceof DefaultSAXOutputHandler) {
  +            ((DefaultSAXOutputHandler)_saxHandler).setStandalone(standalone);
  +     }
  +    }
  +
  +    /**
  +     * Set the output document system/public identifiers
  +     */
  +    public void setDoctype(String system, String pub) {
  +     // TODO - pass these to the SAX output handler - how?
  +    }
  +
  +    /**
  +     * Set the output media type - only relevant for HTML output
  +     */
  +    public void setMediaType(String mediaType) {
  +     // This value does not have to be passed to the SAX handler. This
  +     // handler creates the HTML <meta> tag in which the media-type
  +     // (MIME-type) will be used.
  +     _mediaType = mediaType;
  +    }
  +
  +    /**
  +     * The <xsl:output method="xml"/> instruction can specify that certain
  +     * XML elements should be output as CDATA sections. This methods allows
  +     * the translet to insert these elements into a hashtable of strings.
  +     * Every output element is looked up in this hashtable before it is
  +     * output.
  +     */ 
  +    public void setCdataElements(Hashtable elements) {
  +     _cdata = elements;
  +    }
  +
   }
  
  
  
  1.4       +9 -7      
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TransletOutputBase.java   2001/05/21 15:13:14     1.3
  +++ TransletOutputBase.java   2001/07/18 15:36:01     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransletOutputBase.java,v 1.3 2001/05/21 15:13:14 morten Exp $
  + * @(#)$Id: TransletOutputBase.java,v 1.4 2001/07/18 15:36:01 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -64,7 +64,9 @@
   
   package org.apache.xalan.xsltc.runtime;
   
  +
   import org.apache.xalan.xsltc.*;
  +import org.apache.xalan.xsltc.runtime.Hashtable;
   
   public class TransletOutputBase implements TransletOutputHandler {
       public void startDocument() throws TransletException {}
  @@ -80,12 +82,12 @@
       public void comment(String comment) throws TransletException {}
       public void processingInstruction(String target, String data)
        throws TransletException {}
  +    public boolean setEscaping(boolean escape) 
  +     throws TransletException { return true; }
  +    public String expandQName(String withPrefix) { return(withPrefix); }
  +
       public void setType(int type) {}
       public void setIndent(boolean indent) {}
  -    public void omitXmlDecl(boolean value) {}
  -    public void insertCdataElement(String elementName) {}
  -    public boolean setEscaping(boolean escape) throws TransletException {
  -        return true;
  -    }
  -    public String expandQName(String withPrefix) { return(withPrefix); }
  +    public void omitHeader(boolean value) {}
  +    public void setCdataElements(Hashtable elements) {}
   }
  
  
  

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

Reply via email to