jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
author joehw
Tue, 29 Jul 2014 20:52:36 -0700
changeset 25834 aba3efbf4ec5
parent 24888 2e493ac78624
permissions -rw-r--r--
8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer. Reviewed-by: lancea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
7f561c08de6b Initial load
duke
parents:
diff changeset
     1
/*
7f561c08de6b Initial load
duke
parents:
diff changeset
     2
 * reserved comment block
7f561c08de6b Initial load
duke
parents:
diff changeset
     3
 * DO NOT REMOVE OR ALTER!
7f561c08de6b Initial load
duke
parents:
diff changeset
     4
 */
7f561c08de6b Initial load
duke
parents:
diff changeset
     5
/*
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
     6
 * Licensed to the Apache Software Foundation (ASF) under one
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
     7
 * or more contributor license agreements. See the NOTICE file
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
     8
 * distributed with this work for additional information
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
     9
 * regarding copyright ownership. The ASF licenses this file
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
    10
 * to you under the Apache License, Version 2.0 (the  "License");
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    11
 * you may not use this file except in compliance with the License.
7f561c08de6b Initial load
duke
parents:
diff changeset
    12
 * You may obtain a copy of the License at
7f561c08de6b Initial load
duke
parents:
diff changeset
    13
 *
7f561c08de6b Initial load
duke
parents:
diff changeset
    14
 *     http://www.apache.org/licenses/LICENSE-2.0
7f561c08de6b Initial load
duke
parents:
diff changeset
    15
 *
7f561c08de6b Initial load
duke
parents:
diff changeset
    16
 * Unless required by applicable law or agreed to in writing, software
7f561c08de6b Initial load
duke
parents:
diff changeset
    17
 * distributed under the License is distributed on an "AS IS" BASIS,
7f561c08de6b Initial load
duke
parents:
diff changeset
    18
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7f561c08de6b Initial load
duke
parents:
diff changeset
    19
 * See the License for the specific language governing permissions and
7f561c08de6b Initial load
duke
parents:
diff changeset
    20
 * limitations under the License.
7f561c08de6b Initial load
duke
parents:
diff changeset
    21
 */
7f561c08de6b Initial load
duke
parents:
diff changeset
    22
/*
7f561c08de6b Initial load
duke
parents:
diff changeset
    23
 * $Id: SerializerBase.java,v 1.5 2006/04/14 12:09:19 sunithareddy Exp $
7f561c08de6b Initial load
duke
parents:
diff changeset
    24
 */
7f561c08de6b Initial load
duke
parents:
diff changeset
    25
package com.sun.org.apache.xml.internal.serializer;
7f561c08de6b Initial load
duke
parents:
diff changeset
    26
7f561c08de6b Initial load
duke
parents:
diff changeset
    27
import java.io.IOException;
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
    28
import java.util.HashMap;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
    29
import java.util.Set;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
    30
import java.util.ArrayList;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    31
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
    32
import javax.xml.transform.OutputKeys;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    33
import javax.xml.transform.SourceLocator;
7f561c08de6b Initial load
duke
parents:
diff changeset
    34
import javax.xml.transform.Transformer;
7f561c08de6b Initial load
duke
parents:
diff changeset
    35
7f561c08de6b Initial load
duke
parents:
diff changeset
    36
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
7f561c08de6b Initial load
duke
parents:
diff changeset
    37
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
7f561c08de6b Initial load
duke
parents:
diff changeset
    38
import org.xml.sax.Attributes;
7f561c08de6b Initial load
duke
parents:
diff changeset
    39
import org.xml.sax.ContentHandler;
7f561c08de6b Initial load
duke
parents:
diff changeset
    40
import org.xml.sax.Locator;
7f561c08de6b Initial load
duke
parents:
diff changeset
    41
import org.xml.sax.SAXException;
7f561c08de6b Initial load
duke
parents:
diff changeset
    42
import org.xml.sax.SAXParseException;
7f561c08de6b Initial load
duke
parents:
diff changeset
    43
import org.xml.sax.ext.Locator2;
7f561c08de6b Initial load
duke
parents:
diff changeset
    44
7f561c08de6b Initial load
duke
parents:
diff changeset
    45
7f561c08de6b Initial load
duke
parents:
diff changeset
    46
/**
7f561c08de6b Initial load
duke
parents:
diff changeset
    47
 * This class acts as a base class for the XML "serializers"
7f561c08de6b Initial load
duke
parents:
diff changeset
    48
 * and the stream serializers.
7f561c08de6b Initial load
duke
parents:
diff changeset
    49
 * It contains a number of common fields and methods.
7f561c08de6b Initial load
duke
parents:
diff changeset
    50
 *
7f561c08de6b Initial load
duke
parents:
diff changeset
    51
 * @xsl.usage internal
7f561c08de6b Initial load
duke
parents:
diff changeset
    52
 */
7f561c08de6b Initial load
duke
parents:
diff changeset
    53
public abstract class SerializerBase
7f561c08de6b Initial load
duke
parents:
diff changeset
    54
    implements SerializationHandler, SerializerConstants
7f561c08de6b Initial load
duke
parents:
diff changeset
    55
{
7f561c08de6b Initial load
duke
parents:
diff changeset
    56
7f561c08de6b Initial load
duke
parents:
diff changeset
    57
7f561c08de6b Initial load
duke
parents:
diff changeset
    58
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
    59
     * To fire off the end element trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
    60
     * @param name Name of element
7f561c08de6b Initial load
duke
parents:
diff changeset
    61
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
    62
    protected void fireEndElem(String name)
7f561c08de6b Initial load
duke
parents:
diff changeset
    63
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
    64
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
    65
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
    66
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
    67
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
    68
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDELEMENT,name, (Attributes)null);
7f561c08de6b Initial load
duke
parents:
diff changeset
    69
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
    70
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
    71
7f561c08de6b Initial load
duke
parents:
diff changeset
    72
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
    73
     * Report the characters trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
    74
     * @param chars  content of characters
7f561c08de6b Initial load
duke
parents:
diff changeset
    75
     * @param start  starting index of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
    76
     * @param length  number of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
    77
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
    78
    protected void fireCharEvent(char[] chars, int start, int length)
7f561c08de6b Initial load
duke
parents:
diff changeset
    79
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
    80
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
    81
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
    82
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
    83
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
    84
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length);
7f561c08de6b Initial load
duke
parents:
diff changeset
    85
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
    86
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
    87
7f561c08de6b Initial load
duke
parents:
diff changeset
    88
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
    89
     * true if we still need to call startDocumentInternal()
7f561c08de6b Initial load
duke
parents:
diff changeset
    90
         */
7f561c08de6b Initial load
duke
parents:
diff changeset
    91
    protected boolean m_needToCallStartDocument = true;
7f561c08de6b Initial load
duke
parents:
diff changeset
    92
7f561c08de6b Initial load
duke
parents:
diff changeset
    93
    /** True if a trailing "]]>" still needs to be written to be
7f561c08de6b Initial load
duke
parents:
diff changeset
    94
     * written out. Used to merge adjacent CDATA sections
7f561c08de6b Initial load
duke
parents:
diff changeset
    95
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
    96
    protected boolean m_cdataTagOpen = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
    97
7f561c08de6b Initial load
duke
parents:
diff changeset
    98
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
    99
     * All the attributes of the current element, collected from
7f561c08de6b Initial load
duke
parents:
diff changeset
   100
     * startPrefixMapping() calls, or addAddtribute() calls, or
7f561c08de6b Initial load
duke
parents:
diff changeset
   101
     * from the SAX attributes in a startElement() call.
7f561c08de6b Initial load
duke
parents:
diff changeset
   102
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   103
    protected AttributesImplSerializer m_attributes = new AttributesImplSerializer();
7f561c08de6b Initial load
duke
parents:
diff changeset
   104
7f561c08de6b Initial load
duke
parents:
diff changeset
   105
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   106
     * Tells if we're in an EntityRef event.
7f561c08de6b Initial load
duke
parents:
diff changeset
   107
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   108
    protected boolean m_inEntityRef = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   109
7f561c08de6b Initial load
duke
parents:
diff changeset
   110
    /** This flag is set while receiving events from the external DTD */
7f561c08de6b Initial load
duke
parents:
diff changeset
   111
    protected boolean m_inExternalDTD = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   112
7f561c08de6b Initial load
duke
parents:
diff changeset
   113
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   114
     * The System ID for the doc type.
7f561c08de6b Initial load
duke
parents:
diff changeset
   115
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   116
    protected String m_doctypeSystem;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   117
7f561c08de6b Initial load
duke
parents:
diff changeset
   118
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   119
     * The public ID for the doc type.
7f561c08de6b Initial load
duke
parents:
diff changeset
   120
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   121
    protected String m_doctypePublic;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   122
7f561c08de6b Initial load
duke
parents:
diff changeset
   123
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   124
     * Flag to tell that we need to add the doctype decl, which we can't do
7f561c08de6b Initial load
duke
parents:
diff changeset
   125
     * until the first element is encountered.
7f561c08de6b Initial load
duke
parents:
diff changeset
   126
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   127
    boolean m_needToOutputDocTypeDecl = true;
7f561c08de6b Initial load
duke
parents:
diff changeset
   128
7f561c08de6b Initial load
duke
parents:
diff changeset
   129
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   130
     * Tells if we should write the XML declaration.
7f561c08de6b Initial load
duke
parents:
diff changeset
   131
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   132
    protected boolean m_shouldNotWriteXMLHeader = false;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   133
7f561c08de6b Initial load
duke
parents:
diff changeset
   134
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   135
     * The standalone value for the doctype.
7f561c08de6b Initial load
duke
parents:
diff changeset
   136
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   137
    private String m_standalone;
7f561c08de6b Initial load
duke
parents:
diff changeset
   138
7f561c08de6b Initial load
duke
parents:
diff changeset
   139
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   140
     * True if standalone was specified.
7f561c08de6b Initial load
duke
parents:
diff changeset
   141
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   142
    protected boolean m_standaloneWasSpecified = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   143
7f561c08de6b Initial load
duke
parents:
diff changeset
   144
    /**
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   145
     * Determine if the output is a standalone.
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   146
     */
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   147
    protected boolean m_isStandalone = false;
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   148
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   149
    /**
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   150
     * Flag to tell if indenting (pretty-printing) is on.
7f561c08de6b Initial load
duke
parents:
diff changeset
   151
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   152
    protected boolean m_doIndent = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   153
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   154
     * Amount to indent.
7f561c08de6b Initial load
duke
parents:
diff changeset
   155
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   156
    protected int m_indentAmount = 0;
7f561c08de6b Initial load
duke
parents:
diff changeset
   157
7f561c08de6b Initial load
duke
parents:
diff changeset
   158
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   159
     * Tells the XML version, for writing out to the XML decl.
7f561c08de6b Initial load
duke
parents:
diff changeset
   160
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   161
    protected String m_version = null;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   162
7f561c08de6b Initial load
duke
parents:
diff changeset
   163
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   164
     * The mediatype.  Not used right now.
7f561c08de6b Initial load
duke
parents:
diff changeset
   165
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   166
    protected String m_mediatype;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   167
7f561c08de6b Initial load
duke
parents:
diff changeset
   168
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   169
     * The transformer that was around when this output handler was created (if
7f561c08de6b Initial load
duke
parents:
diff changeset
   170
     * any).
7f561c08de6b Initial load
duke
parents:
diff changeset
   171
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   172
    private Transformer m_transformer;
7f561c08de6b Initial load
duke
parents:
diff changeset
   173
7f561c08de6b Initial load
duke
parents:
diff changeset
   174
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   175
     * Namespace support, that keeps track of currently defined
7f561c08de6b Initial load
duke
parents:
diff changeset
   176
     * prefix/uri mappings. As processed elements come and go, so do
7f561c08de6b Initial load
duke
parents:
diff changeset
   177
     * the associated mappings for that element.
7f561c08de6b Initial load
duke
parents:
diff changeset
   178
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   179
    protected NamespaceMappings m_prefixMap;
7f561c08de6b Initial load
duke
parents:
diff changeset
   180
7f561c08de6b Initial load
duke
parents:
diff changeset
   181
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   182
     * Handle for firing generate events.  This interface may be implemented
7f561c08de6b Initial load
duke
parents:
diff changeset
   183
     * by the referenced transformer object.
7f561c08de6b Initial load
duke
parents:
diff changeset
   184
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   185
    protected SerializerTrace m_tracer;
7f561c08de6b Initial load
duke
parents:
diff changeset
   186
7f561c08de6b Initial load
duke
parents:
diff changeset
   187
    protected SourceLocator m_sourceLocator;
7f561c08de6b Initial load
duke
parents:
diff changeset
   188
7f561c08de6b Initial load
duke
parents:
diff changeset
   189
7f561c08de6b Initial load
duke
parents:
diff changeset
   190
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   191
     * The writer to send output to. This field is only used in the ToStream
7f561c08de6b Initial load
duke
parents:
diff changeset
   192
     * serializers, but exists here just so that the fireStartDoc() and
7f561c08de6b Initial load
duke
parents:
diff changeset
   193
     * other fire... methods can flush this writer when tracing.
7f561c08de6b Initial load
duke
parents:
diff changeset
   194
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   195
    protected java.io.Writer m_writer = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
   196
7f561c08de6b Initial load
duke
parents:
diff changeset
   197
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   198
     * A reference to "stack frame" corresponding to
7f561c08de6b Initial load
duke
parents:
diff changeset
   199
     * the current element. Such a frame is pushed at a startElement()
7f561c08de6b Initial load
duke
parents:
diff changeset
   200
     * and popped at an endElement(). This frame contains information about
7f561c08de6b Initial load
duke
parents:
diff changeset
   201
     * the element, such as its namespace URI.
7f561c08de6b Initial load
duke
parents:
diff changeset
   202
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   203
    protected ElemContext m_elemContext = new ElemContext();
7f561c08de6b Initial load
duke
parents:
diff changeset
   204
7f561c08de6b Initial load
duke
parents:
diff changeset
   205
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   206
     * A utility buffer for converting Strings passed to
7f561c08de6b Initial load
duke
parents:
diff changeset
   207
     * character() methods to character arrays.
7f561c08de6b Initial load
duke
parents:
diff changeset
   208
     * Reusing this buffer means not creating a new character array
7f561c08de6b Initial load
duke
parents:
diff changeset
   209
     * everytime and it runs faster.
7f561c08de6b Initial load
duke
parents:
diff changeset
   210
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   211
    protected char[] m_charsBuff = new char[60];
7f561c08de6b Initial load
duke
parents:
diff changeset
   212
7f561c08de6b Initial load
duke
parents:
diff changeset
   213
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   214
     * A utility buffer for converting Strings passed to
7f561c08de6b Initial load
duke
parents:
diff changeset
   215
     * attribute methods to character arrays.
7f561c08de6b Initial load
duke
parents:
diff changeset
   216
     * Reusing this buffer means not creating a new character array
7f561c08de6b Initial load
duke
parents:
diff changeset
   217
     * everytime and it runs faster.
7f561c08de6b Initial load
duke
parents:
diff changeset
   218
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   219
    protected char[] m_attrBuff = new char[30];
7f561c08de6b Initial load
duke
parents:
diff changeset
   220
7f561c08de6b Initial load
duke
parents:
diff changeset
   221
    private Locator m_locator = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
   222
7f561c08de6b Initial load
duke
parents:
diff changeset
   223
    protected boolean m_needToCallSetDocumentInfo = true;
7f561c08de6b Initial load
duke
parents:
diff changeset
   224
7f561c08de6b Initial load
duke
parents:
diff changeset
   225
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   226
     * Receive notification of a comment.
7f561c08de6b Initial load
duke
parents:
diff changeset
   227
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   228
     * @see ExtendedLexicalHandler#comment(String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   229
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   230
    public void comment(String data) throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   231
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   232
        final int length = data.length();
7f561c08de6b Initial load
duke
parents:
diff changeset
   233
        if (length > m_charsBuff.length)
7f561c08de6b Initial load
duke
parents:
diff changeset
   234
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   235
            m_charsBuff = new char[length * 2 + 1];
7f561c08de6b Initial load
duke
parents:
diff changeset
   236
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   237
        data.getChars(0, length, m_charsBuff, 0);
7f561c08de6b Initial load
duke
parents:
diff changeset
   238
        comment(m_charsBuff, 0, length);
7f561c08de6b Initial load
duke
parents:
diff changeset
   239
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   240
7f561c08de6b Initial load
duke
parents:
diff changeset
   241
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   242
     * If at runtime, when the qname of the attribute is
7f561c08de6b Initial load
duke
parents:
diff changeset
   243
     * known, another prefix is specified for the attribute, then we can
7f561c08de6b Initial load
duke
parents:
diff changeset
   244
     * patch or hack the name with this method. For
7f561c08de6b Initial load
duke
parents:
diff changeset
   245
     * a qname of the form "ns?:otherprefix:name", this function patches the
7f561c08de6b Initial load
duke
parents:
diff changeset
   246
     * qname by simply ignoring "otherprefix".
7f561c08de6b Initial load
duke
parents:
diff changeset
   247
     * TODO: This method is a HACK! We do not have access to the
7f561c08de6b Initial load
duke
parents:
diff changeset
   248
     * XML file, it sometimes generates a NS prefix of the form "ns?" for
7f561c08de6b Initial load
duke
parents:
diff changeset
   249
     * an attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   250
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   251
    protected String patchName(String qname)
7f561c08de6b Initial load
duke
parents:
diff changeset
   252
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   253
7f561c08de6b Initial load
duke
parents:
diff changeset
   254
7f561c08de6b Initial load
duke
parents:
diff changeset
   255
        final int lastColon = qname.lastIndexOf(':');
7f561c08de6b Initial load
duke
parents:
diff changeset
   256
7f561c08de6b Initial load
duke
parents:
diff changeset
   257
        if (lastColon > 0) {
7f561c08de6b Initial load
duke
parents:
diff changeset
   258
            final int firstColon = qname.indexOf(':');
7f561c08de6b Initial load
duke
parents:
diff changeset
   259
            final String prefix = qname.substring(0, firstColon);
7f561c08de6b Initial load
duke
parents:
diff changeset
   260
            final String localName = qname.substring(lastColon + 1);
7f561c08de6b Initial load
duke
parents:
diff changeset
   261
7f561c08de6b Initial load
duke
parents:
diff changeset
   262
        // If uri is "" then ignore prefix
7f561c08de6b Initial load
duke
parents:
diff changeset
   263
            final String uri = m_prefixMap.lookupNamespace(prefix);
7f561c08de6b Initial load
duke
parents:
diff changeset
   264
            if (uri != null && uri.length() == 0) {
7f561c08de6b Initial load
duke
parents:
diff changeset
   265
                return localName;
7f561c08de6b Initial load
duke
parents:
diff changeset
   266
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   267
            else if (firstColon != lastColon) {
7f561c08de6b Initial load
duke
parents:
diff changeset
   268
                return prefix + ':' + localName;
7f561c08de6b Initial load
duke
parents:
diff changeset
   269
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   270
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   271
        return qname;
7f561c08de6b Initial load
duke
parents:
diff changeset
   272
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   273
7f561c08de6b Initial load
duke
parents:
diff changeset
   274
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   275
     * Returns the local name of a qualified name. If the name has no prefix,
7f561c08de6b Initial load
duke
parents:
diff changeset
   276
     * then it works as the identity (SAX2).
7f561c08de6b Initial load
duke
parents:
diff changeset
   277
     * @param qname the qualified name
7f561c08de6b Initial load
duke
parents:
diff changeset
   278
     * @return the name, but excluding any prefix and colon.
7f561c08de6b Initial load
duke
parents:
diff changeset
   279
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   280
    protected static String getLocalName(String qname)
7f561c08de6b Initial load
duke
parents:
diff changeset
   281
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   282
        final int col = qname.lastIndexOf(':');
7f561c08de6b Initial load
duke
parents:
diff changeset
   283
        return (col > 0) ? qname.substring(col + 1) : qname;
7f561c08de6b Initial load
duke
parents:
diff changeset
   284
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   285
7f561c08de6b Initial load
duke
parents:
diff changeset
   286
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   287
     * Receive an object for locating the origin of SAX document events.
7f561c08de6b Initial load
duke
parents:
diff changeset
   288
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   289
     * @param locator An object that can return the location of any SAX document
7f561c08de6b Initial load
duke
parents:
diff changeset
   290
     * event.
7f561c08de6b Initial load
duke
parents:
diff changeset
   291
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   292
     * Receive an object for locating the origin of SAX document events.
7f561c08de6b Initial load
duke
parents:
diff changeset
   293
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   294
     * <p>SAX parsers are strongly encouraged (though not absolutely
7f561c08de6b Initial load
duke
parents:
diff changeset
   295
     * required) to supply a locator: if it does so, it must supply
7f561c08de6b Initial load
duke
parents:
diff changeset
   296
     * the locator to the application by invoking this method before
7f561c08de6b Initial load
duke
parents:
diff changeset
   297
     * invoking any of the other methods in the DocumentHandler
7f561c08de6b Initial load
duke
parents:
diff changeset
   298
     * interface.</p>
7f561c08de6b Initial load
duke
parents:
diff changeset
   299
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   300
     * <p>The locator allows the application to determine the end
7f561c08de6b Initial load
duke
parents:
diff changeset
   301
     * position of any document-related event, even if the parser is
7f561c08de6b Initial load
duke
parents:
diff changeset
   302
     * not reporting an error.  Typically, the application will
7f561c08de6b Initial load
duke
parents:
diff changeset
   303
     * use this information for reporting its own errors (such as
7f561c08de6b Initial load
duke
parents:
diff changeset
   304
     * character content that does not match an application's
7f561c08de6b Initial load
duke
parents:
diff changeset
   305
     * business rules).  The information returned by the locator
7f561c08de6b Initial load
duke
parents:
diff changeset
   306
     * is probably not sufficient for use with a search engine.</p>
7f561c08de6b Initial load
duke
parents:
diff changeset
   307
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   308
     * <p>Note that the locator will return correct information only
7f561c08de6b Initial load
duke
parents:
diff changeset
   309
     * during the invocation of the events in this interface.  The
7f561c08de6b Initial load
duke
parents:
diff changeset
   310
     * application should not attempt to use it at any other time.</p>
7f561c08de6b Initial load
duke
parents:
diff changeset
   311
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   312
    public void setDocumentLocator(Locator locator)
7f561c08de6b Initial load
duke
parents:
diff changeset
   313
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   314
        m_locator = locator;
7f561c08de6b Initial load
duke
parents:
diff changeset
   315
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   316
7f561c08de6b Initial load
duke
parents:
diff changeset
   317
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   318
     * Adds the given attribute to the set of collected attributes , but only if
7f561c08de6b Initial load
duke
parents:
diff changeset
   319
     * there is a currently open element.
7f561c08de6b Initial load
duke
parents:
diff changeset
   320
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   321
     * An element is currently open if a startElement() notification has
7f561c08de6b Initial load
duke
parents:
diff changeset
   322
     * occured but the start of the element has not yet been written to the
7f561c08de6b Initial load
duke
parents:
diff changeset
   323
     * output.  In the stream case this means that we have not yet been forced
7f561c08de6b Initial load
duke
parents:
diff changeset
   324
     * to close the elements opening tag by another notification, such as a
7f561c08de6b Initial load
duke
parents:
diff changeset
   325
     * character notification.
7f561c08de6b Initial load
duke
parents:
diff changeset
   326
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   327
     * @param uri the URI of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   328
     * @param localName the local name of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   329
     * @param rawName    the qualified name of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   330
     * @param type the type of the attribute (probably CDATA)
7f561c08de6b Initial load
duke
parents:
diff changeset
   331
     * @param value the value of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   332
     * @param XSLAttribute true if this attribute is coming from an xsl:attriute element
7f561c08de6b Initial load
duke
parents:
diff changeset
   333
     * @see ExtendedContentHandler#addAttribute(String, String, String, String, String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   334
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   335
    public void addAttribute(
7f561c08de6b Initial load
duke
parents:
diff changeset
   336
        String uri,
7f561c08de6b Initial load
duke
parents:
diff changeset
   337
        String localName,
7f561c08de6b Initial load
duke
parents:
diff changeset
   338
        String rawName,
7f561c08de6b Initial load
duke
parents:
diff changeset
   339
        String type,
7f561c08de6b Initial load
duke
parents:
diff changeset
   340
        String value,
7f561c08de6b Initial load
duke
parents:
diff changeset
   341
        boolean XSLAttribute)
7f561c08de6b Initial load
duke
parents:
diff changeset
   342
        throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   343
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   344
        if (m_elemContext.m_startTagOpen)
7f561c08de6b Initial load
duke
parents:
diff changeset
   345
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   346
            addAttributeAlways(uri, localName, rawName, type, value, XSLAttribute);
7f561c08de6b Initial load
duke
parents:
diff changeset
   347
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   348
7f561c08de6b Initial load
duke
parents:
diff changeset
   349
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   350
7f561c08de6b Initial load
duke
parents:
diff changeset
   351
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   352
     * Adds the given attribute to the set of attributes, even if there is
7f561c08de6b Initial load
duke
parents:
diff changeset
   353
     * no currently open element. This is useful if a SAX startPrefixMapping()
7f561c08de6b Initial load
duke
parents:
diff changeset
   354
     * should need to add an attribute before the element name is seen.
7f561c08de6b Initial load
duke
parents:
diff changeset
   355
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   356
     * @param uri the URI of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   357
     * @param localName the local name of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   358
     * @param rawName   the qualified name of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   359
     * @param type the type of the attribute (probably CDATA)
7f561c08de6b Initial load
duke
parents:
diff changeset
   360
     * @param value the value of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   361
     * @param XSLAttribute true if this attribute is coming from an xsl:attribute element
7f561c08de6b Initial load
duke
parents:
diff changeset
   362
     * @return true if the attribute was added,
7f561c08de6b Initial load
duke
parents:
diff changeset
   363
     * false if an existing value was replaced.
7f561c08de6b Initial load
duke
parents:
diff changeset
   364
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   365
    public boolean addAttributeAlways(
7f561c08de6b Initial load
duke
parents:
diff changeset
   366
        String uri,
7f561c08de6b Initial load
duke
parents:
diff changeset
   367
        String localName,
7f561c08de6b Initial load
duke
parents:
diff changeset
   368
        String rawName,
7f561c08de6b Initial load
duke
parents:
diff changeset
   369
        String type,
7f561c08de6b Initial load
duke
parents:
diff changeset
   370
        String value,
7f561c08de6b Initial load
duke
parents:
diff changeset
   371
        boolean XSLAttribute)
7f561c08de6b Initial load
duke
parents:
diff changeset
   372
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   373
        boolean was_added;
7f561c08de6b Initial load
duke
parents:
diff changeset
   374
//            final int index =
7f561c08de6b Initial load
duke
parents:
diff changeset
   375
//                (localName == null || uri == null) ?
7f561c08de6b Initial load
duke
parents:
diff changeset
   376
//                m_attributes.getIndex(rawName):m_attributes.getIndex(uri, localName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   377
            int index;
7f561c08de6b Initial load
duke
parents:
diff changeset
   378
//            if (localName == null || uri == null){
7f561c08de6b Initial load
duke
parents:
diff changeset
   379
//                index = m_attributes.getIndex(rawName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   380
//            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   381
//            else {
7f561c08de6b Initial load
duke
parents:
diff changeset
   382
//                index = m_attributes.getIndex(uri, localName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   383
//            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   384
7f561c08de6b Initial load
duke
parents:
diff changeset
   385
            if (localName == null || uri == null || uri.length() == 0)
7f561c08de6b Initial load
duke
parents:
diff changeset
   386
                index = m_attributes.getIndex(rawName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   387
            else {
7f561c08de6b Initial load
duke
parents:
diff changeset
   388
                index = m_attributes.getIndex(uri,localName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   389
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   390
            if (index >= 0)
7f561c08de6b Initial load
duke
parents:
diff changeset
   391
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
   392
                /* We've seen the attribute before.
7f561c08de6b Initial load
duke
parents:
diff changeset
   393
                 * We may have a null uri or localName, but all
7f561c08de6b Initial load
duke
parents:
diff changeset
   394
                 * we really want to re-set is the value anyway.
7f561c08de6b Initial load
duke
parents:
diff changeset
   395
                 */
7f561c08de6b Initial load
duke
parents:
diff changeset
   396
                m_attributes.setValue(index,value);
7f561c08de6b Initial load
duke
parents:
diff changeset
   397
                was_added = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   398
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   399
            else
7f561c08de6b Initial load
duke
parents:
diff changeset
   400
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
   401
                // the attribute doesn't exist yet, create it
7f561c08de6b Initial load
duke
parents:
diff changeset
   402
                m_attributes.addAttribute(uri, localName, rawName, type, value);
7f561c08de6b Initial load
duke
parents:
diff changeset
   403
                was_added = true;
7f561c08de6b Initial load
duke
parents:
diff changeset
   404
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   405
            return was_added;
7f561c08de6b Initial load
duke
parents:
diff changeset
   406
7f561c08de6b Initial load
duke
parents:
diff changeset
   407
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   408
7f561c08de6b Initial load
duke
parents:
diff changeset
   409
7f561c08de6b Initial load
duke
parents:
diff changeset
   410
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   411
     *  Adds  the given attribute to the set of collected attributes,
7f561c08de6b Initial load
duke
parents:
diff changeset
   412
     * but only if there is a currently open element.
7f561c08de6b Initial load
duke
parents:
diff changeset
   413
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   414
     * @param name the attribute's qualified name
7f561c08de6b Initial load
duke
parents:
diff changeset
   415
     * @param value the value of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   416
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   417
    public void addAttribute(String name, final String value)
7f561c08de6b Initial load
duke
parents:
diff changeset
   418
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   419
        if (m_elemContext.m_startTagOpen)
7f561c08de6b Initial load
duke
parents:
diff changeset
   420
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   421
            final String patchedName = patchName(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   422
            final String localName = getLocalName(patchedName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   423
            final String uri = getNamespaceURI(patchedName, false);
7f561c08de6b Initial load
duke
parents:
diff changeset
   424
7f561c08de6b Initial load
duke
parents:
diff changeset
   425
            addAttributeAlways(uri,localName, patchedName, "CDATA", value, false);
7f561c08de6b Initial load
duke
parents:
diff changeset
   426
         }
7f561c08de6b Initial load
duke
parents:
diff changeset
   427
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   428
7f561c08de6b Initial load
duke
parents:
diff changeset
   429
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   430
     * Adds the given xsl:attribute to the set of collected attributes,
7f561c08de6b Initial load
duke
parents:
diff changeset
   431
     * but only if there is a currently open element.
7f561c08de6b Initial load
duke
parents:
diff changeset
   432
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   433
     * @param name the attribute's qualified name (prefix:localName)
7f561c08de6b Initial load
duke
parents:
diff changeset
   434
     * @param value the value of the attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   435
     * @param uri the URI that the prefix of the name points to
7f561c08de6b Initial load
duke
parents:
diff changeset
   436
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   437
    public void addXSLAttribute(String name, final String value, final String uri)
7f561c08de6b Initial load
duke
parents:
diff changeset
   438
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   439
        if (m_elemContext.m_startTagOpen)
7f561c08de6b Initial load
duke
parents:
diff changeset
   440
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   441
            final String patchedName = patchName(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   442
            final String localName = getLocalName(patchedName);
7f561c08de6b Initial load
duke
parents:
diff changeset
   443
7f561c08de6b Initial load
duke
parents:
diff changeset
   444
            addAttributeAlways(uri,localName, patchedName, "CDATA", value, true);
7f561c08de6b Initial load
duke
parents:
diff changeset
   445
         }
7f561c08de6b Initial load
duke
parents:
diff changeset
   446
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   447
7f561c08de6b Initial load
duke
parents:
diff changeset
   448
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   449
     * Add the given attributes to the currently collected ones. These
7f561c08de6b Initial load
duke
parents:
diff changeset
   450
     * attributes are always added, regardless of whether on not an element
7f561c08de6b Initial load
duke
parents:
diff changeset
   451
     * is currently open.
7f561c08de6b Initial load
duke
parents:
diff changeset
   452
     * @param atts List of attributes to add to this list
7f561c08de6b Initial load
duke
parents:
diff changeset
   453
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   454
    public void addAttributes(Attributes atts) throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   455
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   456
7f561c08de6b Initial load
duke
parents:
diff changeset
   457
        int nAtts = atts.getLength();
7f561c08de6b Initial load
duke
parents:
diff changeset
   458
        for (int i = 0; i < nAtts; i++)
7f561c08de6b Initial load
duke
parents:
diff changeset
   459
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   460
            String uri = atts.getURI(i);
7f561c08de6b Initial load
duke
parents:
diff changeset
   461
7f561c08de6b Initial load
duke
parents:
diff changeset
   462
            if (null == uri)
7f561c08de6b Initial load
duke
parents:
diff changeset
   463
                uri = "";
7f561c08de6b Initial load
duke
parents:
diff changeset
   464
7f561c08de6b Initial load
duke
parents:
diff changeset
   465
            addAttributeAlways(
7f561c08de6b Initial load
duke
parents:
diff changeset
   466
                uri,
7f561c08de6b Initial load
duke
parents:
diff changeset
   467
                atts.getLocalName(i),
7f561c08de6b Initial load
duke
parents:
diff changeset
   468
                atts.getQName(i),
7f561c08de6b Initial load
duke
parents:
diff changeset
   469
                atts.getType(i),
7f561c08de6b Initial load
duke
parents:
diff changeset
   470
                atts.getValue(i),
7f561c08de6b Initial load
duke
parents:
diff changeset
   471
                false);
7f561c08de6b Initial load
duke
parents:
diff changeset
   472
7f561c08de6b Initial load
duke
parents:
diff changeset
   473
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   474
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   475
7f561c08de6b Initial load
duke
parents:
diff changeset
   476
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   477
     * Return a {@link ContentHandler} interface into this serializer.
7f561c08de6b Initial load
duke
parents:
diff changeset
   478
     * If the serializer does not support the {@link ContentHandler}
7f561c08de6b Initial load
duke
parents:
diff changeset
   479
     * interface, it should return null.
7f561c08de6b Initial load
duke
parents:
diff changeset
   480
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   481
     * @return A {@link ContentHandler} interface into this serializer,
7f561c08de6b Initial load
duke
parents:
diff changeset
   482
     *  or null if the serializer is not SAX 2 capable
7f561c08de6b Initial load
duke
parents:
diff changeset
   483
     * @throws IOException An I/O exception occured
7f561c08de6b Initial load
duke
parents:
diff changeset
   484
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   485
    public ContentHandler asContentHandler() throws IOException
7f561c08de6b Initial load
duke
parents:
diff changeset
   486
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   487
        return this;
7f561c08de6b Initial load
duke
parents:
diff changeset
   488
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   489
7f561c08de6b Initial load
duke
parents:
diff changeset
   490
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   491
     * Report the end of an entity.
7f561c08de6b Initial load
duke
parents:
diff changeset
   492
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   493
     * @param name The name of the entity that is ending.
7f561c08de6b Initial load
duke
parents:
diff changeset
   494
     * @throws org.xml.sax.SAXException The application may raise an exception.
7f561c08de6b Initial load
duke
parents:
diff changeset
   495
     * @see #startEntity
7f561c08de6b Initial load
duke
parents:
diff changeset
   496
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   497
    public void endEntity(String name) throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   498
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   499
        if (name.equals("[dtd]"))
7f561c08de6b Initial load
duke
parents:
diff changeset
   500
            m_inExternalDTD = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   501
        m_inEntityRef = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   502
7f561c08de6b Initial load
duke
parents:
diff changeset
   503
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   504
            this.fireEndEntity(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   505
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   506
7f561c08de6b Initial load
duke
parents:
diff changeset
   507
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   508
     * Flush and close the underlying java.io.Writer. This method applies to
7f561c08de6b Initial load
duke
parents:
diff changeset
   509
     * ToStream serializers, not ToSAXHandler serializers.
7f561c08de6b Initial load
duke
parents:
diff changeset
   510
     * @see ToStream
7f561c08de6b Initial load
duke
parents:
diff changeset
   511
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   512
    public void close()
7f561c08de6b Initial load
duke
parents:
diff changeset
   513
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   514
        // do nothing (base behavior)
7f561c08de6b Initial load
duke
parents:
diff changeset
   515
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   516
7f561c08de6b Initial load
duke
parents:
diff changeset
   517
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   518
     * Initialize global variables
7f561c08de6b Initial load
duke
parents:
diff changeset
   519
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   520
    protected void initCDATA()
7f561c08de6b Initial load
duke
parents:
diff changeset
   521
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   522
        // CDATA stack
7f561c08de6b Initial load
duke
parents:
diff changeset
   523
        //        _cdataStack = new Stack();
7f561c08de6b Initial load
duke
parents:
diff changeset
   524
        //        _cdataStack.push(new Integer(-1)); // push dummy value
7f561c08de6b Initial load
duke
parents:
diff changeset
   525
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   526
7f561c08de6b Initial load
duke
parents:
diff changeset
   527
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   528
     * Returns the character encoding to be used in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   529
     * @return the character encoding to be used in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   530
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   531
    public String getEncoding()
7f561c08de6b Initial load
duke
parents:
diff changeset
   532
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   533
        return getOutputProperty(OutputKeys.ENCODING);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   534
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   535
7f561c08de6b Initial load
duke
parents:
diff changeset
   536
   /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   537
     * Sets the character encoding coming from the xsl:output encoding stylesheet attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   538
     * @param m_encoding the character encoding
7f561c08de6b Initial load
duke
parents:
diff changeset
   539
     */
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   540
    public void setEncoding(String encoding)
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   541
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   542
        setOutputProperty(OutputKeys.ENCODING,encoding);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   543
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   544
7f561c08de6b Initial load
duke
parents:
diff changeset
   545
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   546
     * Sets the value coming from the xsl:output omit-xml-declaration stylesheet attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   547
     * @param b true if the XML declaration is to be omitted from the output
7f561c08de6b Initial load
duke
parents:
diff changeset
   548
     * document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   549
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   550
    public void setOmitXMLDeclaration(boolean b)
7f561c08de6b Initial load
duke
parents:
diff changeset
   551
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   552
        String val = b ? "yes":"no";
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   553
        setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,val);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   554
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   555
7f561c08de6b Initial load
duke
parents:
diff changeset
   556
7f561c08de6b Initial load
duke
parents:
diff changeset
   557
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   558
     * @return true if the XML declaration is to be omitted from the output
7f561c08de6b Initial load
duke
parents:
diff changeset
   559
     * document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   560
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   561
    public boolean getOmitXMLDeclaration()
7f561c08de6b Initial load
duke
parents:
diff changeset
   562
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   563
        return m_shouldNotWriteXMLHeader;
7f561c08de6b Initial load
duke
parents:
diff changeset
   564
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   565
7f561c08de6b Initial load
duke
parents:
diff changeset
   566
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   567
     * Returns the previously set value of the value to be used as the public
7f561c08de6b Initial load
duke
parents:
diff changeset
   568
     * identifier in the document type declaration (DTD).
7f561c08de6b Initial load
duke
parents:
diff changeset
   569
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   570
     *@return the public identifier to be used in the DOCTYPE declaration in the
7f561c08de6b Initial load
duke
parents:
diff changeset
   571
     * output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   572
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   573
    public String getDoctypePublic()
7f561c08de6b Initial load
duke
parents:
diff changeset
   574
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   575
        return m_doctypePublic;
7f561c08de6b Initial load
duke
parents:
diff changeset
   576
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   577
7f561c08de6b Initial load
duke
parents:
diff changeset
   578
    /** Set the value coming from the xsl:output doctype-public stylesheet attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   579
      * @param doctypePublic the public identifier to be used in the DOCTYPE
7f561c08de6b Initial load
duke
parents:
diff changeset
   580
      * declaration in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   581
      */
7f561c08de6b Initial load
duke
parents:
diff changeset
   582
    public void setDoctypePublic(String doctypePublic)
7f561c08de6b Initial load
duke
parents:
diff changeset
   583
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   584
        setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   585
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   586
7f561c08de6b Initial load
duke
parents:
diff changeset
   587
7f561c08de6b Initial load
duke
parents:
diff changeset
   588
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   589
     * Returns the previously set value of the value to be used
7f561c08de6b Initial load
duke
parents:
diff changeset
   590
     * as the system identifier in the document type declaration (DTD).
7f561c08de6b Initial load
duke
parents:
diff changeset
   591
         * @return the system identifier to be used in the DOCTYPE declaration in
7f561c08de6b Initial load
duke
parents:
diff changeset
   592
         * the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   593
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   594
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   595
    public String getDoctypeSystem()
7f561c08de6b Initial load
duke
parents:
diff changeset
   596
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   597
        return m_doctypeSystem;
7f561c08de6b Initial load
duke
parents:
diff changeset
   598
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   599
7f561c08de6b Initial load
duke
parents:
diff changeset
   600
    /** Set the value coming from the xsl:output doctype-system stylesheet attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   601
      * @param doctypeSystem the system identifier to be used in the DOCTYPE
7f561c08de6b Initial load
duke
parents:
diff changeset
   602
      * declaration in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   603
      */
7f561c08de6b Initial load
duke
parents:
diff changeset
   604
    public void setDoctypeSystem(String doctypeSystem)
7f561c08de6b Initial load
duke
parents:
diff changeset
   605
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   606
        setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   607
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   608
7f561c08de6b Initial load
duke
parents:
diff changeset
   609
    /** Set the value coming from the xsl:output doctype-public and doctype-system stylesheet properties
7f561c08de6b Initial load
duke
parents:
diff changeset
   610
     * @param doctypeSystem the system identifier to be used in the DOCTYPE
7f561c08de6b Initial load
duke
parents:
diff changeset
   611
     * declaration in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   612
     * @param doctypePublic the public identifier to be used in the DOCTYPE
7f561c08de6b Initial load
duke
parents:
diff changeset
   613
     * declaration in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   614
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   615
    public void setDoctype(String doctypeSystem, String doctypePublic)
7f561c08de6b Initial load
duke
parents:
diff changeset
   616
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   617
        setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   618
        setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   619
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   620
7f561c08de6b Initial load
duke
parents:
diff changeset
   621
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   622
     * Sets the value coming from the xsl:output standalone stylesheet attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   623
     * @param standalone a value of "yes" indicates that the
7f561c08de6b Initial load
duke
parents:
diff changeset
   624
     * <code>standalone</code> delaration is to be included in the output
7f561c08de6b Initial load
duke
parents:
diff changeset
   625
     * document. This method remembers if the value was explicitly set using
7f561c08de6b Initial load
duke
parents:
diff changeset
   626
     * this method, verses if the value is the default value.
7f561c08de6b Initial load
duke
parents:
diff changeset
   627
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   628
    public void setStandalone(String standalone)
7f561c08de6b Initial load
duke
parents:
diff changeset
   629
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   630
        setOutputProperty(OutputKeys.STANDALONE, standalone);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   631
    }
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   632
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   633
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   634
     * Sets the XSL standalone attribute, but does not remember if this is a
7f561c08de6b Initial load
duke
parents:
diff changeset
   635
     * default or explicite setting.
7f561c08de6b Initial load
duke
parents:
diff changeset
   636
     * @param standalone "yes" | "no"
7f561c08de6b Initial load
duke
parents:
diff changeset
   637
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   638
    protected void setStandaloneInternal(String standalone)
7f561c08de6b Initial load
duke
parents:
diff changeset
   639
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   640
        if ("yes".equals(standalone))
7f561c08de6b Initial load
duke
parents:
diff changeset
   641
            m_standalone = "yes";
7f561c08de6b Initial load
duke
parents:
diff changeset
   642
        else
7f561c08de6b Initial load
duke
parents:
diff changeset
   643
            m_standalone = "no";
7f561c08de6b Initial load
duke
parents:
diff changeset
   644
7f561c08de6b Initial load
duke
parents:
diff changeset
   645
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   646
7f561c08de6b Initial load
duke
parents:
diff changeset
   647
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   648
     * Gets the XSL standalone attribute
7f561c08de6b Initial load
duke
parents:
diff changeset
   649
     * @return a value of "yes" if the <code>standalone</code> delaration is to
7f561c08de6b Initial load
duke
parents:
diff changeset
   650
     * be included in the output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   651
     *  @see XSLOutputAttributes#getStandalone()
7f561c08de6b Initial load
duke
parents:
diff changeset
   652
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   653
    public String getStandalone()
7f561c08de6b Initial load
duke
parents:
diff changeset
   654
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   655
        return m_standalone;
7f561c08de6b Initial load
duke
parents:
diff changeset
   656
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   657
7f561c08de6b Initial load
duke
parents:
diff changeset
   658
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   659
     * @return true if the output document should be indented to visually
7f561c08de6b Initial load
duke
parents:
diff changeset
   660
     * indicate its structure.
7f561c08de6b Initial load
duke
parents:
diff changeset
   661
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   662
    public boolean getIndent()
7f561c08de6b Initial load
duke
parents:
diff changeset
   663
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   664
        return m_doIndent;
7f561c08de6b Initial load
duke
parents:
diff changeset
   665
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   666
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   667
     * Gets the mediatype the media-type or MIME type associated with the output
7f561c08de6b Initial load
duke
parents:
diff changeset
   668
     * document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   669
     * @return the mediatype the media-type or MIME type associated with the
7f561c08de6b Initial load
duke
parents:
diff changeset
   670
     * output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   671
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   672
    public String getMediaType()
7f561c08de6b Initial load
duke
parents:
diff changeset
   673
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   674
        return m_mediatype;
7f561c08de6b Initial load
duke
parents:
diff changeset
   675
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   676
7f561c08de6b Initial load
duke
parents:
diff changeset
   677
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   678
     * Gets the version of the output format.
7f561c08de6b Initial load
duke
parents:
diff changeset
   679
     * @return the version of the output format.
7f561c08de6b Initial load
duke
parents:
diff changeset
   680
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   681
    public String getVersion()
7f561c08de6b Initial load
duke
parents:
diff changeset
   682
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   683
        return m_version;
7f561c08de6b Initial load
duke
parents:
diff changeset
   684
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   685
7f561c08de6b Initial load
duke
parents:
diff changeset
   686
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   687
     * Sets the value coming from the xsl:output version attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   688
     * @param version the version of the output format.
7f561c08de6b Initial load
duke
parents:
diff changeset
   689
     * @see SerializationHandler#setVersion(String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   690
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   691
    public void setVersion(String version)
7f561c08de6b Initial load
duke
parents:
diff changeset
   692
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   693
        setOutputProperty(OutputKeys.VERSION, version);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   694
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   695
7f561c08de6b Initial load
duke
parents:
diff changeset
   696
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   697
     * Sets the value coming from the xsl:output media-type stylesheet attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   698
     * @param mediaType the non-null media-type or MIME type associated with the
7f561c08de6b Initial load
duke
parents:
diff changeset
   699
     * output document.
7f561c08de6b Initial load
duke
parents:
diff changeset
   700
     * @see javax.xml.transform.OutputKeys#MEDIA_TYPE
7f561c08de6b Initial load
duke
parents:
diff changeset
   701
     * @see SerializationHandler#setMediaType(String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   702
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   703
    public void setMediaType(String mediaType)
7f561c08de6b Initial load
duke
parents:
diff changeset
   704
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   705
        setOutputProperty(OutputKeys.MEDIA_TYPE,mediaType);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   706
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   707
7f561c08de6b Initial load
duke
parents:
diff changeset
   708
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   709
     * @return the number of spaces to indent for each indentation level.
7f561c08de6b Initial load
duke
parents:
diff changeset
   710
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   711
    public int getIndentAmount()
7f561c08de6b Initial load
duke
parents:
diff changeset
   712
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   713
        return m_indentAmount;
7f561c08de6b Initial load
duke
parents:
diff changeset
   714
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   715
7f561c08de6b Initial load
duke
parents:
diff changeset
   716
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   717
     * Sets the indentation amount.
7f561c08de6b Initial load
duke
parents:
diff changeset
   718
     * @param m_indentAmount The m_indentAmount to set
7f561c08de6b Initial load
duke
parents:
diff changeset
   719
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   720
    public void setIndentAmount(int m_indentAmount)
7f561c08de6b Initial load
duke
parents:
diff changeset
   721
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   722
        this.m_indentAmount = m_indentAmount;
7f561c08de6b Initial load
duke
parents:
diff changeset
   723
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   724
7f561c08de6b Initial load
duke
parents:
diff changeset
   725
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   726
     * Sets the value coming from the xsl:output indent stylesheet
7f561c08de6b Initial load
duke
parents:
diff changeset
   727
     * attribute.
7f561c08de6b Initial load
duke
parents:
diff changeset
   728
     * @param doIndent true if the output document should be indented to
7f561c08de6b Initial load
duke
parents:
diff changeset
   729
     * visually indicate its structure.
7f561c08de6b Initial load
duke
parents:
diff changeset
   730
     * @see XSLOutputAttributes#setIndent(boolean)
7f561c08de6b Initial load
duke
parents:
diff changeset
   731
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   732
    public void setIndent(boolean doIndent)
7f561c08de6b Initial load
duke
parents:
diff changeset
   733
    {
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   734
        String val = doIndent ? "yes":"no";
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
   735
        setOutputProperty(OutputKeys.INDENT,val);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   736
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   737
7f561c08de6b Initial load
duke
parents:
diff changeset
   738
    /**
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   739
     * Sets the isStandalone property
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   740
     * @param isStandalone true if the ORACLE_IS_STANDALONE is set to yes
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   741
     * @see OutputPropertiesFactory ORACLE_IS_STANDALONE
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   742
     */
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   743
    public void setIsStandalone(boolean isStandalone)
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   744
    {
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   745
       m_isStandalone = isStandalone;
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   746
    }
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   747
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   748
    /**
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   749
     * This method is used when a prefix/uri namespace mapping
7f561c08de6b Initial load
duke
parents:
diff changeset
   750
     * is indicated after the element was started with a
7f561c08de6b Initial load
duke
parents:
diff changeset
   751
     * startElement() and before and endElement().
7f561c08de6b Initial load
duke
parents:
diff changeset
   752
     * startPrefixMapping(prefix,uri) would be used before the
7f561c08de6b Initial load
duke
parents:
diff changeset
   753
     * startElement() call.
7f561c08de6b Initial load
duke
parents:
diff changeset
   754
     * @param uri the URI of the namespace
7f561c08de6b Initial load
duke
parents:
diff changeset
   755
     * @param prefix the prefix associated with the given URI.
7f561c08de6b Initial load
duke
parents:
diff changeset
   756
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   757
     * @see ExtendedContentHandler#namespaceAfterStartElement(String, String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   758
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   759
    public void namespaceAfterStartElement(String uri, String prefix)
7f561c08de6b Initial load
duke
parents:
diff changeset
   760
        throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   761
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   762
        // default behavior is to do nothing
7f561c08de6b Initial load
duke
parents:
diff changeset
   763
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   764
7f561c08de6b Initial load
duke
parents:
diff changeset
   765
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   766
     * Return a {@link DOMSerializer} interface into this serializer. If the
7f561c08de6b Initial load
duke
parents:
diff changeset
   767
     * serializer does not support the {@link DOMSerializer} interface, it should
7f561c08de6b Initial load
duke
parents:
diff changeset
   768
     * return null.
7f561c08de6b Initial load
duke
parents:
diff changeset
   769
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   770
     * @return A {@link DOMSerializer} interface into this serializer,  or null
7f561c08de6b Initial load
duke
parents:
diff changeset
   771
     * if the serializer is not DOM capable
7f561c08de6b Initial load
duke
parents:
diff changeset
   772
     * @throws IOException An I/O exception occured
7f561c08de6b Initial load
duke
parents:
diff changeset
   773
     * @see Serializer#asDOMSerializer()
7f561c08de6b Initial load
duke
parents:
diff changeset
   774
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   775
    public DOMSerializer asDOMSerializer() throws IOException
7f561c08de6b Initial load
duke
parents:
diff changeset
   776
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   777
        return this;
7f561c08de6b Initial load
duke
parents:
diff changeset
   778
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   779
7f561c08de6b Initial load
duke
parents:
diff changeset
   780
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   781
     * Tell if two strings are equal, without worry if the first string is null.
7f561c08de6b Initial load
duke
parents:
diff changeset
   782
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   783
     * @param p String reference, which may be null.
7f561c08de6b Initial load
duke
parents:
diff changeset
   784
     * @param t String reference, which may be null.
7f561c08de6b Initial load
duke
parents:
diff changeset
   785
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   786
     * @return true if strings are equal.
7f561c08de6b Initial load
duke
parents:
diff changeset
   787
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   788
    private static final boolean subPartMatch(String p, String t)
7f561c08de6b Initial load
duke
parents:
diff changeset
   789
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   790
        return (p == t) || ((null != p) && (p.equals(t)));
7f561c08de6b Initial load
duke
parents:
diff changeset
   791
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   792
7f561c08de6b Initial load
duke
parents:
diff changeset
   793
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   794
     * Returns the local name of a qualified name.
7f561c08de6b Initial load
duke
parents:
diff changeset
   795
     * If the name has no prefix,
7f561c08de6b Initial load
duke
parents:
diff changeset
   796
     * then it works as the identity (SAX2).
7f561c08de6b Initial load
duke
parents:
diff changeset
   797
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   798
     * @param qname a qualified name
7f561c08de6b Initial load
duke
parents:
diff changeset
   799
     * @return returns the prefix of the qualified name,
7f561c08de6b Initial load
duke
parents:
diff changeset
   800
     * or null if there is no prefix.
7f561c08de6b Initial load
duke
parents:
diff changeset
   801
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   802
    protected static final String getPrefixPart(String qname)
7f561c08de6b Initial load
duke
parents:
diff changeset
   803
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   804
        final int col = qname.indexOf(':');
7f561c08de6b Initial load
duke
parents:
diff changeset
   805
        return (col > 0) ? qname.substring(0, col) : null;
7f561c08de6b Initial load
duke
parents:
diff changeset
   806
        //return (col > 0) ? qname.substring(0,col) : "";
7f561c08de6b Initial load
duke
parents:
diff changeset
   807
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   808
7f561c08de6b Initial load
duke
parents:
diff changeset
   809
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   810
     * Some users of the serializer may need the current namespace mappings
7f561c08de6b Initial load
duke
parents:
diff changeset
   811
     * @return the current namespace mappings (prefix/uri)
7f561c08de6b Initial load
duke
parents:
diff changeset
   812
     * @see ExtendedContentHandler#getNamespaceMappings()
7f561c08de6b Initial load
duke
parents:
diff changeset
   813
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   814
    public NamespaceMappings getNamespaceMappings()
7f561c08de6b Initial load
duke
parents:
diff changeset
   815
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   816
        return m_prefixMap;
7f561c08de6b Initial load
duke
parents:
diff changeset
   817
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   818
7f561c08de6b Initial load
duke
parents:
diff changeset
   819
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   820
     * Returns the prefix currently pointing to the given URI (if any).
7f561c08de6b Initial load
duke
parents:
diff changeset
   821
     * @param namespaceURI the uri of the namespace in question
7f561c08de6b Initial load
duke
parents:
diff changeset
   822
     * @return a prefix pointing to the given URI (if any).
7f561c08de6b Initial load
duke
parents:
diff changeset
   823
     * @see ExtendedContentHandler#getPrefix(String)
7f561c08de6b Initial load
duke
parents:
diff changeset
   824
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   825
    public String getPrefix(String namespaceURI)
7f561c08de6b Initial load
duke
parents:
diff changeset
   826
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   827
        String prefix = m_prefixMap.lookupPrefix(namespaceURI);
7f561c08de6b Initial load
duke
parents:
diff changeset
   828
        return prefix;
7f561c08de6b Initial load
duke
parents:
diff changeset
   829
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   830
7f561c08de6b Initial load
duke
parents:
diff changeset
   831
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   832
     * Returns the URI of an element or attribute. Note that default namespaces
7f561c08de6b Initial load
duke
parents:
diff changeset
   833
     * do not apply directly to attributes.
7f561c08de6b Initial load
duke
parents:
diff changeset
   834
     * @param qname a qualified name
7f561c08de6b Initial load
duke
parents:
diff changeset
   835
     * @param isElement true if the qualified name is the name of
7f561c08de6b Initial load
duke
parents:
diff changeset
   836
     * an element.
7f561c08de6b Initial load
duke
parents:
diff changeset
   837
     * @return returns the namespace URI associated with the qualified name.
7f561c08de6b Initial load
duke
parents:
diff changeset
   838
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   839
    public String getNamespaceURI(String qname, boolean isElement)
7f561c08de6b Initial load
duke
parents:
diff changeset
   840
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   841
        String uri = EMPTYSTRING;
7f561c08de6b Initial load
duke
parents:
diff changeset
   842
        int col = qname.lastIndexOf(':');
7f561c08de6b Initial load
duke
parents:
diff changeset
   843
        final String prefix = (col > 0) ? qname.substring(0, col) : EMPTYSTRING;
7f561c08de6b Initial load
duke
parents:
diff changeset
   844
7f561c08de6b Initial load
duke
parents:
diff changeset
   845
        if (!EMPTYSTRING.equals(prefix) || isElement)
7f561c08de6b Initial load
duke
parents:
diff changeset
   846
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   847
            if (m_prefixMap != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   848
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
   849
                uri = m_prefixMap.lookupNamespace(prefix);
7f561c08de6b Initial load
duke
parents:
diff changeset
   850
                if (uri == null && !prefix.equals(XMLNS_PREFIX))
7f561c08de6b Initial load
duke
parents:
diff changeset
   851
                {
7f561c08de6b Initial load
duke
parents:
diff changeset
   852
                    throw new RuntimeException(
7f561c08de6b Initial load
duke
parents:
diff changeset
   853
                        Utils.messages.createMessage(
7f561c08de6b Initial load
duke
parents:
diff changeset
   854
                            MsgKey.ER_NAMESPACE_PREFIX,
7f561c08de6b Initial load
duke
parents:
diff changeset
   855
                            new Object[] { qname.substring(0, col) }  ));
7f561c08de6b Initial load
duke
parents:
diff changeset
   856
                }
7f561c08de6b Initial load
duke
parents:
diff changeset
   857
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   858
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   859
        return uri;
7f561c08de6b Initial load
duke
parents:
diff changeset
   860
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   861
7f561c08de6b Initial load
duke
parents:
diff changeset
   862
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   863
     * Returns the URI of prefix (if any)
7f561c08de6b Initial load
duke
parents:
diff changeset
   864
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   865
         * @param prefix the prefix whose URI is searched for
7f561c08de6b Initial load
duke
parents:
diff changeset
   866
     * @return the namespace URI currently associated with the
7f561c08de6b Initial load
duke
parents:
diff changeset
   867
     * prefix, null if the prefix is undefined.
7f561c08de6b Initial load
duke
parents:
diff changeset
   868
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   869
    public String getNamespaceURIFromPrefix(String prefix)
7f561c08de6b Initial load
duke
parents:
diff changeset
   870
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   871
        String uri = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
   872
        if (m_prefixMap != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   873
            uri = m_prefixMap.lookupNamespace(prefix);
7f561c08de6b Initial load
duke
parents:
diff changeset
   874
        return uri;
7f561c08de6b Initial load
duke
parents:
diff changeset
   875
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   876
7f561c08de6b Initial load
duke
parents:
diff changeset
   877
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   878
     * Entity reference event.
7f561c08de6b Initial load
duke
parents:
diff changeset
   879
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   880
     * @param name Name of entity
7f561c08de6b Initial load
duke
parents:
diff changeset
   881
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
   882
     * @throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   883
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   884
    public void entityReference(String name) throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   885
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   886
7f561c08de6b Initial load
duke
parents:
diff changeset
   887
        flushPending();
7f561c08de6b Initial load
duke
parents:
diff changeset
   888
7f561c08de6b Initial load
duke
parents:
diff changeset
   889
        startEntity(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   890
        endEntity(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   891
7f561c08de6b Initial load
duke
parents:
diff changeset
   892
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   893
                    fireEntityReference(name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   894
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   895
7f561c08de6b Initial load
duke
parents:
diff changeset
   896
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   897
     * Sets the transformer associated with this serializer
7f561c08de6b Initial load
duke
parents:
diff changeset
   898
     * @param t the transformer associated with this serializer.
7f561c08de6b Initial load
duke
parents:
diff changeset
   899
     * @see SerializationHandler#setTransformer(Transformer)
7f561c08de6b Initial load
duke
parents:
diff changeset
   900
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   901
    public void setTransformer(Transformer t)
7f561c08de6b Initial load
duke
parents:
diff changeset
   902
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   903
        m_transformer = t;
7f561c08de6b Initial load
duke
parents:
diff changeset
   904
7f561c08de6b Initial load
duke
parents:
diff changeset
   905
        // If this transformer object implements the SerializerTrace interface
7f561c08de6b Initial load
duke
parents:
diff changeset
   906
        // then assign m_tracer to the transformer object so it can be used
7f561c08de6b Initial load
duke
parents:
diff changeset
   907
        // to fire trace events.
7f561c08de6b Initial load
duke
parents:
diff changeset
   908
        if ((m_transformer instanceof SerializerTrace) &&
7f561c08de6b Initial load
duke
parents:
diff changeset
   909
            (((SerializerTrace) m_transformer).hasTraceListeners())) {
7f561c08de6b Initial load
duke
parents:
diff changeset
   910
           m_tracer = (SerializerTrace) m_transformer;
7f561c08de6b Initial load
duke
parents:
diff changeset
   911
        } else {
7f561c08de6b Initial load
duke
parents:
diff changeset
   912
           m_tracer = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
   913
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   914
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   915
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   916
     * Gets the transformer associated with this serializer
7f561c08de6b Initial load
duke
parents:
diff changeset
   917
     * @return returns the transformer associated with this serializer.
7f561c08de6b Initial load
duke
parents:
diff changeset
   918
     * @see SerializationHandler#getTransformer()
7f561c08de6b Initial load
duke
parents:
diff changeset
   919
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   920
    public Transformer getTransformer()
7f561c08de6b Initial load
duke
parents:
diff changeset
   921
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   922
        return m_transformer;
7f561c08de6b Initial load
duke
parents:
diff changeset
   923
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   924
7f561c08de6b Initial load
duke
parents:
diff changeset
   925
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   926
     * This method gets the nodes value as a String and uses that String as if
7f561c08de6b Initial load
duke
parents:
diff changeset
   927
     * it were an input character notification.
7f561c08de6b Initial load
duke
parents:
diff changeset
   928
     * @param node the Node to serialize
7f561c08de6b Initial load
duke
parents:
diff changeset
   929
     * @throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   930
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   931
    public void characters(org.w3c.dom.Node node)
7f561c08de6b Initial load
duke
parents:
diff changeset
   932
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   933
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   934
        flushPending();
7f561c08de6b Initial load
duke
parents:
diff changeset
   935
        String data = node.getNodeValue();
7f561c08de6b Initial load
duke
parents:
diff changeset
   936
        if (data != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   937
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   938
            final int length = data.length();
7f561c08de6b Initial load
duke
parents:
diff changeset
   939
            if (length > m_charsBuff.length)
7f561c08de6b Initial load
duke
parents:
diff changeset
   940
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
   941
                m_charsBuff = new char[length * 2 + 1];
7f561c08de6b Initial load
duke
parents:
diff changeset
   942
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
   943
            data.getChars(0, length, m_charsBuff, 0);
7f561c08de6b Initial load
duke
parents:
diff changeset
   944
            characters(m_charsBuff, 0, length);
7f561c08de6b Initial load
duke
parents:
diff changeset
   945
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   946
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   947
7f561c08de6b Initial load
duke
parents:
diff changeset
   948
7f561c08de6b Initial load
duke
parents:
diff changeset
   949
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   950
     * @see org.xml.sax.ErrorHandler#error(SAXParseException)
7f561c08de6b Initial load
duke
parents:
diff changeset
   951
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   952
    public void error(SAXParseException exc) throws SAXException {
7f561c08de6b Initial load
duke
parents:
diff changeset
   953
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   954
7f561c08de6b Initial load
duke
parents:
diff changeset
   955
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   956
     * @see org.xml.sax.ErrorHandler#fatalError(SAXParseException)
7f561c08de6b Initial load
duke
parents:
diff changeset
   957
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   958
    public void fatalError(SAXParseException exc) throws SAXException {
7f561c08de6b Initial load
duke
parents:
diff changeset
   959
7f561c08de6b Initial load
duke
parents:
diff changeset
   960
      m_elemContext.m_startTagOpen = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
   961
7f561c08de6b Initial load
duke
parents:
diff changeset
   962
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   963
7f561c08de6b Initial load
duke
parents:
diff changeset
   964
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   965
     * @see org.xml.sax.ErrorHandler#warning(SAXParseException)
7f561c08de6b Initial load
duke
parents:
diff changeset
   966
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   967
    public void warning(SAXParseException exc) throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   968
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   969
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   970
7f561c08de6b Initial load
duke
parents:
diff changeset
   971
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   972
     * To fire off start entity trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
   973
     * @param name Name of entity
7f561c08de6b Initial load
duke
parents:
diff changeset
   974
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   975
    protected void fireStartEntity(String name)
7f561c08de6b Initial load
duke
parents:
diff changeset
   976
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   977
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   978
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   979
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
   980
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
   981
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENTITYREF, name);
7f561c08de6b Initial load
duke
parents:
diff changeset
   982
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
   983
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   984
7f561c08de6b Initial load
duke
parents:
diff changeset
   985
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
   986
     * Report the characters event
7f561c08de6b Initial load
duke
parents:
diff changeset
   987
     * @param chars  content of characters
7f561c08de6b Initial load
duke
parents:
diff changeset
   988
     * @param start  starting index of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
   989
     * @param length  number of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
   990
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
   991
//    protected void fireCharEvent(char[] chars, int start, int length)
7f561c08de6b Initial load
duke
parents:
diff changeset
   992
//        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
   993
//    {
7f561c08de6b Initial load
duke
parents:
diff changeset
   994
//        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
   995
//            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length);
7f561c08de6b Initial load
duke
parents:
diff changeset
   996
//    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   997
//
7f561c08de6b Initial load
duke
parents:
diff changeset
   998
7f561c08de6b Initial load
duke
parents:
diff changeset
   999
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1000
     * This method is only used internally when flushing the writer from the
7f561c08de6b Initial load
duke
parents:
diff changeset
  1001
     * various fire...() trace events.  Due to the writer being wrapped with
7f561c08de6b Initial load
duke
parents:
diff changeset
  1002
     * SerializerTraceWriter it may cause the flush of these trace events:
7f561c08de6b Initial load
duke
parents:
diff changeset
  1003
     * EVENTTYPE_OUTPUT_PSEUDO_CHARACTERS
7f561c08de6b Initial load
duke
parents:
diff changeset
  1004
     * EVENTTYPE_OUTPUT_CHARACTERS
7f561c08de6b Initial load
duke
parents:
diff changeset
  1005
     * which trace the output written to the output stream.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1006
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1007
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1008
    private void flushMyWriter()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1009
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1010
        if (m_writer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1011
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1012
            try
7f561c08de6b Initial load
duke
parents:
diff changeset
  1013
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1014
                m_writer.flush();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1015
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1016
            catch(IOException ioe)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1017
            {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1018
7f561c08de6b Initial load
duke
parents:
diff changeset
  1019
            }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1020
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1021
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1022
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1023
     * Report the CDATA trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1024
     * @param chars  content of CDATA
7f561c08de6b Initial load
duke
parents:
diff changeset
  1025
     * @param start  starting index of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
  1026
     * @param length  number of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
  1027
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1028
    protected void fireCDATAEvent(char[] chars, int start, int length)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1029
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1030
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1031
                if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1032
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1033
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1034
                        m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CDATA, chars, start,length);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1035
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1036
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1037
7f561c08de6b Initial load
duke
parents:
diff changeset
  1038
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1039
     * Report the comment trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1040
     * @param chars  content of comment
7f561c08de6b Initial load
duke
parents:
diff changeset
  1041
     * @param start  starting index of comment to output
7f561c08de6b Initial load
duke
parents:
diff changeset
  1042
     * @param length  number of characters to output
7f561c08de6b Initial load
duke
parents:
diff changeset
  1043
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1044
    protected void fireCommentEvent(char[] chars, int start, int length)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1045
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1046
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1047
                if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1048
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1049
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1050
                        m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_COMMENT, new String(chars, start, length));
7f561c08de6b Initial load
duke
parents:
diff changeset
  1051
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1052
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1053
7f561c08de6b Initial load
duke
parents:
diff changeset
  1054
7f561c08de6b Initial load
duke
parents:
diff changeset
  1055
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1056
     * To fire off end entity trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1057
     * @param name Name of entity
7f561c08de6b Initial load
duke
parents:
diff changeset
  1058
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1059
    public void fireEndEntity(String name)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1060
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1061
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1062
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1063
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1064
        // we do not need to handle this.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1065
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1066
7f561c08de6b Initial load
duke
parents:
diff changeset
  1067
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1068
     * To fire off start document trace  event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1069
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1070
     protected void fireStartDoc()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1071
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1072
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1073
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1074
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1075
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1076
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_STARTDOCUMENT);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1077
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1078
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1079
7f561c08de6b Initial load
duke
parents:
diff changeset
  1080
7f561c08de6b Initial load
duke
parents:
diff changeset
  1081
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1082
     * To fire off end document trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1083
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1084
    protected void fireEndDoc()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1085
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1086
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1087
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1088
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1089
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1090
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDDOCUMENT);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1091
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1092
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1093
7f561c08de6b Initial load
duke
parents:
diff changeset
  1094
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1095
     * Report the start element trace event. This trace method needs to be
7f561c08de6b Initial load
duke
parents:
diff changeset
  1096
     * called just before the attributes are cleared.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1097
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1098
     * @param elemName the qualified name of the element
7f561c08de6b Initial load
duke
parents:
diff changeset
  1099
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1100
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1101
    protected void fireStartElem(String elemName)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1102
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1103
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1104
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1105
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1106
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1107
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_STARTELEMENT,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1108
                elemName, m_attributes);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1109
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1110
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1111
7f561c08de6b Initial load
duke
parents:
diff changeset
  1112
7f561c08de6b Initial load
duke
parents:
diff changeset
  1113
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1114
     * To fire off the end element event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1115
     * @param name Name of element
7f561c08de6b Initial load
duke
parents:
diff changeset
  1116
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1117
//    protected void fireEndElem(String name)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1118
//        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1119
//    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1120
//        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1121
//            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDELEMENT,name, (Attributes)null);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1122
//    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1123
7f561c08de6b Initial load
duke
parents:
diff changeset
  1124
7f561c08de6b Initial load
duke
parents:
diff changeset
  1125
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1126
     * To fire off the PI trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1127
     * @param name Name of PI
7f561c08de6b Initial load
duke
parents:
diff changeset
  1128
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1129
    protected void fireEscapingEvent(String name, String data)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1130
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1131
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1132
7f561c08de6b Initial load
duke
parents:
diff changeset
  1133
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1134
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1135
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1136
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_PI,name, data);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1137
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1138
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1139
7f561c08de6b Initial load
duke
parents:
diff changeset
  1140
7f561c08de6b Initial load
duke
parents:
diff changeset
  1141
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1142
     * To fire off the entity reference trace event
7f561c08de6b Initial load
duke
parents:
diff changeset
  1143
     * @param name Name of entity reference
7f561c08de6b Initial load
duke
parents:
diff changeset
  1144
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1145
    protected void fireEntityReference(String name)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1146
        throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1147
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1148
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1149
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1150
            flushMyWriter();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1151
            m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENTITYREF,name, (Attributes)null);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1152
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1153
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1154
7f561c08de6b Initial load
duke
parents:
diff changeset
  1155
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1156
     * Receive notification of the beginning of a document.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1157
     * This method is never a self generated call,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1158
     * but only called externally.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1159
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1160
     * <p>The SAX parser will invoke this method only once, before any
7f561c08de6b Initial load
duke
parents:
diff changeset
  1161
     * other methods in this interface or in DTDHandler (except for
7f561c08de6b Initial load
duke
parents:
diff changeset
  1162
     * setDocumentLocator).</p>
7f561c08de6b Initial load
duke
parents:
diff changeset
  1163
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1164
     * @throws org.xml.sax.SAXException Any SAX exception, possibly
7f561c08de6b Initial load
duke
parents:
diff changeset
  1165
     *            wrapping another exception.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1166
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1167
     * @throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1168
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1169
    public void startDocument() throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1170
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1171
7f561c08de6b Initial load
duke
parents:
diff changeset
  1172
        // if we do get called with startDocument(), handle it right away
7f561c08de6b Initial load
duke
parents:
diff changeset
  1173
        startDocumentInternal();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1174
        m_needToCallStartDocument = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1175
        return;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1176
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1177
7f561c08de6b Initial load
duke
parents:
diff changeset
  1178
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1179
     * This method handles what needs to be done at a startDocument() call,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1180
     * whether from an external caller, or internally called in the
7f561c08de6b Initial load
duke
parents:
diff changeset
  1181
     * serializer.  For historical reasons the serializer is flexible to
7f561c08de6b Initial load
duke
parents:
diff changeset
  1182
     * startDocument() not always being called.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1183
     * Even if no external call is
7f561c08de6b Initial load
duke
parents:
diff changeset
  1184
     * made into startDocument() this method will always be called as a self
7f561c08de6b Initial load
duke
parents:
diff changeset
  1185
     * generated internal startDocument, it handles what needs to be done at a
7f561c08de6b Initial load
duke
parents:
diff changeset
  1186
     * startDocument() call.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1187
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1188
     * This method exists just to make sure that startDocument() is only ever
7f561c08de6b Initial load
duke
parents:
diff changeset
  1189
     * called from an external caller, which in principle is just a matter of
7f561c08de6b Initial load
duke
parents:
diff changeset
  1190
     * style.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1191
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1192
     * @throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1193
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1194
    protected void startDocumentInternal() throws org.xml.sax.SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1195
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1196
        if (m_tracer != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1197
            this.fireStartDoc();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1198
7f561c08de6b Initial load
duke
parents:
diff changeset
  1199
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1200
7f561c08de6b Initial load
duke
parents:
diff changeset
  1201
    /* This method extracts version and encoding information from SAX events.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1202
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1203
    protected void setDocumentInfo() {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1204
        if (m_locator == null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1205
                return;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1206
        try{
7f561c08de6b Initial load
duke
parents:
diff changeset
  1207
            String strVersion = ((Locator2)m_locator).getXMLVersion();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1208
            if (strVersion != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1209
                setVersion(strVersion);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1210
            /*String strEncoding = ((Locator2)m_locator).getEncoding();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1211
            if (strEncoding != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1212
                setEncoding(strEncoding); */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1213
7f561c08de6b Initial load
duke
parents:
diff changeset
  1214
        }catch(ClassCastException e){}
7f561c08de6b Initial load
duke
parents:
diff changeset
  1215
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1216
7f561c08de6b Initial load
duke
parents:
diff changeset
  1217
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1218
     * This method is used to set the source locator, which might be used to
7f561c08de6b Initial load
duke
parents:
diff changeset
  1219
     * generated an error message.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1220
     * @param locator the source locator
7f561c08de6b Initial load
duke
parents:
diff changeset
  1221
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1222
     * @see ExtendedContentHandler#setSourceLocator(javax.xml.transform.SourceLocator)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1223
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1224
    public void setSourceLocator(SourceLocator locator)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1225
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1226
        m_sourceLocator = locator;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1227
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1228
7f561c08de6b Initial load
duke
parents:
diff changeset
  1229
7f561c08de6b Initial load
duke
parents:
diff changeset
  1230
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1231
     * Used only by TransformerSnapshotImpl to restore the serialization
7f561c08de6b Initial load
duke
parents:
diff changeset
  1232
     * to a previous state.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1233
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1234
     * @param mappings NamespaceMappings
7f561c08de6b Initial load
duke
parents:
diff changeset
  1235
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1236
    public void setNamespaceMappings(NamespaceMappings mappings) {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1237
        m_prefixMap = mappings;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1238
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1239
7f561c08de6b Initial load
duke
parents:
diff changeset
  1240
    public boolean reset()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1241
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1242
        resetSerializerBase();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1243
        return true;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1244
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1245
7f561c08de6b Initial load
duke
parents:
diff changeset
  1246
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1247
     * Reset all of the fields owned by SerializerBase
7f561c08de6b Initial load
duke
parents:
diff changeset
  1248
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1249
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1250
    private void resetSerializerBase()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1251
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1252
        this.m_attributes.clear();
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1253
        this.m_StringOfCDATASections = null;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
  1254
        this.m_elemContext = new ElemContext();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1255
        this.m_doctypePublic = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1256
        this.m_doctypeSystem = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1257
        this.m_doIndent = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1258
        this.m_indentAmount = 0;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1259
        this.m_inEntityRef = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1260
        this.m_inExternalDTD = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1261
        this.m_mediatype = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1262
        this.m_needToCallStartDocument = true;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1263
        this.m_needToOutputDocTypeDecl = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1264
        if (this.m_prefixMap != null)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1265
            this.m_prefixMap.reset();
7f561c08de6b Initial load
duke
parents:
diff changeset
  1266
        this.m_shouldNotWriteXMLHeader = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1267
        this.m_sourceLocator = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1268
        this.m_standalone = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1269
        this.m_standaloneWasSpecified = false;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1270
        this.m_tracer = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1271
        this.m_transformer = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1272
        this.m_version = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1273
        // don't set writer to null, so that it might be re-used
7f561c08de6b Initial load
duke
parents:
diff changeset
  1274
        //this.m_writer = null;
7f561c08de6b Initial load
duke
parents:
diff changeset
  1275
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1276
7f561c08de6b Initial load
duke
parents:
diff changeset
  1277
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1278
     * Returns true if the serializer is used for temporary output rather than
7f561c08de6b Initial load
duke
parents:
diff changeset
  1279
     * final output.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1280
     *
7f561c08de6b Initial load
duke
parents:
diff changeset
  1281
     * This concept is made clear in the XSLT 2.0 draft.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1282
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1283
    final boolean inTemporaryOutputState()
7f561c08de6b Initial load
duke
parents:
diff changeset
  1284
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1285
        /* This is a hack. We should really be letting the serializer know
7f561c08de6b Initial load
duke
parents:
diff changeset
  1286
         * that it is in temporary output state with an explicit call, but
7f561c08de6b Initial load
duke
parents:
diff changeset
  1287
         * from a pragmatic point of view (for now anyways) having no output
7f561c08de6b Initial load
duke
parents:
diff changeset
  1288
         * encoding at all, not even the default UTF-8 indicates that the serializer
7f561c08de6b Initial load
duke
parents:
diff changeset
  1289
         * is being used for temporary RTF.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1290
         */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1291
        return (getEncoding() == null);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1292
7f561c08de6b Initial load
duke
parents:
diff changeset
  1293
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1294
7f561c08de6b Initial load
duke
parents:
diff changeset
  1295
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1296
     * This method adds an attribute the the current element,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1297
     * but should not be used for an xsl:attribute child.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1298
     * @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1299
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1300
    public void addAttribute(String uri, String localName, String rawName, String type, String value) throws SAXException
7f561c08de6b Initial load
duke
parents:
diff changeset
  1301
    {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1302
        if (m_elemContext.m_startTagOpen)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1303
        {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1304
            addAttributeAlways(uri, localName, rawName, type, value, false);
7f561c08de6b Initial load
duke
parents:
diff changeset
  1305
        }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1306
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1307
7f561c08de6b Initial load
duke
parents:
diff changeset
  1308
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1309
     * @see org.xml.sax.DTDHandler#notationDecl(java.lang.String, java.lang.String, java.lang.String)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1310
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1311
    public void notationDecl(String arg0, String arg1, String arg2)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1312
        throws SAXException {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1313
        // This method just provides a definition to satisfy the interface
7f561c08de6b Initial load
duke
parents:
diff changeset
  1314
        // A particular sub-class of SerializerBase provides the implementation (if desired)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1315
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1316
7f561c08de6b Initial load
duke
parents:
diff changeset
  1317
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1318
     * @see org.xml.sax.DTDHandler#unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1319
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1320
    public void unparsedEntityDecl(
7f561c08de6b Initial load
duke
parents:
diff changeset
  1321
        String arg0,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1322
        String arg1,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1323
        String arg2,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1324
        String arg3)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1325
        throws SAXException {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1326
        // This method just provides a definition to satisfy the interface
7f561c08de6b Initial load
duke
parents:
diff changeset
  1327
        // A particular sub-class of SerializerBase provides the implementation (if desired)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1328
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1329
7f561c08de6b Initial load
duke
parents:
diff changeset
  1330
    /**
7f561c08de6b Initial load
duke
parents:
diff changeset
  1331
     * If set to false the serializer does not expand DTD entities,
7f561c08de6b Initial load
duke
parents:
diff changeset
  1332
     * but leaves them as is, the default value is true.
7f561c08de6b Initial load
duke
parents:
diff changeset
  1333
     */
7f561c08de6b Initial load
duke
parents:
diff changeset
  1334
    public void setDTDEntityExpansion(boolean expand) {
7f561c08de6b Initial load
duke
parents:
diff changeset
  1335
        // This method just provides a definition to satisfy the interface
7f561c08de6b Initial load
duke
parents:
diff changeset
  1336
        // A particular sub-class of SerializerBase provides the implementation (if desired)
7f561c08de6b Initial load
duke
parents:
diff changeset
  1337
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
  1338
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1339
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1340
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1341
     * The CDATA section names stored in a whitespace separateed list with
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1342
     * each element being a word of the form "{uri}localName" This list
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1343
     * comes from the cdata-section-elements attribute.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1344
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1345
     * This field replaces m_cdataSectionElements Vector.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1346
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1347
    protected String m_StringOfCDATASections = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1348
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1349
    boolean m_docIsEmpty = true;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1350
    void initCdataElems(String s)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1351
    {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1352
        if (s != null)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1353
        {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1354
            int max = s.length();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1355
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1356
            // true if we are in the middle of a pair of curly braces that delimit a URI
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1357
            boolean inCurly = false;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1358
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1359
            // true if we found a URI but haven't yet processed the local name
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1360
            boolean foundURI = false;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1361
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1362
            StringBuilder buf = new StringBuilder();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1363
            String uri = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1364
            String localName = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1365
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1366
            // parse through string, breaking on whitespaces.  I do this instead
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1367
            // of a tokenizer so I can track whitespace inside of curly brackets,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1368
            // which theoretically shouldn't happen if they contain legal URLs.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1369
            for (int i = 0; i < max; i++)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1370
            {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1371
                char c = s.charAt(i);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1372
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1373
                if (Character.isWhitespace(c))
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1374
                {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1375
                    if (!inCurly)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1376
                    {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1377
                        if (buf.length() > 0)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1378
                        {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1379
                            localName = buf.toString();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1380
                            if (!foundURI)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1381
                                uri = "";
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1382
                            addCDATAElement(uri,localName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1383
                            buf.setLength(0);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1384
                            foundURI = false;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1385
                        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1386
                        continue;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1387
                    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1388
                    else
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1389
                        buf.append(c); // add whitespace to the URI
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1390
                }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1391
                else if ('{' == c) // starting a URI
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1392
                    inCurly = true;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1393
                else if ('}' == c)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1394
                {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1395
                    // we just ended a URI
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1396
                    foundURI = true;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1397
                    uri = buf.toString();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1398
                    buf.setLength(0);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1399
                    inCurly = false;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1400
                }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1401
                else
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1402
                {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1403
                    // append non-whitespace, non-curly to current URI or localName being gathered.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1404
                    buf.append(c);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1405
                }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1406
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1407
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1408
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1409
            if (buf.length() > 0)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1410
            {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1411
                // We have one last localName to process.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1412
                localName = buf.toString();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1413
                if (!foundURI)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1414
                    uri = "";
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1415
                addCDATAElement(uri,localName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1416
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1417
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1418
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1419
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1420
    protected java.util.HashMap<String, HashMap<String, String>> m_CdataElems = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1421
    private void addCDATAElement(String uri, String localName)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1422
    {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1423
        if (m_CdataElems == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1424
            m_CdataElems = new java.util.HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1425
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1426
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1427
        HashMap<String,String> h = m_CdataElems.get(localName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1428
        if (h == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1429
            h = new HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1430
            m_CdataElems.put(localName,h);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1431
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1432
        h.put(uri,uri);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1433
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1434
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1435
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1436
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1437
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1438
     * Return true if nothing has been sent to this result tree yet.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1439
     * <p>
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1440
     * This is not a public API.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1441
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1442
     * @xsl.usage internal
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1443
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1444
    public boolean documentIsEmpty() {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1445
        // If we haven't called startDocument() yet, then this document is empty
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1446
        return m_docIsEmpty && (m_elemContext.m_currentElemDepth == 0);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1447
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1448
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1449
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1450
     * Return true if the current element in m_elemContext
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1451
     * is a CDATA section.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1452
     * CDATA sections are specified in the <xsl:output> attribute
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1453
     * cdata-section-names or in the JAXP equivalent property.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1454
     * In any case the format of the value of such a property is:
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1455
     * <pre>
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1456
     * "{uri1}localName1 {uri2}localName2 . . . "
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1457
     * </pre>
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1458
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1459
     * <p>
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1460
     * This method is not a public API, but is only used internally by the serializer.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1461
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1462
    protected boolean isCdataSection() {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1463
        boolean b = false;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1464
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1465
        if (null != m_StringOfCDATASections) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1466
            if (m_elemContext.m_elementLocalName == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1467
                String localName =  getLocalName(m_elemContext.m_elementName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1468
                m_elemContext.m_elementLocalName = localName;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1469
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1470
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1471
            if ( m_elemContext.m_elementURI == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1472
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1473
                m_elemContext.m_elementURI = getElementURI();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1474
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1475
            else if ( m_elemContext.m_elementURI.length() == 0) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1476
                if ( m_elemContext.m_elementName == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1477
                    m_elemContext.m_elementName = m_elemContext.m_elementLocalName;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1478
                    // leave URI as "", meaning in no namespace
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1479
                }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1480
                else if (m_elemContext.m_elementLocalName.length() < m_elemContext.m_elementName.length()){
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1481
                    // We were told the URI was "", yet the name has a prefix since the name is longer than the localname.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1482
                    // So we will fix that incorrect information here.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1483
                    m_elemContext.m_elementURI = getElementURI();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1484
                }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1485
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1486
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1487
            HashMap<String, String> h = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1488
            if (m_CdataElems != null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1489
                h = m_CdataElems.get(m_elemContext.m_elementLocalName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1490
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1491
            if (h != null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1492
                Object obj = h.get(m_elemContext.m_elementURI);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1493
                if (obj != null)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1494
                    b = true;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1495
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1496
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1497
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1498
        return b;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1499
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1500
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1501
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1502
     * Before this call m_elementContext.m_elementURI is null,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1503
     * which means it is not yet known. After this call it
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1504
     * is non-null, but possibly "" meaning that it is in the
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1505
     * default namespace.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1506
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1507
     * @return The URI of the element, never null, but possibly "".
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1508
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1509
    private String getElementURI() {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1510
        String uri = null;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1511
        // At this point in processing we have received all the
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1512
        // namespace mappings
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1513
        // As we still don't know the elements namespace,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1514
        // we now figure it out.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1515
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1516
        String prefix = getPrefixPart(m_elemContext.m_elementName);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1517
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1518
        if (prefix == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1519
            // no prefix so lookup the URI of the default namespace
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1520
            uri = m_prefixMap.lookupNamespace("");
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1521
        } else {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1522
            uri = m_prefixMap.lookupNamespace(prefix);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1523
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1524
        if (uri == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1525
            // We didn't find the namespace for the
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1526
            // prefix ... ouch, that shouldn't happen.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1527
            // This is a hack, we really don't know
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1528
            // the namespace
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1529
            uri = EMPTYSTRING;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1530
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1531
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1532
        return uri;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1533
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1534
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1535
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1536
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1537
     * Get the value of an output property,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1538
     * the explicit value, if any, otherwise the
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1539
     * default value, if any, otherwise null.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1540
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1541
    public String getOutputProperty(String name) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1542
        String val = getOutputPropertyNonDefault(name);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1543
        // If no explicit value, try to get the default value
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1544
        if (val == null)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1545
            val = getOutputPropertyDefault(name);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1546
        return val;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1547
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1548
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1549
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1550
     * Get the value of an output property,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1551
     * not the default value. If there is a default
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1552
     * value, but no non-default value this method
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1553
     * will return null.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1554
     * <p>
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1555
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1556
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1557
    public String getOutputPropertyNonDefault(String name) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1558
        return getProp(name,false);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1559
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1560
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1561
    /**
25834
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1562
     * Return a {@link DOM3Serializer} interface into this serializer. If the
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1563
     * serializer does not support the {@link DOM3Serializer} interface, it should
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1564
     * return null.
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1565
     *
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1566
     * @return A {@link DOM3Serializer} interface into this serializer,  or null
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1567
     * if the serializer is not DOM capable
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1568
     * @throws IOException An I/O exception occured
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1569
     * @see org.apache.xml.serializer.Serializer#asDOM3Serializer()
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1570
     */
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1571
    public Object asDOM3Serializer() throws IOException
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1572
    {
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1573
        return new com.sun.org.apache.xml.internal.serializer.dom3.DOM3SerializerImpl(this);
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1574
    }
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1575
aba3efbf4ec5 8035467: Xerces Update: Move to Xalan based DOM L3 serializer. Deprecate Xerces' native serializer.
joehw
parents: 24888
diff changeset
  1576
    /**
24888
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1577
     * Get the default value of an xsl:output property,
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1578
     * which would be null only if no default value exists
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1579
     * for the property.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1580
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1581
    public String getOutputPropertyDefault(String name) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1582
        return getProp(name, true);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1583
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1584
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1585
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1586
     * Set the value for the output property, typically from
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1587
     * an xsl:output element, but this does not change what
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1588
     * the default value is.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1589
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1590
    public void setOutputProperty(String name, String val) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1591
        setProp(name,val,false);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1592
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1593
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1594
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1595
     * Set the default value for an output property, but this does
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1596
     * not impact any explicitly set value.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1597
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1598
    public void setOutputPropertyDefault(String name, String val) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1599
        setProp(name,val,true);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1600
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1601
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1602
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1603
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1604
     * A mapping of keys to explicitly set values, for example if
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1605
     * and <xsl:output/> has an "encoding" attribute, this
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1606
     * map will have what that attribute maps to.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1607
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1608
    private HashMap<String, String> m_OutputProps;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1609
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1610
     * A mapping of keys to default values, for example if
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1611
     * the default value of the encoding is "UTF-8" then this
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1612
     * map will have that "encoding" maps to "UTF-8".
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1613
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1614
    private HashMap<String, String> m_OutputPropsDefault;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1615
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1616
    Set<String> getOutputPropDefaultKeys() {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1617
        return m_OutputPropsDefault.keySet();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1618
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1619
    Set<String> getOutputPropKeys() {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1620
        return m_OutputProps.keySet();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1621
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1622
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1623
    private String getProp(String name, boolean defaultVal) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1624
        if (m_OutputProps == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1625
            m_OutputProps = new HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1626
            m_OutputPropsDefault = new HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1627
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1628
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1629
        String val;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1630
        if (defaultVal)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1631
            val = m_OutputPropsDefault.get(name);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1632
        else
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1633
            val = m_OutputProps.get(name);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1634
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1635
        return val;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1636
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1637
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1638
     *
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1639
     * @param name The name of the property, e.g. "{http://myprop}indent-tabs" or "indent".
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1640
     * @param val The value of the property, e.g. "4"
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1641
     * @param defaultVal true if this is a default value being set for the property as
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1642
     * opposed to a user define on, set say explicitly in the stylesheet or via JAXP
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1643
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1644
    void setProp(String name, String val, boolean defaultVal) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1645
        if (m_OutputProps == null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1646
            m_OutputProps = new HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1647
            m_OutputPropsDefault = new HashMap<>();
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1648
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1649
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1650
        if (defaultVal)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1651
            m_OutputPropsDefault.put(name,val);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1652
        else {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1653
            if (OutputKeys.CDATA_SECTION_ELEMENTS.equals(name) && val != null) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1654
                initCdataElems(val);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1655
                String oldVal = m_OutputProps.get(name);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1656
                String newVal;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1657
                if (oldVal == null)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1658
                    newVal = oldVal + ' ' + val;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1659
                else
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1660
                    newVal = val;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1661
                m_OutputProps.put(name,newVal);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1662
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1663
            else {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1664
                m_OutputProps.put(name,val);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1665
            }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1666
        }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1667
    }
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1668
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1669
    /**
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1670
     * Get the first char of the local name
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1671
     * @param name Either a local name, or a local name
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1672
     * preceeded by a uri enclosed in curly braces.
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1673
     */
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1674
    static char getFirstCharLocName(String name) {
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1675
        final char first;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1676
        int i = name.indexOf('}');
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1677
        if (i < 0)
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1678
            first = name.charAt(0);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1679
        else
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1680
            first = name.charAt(i+1);
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1681
        return first;
2e493ac78624 8041523: Xerces Update: Serializer improvements from Xalan
joehw
parents: 12458
diff changeset
  1682
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
  1683
}