19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: SerializerBase.java 471981 2006-11-07 04:28:00Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.serializer; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.IOException; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.HashMap; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Set; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.OutputKeys; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.SourceLocator; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Transformer; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.serializer.utils.MsgKey; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.serializer.utils.Utils; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.Attributes; 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.ContentHandler; 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.Locator; 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXException; 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXParseException; 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class acts as a base class for the XML "serializers" 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and the stream serializers. 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It contains a number of common fields and methods. 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic abstract class SerializerBase 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson implements SerializationHandler, SerializerConstants 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson SerializerBase() { 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The name of the package that this class is in. 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Not a public API. 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String PKG_NAME; 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The same as the name of the package that this class is in 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * except that '.' are replaced with '/'. 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Not a public API. 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String PKG_PATH; 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static { 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String fullyQualifiedName = SerializerBase.class.getName(); 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int lastDot = fullyQualifiedName.lastIndexOf('.'); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lastDot < 0) { 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson PKG_NAME = ""; 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson PKG_NAME = fullyQualifiedName.substring(0, lastDot); 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson StringBuffer sb = new StringBuffer(); 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < PKG_NAME.length(); i++) { 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char ch = PKG_NAME.charAt(i); 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (ch == '.') 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson sb.append('/'); 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson sb.append(ch); 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson PKG_PATH = sb.toString(); 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off the end element trace event 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of element 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireEndElem(String name) 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDELEMENT,name, (Attributes)null); 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the characters trace event 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param chars content of characters 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param start starting index of characters to output 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param length number of characters to output 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireCharEvent(char[] chars, int start, int length) 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length); 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * true if we still need to call startDocumentInternal() 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_needToCallStartDocument = true; 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** True if a trailing "]]>" still needs to be written to be 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * written out. Used to merge adjacent CDATA sections 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_cdataTagOpen = false; 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * All the attributes of the current element, collected from 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startPrefixMapping() calls, or addAddtribute() calls, or 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * from the SAX attributes in a startElement() call. 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected AttributesImplSerializer m_attributes = new AttributesImplSerializer(); 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tells if we're in an EntityRef event. 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_inEntityRef = false; 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** This flag is set while receiving events from the external DTD */ 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_inExternalDTD = false; 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The System ID for the doc type. 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_doctypeSystem; 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The public ID for the doc type. 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_doctypePublic; 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Flag to tell that we need to add the doctype decl, which we can't do 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * until the first element is encountered. 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean m_needToOutputDocTypeDecl = true; 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tells if we should write the XML declaration. 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_shouldNotWriteXMLHeader = false; 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The standalone value for the doctype. 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_standalone; 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * True if standalone was specified. 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_standaloneWasSpecified = false; 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Flag to tell if indenting (pretty-printing) is on. 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_doIndent = false; 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Amount to indent. 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected int m_indentAmount = 0; 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tells the XML version, for writing out to the XML decl. 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_version = null; 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The mediatype. Not used right now. 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_mediatype; 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The transformer that was around when this output handler was created (if 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * any). 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private Transformer m_transformer; 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Namespace support, that keeps track of currently defined 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * prefix/uri mappings. As processed elements come and go, so do 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the associated mappings for that element. 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected NamespaceMappings m_prefixMap; 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Handle for firing generate events. This interface may be implemented 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * by the referenced transformer object. 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected SerializerTrace m_tracer; 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected SourceLocator m_sourceLocator; 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The writer to send output to. This field is only used in the ToStream 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * serializers, but exists here just so that the fireStartDoc() and 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * other fire... methods can flush this writer when tracing. 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected java.io.Writer m_writer = null; 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A reference to "stack frame" corresponding to 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the current element. Such a frame is pushed at a startElement() 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and popped at an endElement(). This frame contains information about 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the element, such as its namespace URI. 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected ElemContext m_elemContext = new ElemContext(); 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A utility buffer for converting Strings passed to 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character() methods to character arrays. 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reusing this buffer means not creating a new character array 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * everytime and it runs faster. 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected char[] m_charsBuff = new char[60]; 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A utility buffer for converting Strings passed to 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * attribute methods to character arrays. 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reusing this buffer means not creating a new character array 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * everytime and it runs faster. 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected char[] m_attrBuff = new char[30]; 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notification of a comment. 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedLexicalHandler#comment(String) 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void comment(String data) throws SAXException 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_docIsEmpty = false; 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int length = data.length(); 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (length > m_charsBuff.length) 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_charsBuff = new char[length * 2 + 1]; 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson data.getChars(0, length, m_charsBuff, 0); 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson comment(m_charsBuff, 0, length); 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If at runtime, when the qname of the attribute is 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * known, another prefix is specified for the attribute, then we can 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * patch or hack the name with this method. For 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a qname of the form "ns?:otherprefix:name", this function patches the 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * qname by simply ignoring "otherprefix". 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * TODO: This method is a HACK! We do not have access to the 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * XML file, it sometimes generates a NS prefix of the form "ns?" for 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * an attribute. 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String patchName(String qname) 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int lastColon = qname.lastIndexOf(':'); 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lastColon > 0) { 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int firstColon = qname.indexOf(':'); 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String prefix = qname.substring(0, firstColon); 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String localName = qname.substring(lastColon + 1); 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If uri is "" then ignore prefix 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String uri = m_prefixMap.lookupNamespace(prefix); 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (uri != null && uri.length() == 0) { 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return localName; 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (firstColon != lastColon) { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return prefix + ':' + localName; 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return qname; 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the local name of a qualified name. If the name has no prefix, 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * then it works as the identity (SAX2). 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param qname the qualified name 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the name, but excluding any prefix and colon. 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected static String getLocalName(String qname) 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int col = qname.lastIndexOf(':'); 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (col > 0) ? qname.substring(col + 1) : qname; 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive an object for locating the origin of SAX document events. 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param locator An object that can return the location of any SAX document 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * event. 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive an object for locating the origin of SAX document events. 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>SAX parsers are strongly encouraged (though not absolutely 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * required) to supply a locator: if it does so, it must supply 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the locator to the application by invoking this method before 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * invoking any of the other methods in the DocumentHandler 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface.</p> 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>The locator allows the application to determine the end 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * position of any document-related event, even if the parser is 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * not reporting an error. Typically, the application will 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * use this information for reporting its own errors (such as 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character content that does not match an application's 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * business rules). The information returned by the locator 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is probably not sufficient for use with a search engine.</p> 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Note that the locator will return correct information only 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * during the invocation of the events in this interface. The 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * application should not attempt to use it at any other time.</p> 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDocumentLocator(Locator locator) 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // I don't do anything with this yet. 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Adds the given attribute to the set of collected attributes , but only if 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * there is a currently open element. 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * An element is currently open if a startElement() notification has 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * occured but the start of the element has not yet been written to the 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * output. In the stream case this means that we have not yet been forced 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to close the elements opening tag by another notification, such as a 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * character notification. 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri the URI of the attribute 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName the local name of the attribute 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param rawName the qualified name of the attribute 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param type the type of the attribute (probably CDATA) 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param XSLAttribute true if this attribute is coming from an xsl:attriute element 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#addAttribute(String, String, String, String, String) 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addAttribute( 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri, 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String localName, 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String rawName, 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String type, 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String value, 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean XSLAttribute) 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways(uri, localName, rawName, type, value, XSLAttribute); 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Adds the given attribute to the set of attributes, even if there is 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * no currently open element. This is useful if a SAX startPrefixMapping() 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * should need to add an attribute before the element name is seen. 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri the URI of the attribute 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName the local name of the attribute 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param rawName the qualified name of the attribute 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param type the type of the attribute (probably CDATA) 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param XSLAttribute true if this attribute is coming from an xsl:attribute element 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the attribute was added, 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * false if an existing value was replaced. 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean addAttributeAlways( 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri, 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String localName, 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String rawName, 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String type, 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String value, 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean XSLAttribute) 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean was_added; 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// final int index = 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// (localName == null || uri == null) ? 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// m_attributes.getIndex(rawName):m_attributes.getIndex(uri, localName); 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int index; 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (localName == null || uri == null){ 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// index = m_attributes.getIndex(rawName); 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// else { 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// index = m_attributes.getIndex(uri, localName); 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (localName == null || uri == null || uri.length() == 0) 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson index = m_attributes.getIndex(rawName); 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson index = m_attributes.getIndex(uri,localName); 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (index >= 0) 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* We've seen the attribute before. 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * We may have a null uri or localName, but all 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * we really want to re-set is the value anyway. 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_attributes.setValue(index,value); 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson was_added = false; 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the attribute doesn't exist yet, create it 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_attributes.addAttribute(uri, localName, rawName, type, value); 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson was_added = true; 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return was_added; 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Adds the given attribute to the set of collected attributes, 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * but only if there is a currently open element. 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name the attribute's qualified name 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addAttribute(String name, final String value) 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String patchedName = patchName(name); 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String localName = getLocalName(patchedName); 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String uri = getNamespaceURI(patchedName, false); 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways(uri,localName, patchedName, "CDATA", value, false); 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Adds the given xsl:attribute to the set of collected attributes, 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * but only if there is a currently open element. 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name the attribute's qualified name (prefix:localName) 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri the URI that the prefix of the name points to 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addXSLAttribute(String name, final String value, final String uri) 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String patchedName = patchName(name); 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String localName = getLocalName(patchedName); 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways(uri,localName, patchedName, "CDATA", value, true); 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Add the given attributes to the currently collected ones. These 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * attributes are always added, regardless of whether on not an element 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is currently open. 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param atts List of attributes to add to this list 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addAttributes(Attributes atts) throws SAXException 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int nAtts = atts.getLength(); 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < nAtts; i++) 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri = atts.getURI(i); 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == uri) 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = ""; 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways( 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri, 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson atts.getLocalName(i), 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson atts.getQName(i), 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson atts.getType(i), 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson atts.getValue(i), 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson false); 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a {@link ContentHandler} interface into this serializer. 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If the serializer does not support the {@link ContentHandler} 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface, it should return null. 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A {@link ContentHandler} interface into this serializer, 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or null if the serializer is not SAX 2 capable 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IOException An I/O exception occured 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ContentHandler asContentHandler() throws IOException 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the end of an entity. 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The name of the entity that is ending. 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException The application may raise an exception. 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see #startEntity 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void endEntity(String name) throws org.xml.sax.SAXException 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name.equals("[dtd]")) 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_inExternalDTD = false; 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_inEntityRef = false; 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.fireEndEntity(name); 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Flush and close the underlying java.io.Writer. This method applies to 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ToStream serializers, not ToSAXHandler serializers. 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ToStream 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void close() 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // do nothing (base behavior) 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Initialize global variables 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void initCDATA() 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // CDATA stack 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // _cdataStack = new Stack(); 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // _cdataStack.push(new Integer(-1)); // push dummy value 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the character encoding to be used in the output document. 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the character encoding to be used in the output document. 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getEncoding() 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return getOutputProperty(OutputKeys.ENCODING); 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the character encoding coming from the xsl:output encoding stylesheet attribute. 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param m_encoding the character encoding 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setEncoding(String encoding) 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.ENCODING,encoding); 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the value coming from the xsl:output omit-xml-declaration stylesheet attribute 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param b true if the XML declaration is to be omitted from the output 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setOmitXMLDeclaration(boolean b) 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String val = b ? "yes":"no"; 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,val); 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the XML declaration is to be omitted from the output 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean getOmitXMLDeclaration() 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_shouldNotWriteXMLHeader; 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the previously set value of the value to be used as the public 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * identifier in the document type declaration (DTD). 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *@return the public identifier to be used in the DOCTYPE declaration in the 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * output document. 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getDoctypePublic() 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_doctypePublic; 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Set the value coming from the xsl:output doctype-public stylesheet attribute. 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param doctypePublic the public identifier to be used in the DOCTYPE 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * declaration in the output document. 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDoctypePublic(String doctypePublic) 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic); 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the previously set value of the value to be used 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * as the system identifier in the document type declaration (DTD). 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the system identifier to be used in the DOCTYPE declaration in 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the output document. 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getDoctypeSystem() 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_doctypeSystem; 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Set the value coming from the xsl:output doctype-system stylesheet attribute. 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param doctypeSystem the system identifier to be used in the DOCTYPE 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * declaration in the output document. 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDoctypeSystem(String doctypeSystem) 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem); 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Set the value coming from the xsl:output doctype-public and doctype-system stylesheet properties 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param doctypeSystem the system identifier to be used in the DOCTYPE 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * declaration in the output document. 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param doctypePublic the public identifier to be used in the DOCTYPE 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * declaration in the output document. 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDoctype(String doctypeSystem, String doctypePublic) 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem); 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctypePublic); 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the value coming from the xsl:output standalone stylesheet attribute. 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param standalone a value of "yes" indicates that the 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>standalone</code> delaration is to be included in the output 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. This method remembers if the value was explicitly set using 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * this method, verses if the value is the default value. 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setStandalone(String standalone) 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.STANDALONE, standalone); 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the XSL standalone attribute, but does not remember if this is a 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * default or explicite setting. 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param standalone "yes" | "no" 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void setStandaloneInternal(String standalone) 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ("yes".equals(standalone)) 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_standalone = "yes"; 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_standalone = "no"; 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Gets the XSL standalone attribute 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a value of "yes" if the <code>standalone</code> delaration is to 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * be included in the output document. 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see XSLOutputAttributes#getStandalone() 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getStandalone() 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_standalone; 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the output document should be indented to visually 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * indicate its structure. 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean getIndent() 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_doIndent; 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Gets the mediatype the media-type or MIME type associated with the output 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the mediatype the media-type or MIME type associated with the 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * output document. 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getMediaType() 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_mediatype; 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Gets the version of the output format. 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the version of the output format. 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getVersion() 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_version; 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the value coming from the xsl:output version attribute. 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param version the version of the output format. 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see SerializationHandler#setVersion(String) 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setVersion(String version) 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.VERSION, version); 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the value coming from the xsl:output media-type stylesheet attribute. 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param mediaType the non-null media-type or MIME type associated with the 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * output document. 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see javax.xml.transform.OutputKeys#MEDIA_TYPE 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see SerializationHandler#setMediaType(String) 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setMediaType(String mediaType) 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.MEDIA_TYPE,mediaType); 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the number of spaces to indent for each indentation level. 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getIndentAmount() 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_indentAmount; 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the indentation amount. 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param m_indentAmount The m_indentAmount to set 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setIndentAmount(int m_indentAmount) 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_indentAmount = m_indentAmount; 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the value coming from the xsl:output indent stylesheet 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * attribute. 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param doIndent true if the output document should be indented to 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * visually indicate its structure. 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see XSLOutputAttributes#setIndent(boolean) 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setIndent(boolean doIndent) 7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String val = doIndent ? "yes":"no"; 7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOutputProperty(OutputKeys.INDENT,val); 7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is used when a prefix/uri namespace mapping 7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is indicated after the element was started with a 7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startElement() and before and endElement(). 7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startPrefixMapping(prefix,uri) would be used before the 7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startElement() call. 7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri the URI of the namespace 7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param prefix the prefix associated with the given URI. 7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#namespaceAfterStartElement(String, String) 7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void namespaceAfterStartElement(String uri, String prefix) 7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException 7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // default behavior is to do nothing 7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a {@link DOMSerializer} interface into this serializer. If the 7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * serializer does not support the {@link DOMSerializer} interface, it should 7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * return null. 7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A {@link DOMSerializer} interface into this serializer, or null 7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * if the serializer is not DOM capable 7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IOException An I/O exception occured 7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see Serializer#asDOMSerializer() 7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DOMSerializer asDOMSerializer() throws IOException 7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two strings are equal, without worry if the first string is null. 7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param p String reference, which may be null. 8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t String reference, which may be null. 8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if strings are equal. 8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static final boolean subPartMatch(String p, String t) 8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (p == t) || ((null != p) && (p.equals(t))); 8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the local name of a qualified name. 8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If the name has no prefix, 8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * then it works as the identity (SAX2). 8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param qname a qualified name 8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return returns the prefix of the qualified name, 8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or null if there is no prefix. 8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected static final String getPrefixPart(String qname) 8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int col = qname.indexOf(':'); 8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (col > 0) ? qname.substring(0, col) : null; 8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //return (col > 0) ? qname.substring(0,col) : ""; 8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Some users of the serializer may need the current namespace mappings 8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the current namespace mappings (prefix/uri) 8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#getNamespaceMappings() 8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NamespaceMappings getNamespaceMappings() 8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_prefixMap; 8349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the prefix currently pointing to the given URI (if any). 8389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespaceURI the uri of the namespace in question 8399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a prefix pointing to the given URI (if any). 8409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#getPrefix(String) 8419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getPrefix(String namespaceURI) 8439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefix = m_prefixMap.lookupPrefix(namespaceURI); 8459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return prefix; 8469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the URI of an element or attribute. Note that default namespaces 8509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * do not apply directly to attributes. 8519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param qname a qualified name 8529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param isElement true if the qualified name is the name of 8539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * an element. 8549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return returns the namespace URI associated with the qualified name. 8559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getNamespaceURI(String qname, boolean isElement) 8579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri = EMPTYSTRING; 8599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int col = qname.lastIndexOf(':'); 8609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String prefix = (col > 0) ? qname.substring(0, col) : EMPTYSTRING; 8619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!EMPTYSTRING.equals(prefix) || isElement) 8639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_prefixMap != null) 8659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = m_prefixMap.lookupNamespace(prefix); 8679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (uri == null && !prefix.equals(XMLNS_PREFIX)) 8689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 8709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Utils.messages.createMessage( 8719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson MsgKey.ER_NAMESPACE_PREFIX, 8729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[] { qname.substring(0, col) } )); 8739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return uri; 8779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the URI of prefix (if any) 8819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param prefix the prefix whose URI is searched for 8839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the namespace URI currently associated with the 8849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * prefix, null if the prefix is undefined. 8859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getNamespaceURIFromPrefix(String prefix) 8879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri = null; 8899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_prefixMap != null) 8909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = m_prefixMap.lookupNamespace(prefix); 8919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return uri; 8929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Entity reference event. 8969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of entity 8989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 9009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void entityReference(String name) throws org.xml.sax.SAXException 9029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushPending(); 9059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startEntity(name); 9079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson endEntity(name); 9089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 9109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson fireEntityReference(name); 9119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the transformer associated with this serializer 9159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t the transformer associated with this serializer. 9169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see SerializationHandler#setTransformer(Transformer) 9179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setTransformer(Transformer t) 9199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_transformer = t; 9219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If this transformer object implements the SerializerTrace interface 9239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // then assign m_tracer to the transformer object so it can be used 9249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // to fire trace events. 9259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((m_transformer instanceof SerializerTrace) && 9269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (((SerializerTrace) m_transformer).hasTraceListeners())) { 9279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer = (SerializerTrace) m_transformer; 9289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 9299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer = null; 9309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Gets the transformer associated with this serializer 9349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return returns the transformer associated with this serializer. 9359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see SerializationHandler#getTransformer() 9369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Transformer getTransformer() 9389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_transformer; 9409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method gets the nodes value as a String and uses that String as if 9449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * it were an input character notification. 9459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node the Node to serialize 9469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 9479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void characters(org.w3c.dom.Node node) 9499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 9509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushPending(); 9529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String data = node.getNodeValue(); 9539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (data != null) 9549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final int length = data.length(); 9569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (length > m_charsBuff.length) 9579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_charsBuff = new char[length * 2 + 1]; 9599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson data.getChars(0, length, m_charsBuff, 0); 9619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson characters(m_charsBuff, 0, length); 9629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.xml.sax.ErrorHandler#error(SAXParseException) 9689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void error(SAXParseException exc) throws SAXException { 9709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.xml.sax.ErrorHandler#fatalError(SAXParseException) 9749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void fatalError(SAXParseException exc) throws SAXException { 9769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_startTagOpen = false; 9789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.xml.sax.ErrorHandler#warning(SAXParseException) 9839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void warning(SAXParseException exc) throws SAXException 9859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off start entity trace event 9909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of entity 9919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireStartEntity(String name) 9939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 9949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 9969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 9989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENTITYREF, name); 9999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the characters event 10049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param chars content of characters 10059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param start starting index of characters to output 10069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param length number of characters to output 10079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// protected void fireCharEvent(char[] chars, int start, int length) 10099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throws org.xml.sax.SAXException 10109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 10119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (m_tracer != null) 10129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length); 10139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 10149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 10159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is only used internally when flushing the writer from the 10189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * various fire...() trace events. Due to the writer being wrapped with 10199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * SerializerTraceWriter it may cause the flush of these trace events: 10209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * EVENTTYPE_OUTPUT_PSEUDO_CHARACTERS 10219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * EVENTTYPE_OUTPUT_CHARACTERS 10229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * which trace the output written to the output stream. 10239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void flushMyWriter() 10269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_writer != null) 10289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 10309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_writer.flush(); 10329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(IOException ioe) 10349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the CDATA trace event 10419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param chars content of CDATA 10429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param start starting index of characters to output 10439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param length number of characters to output 10449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireCDATAEvent(char[] chars, int start, int length) 10469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 10479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 10499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 10519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CDATA, chars, start,length); 10529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the comment trace event 10579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param chars content of comment 10589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param start starting index of comment to output 10599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param length number of characters to output 10609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireCommentEvent(char[] chars, int start, int length) 10629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 10639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 10659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 10679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_COMMENT, new String(chars, start, length)); 10689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off end entity trace event 10749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of entity 10759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void fireEndEntity(String name) 10779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 10789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 10809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 10819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // we do not need to handle this. 10829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off start document trace event 10869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireStartDoc() 10889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 10899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 10919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 10939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_STARTDOCUMENT); 10949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off end document trace event 11009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireEndDoc() 11029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 11039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 11059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 11079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDDOCUMENT); 11089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Report the start element trace event. This trace method needs to be 11139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * called just before the attributes are cleared. 11149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elemName the qualified name of the element 11169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireStartElem(String elemName) 11199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 11209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 11229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 11249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_STARTELEMENT, 11259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elemName, m_attributes); 11269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off the end element event 11329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of element 11339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// protected void fireEndElem(String name) 11359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throws org.xml.sax.SAXException 11369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 11379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (m_tracer != null) 11389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDELEMENT,name, (Attributes)null); 11399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 11409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off the PI trace event 11449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of PI 11459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireEscapingEvent(String name, String data) 11479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 11489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 11519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 11539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_PI,name, data); 11549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * To fire off the entity reference trace event 11609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Name of entity reference 11619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void fireEntityReference(String name) 11639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 11649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 11669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushMyWriter(); 11689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENTITYREF,name, (Attributes)null); 11699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notification of the beginning of a document. 11749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is never a self generated call, 11759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * but only called externally. 11769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>The SAX parser will invoke this method only once, before any 11789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * other methods in this interface or in DTDHandler (except for 11799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * setDocumentLocator).</p> 11809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException Any SAX exception, possibly 11829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * wrapping another exception. 11839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 11859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void startDocument() throws org.xml.sax.SAXException 11879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // if we do get called with startDocument(), handle it right away 11909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startDocumentInternal(); 11919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_needToCallStartDocument = false; 11929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 11939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method handles what needs to be done at a startDocument() call, 11979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * whether from an external caller, or internally called in the 11989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * serializer. For historical reasons the serializer is flexible to 11999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startDocument() not always being called. 12009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Even if no external call is 12019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * made into startDocument() this method will always be called as a self 12029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * generated internal startDocument, it handles what needs to be done at a 12039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * startDocument() call. 12049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method exists just to make sure that startDocument() is only ever 12069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * called from an external caller, which in principle is just a matter of 12079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * style. 12089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws SAXException 12109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void startDocumentInternal() throws org.xml.sax.SAXException 12129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 12149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.fireStartDoc(); 12159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is used to set the source locator, which might be used to 12189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * generated an error message. 12199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param locator the source locator 12209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#setSourceLocator(javax.xml.transform.SourceLocator) 12229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setSourceLocator(SourceLocator locator) 12249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_sourceLocator = locator; 12269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Used only by TransformerSnapshotImpl to restore the serialization 12319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to a previous state. 12329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param mappings NamespaceMappings 12349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setNamespaceMappings(NamespaceMappings mappings) { 12369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_prefixMap = mappings; 12379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean reset() 12409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson resetSerializerBase(); 12429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 12439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reset all of the fields owned by SerializerBase 12479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void resetSerializerBase() 12509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_attributes.clear(); 12529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_CdataElems = null; 12539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_cdataTagOpen = false; 12549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_docIsEmpty = true; 12559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_doctypePublic = null; 12569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_doctypeSystem = null; 12579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_doIndent = false; 12589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_elemContext = new ElemContext(); 12599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_indentAmount = 0; 12609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_inEntityRef = false; 12619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_inExternalDTD = false; 12629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_mediatype = null; 12639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_needToCallStartDocument = true; 12649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_needToOutputDocTypeDecl = false; 12659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_OutputProps != null) 12669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_OutputProps.clear(); 12679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_OutputPropsDefault != null) 12689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_OutputPropsDefault.clear(); 12699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (this.m_prefixMap != null) 12709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_prefixMap.reset(); 12719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_shouldNotWriteXMLHeader = false; 12729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_sourceLocator = null; 12739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_standalone = null; 12749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_standaloneWasSpecified = false; 12759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_StringOfCDATASections = null; 12769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_tracer = null; 12779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_transformer = null; 12789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_version = null; 12799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // don't set writer to null, so that it might be re-used 12809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //this.m_writer = null; 12819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if the serializer is used for temporary output rather than 12859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * final output. 12869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This concept is made clear in the XSLT 2.0 draft. 12889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final boolean inTemporaryOutputState() 12909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* This is a hack. We should really be letting the serializer know 12929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that it is in temporary output state with an explicit call, but 12939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * from a pragmatic point of view (for now anyways) having no output 12949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * encoding at all, not even the default UTF-8 indicates that the serializer 12959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is being used for temporary RTF. 12969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (getEncoding() == null); 12989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 13029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method adds an attribute the the current element, 13039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * but should not be used for an xsl:attribute child. 13049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) 13059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 13069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addAttribute(String uri, String localName, String rawName, String type, String value) throws SAXException 13079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 13099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways(uri, localName, rawName, type, value, false); 13119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 13159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.xml.sax.DTDHandler#notationDecl(java.lang.String, java.lang.String, java.lang.String) 13169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 13179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void notationDecl(String arg0, String arg1, String arg2) 13189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException { 13199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This method just provides a definition to satisfy the interface 13209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // A particular sub-class of SerializerBase provides the implementation (if desired) 13219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 13249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.xml.sax.DTDHandler#unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String) 13259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 13269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void unparsedEntityDecl( 13279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String arg0, 13289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String arg1, 13299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String arg2, 13309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String arg3) 13319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException { 13329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This method just provides a definition to satisfy the interface 13339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // A particular sub-class of SerializerBase provides the implementation (if desired) 13349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 13379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If set to false the serializer does not expand DTD entities, 13389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * but leaves them as is, the default value is true. 13399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 13409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDTDEntityExpansion(boolean expand) { 13419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This method just provides a definition to satisfy the interface 13429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // A particular sub-class of SerializerBase provides the implementation (if desired) 13439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 13479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The CDATA section names stored in a whitespace separateed list with 13489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * each element being a word of the form "{uri}localName" This list 13499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * comes from the cdata-section-elements attribute. 13509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 13519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This field replaces m_cdataSectionElements Vector. 13529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 13539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_StringOfCDATASections = null; 13549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean m_docIsEmpty = true; 13569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void initCdataElems(String s) 13579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (s != null) 13599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int max = s.length(); 13619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // true if we are in the middle of a pair of curly braces that delimit a URI 13639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean inCurly = false; 13649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // true if we found a URI but haven't yet processed the local name 13669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean foundURI = false; 13679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson StringBuffer buf = new StringBuffer(); 13699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri = null; 13709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String localName = null; 13719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // parse through string, breaking on whitespaces. I do this instead 13739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // of a tokenizer so I can track whitespace inside of curly brackets, 13749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // which theoretically shouldn't happen if they contain legal URLs. 13759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < max; i++) 13789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char c = s.charAt(i); 13819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 13829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (Character.isWhitespace(c)) 13839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!inCurly) 13859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (buf.length() > 0) 13879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 13889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson localName = buf.toString(); 13899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!foundURI) 13909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = ""; 13919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addCDATAElement(uri,localName); 13929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson buf.setLength(0); 13939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson foundURI = false; 13949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson continue; 13969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 13979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 13989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson buf.append(c); // add whitespace to the URI 13999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if ('{' == c) // starting a URI 14019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson inCurly = true; 14029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if ('}' == c) 14039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // we just ended a URI, add the URI to the vector 14059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson foundURI = true; 14069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = buf.toString(); 14079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson buf.setLength(0); 14089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson inCurly = false; 14099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 14119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // append non-whitespace, non-curly to current URI or localName being gathered. 14139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson buf.append(c); 14149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (buf.length() > 0) 14199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // We have one last localName to process. 14219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson localName = buf.toString(); 14229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!foundURI) 14239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = ""; 14249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addCDATAElement(uri,localName); 14259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected java.util.Hashtable m_CdataElems = null; 14299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void addCDATAElement(String uri, String localName) 14309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_CdataElems == null) { 14329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_CdataElems = new java.util.Hashtable(); 14339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson java.util.Hashtable h = (java.util.Hashtable) m_CdataElems.get(localName); 14369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (h == null) { 14379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson h = new java.util.Hashtable(); 14389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_CdataElems.put(localName,h); 14399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson h.put(uri,uri); 14419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 14469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return true if nothing has been sent to this result tree yet. 14479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 14489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This is not a public API. 14499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 14509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 14519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 14529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean documentIsEmpty() { 14539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If we haven't called startDocument() yet, then this document is empty 14549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_docIsEmpty && (m_elemContext.m_currentElemDepth == 0); 14559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 14589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return true if the current element in m_elemContext 14599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is a CDATA section. 14609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * CDATA sections are specified in the <xsl:output> attribute 14619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * cdata-section-names or in the JAXP equivalent property. 14629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * In any case the format of the value of such a property is: 14639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <pre> 14649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * "{uri1}localName1 {uri2}localName2 . . . " 14659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * </pre> 14669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 14679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 14689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is not a public API, but is only used internally by the serializer. 14699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 14709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean isCdataSection() 14719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean b = false; 14749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != m_StringOfCDATASections) 14769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_elementLocalName == null) 14789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 14799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String localName = getLocalName(m_elemContext.m_elementName); 14809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_elementLocalName = localName; 14819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( m_elemContext.m_elementURI == null) { 14849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_elementURI = getElementURI(); 14869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if ( m_elemContext.m_elementURI.length() == 0) { 14889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( m_elemContext.m_elementName == null) { 14899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_elementName = m_elemContext.m_elementLocalName; 14909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // leave URI as "", meaning in no namespace 14919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (m_elemContext.m_elementLocalName.length() < m_elemContext.m_elementName.length()){ 14939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // We were told the URI was "", yet the name has a prefix since the name is longer than the localname. 14949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // So we will fix that incorrect information here. 14959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_elementURI = getElementURI(); 14969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 14989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 14999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson java.util.Hashtable h = (java.util.Hashtable) m_CdataElems.get(m_elemContext.m_elementLocalName); 15009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (h != null) 15019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 15029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Object obj = h.get(m_elemContext.m_elementURI); 15039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj != null) 15049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson b = true; 15059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return b; 15099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Before this call m_elementContext.m_elementURI is null, 15139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * which means it is not yet known. After this call it 15149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is non-null, but possibly "" meaning that it is in the 15159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * default namespace. 15169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 15179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The URI of the element, never null, but possibly "". 15189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 15199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String getElementURI() { 15209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri = null; 15219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // At this point in processing we have received all the 15229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // namespace mappings 15239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // As we still don't know the elements namespace, 15249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // we now figure it out. 15259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefix = getPrefixPart(m_elemContext.m_elementName); 15279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (prefix == null) { 15299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no prefix so lookup the URI of the default namespace 15309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = m_prefixMap.lookupNamespace(""); 15319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 15329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = m_prefixMap.lookupNamespace(prefix); 15339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (uri == null) { 15359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // We didn't find the namespace for the 15369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // prefix ... ouch, that shouldn't happen. 15379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This is a hack, we really don't know 15389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the namespace 15399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri = EMPTYSTRING; 15409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return uri; 15439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the value of an output property, 15489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the explicit value, if any, otherwise the 15499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * default value, if any, otherwise null. 15509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 15519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getOutputProperty(String name) { 15529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String val = getOutputPropertyNonDefault(name); 15539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If no explicit value, try to get the default value 15549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (val == null) 15559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson val = getOutputPropertyDefault(name); 15569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return val; 15579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the value of an output property, 15619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * not the default value. If there is a default 15629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * value, but no non-default value this method 15639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * will return null. 15649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 15659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 15669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 15679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getOutputPropertyNonDefault(String name ) 15689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 15699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return getProp(name,false); 15709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a {@link DOM3Serializer} interface into this serializer. If the 15749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * serializer does not support the {@link DOM3Serializer} interface, it should 15759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * return null. 15769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 15779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A {@link DOM3Serializer} interface into this serializer, or null 15789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * if the serializer is not DOM capable 15799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IOException An I/O exception occured 15809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xml.serializer.Serializer#asDOM3Serializer() 15819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 15829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object asDOM3Serializer() throws IOException 15839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 15849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.serializer.dom3.DOM3SerializerImpl(this); 15859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the default value of an xsl:output property, 15889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * which would be null only if no default value exists 15899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for the property. 15909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 15919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getOutputPropertyDefault(String name) { 15929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return getProp(name, true); 15939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 15949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 15959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 15969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the value for the output property, typically from 15979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * an xsl:output element, but this does not change what 15989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the default value is. 15999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setOutputProperty(String name, String val) { 16019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setProp(name,val,false); 16029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 16069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the default value for an output property, but this does 16079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * not impact any explicitly set value. 16089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setOutputPropertyDefault(String name, String val) { 16109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setProp(name,val,true); 16119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 16159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A mapping of keys to explicitly set values, for example if 16169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and <xsl:output/> has an "encoding" attribute, this 16179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * map will have what that attribute maps to. 16189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private HashMap m_OutputProps; 16209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 16219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A mapping of keys to default values, for example if 16229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the default value of the encoding is "UTF-8" then this 16239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * map will have that "encoding" maps to "UTF-8". 16249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private HashMap m_OutputPropsDefault; 16269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Set getOutputPropDefaultKeys() { 16289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_OutputPropsDefault.keySet(); 16299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Set getOutputPropKeys() { 16319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_OutputProps.keySet(); 16329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String getProp(String name, boolean defaultVal) { 16359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_OutputProps == null) { 16369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputProps = new HashMap(); 16379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputPropsDefault = new HashMap(); 16389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String val; 16419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (defaultVal) 16429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson val = (String) m_OutputPropsDefault.get(name); 16439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 16449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson val = (String) m_OutputProps.get(name); 16459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return val; 16479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 16509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 16519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The name of the property, e.g. "{http://myprop}indent-tabs" or "indent". 16529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param val The value of the property, e.g. "4" 16539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param defaultVal true if this is a default value being set for the property as 16549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * opposed to a user define on, set say explicitly in the stylesheet or via JAXP 16559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void setProp(String name, String val, boolean defaultVal) { 16579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_OutputProps == null) { 16589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputProps = new HashMap(); 16599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputPropsDefault = new HashMap(); 16609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (defaultVal) 16639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputPropsDefault.put(name,val); 16649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 16659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (OutputKeys.CDATA_SECTION_ELEMENTS.equals(name) && val != null) { 16669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initCdataElems(val); 16679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String oldVal = (String) m_OutputProps.get(name); 16689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String newVal; 16699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (oldVal == null) 16709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson newVal = oldVal + ' ' + val; 16719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 16729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson newVal = val; 16739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputProps.put(name,newVal); 16749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else { 16769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_OutputProps.put(name,val); 16779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 16849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the first char of the local name 16859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Either a local name, or a local name 16869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * preceeded by a uri enclosed in curly braces. 16879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 16889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static char getFirstCharLocName(String name) { 16899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final char first; 16909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int i = name.indexOf('}'); 16919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (i < 0) 16929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson first = name.charAt(0); 16939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 16949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson first = name.charAt(i+1); 16959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return first; 16969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 16979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 16989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 16999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1700