<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: ToHTMLSAXHandler.java 475978 2006-11-16 23:31:20Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    package org.apache.xml.serializer;<a name="line.22"></a>
<FONT color="green">023</FONT>    <a name="line.23"></a>
<FONT color="green">024</FONT>    import java.io.IOException;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.io.OutputStream;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.io.Writer;<a name="line.26"></a>
<FONT color="green">027</FONT>    import java.util.Properties;<a name="line.27"></a>
<FONT color="green">028</FONT>    <a name="line.28"></a>
<FONT color="green">029</FONT>    import javax.xml.transform.Result;<a name="line.29"></a>
<FONT color="green">030</FONT>    <a name="line.30"></a>
<FONT color="green">031</FONT>    import org.w3c.dom.Node;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.xml.sax.Attributes;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.xml.sax.ContentHandler;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.xml.sax.Locator;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.xml.sax.SAXException;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.xml.sax.ext.LexicalHandler;<a name="line.36"></a>
<FONT color="green">037</FONT>    <a name="line.37"></a>
<FONT color="green">038</FONT>    /**<a name="line.38"></a>
<FONT color="green">039</FONT>     * This class accepts SAX-like calls, then sends true SAX calls to a<a name="line.39"></a>
<FONT color="green">040</FONT>     * wrapped SAX handler.  There is optimization done knowing that the ultimate<a name="line.40"></a>
<FONT color="green">041</FONT>     * output is HTML.<a name="line.41"></a>
<FONT color="green">042</FONT>     * <a name="line.42"></a>
<FONT color="green">043</FONT>     * This class is not a public API.<a name="line.43"></a>
<FONT color="green">044</FONT>     * <a name="line.44"></a>
<FONT color="green">045</FONT>     * @deprecated As of Xalan 2.7.1, replaced by the use of {@link ToXMLSAXHandler}.<a name="line.45"></a>
<FONT color="green">046</FONT>     * <a name="line.46"></a>
<FONT color="green">047</FONT>     * @xsl.usage internal<a name="line.47"></a>
<FONT color="green">048</FONT>     */<a name="line.48"></a>
<FONT color="green">049</FONT>    public final class ToHTMLSAXHandler extends ToSAXHandler<a name="line.49"></a>
<FONT color="green">050</FONT>    {<a name="line.50"></a>
<FONT color="green">051</FONT>            /**<a name="line.51"></a>
<FONT color="green">052</FONT>             *  Handle document type declaration (for first element only)<a name="line.52"></a>
<FONT color="green">053</FONT>             */<a name="line.53"></a>
<FONT color="green">054</FONT>            private boolean m_dtdHandled = false;<a name="line.54"></a>
<FONT color="green">055</FONT>            <a name="line.55"></a>
<FONT color="green">056</FONT>        /**<a name="line.56"></a>
<FONT color="green">057</FONT>         * Keeps track of whether output escaping is currently enabled<a name="line.57"></a>
<FONT color="green">058</FONT>         */<a name="line.58"></a>
<FONT color="green">059</FONT>        protected boolean m_escapeSetting = true;<a name="line.59"></a>
<FONT color="green">060</FONT>    <a name="line.60"></a>
<FONT color="green">061</FONT>        /**<a name="line.61"></a>
<FONT color="green">062</FONT>         * Returns null.<a name="line.62"></a>
<FONT color="green">063</FONT>         * @return null<a name="line.63"></a>
<FONT color="green">064</FONT>         * @see Serializer#getOutputFormat()<a name="line.64"></a>
<FONT color="green">065</FONT>         */<a name="line.65"></a>
<FONT color="green">066</FONT>        public Properties getOutputFormat()<a name="line.66"></a>
<FONT color="green">067</FONT>        {<a name="line.67"></a>
<FONT color="green">068</FONT>            return null;<a name="line.68"></a>
<FONT color="green">069</FONT>        }<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>        /**<a name="line.71"></a>
<FONT color="green">072</FONT>         * Reurns null<a name="line.72"></a>
<FONT color="green">073</FONT>         * @return null<a name="line.73"></a>
<FONT color="green">074</FONT>         * @see Serializer#getOutputStream()<a name="line.74"></a>
<FONT color="green">075</FONT>         */<a name="line.75"></a>
<FONT color="green">076</FONT>        public OutputStream getOutputStream()<a name="line.76"></a>
<FONT color="green">077</FONT>        {<a name="line.77"></a>
<FONT color="green">078</FONT>            return null;<a name="line.78"></a>
<FONT color="green">079</FONT>        }<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        /**<a name="line.81"></a>
<FONT color="green">082</FONT>         * Returns null<a name="line.82"></a>
<FONT color="green">083</FONT>         * @return null<a name="line.83"></a>
<FONT color="green">084</FONT>         * @see Serializer#getWriter()<a name="line.84"></a>
<FONT color="green">085</FONT>         */<a name="line.85"></a>
<FONT color="green">086</FONT>        public Writer getWriter()<a name="line.86"></a>
<FONT color="green">087</FONT>        {<a name="line.87"></a>
<FONT color="green">088</FONT>            return null;<a name="line.88"></a>
<FONT color="green">089</FONT>        }<a name="line.89"></a>
<FONT color="green">090</FONT>    <a name="line.90"></a>
<FONT color="green">091</FONT>        /**<a name="line.91"></a>
<FONT color="green">092</FONT>         * Does nothing.<a name="line.92"></a>
<FONT color="green">093</FONT>         *<a name="line.93"></a>
<FONT color="green">094</FONT>         */<a name="line.94"></a>
<FONT color="green">095</FONT>        public void indent(int n) throws SAXException<a name="line.95"></a>
<FONT color="green">096</FONT>        {<a name="line.96"></a>
<FONT color="green">097</FONT>        }<a name="line.97"></a>
<FONT color="green">098</FONT>    <a name="line.98"></a>
<FONT color="green">099</FONT>        /**<a name="line.99"></a>
<FONT color="green">100</FONT>         * Does nothing.<a name="line.100"></a>
<FONT color="green">101</FONT>         * @see DOMSerializer#serialize(Node)<a name="line.101"></a>
<FONT color="green">102</FONT>         */<a name="line.102"></a>
<FONT color="green">103</FONT>        public void serialize(Node node) throws IOException<a name="line.103"></a>
<FONT color="green">104</FONT>        {<a name="line.104"></a>
<FONT color="green">105</FONT>            return;<a name="line.105"></a>
<FONT color="green">106</FONT>        }<a name="line.106"></a>
<FONT color="green">107</FONT>    <a name="line.107"></a>
<FONT color="green">108</FONT>        /**<a name="line.108"></a>
<FONT color="green">109</FONT>         * Turns special character escaping on/off.<a name="line.109"></a>
<FONT color="green">110</FONT>         *<a name="line.110"></a>
<FONT color="green">111</FONT>         *<a name="line.111"></a>
<FONT color="green">112</FONT>         * @param escape true if escaping is to be set on.<a name="line.112"></a>
<FONT color="green">113</FONT>         *<a name="line.113"></a>
<FONT color="green">114</FONT>         * @see SerializationHandler#setEscaping(boolean)<a name="line.114"></a>
<FONT color="green">115</FONT>         */<a name="line.115"></a>
<FONT color="green">116</FONT>        public boolean setEscaping(boolean escape) throws SAXException<a name="line.116"></a>
<FONT color="green">117</FONT>        {<a name="line.117"></a>
<FONT color="green">118</FONT>            boolean oldEscapeSetting = m_escapeSetting;<a name="line.118"></a>
<FONT color="green">119</FONT>            m_escapeSetting = escape;<a name="line.119"></a>
<FONT color="green">120</FONT>    <a name="line.120"></a>
<FONT color="green">121</FONT>            if (escape) {<a name="line.121"></a>
<FONT color="green">122</FONT>                processingInstruction(Result.PI_ENABLE_OUTPUT_ESCAPING, "");<a name="line.122"></a>
<FONT color="green">123</FONT>            } else {<a name="line.123"></a>
<FONT color="green">124</FONT>                processingInstruction(Result.PI_DISABLE_OUTPUT_ESCAPING, "");<a name="line.124"></a>
<FONT color="green">125</FONT>            }<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>            return oldEscapeSetting;<a name="line.127"></a>
<FONT color="green">128</FONT>        }<a name="line.128"></a>
<FONT color="green">129</FONT>    <a name="line.129"></a>
<FONT color="green">130</FONT>        /**<a name="line.130"></a>
<FONT color="green">131</FONT>         * Does nothing<a name="line.131"></a>
<FONT color="green">132</FONT>         * @param indent the number of spaces to indent per indentation level<a name="line.132"></a>
<FONT color="green">133</FONT>         * (ignored)<a name="line.133"></a>
<FONT color="green">134</FONT>         * @see SerializationHandler#setIndent(boolean)<a name="line.134"></a>
<FONT color="green">135</FONT>         */<a name="line.135"></a>
<FONT color="green">136</FONT>        public void setIndent(boolean indent)<a name="line.136"></a>
<FONT color="green">137</FONT>        {<a name="line.137"></a>
<FONT color="green">138</FONT>        }<a name="line.138"></a>
<FONT color="green">139</FONT>    <a name="line.139"></a>
<FONT color="green">140</FONT>        /**<a name="line.140"></a>
<FONT color="green">141</FONT>         * Does nothing.<a name="line.141"></a>
<FONT color="green">142</FONT>         * @param format this parameter is not used<a name="line.142"></a>
<FONT color="green">143</FONT>         * @see Serializer#setOutputFormat(Properties)<a name="line.143"></a>
<FONT color="green">144</FONT>         */<a name="line.144"></a>
<FONT color="green">145</FONT>        public void setOutputFormat(Properties format)<a name="line.145"></a>
<FONT color="green">146</FONT>        {<a name="line.146"></a>
<FONT color="green">147</FONT>        }<a name="line.147"></a>
<FONT color="green">148</FONT>    <a name="line.148"></a>
<FONT color="green">149</FONT>        /**<a name="line.149"></a>
<FONT color="green">150</FONT>         * Does nothing.<a name="line.150"></a>
<FONT color="green">151</FONT>         * @param output this parameter is ignored<a name="line.151"></a>
<FONT color="green">152</FONT>         * @see Serializer#setOutputStream(OutputStream)<a name="line.152"></a>
<FONT color="green">153</FONT>         */<a name="line.153"></a>
<FONT color="green">154</FONT>        public void setOutputStream(OutputStream output)<a name="line.154"></a>
<FONT color="green">155</FONT>        {<a name="line.155"></a>
<FONT color="green">156</FONT>        }<a name="line.156"></a>
<FONT color="green">157</FONT>    <a name="line.157"></a>
<FONT color="green">158</FONT>    <a name="line.158"></a>
<FONT color="green">159</FONT>        /**<a name="line.159"></a>
<FONT color="green">160</FONT>         * Does nothing.<a name="line.160"></a>
<FONT color="green">161</FONT>         * @param writer this parameter is ignored.<a name="line.161"></a>
<FONT color="green">162</FONT>         * @see Serializer#setWriter(Writer)<a name="line.162"></a>
<FONT color="green">163</FONT>         */<a name="line.163"></a>
<FONT color="green">164</FONT>        public void setWriter(Writer writer)<a name="line.164"></a>
<FONT color="green">165</FONT>        {<a name="line.165"></a>
<FONT color="green">166</FONT>        }<a name="line.166"></a>
<FONT color="green">167</FONT>    <a name="line.167"></a>
<FONT color="green">168</FONT>        /**<a name="line.168"></a>
<FONT color="green">169</FONT>         * @see org.xml.sax.ext.DeclHandler#attributeDecl(String, String, String, String, String)<a name="line.169"></a>
<FONT color="green">170</FONT>         */<a name="line.170"></a>
<FONT color="green">171</FONT>        /**<a name="line.171"></a>
<FONT color="green">172</FONT>         * Does nothing.<a name="line.172"></a>
<FONT color="green">173</FONT>         *<a name="line.173"></a>
<FONT color="green">174</FONT>         * @param eName this parameter is ignored<a name="line.174"></a>
<FONT color="green">175</FONT>         * @param aName this parameter is ignored<a name="line.175"></a>
<FONT color="green">176</FONT>         * @param type this parameter is ignored<a name="line.176"></a>
<FONT color="green">177</FONT>         * @param valueDefault this parameter is ignored<a name="line.177"></a>
<FONT color="green">178</FONT>         * @param value this parameter is ignored<a name="line.178"></a>
<FONT color="green">179</FONT>         * @see org.xml.sax.ext.DeclHandler#attributeDecl(String, String, String,String,String)<a name="line.179"></a>
<FONT color="green">180</FONT>         */    <a name="line.180"></a>
<FONT color="green">181</FONT>        public void attributeDecl(<a name="line.181"></a>
<FONT color="green">182</FONT>            String eName,<a name="line.182"></a>
<FONT color="green">183</FONT>            String aName,<a name="line.183"></a>
<FONT color="green">184</FONT>            String type,<a name="line.184"></a>
<FONT color="green">185</FONT>            String valueDefault,<a name="line.185"></a>
<FONT color="green">186</FONT>            String value)<a name="line.186"></a>
<FONT color="green">187</FONT>            throws SAXException<a name="line.187"></a>
<FONT color="green">188</FONT>        {<a name="line.188"></a>
<FONT color="green">189</FONT>        }<a name="line.189"></a>
<FONT color="green">190</FONT>    <a name="line.190"></a>
<FONT color="green">191</FONT>    <a name="line.191"></a>
<FONT color="green">192</FONT>        /**<a name="line.192"></a>
<FONT color="green">193</FONT>         * Does nothing.<a name="line.193"></a>
<FONT color="green">194</FONT>         * @see org.xml.sax.ext.DeclHandler#elementDecl(String, String)<a name="line.194"></a>
<FONT color="green">195</FONT>         */    <a name="line.195"></a>
<FONT color="green">196</FONT>        public void elementDecl(String name, String model) throws SAXException<a name="line.196"></a>
<FONT color="green">197</FONT>        {<a name="line.197"></a>
<FONT color="green">198</FONT>            return;<a name="line.198"></a>
<FONT color="green">199</FONT>        }<a name="line.199"></a>
<FONT color="green">200</FONT>    <a name="line.200"></a>
<FONT color="green">201</FONT>        /**<a name="line.201"></a>
<FONT color="green">202</FONT>         * @see org.xml.sax.ext.DeclHandler#externalEntityDecl(String, String, String)<a name="line.202"></a>
<FONT color="green">203</FONT>         */<a name="line.203"></a>
<FONT color="green">204</FONT>        public void externalEntityDecl(String arg0, String arg1, String arg2)<a name="line.204"></a>
<FONT color="green">205</FONT>            throws SAXException<a name="line.205"></a>
<FONT color="green">206</FONT>        {<a name="line.206"></a>
<FONT color="green">207</FONT>        }<a name="line.207"></a>
<FONT color="green">208</FONT>    <a name="line.208"></a>
<FONT color="green">209</FONT>        /**<a name="line.209"></a>
<FONT color="green">210</FONT>         * Does nothing.<a name="line.210"></a>
<FONT color="green">211</FONT>         *<a name="line.211"></a>
<FONT color="green">212</FONT>         * @see org.xml.sax.DTDHandler#unparsedEntityDecl<a name="line.212"></a>
<FONT color="green">213</FONT>         */<a name="line.213"></a>
<FONT color="green">214</FONT>        public void internalEntityDecl(String name, String value)<a name="line.214"></a>
<FONT color="green">215</FONT>            throws SAXException<a name="line.215"></a>
<FONT color="green">216</FONT>        {<a name="line.216"></a>
<FONT color="green">217</FONT>        }<a name="line.217"></a>
<FONT color="green">218</FONT>    <a name="line.218"></a>
<FONT color="green">219</FONT>        /**<a name="line.219"></a>
<FONT color="green">220</FONT>         * Receive notification of the end of an element.<a name="line.220"></a>
<FONT color="green">221</FONT>         *<a name="line.221"></a>
<FONT color="green">222</FONT>         * &lt;p&gt;The SAX parser will invoke this method at the end of every<a name="line.222"></a>
<FONT color="green">223</FONT>         * element in the XML document; there will be a corresponding<a name="line.223"></a>
<FONT color="green">224</FONT>         * startElement() event for every endElement() event (even when the<a name="line.224"></a>
<FONT color="green">225</FONT>         * element is empty).&lt;/p&gt;<a name="line.225"></a>
<FONT color="green">226</FONT>         *<a name="line.226"></a>
<FONT color="green">227</FONT>         * &lt;p&gt;If the element name has a namespace prefix, the prefix will<a name="line.227"></a>
<FONT color="green">228</FONT>         * still be attached to the name.&lt;/p&gt;<a name="line.228"></a>
<FONT color="green">229</FONT>         *<a name="line.229"></a>
<FONT color="green">230</FONT>         *<a name="line.230"></a>
<FONT color="green">231</FONT>         * @param uri The Namespace URI, or the empty string if the<a name="line.231"></a>
<FONT color="green">232</FONT>         *        element has no Namespace URI or if Namespace<a name="line.232"></a>
<FONT color="green">233</FONT>         *        processing is not being performed.<a name="line.233"></a>
<FONT color="green">234</FONT>         * @param localName The local name (without prefix), or the<a name="line.234"></a>
<FONT color="green">235</FONT>         *        empty string if Namespace processing is not being<a name="line.235"></a>
<FONT color="green">236</FONT>         *        performed.<a name="line.236"></a>
<FONT color="green">237</FONT>         * @param qName The qualified name (with prefix), or the<a name="line.237"></a>
<FONT color="green">238</FONT>         *        empty string if qualified names are not available.<a name="line.238"></a>
<FONT color="green">239</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.239"></a>
<FONT color="green">240</FONT>         *            wrapping another exception.<a name="line.240"></a>
<FONT color="green">241</FONT>         * @see org.xml.sax.ContentHandler#endElement(String, String, String)<a name="line.241"></a>
<FONT color="green">242</FONT>         */<a name="line.242"></a>
<FONT color="green">243</FONT>        public void endElement(String uri, String localName, String qName)<a name="line.243"></a>
<FONT color="green">244</FONT>            throws SAXException<a name="line.244"></a>
<FONT color="green">245</FONT>        {<a name="line.245"></a>
<FONT color="green">246</FONT>            flushPending();<a name="line.246"></a>
<FONT color="green">247</FONT>            m_saxHandler.endElement(uri, localName, qName);<a name="line.247"></a>
<FONT color="green">248</FONT>            <a name="line.248"></a>
<FONT color="green">249</FONT>            // time to fire off endElement event<a name="line.249"></a>
<FONT color="green">250</FONT>            if (m_tracer != null)<a name="line.250"></a>
<FONT color="green">251</FONT>                super.fireEndElem(qName);<a name="line.251"></a>
<FONT color="green">252</FONT>        }<a name="line.252"></a>
<FONT color="green">253</FONT>    <a name="line.253"></a>
<FONT color="green">254</FONT>        /**<a name="line.254"></a>
<FONT color="green">255</FONT>         * Does nothing.<a name="line.255"></a>
<FONT color="green">256</FONT>         */<a name="line.256"></a>
<FONT color="green">257</FONT>        public void endPrefixMapping(String prefix) throws SAXException<a name="line.257"></a>
<FONT color="green">258</FONT>        {<a name="line.258"></a>
<FONT color="green">259</FONT>        }<a name="line.259"></a>
<FONT color="green">260</FONT>    <a name="line.260"></a>
<FONT color="green">261</FONT>        /**<a name="line.261"></a>
<FONT color="green">262</FONT>         * Does nothing.<a name="line.262"></a>
<FONT color="green">263</FONT>         * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)<a name="line.263"></a>
<FONT color="green">264</FONT>         */<a name="line.264"></a>
<FONT color="green">265</FONT>        public void ignorableWhitespace(char[] ch, int start, int length)<a name="line.265"></a>
<FONT color="green">266</FONT>            throws SAXException<a name="line.266"></a>
<FONT color="green">267</FONT>        {<a name="line.267"></a>
<FONT color="green">268</FONT>        }<a name="line.268"></a>
<FONT color="green">269</FONT>        <a name="line.269"></a>
<FONT color="green">270</FONT>        /**<a name="line.270"></a>
<FONT color="green">271</FONT>         * Receive notification of a processing instruction.<a name="line.271"></a>
<FONT color="green">272</FONT>         *<a name="line.272"></a>
<FONT color="green">273</FONT>         * &lt;p&gt;The Parser will invoke this method once for each processing<a name="line.273"></a>
<FONT color="green">274</FONT>         * instruction found: note that processing instructions may occur<a name="line.274"></a>
<FONT color="green">275</FONT>         * before or after the main document element.&lt;/p&gt;<a name="line.275"></a>
<FONT color="green">276</FONT>         *<a name="line.276"></a>
<FONT color="green">277</FONT>         * &lt;p&gt;A SAX parser should never report an XML declaration (XML 1.0,<a name="line.277"></a>
<FONT color="green">278</FONT>         * section 2.8) or a text declaration (XML 1.0, section 4.3.1)<a name="line.278"></a>
<FONT color="green">279</FONT>         * using this method.&lt;/p&gt;<a name="line.279"></a>
<FONT color="green">280</FONT>         *<a name="line.280"></a>
<FONT color="green">281</FONT>         * @param target The processing instruction target.<a name="line.281"></a>
<FONT color="green">282</FONT>         * @param data The processing instruction data, or null if<a name="line.282"></a>
<FONT color="green">283</FONT>         *        none was supplied.<a name="line.283"></a>
<FONT color="green">284</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.284"></a>
<FONT color="green">285</FONT>         *            wrapping another exception.<a name="line.285"></a>
<FONT color="green">286</FONT>         *<a name="line.286"></a>
<FONT color="green">287</FONT>         * @throws org.xml.sax.SAXException<a name="line.287"></a>
<FONT color="green">288</FONT>         * @see org.xml.sax.ContentHandler#processingInstruction(String, String)<a name="line.288"></a>
<FONT color="green">289</FONT>         */<a name="line.289"></a>
<FONT color="green">290</FONT>        public void processingInstruction(String target, String data)<a name="line.290"></a>
<FONT color="green">291</FONT>            throws SAXException<a name="line.291"></a>
<FONT color="green">292</FONT>        {<a name="line.292"></a>
<FONT color="green">293</FONT>            flushPending();<a name="line.293"></a>
<FONT color="green">294</FONT>            m_saxHandler.processingInstruction(target,data);<a name="line.294"></a>
<FONT color="green">295</FONT>    <a name="line.295"></a>
<FONT color="green">296</FONT>                    // time to fire off processing instruction event<a name="line.296"></a>
<FONT color="green">297</FONT>                    <a name="line.297"></a>
<FONT color="green">298</FONT>            if (m_tracer != null)           <a name="line.298"></a>
<FONT color="green">299</FONT>                        super.fireEscapingEvent(target,data);        <a name="line.299"></a>
<FONT color="green">300</FONT>        }<a name="line.300"></a>
<FONT color="green">301</FONT>    <a name="line.301"></a>
<FONT color="green">302</FONT>        /**<a name="line.302"></a>
<FONT color="green">303</FONT>         * Does nothing.  <a name="line.303"></a>
<FONT color="green">304</FONT>         * @see org.xml.sax.ContentHandler#setDocumentLocator(Locator)<a name="line.304"></a>
<FONT color="green">305</FONT>         */<a name="line.305"></a>
<FONT color="green">306</FONT>        public void setDocumentLocator(Locator arg0)<a name="line.306"></a>
<FONT color="green">307</FONT>        {<a name="line.307"></a>
<FONT color="green">308</FONT>            // do nothing<a name="line.308"></a>
<FONT color="green">309</FONT>        }<a name="line.309"></a>
<FONT color="green">310</FONT>    <a name="line.310"></a>
<FONT color="green">311</FONT>        /**<a name="line.311"></a>
<FONT color="green">312</FONT>         * Does nothing.<a name="line.312"></a>
<FONT color="green">313</FONT>         * @see org.xml.sax.ContentHandler#skippedEntity(String)<a name="line.313"></a>
<FONT color="green">314</FONT>         */<a name="line.314"></a>
<FONT color="green">315</FONT>        public void skippedEntity(String arg0) throws SAXException<a name="line.315"></a>
<FONT color="green">316</FONT>        {<a name="line.316"></a>
<FONT color="green">317</FONT>        }<a name="line.317"></a>
<FONT color="green">318</FONT>    <a name="line.318"></a>
<FONT color="green">319</FONT>        /**<a name="line.319"></a>
<FONT color="green">320</FONT>         * Receive notification of the beginning of an element, although this is a<a name="line.320"></a>
<FONT color="green">321</FONT>         * SAX method additional namespace or attribute information can occur before<a name="line.321"></a>
<FONT color="green">322</FONT>         * or after this call, that is associated with this element.<a name="line.322"></a>
<FONT color="green">323</FONT>         *<a name="line.323"></a>
<FONT color="green">324</FONT>         *<a name="line.324"></a>
<FONT color="green">325</FONT>         * @param namespaceURI The Namespace URI, or the empty string if the<a name="line.325"></a>
<FONT color="green">326</FONT>         *        element has no Namespace URI or if Namespace<a name="line.326"></a>
<FONT color="green">327</FONT>         *        processing is not being performed.<a name="line.327"></a>
<FONT color="green">328</FONT>         * @param localName The local name (without prefix), or the<a name="line.328"></a>
<FONT color="green">329</FONT>         *        empty string if Namespace processing is not being<a name="line.329"></a>
<FONT color="green">330</FONT>         *        performed.<a name="line.330"></a>
<FONT color="green">331</FONT>         * @param qName The elements name.<a name="line.331"></a>
<FONT color="green">332</FONT>         * @param atts The attributes attached to the element, if any.<a name="line.332"></a>
<FONT color="green">333</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.333"></a>
<FONT color="green">334</FONT>         *            wrapping another exception.<a name="line.334"></a>
<FONT color="green">335</FONT>         * @see org.xml.sax.ContentHandler#startElement<a name="line.335"></a>
<FONT color="green">336</FONT>         * @see org.xml.sax.ContentHandler#endElement<a name="line.336"></a>
<FONT color="green">337</FONT>         * @see org.xml.sax.AttributeList<a name="line.337"></a>
<FONT color="green">338</FONT>         *<a name="line.338"></a>
<FONT color="green">339</FONT>         * @throws org.xml.sax.SAXException<a name="line.339"></a>
<FONT color="green">340</FONT>         *<a name="line.340"></a>
<FONT color="green">341</FONT>         * @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes)<a name="line.341"></a>
<FONT color="green">342</FONT>         */<a name="line.342"></a>
<FONT color="green">343</FONT>        public void startElement(<a name="line.343"></a>
<FONT color="green">344</FONT>            String namespaceURI,<a name="line.344"></a>
<FONT color="green">345</FONT>            String localName,<a name="line.345"></a>
<FONT color="green">346</FONT>            String qName,<a name="line.346"></a>
<FONT color="green">347</FONT>            Attributes atts)<a name="line.347"></a>
<FONT color="green">348</FONT>            throws SAXException<a name="line.348"></a>
<FONT color="green">349</FONT>        {<a name="line.349"></a>
<FONT color="green">350</FONT>            flushPending();<a name="line.350"></a>
<FONT color="green">351</FONT>            super.startElement(namespaceURI, localName, qName, atts);<a name="line.351"></a>
<FONT color="green">352</FONT>            m_saxHandler.startElement(namespaceURI, localName, qName, atts);<a name="line.352"></a>
<FONT color="green">353</FONT>            m_elemContext.m_startTagOpen = false;<a name="line.353"></a>
<FONT color="green">354</FONT>        }<a name="line.354"></a>
<FONT color="green">355</FONT>    <a name="line.355"></a>
<FONT color="green">356</FONT>        /**<a name="line.356"></a>
<FONT color="green">357</FONT>         * Receive notification of a comment anywhere in the document. This callback<a name="line.357"></a>
<FONT color="green">358</FONT>         * will be used for comments inside or outside the document element.<a name="line.358"></a>
<FONT color="green">359</FONT>         * @param ch An array holding the characters in the comment.<a name="line.359"></a>
<FONT color="green">360</FONT>         * @param start The starting position in the array.<a name="line.360"></a>
<FONT color="green">361</FONT>         * @param length The number of characters to use from the array.<a name="line.361"></a>
<FONT color="green">362</FONT>         * @throws org.xml.sax.SAXException The application may raise an exception.<a name="line.362"></a>
<FONT color="green">363</FONT>         *<a name="line.363"></a>
<FONT color="green">364</FONT>         * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int)<a name="line.364"></a>
<FONT color="green">365</FONT>         */<a name="line.365"></a>
<FONT color="green">366</FONT>        public void comment(char[] ch, int start, int length) throws SAXException<a name="line.366"></a>
<FONT color="green">367</FONT>        {<a name="line.367"></a>
<FONT color="green">368</FONT>            flushPending();<a name="line.368"></a>
<FONT color="green">369</FONT>            if (m_lexHandler != null)<a name="line.369"></a>
<FONT color="green">370</FONT>                m_lexHandler.comment(ch, start, length);<a name="line.370"></a>
<FONT color="green">371</FONT>    <a name="line.371"></a>
<FONT color="green">372</FONT>            // time to fire off comment event<a name="line.372"></a>
<FONT color="green">373</FONT>            if (m_tracer != null)<a name="line.373"></a>
<FONT color="green">374</FONT>                super.fireCommentEvent(ch, start, length);<a name="line.374"></a>
<FONT color="green">375</FONT>            return;<a name="line.375"></a>
<FONT color="green">376</FONT>        }<a name="line.376"></a>
<FONT color="green">377</FONT>    <a name="line.377"></a>
<FONT color="green">378</FONT>        /**<a name="line.378"></a>
<FONT color="green">379</FONT>         * Does nothing.<a name="line.379"></a>
<FONT color="green">380</FONT>         * @see org.xml.sax.ext.LexicalHandler#endCDATA()<a name="line.380"></a>
<FONT color="green">381</FONT>         */<a name="line.381"></a>
<FONT color="green">382</FONT>        public void endCDATA() throws SAXException<a name="line.382"></a>
<FONT color="green">383</FONT>        {<a name="line.383"></a>
<FONT color="green">384</FONT>            return;<a name="line.384"></a>
<FONT color="green">385</FONT>        }<a name="line.385"></a>
<FONT color="green">386</FONT>    <a name="line.386"></a>
<FONT color="green">387</FONT>        /**<a name="line.387"></a>
<FONT color="green">388</FONT>         * Does nothing.<a name="line.388"></a>
<FONT color="green">389</FONT>         * @see org.xml.sax.ext.LexicalHandler#endDTD()<a name="line.389"></a>
<FONT color="green">390</FONT>         */<a name="line.390"></a>
<FONT color="green">391</FONT>        public void endDTD() throws SAXException<a name="line.391"></a>
<FONT color="green">392</FONT>        {<a name="line.392"></a>
<FONT color="green">393</FONT>        }<a name="line.393"></a>
<FONT color="green">394</FONT>    <a name="line.394"></a>
<FONT color="green">395</FONT>        /**<a name="line.395"></a>
<FONT color="green">396</FONT>         * Does nothing.<a name="line.396"></a>
<FONT color="green">397</FONT>         * @see org.xml.sax.ext.LexicalHandler#startCDATA()<a name="line.397"></a>
<FONT color="green">398</FONT>         */<a name="line.398"></a>
<FONT color="green">399</FONT>        public void startCDATA() throws SAXException<a name="line.399"></a>
<FONT color="green">400</FONT>        {<a name="line.400"></a>
<FONT color="green">401</FONT>        }<a name="line.401"></a>
<FONT color="green">402</FONT>    <a name="line.402"></a>
<FONT color="green">403</FONT>        /**<a name="line.403"></a>
<FONT color="green">404</FONT>         * Does nothing.<a name="line.404"></a>
<FONT color="green">405</FONT>         * @see org.xml.sax.ext.LexicalHandler#startEntity(String)<a name="line.405"></a>
<FONT color="green">406</FONT>         */<a name="line.406"></a>
<FONT color="green">407</FONT>        public void startEntity(String arg0) throws SAXException<a name="line.407"></a>
<FONT color="green">408</FONT>        {<a name="line.408"></a>
<FONT color="green">409</FONT>        }<a name="line.409"></a>
<FONT color="green">410</FONT>    <a name="line.410"></a>
<FONT color="green">411</FONT>        /**<a name="line.411"></a>
<FONT color="green">412</FONT>         * Receive notification of the end of a document.<a name="line.412"></a>
<FONT color="green">413</FONT>         *<a name="line.413"></a>
<FONT color="green">414</FONT>         * &lt;p&gt;The SAX parser will invoke this method only once, and it will<a name="line.414"></a>
<FONT color="green">415</FONT>         * be the last method invoked during the parse.  The parser shall<a name="line.415"></a>
<FONT color="green">416</FONT>         * not invoke this method until it has either abandoned parsing<a name="line.416"></a>
<FONT color="green">417</FONT>         * (because of an unrecoverable error) or reached the end of<a name="line.417"></a>
<FONT color="green">418</FONT>         * input.&lt;/p&gt;<a name="line.418"></a>
<FONT color="green">419</FONT>         *<a name="line.419"></a>
<FONT color="green">420</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.420"></a>
<FONT color="green">421</FONT>         *            wrapping another exception.<a name="line.421"></a>
<FONT color="green">422</FONT>         *<a name="line.422"></a>
<FONT color="green">423</FONT>         * @throws org.xml.sax.SAXException<a name="line.423"></a>
<FONT color="green">424</FONT>         *<a name="line.424"></a>
<FONT color="green">425</FONT>         *<a name="line.425"></a>
<FONT color="green">426</FONT>         */<a name="line.426"></a>
<FONT color="green">427</FONT>        public void endDocument() throws SAXException<a name="line.427"></a>
<FONT color="green">428</FONT>        {<a name="line.428"></a>
<FONT color="green">429</FONT>            flushPending();<a name="line.429"></a>
<FONT color="green">430</FONT>    <a name="line.430"></a>
<FONT color="green">431</FONT>            // Close output document<a name="line.431"></a>
<FONT color="green">432</FONT>            m_saxHandler.endDocument();<a name="line.432"></a>
<FONT color="green">433</FONT>    <a name="line.433"></a>
<FONT color="green">434</FONT>            if (m_tracer != null)<a name="line.434"></a>
<FONT color="green">435</FONT>                super.fireEndDoc();        <a name="line.435"></a>
<FONT color="green">436</FONT>        }<a name="line.436"></a>
<FONT color="green">437</FONT>    <a name="line.437"></a>
<FONT color="green">438</FONT>        /**<a name="line.438"></a>
<FONT color="green">439</FONT>         * This method is called when all the data needed for a call to the<a name="line.439"></a>
<FONT color="green">440</FONT>         * SAX handler's startElement() method has been gathered.<a name="line.440"></a>
<FONT color="green">441</FONT>         */<a name="line.441"></a>
<FONT color="green">442</FONT>        protected void closeStartTag() throws SAXException<a name="line.442"></a>
<FONT color="green">443</FONT>        {<a name="line.443"></a>
<FONT color="green">444</FONT>    <a name="line.444"></a>
<FONT color="green">445</FONT>            m_elemContext.m_startTagOpen = false;<a name="line.445"></a>
<FONT color="green">446</FONT>    <a name="line.446"></a>
<FONT color="green">447</FONT>            // Now is time to send the startElement event<a name="line.447"></a>
<FONT color="green">448</FONT>            m_saxHandler.startElement(<a name="line.448"></a>
<FONT color="green">449</FONT>                EMPTYSTRING,<a name="line.449"></a>
<FONT color="green">450</FONT>                m_elemContext.m_elementName,<a name="line.450"></a>
<FONT color="green">451</FONT>                m_elemContext.m_elementName,<a name="line.451"></a>
<FONT color="green">452</FONT>                m_attributes);<a name="line.452"></a>
<FONT color="green">453</FONT>            m_attributes.clear();       <a name="line.453"></a>
<FONT color="green">454</FONT>    <a name="line.454"></a>
<FONT color="green">455</FONT>        }<a name="line.455"></a>
<FONT color="green">456</FONT>    <a name="line.456"></a>
<FONT color="green">457</FONT>        /**<a name="line.457"></a>
<FONT color="green">458</FONT>         * Do nothing.<a name="line.458"></a>
<FONT color="green">459</FONT>         * @see SerializationHandler#close()<a name="line.459"></a>
<FONT color="green">460</FONT>         */<a name="line.460"></a>
<FONT color="green">461</FONT>        public void close()<a name="line.461"></a>
<FONT color="green">462</FONT>        {<a name="line.462"></a>
<FONT color="green">463</FONT>            return;<a name="line.463"></a>
<FONT color="green">464</FONT>        }<a name="line.464"></a>
<FONT color="green">465</FONT>    <a name="line.465"></a>
<FONT color="green">466</FONT>        /**<a name="line.466"></a>
<FONT color="green">467</FONT>         * Receive notification of character data.<a name="line.467"></a>
<FONT color="green">468</FONT>         *<a name="line.468"></a>
<FONT color="green">469</FONT>         * @param chars The string of characters to process.<a name="line.469"></a>
<FONT color="green">470</FONT>         *<a name="line.470"></a>
<FONT color="green">471</FONT>         * @throws org.xml.sax.SAXException<a name="line.471"></a>
<FONT color="green">472</FONT>         *<a name="line.472"></a>
<FONT color="green">473</FONT>         * @see ExtendedContentHandler#characters(String)<a name="line.473"></a>
<FONT color="green">474</FONT>         */<a name="line.474"></a>
<FONT color="green">475</FONT>        public void characters(final String chars) throws SAXException<a name="line.475"></a>
<FONT color="green">476</FONT>        {<a name="line.476"></a>
<FONT color="green">477</FONT>            final int length = chars.length();<a name="line.477"></a>
<FONT color="green">478</FONT>            if (length &gt; m_charsBuff.length)<a name="line.478"></a>
<FONT color="green">479</FONT>            {<a name="line.479"></a>
<FONT color="green">480</FONT>                m_charsBuff = new char[length * 2 + 1];<a name="line.480"></a>
<FONT color="green">481</FONT>            }<a name="line.481"></a>
<FONT color="green">482</FONT>            chars.getChars(0, length, m_charsBuff, 0);        <a name="line.482"></a>
<FONT color="green">483</FONT>            this.characters(m_charsBuff, 0, length);<a name="line.483"></a>
<FONT color="green">484</FONT>        }<a name="line.484"></a>
<FONT color="green">485</FONT>    <a name="line.485"></a>
<FONT color="green">486</FONT>    <a name="line.486"></a>
<FONT color="green">487</FONT>        /**<a name="line.487"></a>
<FONT color="green">488</FONT>         * A constructor<a name="line.488"></a>
<FONT color="green">489</FONT>         * @param handler the wrapped SAX content handler<a name="line.489"></a>
<FONT color="green">490</FONT>         * @param encoding the encoding of the output HTML document<a name="line.490"></a>
<FONT color="green">491</FONT>         */<a name="line.491"></a>
<FONT color="green">492</FONT>        public ToHTMLSAXHandler(ContentHandler handler, String encoding)<a name="line.492"></a>
<FONT color="green">493</FONT>        {<a name="line.493"></a>
<FONT color="green">494</FONT>            super(handler,encoding);<a name="line.494"></a>
<FONT color="green">495</FONT>        }<a name="line.495"></a>
<FONT color="green">496</FONT>        /**<a name="line.496"></a>
<FONT color="green">497</FONT>         * A constructor.<a name="line.497"></a>
<FONT color="green">498</FONT>         * @param handler the wrapped SAX content handler<a name="line.498"></a>
<FONT color="green">499</FONT>         * @param lex the wrapped lexical handler<a name="line.499"></a>
<FONT color="green">500</FONT>         * @param encoding the encoding of the output HTML document<a name="line.500"></a>
<FONT color="green">501</FONT>         */<a name="line.501"></a>
<FONT color="green">502</FONT>        public ToHTMLSAXHandler(<a name="line.502"></a>
<FONT color="green">503</FONT>            ContentHandler handler,<a name="line.503"></a>
<FONT color="green">504</FONT>            LexicalHandler lex,<a name="line.504"></a>
<FONT color="green">505</FONT>            String encoding)<a name="line.505"></a>
<FONT color="green">506</FONT>        {<a name="line.506"></a>
<FONT color="green">507</FONT>            super(handler,lex,encoding);<a name="line.507"></a>
<FONT color="green">508</FONT>        }<a name="line.508"></a>
<FONT color="green">509</FONT>    <a name="line.509"></a>
<FONT color="green">510</FONT>        /**<a name="line.510"></a>
<FONT color="green">511</FONT>         * An element starts, but attributes are not fully known yet.<a name="line.511"></a>
<FONT color="green">512</FONT>         *<a name="line.512"></a>
<FONT color="green">513</FONT>         * @param elementNamespaceURI the URI of the namespace of the element<a name="line.513"></a>
<FONT color="green">514</FONT>         * (optional)<a name="line.514"></a>
<FONT color="green">515</FONT>         * @param elementLocalName the element name, but without prefix<a name="line.515"></a>
<FONT color="green">516</FONT>         * (optional)<a name="line.516"></a>
<FONT color="green">517</FONT>         * @param elementName the element name, with prefix, if any (required)<a name="line.517"></a>
<FONT color="green">518</FONT>         *<a name="line.518"></a>
<FONT color="green">519</FONT>         * @see ExtendedContentHandler#startElement(String)<a name="line.519"></a>
<FONT color="green">520</FONT>         */<a name="line.520"></a>
<FONT color="green">521</FONT>        public void startElement(<a name="line.521"></a>
<FONT color="green">522</FONT>            String elementNamespaceURI,<a name="line.522"></a>
<FONT color="green">523</FONT>            String elementLocalName,<a name="line.523"></a>
<FONT color="green">524</FONT>            String elementName) throws SAXException<a name="line.524"></a>
<FONT color="green">525</FONT>        {<a name="line.525"></a>
<FONT color="green">526</FONT>    <a name="line.526"></a>
<FONT color="green">527</FONT>            super.startElement(elementNamespaceURI, elementLocalName, elementName);<a name="line.527"></a>
<FONT color="green">528</FONT>    <a name="line.528"></a>
<FONT color="green">529</FONT>            flushPending();<a name="line.529"></a>
<FONT color="green">530</FONT>    <a name="line.530"></a>
<FONT color="green">531</FONT>            // Handle document type declaration (for first element only)<a name="line.531"></a>
<FONT color="green">532</FONT>            if (!m_dtdHandled)<a name="line.532"></a>
<FONT color="green">533</FONT>            {<a name="line.533"></a>
<FONT color="green">534</FONT>                String doctypeSystem = getDoctypeSystem();<a name="line.534"></a>
<FONT color="green">535</FONT>                String doctypePublic = getDoctypePublic();<a name="line.535"></a>
<FONT color="green">536</FONT>                if ((doctypeSystem != null) || (doctypePublic != null)) {<a name="line.536"></a>
<FONT color="green">537</FONT>                    if (m_lexHandler != null)<a name="line.537"></a>
<FONT color="green">538</FONT>                        m_lexHandler.startDTD(<a name="line.538"></a>
<FONT color="green">539</FONT>                            elementName,<a name="line.539"></a>
<FONT color="green">540</FONT>                            doctypePublic,<a name="line.540"></a>
<FONT color="green">541</FONT>                            doctypeSystem);<a name="line.541"></a>
<FONT color="green">542</FONT>                }<a name="line.542"></a>
<FONT color="green">543</FONT>                            m_dtdHandled = true;<a name="line.543"></a>
<FONT color="green">544</FONT>            }<a name="line.544"></a>
<FONT color="green">545</FONT>            m_elemContext = m_elemContext.push(elementNamespaceURI, elementLocalName, elementName);<a name="line.545"></a>
<FONT color="green">546</FONT>        }<a name="line.546"></a>
<FONT color="green">547</FONT>        /**<a name="line.547"></a>
<FONT color="green">548</FONT>         * An element starts, but attributes are not fully known yet.<a name="line.548"></a>
<FONT color="green">549</FONT>         *<a name="line.549"></a>
<FONT color="green">550</FONT>         * @param elementName the element name, with prefix, if any<a name="line.550"></a>
<FONT color="green">551</FONT>         *<a name="line.551"></a>
<FONT color="green">552</FONT>         * @see ExtendedContentHandler#startElement(String)<a name="line.552"></a>
<FONT color="green">553</FONT>         */<a name="line.553"></a>
<FONT color="green">554</FONT>        public void startElement(String elementName) throws SAXException<a name="line.554"></a>
<FONT color="green">555</FONT>        {<a name="line.555"></a>
<FONT color="green">556</FONT>            this.startElement(null,null, elementName);<a name="line.556"></a>
<FONT color="green">557</FONT>        }<a name="line.557"></a>
<FONT color="green">558</FONT>        <a name="line.558"></a>
<FONT color="green">559</FONT>        /**<a name="line.559"></a>
<FONT color="green">560</FONT>         * Receive notification of the end of an element.<a name="line.560"></a>
<FONT color="green">561</FONT>         * @param elementName The element type name<a name="line.561"></a>
<FONT color="green">562</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.562"></a>
<FONT color="green">563</FONT>         *     wrapping another exception.<a name="line.563"></a>
<FONT color="green">564</FONT>         *<a name="line.564"></a>
<FONT color="green">565</FONT>         * @see ExtendedContentHandler#endElement(String)<a name="line.565"></a>
<FONT color="green">566</FONT>         */<a name="line.566"></a>
<FONT color="green">567</FONT>        public void endElement(String elementName) throws SAXException<a name="line.567"></a>
<FONT color="green">568</FONT>        {<a name="line.568"></a>
<FONT color="green">569</FONT>            flushPending();<a name="line.569"></a>
<FONT color="green">570</FONT>            m_saxHandler.endElement(EMPTYSTRING, elementName, elementName);<a name="line.570"></a>
<FONT color="green">571</FONT>    <a name="line.571"></a>
<FONT color="green">572</FONT>            // time to fire off endElement event<a name="line.572"></a>
<FONT color="green">573</FONT>                    if (m_tracer != null)<a name="line.573"></a>
<FONT color="green">574</FONT>                super.fireEndElem(elementName);        <a name="line.574"></a>
<FONT color="green">575</FONT>        }<a name="line.575"></a>
<FONT color="green">576</FONT>    <a name="line.576"></a>
<FONT color="green">577</FONT>        /**<a name="line.577"></a>
<FONT color="green">578</FONT>         * Receive notification of character data.<a name="line.578"></a>
<FONT color="green">579</FONT>         *<a name="line.579"></a>
<FONT color="green">580</FONT>         * &lt;p&gt;The Parser will call this method to report each chunk of<a name="line.580"></a>
<FONT color="green">581</FONT>         * character data.  SAX parsers may return all contiguous character<a name="line.581"></a>
<FONT color="green">582</FONT>         * data in a single chunk, or they may split it into several<a name="line.582"></a>
<FONT color="green">583</FONT>         * chunks; however, all of the characters in any single event<a name="line.583"></a>
<FONT color="green">584</FONT>         * must come from the same external entity, so that the Locator<a name="line.584"></a>
<FONT color="green">585</FONT>         * provides useful information.&lt;/p&gt;<a name="line.585"></a>
<FONT color="green">586</FONT>         *<a name="line.586"></a>
<FONT color="green">587</FONT>         * &lt;p&gt;The application must not attempt to read from the array<a name="line.587"></a>
<FONT color="green">588</FONT>         * outside of the specified range.&lt;/p&gt;<a name="line.588"></a>
<FONT color="green">589</FONT>         *<a name="line.589"></a>
<FONT color="green">590</FONT>         * &lt;p&gt;Note that some parsers will report whitespace using the<a name="line.590"></a>
<FONT color="green">591</FONT>         * ignorableWhitespace() method rather than this one (validating<a name="line.591"></a>
<FONT color="green">592</FONT>         * parsers must do so).&lt;/p&gt;<a name="line.592"></a>
<FONT color="green">593</FONT>         *<a name="line.593"></a>
<FONT color="green">594</FONT>         * @param ch The characters from the XML document.<a name="line.594"></a>
<FONT color="green">595</FONT>         * @param off The start position in the array.<a name="line.595"></a>
<FONT color="green">596</FONT>         * @param len The number of characters to read from the array.<a name="line.596"></a>
<FONT color="green">597</FONT>         * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.597"></a>
<FONT color="green">598</FONT>         *            wrapping another exception.<a name="line.598"></a>
<FONT color="green">599</FONT>         * @see #ignorableWhitespace<a name="line.599"></a>
<FONT color="green">600</FONT>         * @see org.xml.sax.Locator<a name="line.600"></a>
<FONT color="green">601</FONT>         *<a name="line.601"></a>
<FONT color="green">602</FONT>         * @throws org.xml.sax.SAXException<a name="line.602"></a>
<FONT color="green">603</FONT>         *<a name="line.603"></a>
<FONT color="green">604</FONT>         * @see org.xml.sax.ContentHandler#characters(char[], int, int)<a name="line.604"></a>
<FONT color="green">605</FONT>         */<a name="line.605"></a>
<FONT color="green">606</FONT>        public void characters(char[] ch, int off, int len) throws SAXException<a name="line.606"></a>
<FONT color="green">607</FONT>        {<a name="line.607"></a>
<FONT color="green">608</FONT>    <a name="line.608"></a>
<FONT color="green">609</FONT>            flushPending();<a name="line.609"></a>
<FONT color="green">610</FONT>            m_saxHandler.characters(ch, off, len);<a name="line.610"></a>
<FONT color="green">611</FONT>    <a name="line.611"></a>
<FONT color="green">612</FONT>            // time to fire off characters event<a name="line.612"></a>
<FONT color="green">613</FONT>                    if (m_tracer != null)<a name="line.613"></a>
<FONT color="green">614</FONT>                super.fireCharEvent(ch, off, len);        <a name="line.614"></a>
<FONT color="green">615</FONT>        }<a name="line.615"></a>
<FONT color="green">616</FONT>    <a name="line.616"></a>
<FONT color="green">617</FONT>        /**<a name="line.617"></a>
<FONT color="green">618</FONT>         * This method flushes any pending events, which can be startDocument()<a name="line.618"></a>
<FONT color="green">619</FONT>         * closing the opening tag of an element, or closing an open CDATA section.<a name="line.619"></a>
<FONT color="green">620</FONT>         */<a name="line.620"></a>
<FONT color="green">621</FONT>        public void flushPending() throws SAXException<a name="line.621"></a>
<FONT color="green">622</FONT>        {<a name="line.622"></a>
<FONT color="green">623</FONT>                    if (m_needToCallStartDocument)<a name="line.623"></a>
<FONT color="green">624</FONT>                    {<a name="line.624"></a>
<FONT color="green">625</FONT>                            startDocumentInternal();<a name="line.625"></a>
<FONT color="green">626</FONT>                            m_needToCallStartDocument = false;<a name="line.626"></a>
<FONT color="green">627</FONT>                    }               <a name="line.627"></a>
<FONT color="green">628</FONT>            // Close any open element<a name="line.628"></a>
<FONT color="green">629</FONT>            if (m_elemContext.m_startTagOpen)<a name="line.629"></a>
<FONT color="green">630</FONT>            {<a name="line.630"></a>
<FONT color="green">631</FONT>                closeStartTag();<a name="line.631"></a>
<FONT color="green">632</FONT>                m_elemContext.m_startTagOpen = false;<a name="line.632"></a>
<FONT color="green">633</FONT>            }<a name="line.633"></a>
<FONT color="green">634</FONT>        }<a name="line.634"></a>
<FONT color="green">635</FONT>        /**<a name="line.635"></a>
<FONT color="green">636</FONT>         * Handle a prefix/uri mapping, which is associated with a startElement()<a name="line.636"></a>
<FONT color="green">637</FONT>         * that is soon to follow. Need to close any open start tag to make<a name="line.637"></a>
<FONT color="green">638</FONT>         * sure than any name space attributes due to this event are associated wih<a name="line.638"></a>
<FONT color="green">639</FONT>         * the up comming element, not the current one.<a name="line.639"></a>
<FONT color="green">640</FONT>         * @see ExtendedContentHandler#startPrefixMapping<a name="line.640"></a>
<FONT color="green">641</FONT>         *<a name="line.641"></a>
<FONT color="green">642</FONT>         * @param prefix The Namespace prefix being declared.<a name="line.642"></a>
<FONT color="green">643</FONT>         * @param uri The Namespace URI the prefix is mapped to.<a name="line.643"></a>
<FONT color="green">644</FONT>         * @param shouldFlush true if any open tags need to be closed first, this<a name="line.644"></a>
<FONT color="green">645</FONT>         * will impact which element the mapping applies to (open parent, or its up<a name="line.645"></a>
<FONT color="green">646</FONT>         * comming child)<a name="line.646"></a>
<FONT color="green">647</FONT>         * @return returns true if the call made a change to the current<a name="line.647"></a>
<FONT color="green">648</FONT>         * namespace information, false if it did not change anything, e.g. if the<a name="line.648"></a>
<FONT color="green">649</FONT>         * prefix/namespace mapping was already in scope from before.<a name="line.649"></a>
<FONT color="green">650</FONT>         *<a name="line.650"></a>
<FONT color="green">651</FONT>         * @throws org.xml.sax.SAXException The client may throw<a name="line.651"></a>
<FONT color="green">652</FONT>         *            an exception during processing.<a name="line.652"></a>
<FONT color="green">653</FONT>         */    <a name="line.653"></a>
<FONT color="green">654</FONT>        public boolean startPrefixMapping(<a name="line.654"></a>
<FONT color="green">655</FONT>            String prefix,<a name="line.655"></a>
<FONT color="green">656</FONT>            String uri,<a name="line.656"></a>
<FONT color="green">657</FONT>            boolean shouldFlush)<a name="line.657"></a>
<FONT color="green">658</FONT>            throws SAXException<a name="line.658"></a>
<FONT color="green">659</FONT>        {<a name="line.659"></a>
<FONT color="green">660</FONT>            // no namespace support for HTML<a name="line.660"></a>
<FONT color="green">661</FONT>            if (shouldFlush) <a name="line.661"></a>
<FONT color="green">662</FONT>                flushPending();   <a name="line.662"></a>
<FONT color="green">663</FONT>            m_saxHandler.startPrefixMapping(prefix,uri);<a name="line.663"></a>
<FONT color="green">664</FONT>            return false;<a name="line.664"></a>
<FONT color="green">665</FONT>        }<a name="line.665"></a>
<FONT color="green">666</FONT>    <a name="line.666"></a>
<FONT color="green">667</FONT>        /**<a name="line.667"></a>
<FONT color="green">668</FONT>         * Begin the scope of a prefix-URI Namespace mapping<a name="line.668"></a>
<FONT color="green">669</FONT>         * just before another element is about to start.<a name="line.669"></a>
<FONT color="green">670</FONT>         * This call will close any open tags so that the prefix mapping<a name="line.670"></a>
<FONT color="green">671</FONT>         * will not apply to the current element, but the up comming child.<a name="line.671"></a>
<FONT color="green">672</FONT>         *<a name="line.672"></a>
<FONT color="green">673</FONT>         * @see org.xml.sax.ContentHandler#startPrefixMapping<a name="line.673"></a>
<FONT color="green">674</FONT>         *<a name="line.674"></a>
<FONT color="green">675</FONT>         * @param prefix The Namespace prefix being declared.<a name="line.675"></a>
<FONT color="green">676</FONT>         * @param uri The Namespace URI the prefix is mapped to.<a name="line.676"></a>
<FONT color="green">677</FONT>         *<a name="line.677"></a>
<FONT color="green">678</FONT>         * @throws org.xml.sax.SAXException The client may throw<a name="line.678"></a>
<FONT color="green">679</FONT>         *            an exception during processing.<a name="line.679"></a>
<FONT color="green">680</FONT>         *<a name="line.680"></a>
<FONT color="green">681</FONT>         */<a name="line.681"></a>
<FONT color="green">682</FONT>        public void startPrefixMapping(String prefix, String uri)<a name="line.682"></a>
<FONT color="green">683</FONT>            throws org.xml.sax.SAXException<a name="line.683"></a>
<FONT color="green">684</FONT>        {<a name="line.684"></a>
<FONT color="green">685</FONT>            startPrefixMapping(prefix,uri,true);        <a name="line.685"></a>
<FONT color="green">686</FONT>        }<a name="line.686"></a>
<FONT color="green">687</FONT>    <a name="line.687"></a>
<FONT color="green">688</FONT>        /**<a name="line.688"></a>
<FONT color="green">689</FONT>         * This method is used when a prefix/uri namespace mapping<a name="line.689"></a>
<FONT color="green">690</FONT>         * is indicated after the element was started with a<a name="line.690"></a>
<FONT color="green">691</FONT>         * startElement() and before and endElement().<a name="line.691"></a>
<FONT color="green">692</FONT>         * startPrefixMapping(prefix,uri) would be used before the<a name="line.692"></a>
<FONT color="green">693</FONT>         * startElement() call.<a name="line.693"></a>
<FONT color="green">694</FONT>         * @param prefix the prefix associated with the given URI.<a name="line.694"></a>
<FONT color="green">695</FONT>         * @param uri the URI of the namespace<a name="line.695"></a>
<FONT color="green">696</FONT>         *<a name="line.696"></a>
<FONT color="green">697</FONT>         * @see ExtendedContentHandler#namespaceAfterStartElement(String, String)<a name="line.697"></a>
<FONT color="green">698</FONT>         */<a name="line.698"></a>
<FONT color="green">699</FONT>        public void namespaceAfterStartElement(<a name="line.699"></a>
<FONT color="green">700</FONT>            final String prefix,<a name="line.700"></a>
<FONT color="green">701</FONT>            final String uri)<a name="line.701"></a>
<FONT color="green">702</FONT>            throws SAXException<a name="line.702"></a>
<FONT color="green">703</FONT>        {<a name="line.703"></a>
<FONT color="green">704</FONT>            // hack for XSLTC with finding URI for default namespace<a name="line.704"></a>
<FONT color="green">705</FONT>            if (m_elemContext.m_elementURI == null)<a name="line.705"></a>
<FONT color="green">706</FONT>            {<a name="line.706"></a>
<FONT color="green">707</FONT>                String prefix1 = getPrefixPart(m_elemContext.m_elementName);<a name="line.707"></a>
<FONT color="green">708</FONT>                if (prefix1 == null &amp;&amp; EMPTYSTRING.equals(prefix))<a name="line.708"></a>
<FONT color="green">709</FONT>                {<a name="line.709"></a>
<FONT color="green">710</FONT>                    // the elements URI is not known yet, and it<a name="line.710"></a>
<FONT color="green">711</FONT>                    // doesn't have a prefix, and we are currently<a name="line.711"></a>
<FONT color="green">712</FONT>                    // setting the uri for prefix "", so we have<a name="line.712"></a>
<FONT color="green">713</FONT>                    // the uri for the element... lets remember it<a name="line.713"></a>
<FONT color="green">714</FONT>                    m_elemContext.m_elementURI = uri;<a name="line.714"></a>
<FONT color="green">715</FONT>                }<a name="line.715"></a>
<FONT color="green">716</FONT>            }       <a name="line.716"></a>
<FONT color="green">717</FONT>            startPrefixMapping(prefix,uri,false);<a name="line.717"></a>
<FONT color="green">718</FONT>        }<a name="line.718"></a>
<FONT color="green">719</FONT>        <a name="line.719"></a>
<FONT color="green">720</FONT>        /**<a name="line.720"></a>
<FONT color="green">721</FONT>         * Try's to reset the super class and reset this class for <a name="line.721"></a>
<FONT color="green">722</FONT>         * re-use, so that you don't need to create a new serializer <a name="line.722"></a>
<FONT color="green">723</FONT>         * (mostly for performance reasons).<a name="line.723"></a>
<FONT color="green">724</FONT>         * <a name="line.724"></a>
<FONT color="green">725</FONT>         * @return true if the class was successfuly reset.<a name="line.725"></a>
<FONT color="green">726</FONT>         * @see Serializer#reset()<a name="line.726"></a>
<FONT color="green">727</FONT>         */<a name="line.727"></a>
<FONT color="green">728</FONT>        public boolean reset()<a name="line.728"></a>
<FONT color="green">729</FONT>        {<a name="line.729"></a>
<FONT color="green">730</FONT>            boolean wasReset = false;<a name="line.730"></a>
<FONT color="green">731</FONT>            if (super.reset())<a name="line.731"></a>
<FONT color="green">732</FONT>            {<a name="line.732"></a>
<FONT color="green">733</FONT>                resetToHTMLSAXHandler();<a name="line.733"></a>
<FONT color="green">734</FONT>                wasReset = true;<a name="line.734"></a>
<FONT color="green">735</FONT>            }<a name="line.735"></a>
<FONT color="green">736</FONT>            return wasReset;<a name="line.736"></a>
<FONT color="green">737</FONT>        }<a name="line.737"></a>
<FONT color="green">738</FONT>        <a name="line.738"></a>
<FONT color="green">739</FONT>        /**<a name="line.739"></a>
<FONT color="green">740</FONT>         * Reset all of the fields owned by ToHTMLSAXHandler class<a name="line.740"></a>
<FONT color="green">741</FONT>         *<a name="line.741"></a>
<FONT color="green">742</FONT>         */<a name="line.742"></a>
<FONT color="green">743</FONT>        private void resetToHTMLSAXHandler()<a name="line.743"></a>
<FONT color="green">744</FONT>        {<a name="line.744"></a>
<FONT color="green">745</FONT>            this.m_dtdHandled = false;<a name="line.745"></a>
<FONT color="green">746</FONT>            this.m_escapeSetting = true;<a name="line.746"></a>
<FONT color="green">747</FONT>        }  <a name="line.747"></a>
<FONT color="green">748</FONT>    }<a name="line.748"></a>




























































</PRE>
</BODY>
</HTML>
