<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: StylesheetHandler.java 1225754 2011-12-30 05:31:15Z mrglavas $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.processor;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Stack;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import javax.xml.transform.ErrorListener;<a name="line.25"></a>
<FONT color="green">026</FONT>    import javax.xml.transform.Source;<a name="line.26"></a>
<FONT color="green">027</FONT>    import javax.xml.transform.SourceLocator;<a name="line.27"></a>
<FONT color="green">028</FONT>    import javax.xml.transform.Templates;<a name="line.28"></a>
<FONT color="green">029</FONT>    import javax.xml.transform.TransformerConfigurationException;<a name="line.29"></a>
<FONT color="green">030</FONT>    import javax.xml.transform.TransformerException;<a name="line.30"></a>
<FONT color="green">031</FONT>    import javax.xml.transform.sax.TemplatesHandler;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xalan.extensions.ExpressionVisitor;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.xalan.res.XSLMessages;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.xalan.res.XSLTErrorResources;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.xalan.templates.Constants;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.xalan.templates.ElemForEach;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.xalan.templates.ElemTemplateElement;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.xalan.templates.Stylesheet;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.xalan.templates.StylesheetRoot;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.xml.utils.BoolStack;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.xml.utils.NamespaceSupport2;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.xml.utils.NodeConsumer;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.xml.utils.PrefixResolver;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.xml.utils.SAXSourceLocator;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.xml.utils.XMLCharacterRecognizer;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.xpath.XPath;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.xpath.compiler.FunctionTable;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.w3c.dom.Node;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.xml.sax.Attributes;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.xml.sax.InputSource;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.xml.sax.Locator;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.xml.sax.helpers.DefaultHandler;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.xml.sax.helpers.NamespaceSupport;<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>     * Initializes and processes a stylesheet via SAX events.<a name="line.57"></a>
<FONT color="green">058</FONT>     * This class acts as essentially a state machine, maintaining<a name="line.58"></a>
<FONT color="green">059</FONT>     * a ContentHandler stack, and pushing appropriate content<a name="line.59"></a>
<FONT color="green">060</FONT>     * handlers as parse events occur.<a name="line.60"></a>
<FONT color="green">061</FONT>     * @xsl.usage advanced<a name="line.61"></a>
<FONT color="green">062</FONT>     */<a name="line.62"></a>
<FONT color="green">063</FONT>    public class StylesheetHandler extends DefaultHandler<a name="line.63"></a>
<FONT color="green">064</FONT>            implements TemplatesHandler, PrefixResolver, NodeConsumer<a name="line.64"></a>
<FONT color="green">065</FONT>    {<a name="line.65"></a>
<FONT color="green">066</FONT>    <a name="line.66"></a>
<FONT color="green">067</FONT>    <a name="line.67"></a>
<FONT color="green">068</FONT>      /**<a name="line.68"></a>
<FONT color="green">069</FONT>       * The function table of XPath and XSLT;<a name="line.69"></a>
<FONT color="green">070</FONT>       */<a name="line.70"></a>
<FONT color="green">071</FONT>      private FunctionTable m_funcTable = new FunctionTable();<a name="line.71"></a>
<FONT color="green">072</FONT>      <a name="line.72"></a>
<FONT color="green">073</FONT>      /**<a name="line.73"></a>
<FONT color="green">074</FONT>       * The flag for the setting of the optimize feature;<a name="line.74"></a>
<FONT color="green">075</FONT>       */<a name="line.75"></a>
<FONT color="green">076</FONT>      private boolean m_optimize = true;<a name="line.76"></a>
<FONT color="green">077</FONT>      <a name="line.77"></a>
<FONT color="green">078</FONT>      /**<a name="line.78"></a>
<FONT color="green">079</FONT>       * The flag for the setting of the incremental feature;<a name="line.79"></a>
<FONT color="green">080</FONT>       */<a name="line.80"></a>
<FONT color="green">081</FONT>      private boolean m_incremental = false;<a name="line.81"></a>
<FONT color="green">082</FONT>      <a name="line.82"></a>
<FONT color="green">083</FONT>      /**<a name="line.83"></a>
<FONT color="green">084</FONT>       * The flag for the setting of the source_location feature;<a name="line.84"></a>
<FONT color="green">085</FONT>       */<a name="line.85"></a>
<FONT color="green">086</FONT>      private boolean m_source_location = false;<a name="line.86"></a>
<FONT color="green">087</FONT>      <a name="line.87"></a>
<FONT color="green">088</FONT>      /**<a name="line.88"></a>
<FONT color="green">089</FONT>       * Create a StylesheetHandler object, creating a root stylesheet<a name="line.89"></a>
<FONT color="green">090</FONT>       * as the target.<a name="line.90"></a>
<FONT color="green">091</FONT>       *<a name="line.91"></a>
<FONT color="green">092</FONT>       * @param processor non-null reference to the transformer factory that owns this handler.<a name="line.92"></a>
<FONT color="green">093</FONT>       *<a name="line.93"></a>
<FONT color="green">094</FONT>       * @throws TransformerConfigurationException if a StylesheetRoot<a name="line.94"></a>
<FONT color="green">095</FONT>       * can not be constructed for some reason.<a name="line.95"></a>
<FONT color="green">096</FONT>       */<a name="line.96"></a>
<FONT color="green">097</FONT>      public StylesheetHandler(TransformerFactoryImpl processor)<a name="line.97"></a>
<FONT color="green">098</FONT>              throws TransformerConfigurationException<a name="line.98"></a>
<FONT color="green">099</FONT>      {<a name="line.99"></a>
<FONT color="green">100</FONT>        Class func = org.apache.xalan.templates.FuncDocument.class;<a name="line.100"></a>
<FONT color="green">101</FONT>        m_funcTable.installFunction("document", func);<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>        // func = new org.apache.xalan.templates.FuncKey();<a name="line.103"></a>
<FONT color="green">104</FONT>        // FunctionTable.installFunction("key", func);<a name="line.104"></a>
<FONT color="green">105</FONT>        func = org.apache.xalan.templates.FuncFormatNumb.class;<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>        m_funcTable.installFunction("format-number", func);<a name="line.107"></a>
<FONT color="green">108</FONT>    <a name="line.108"></a>
<FONT color="green">109</FONT>        m_optimize =((Boolean) processor.getAttribute(<a name="line.109"></a>
<FONT color="green">110</FONT>                TransformerFactoryImpl.FEATURE_OPTIMIZE)).booleanValue();<a name="line.110"></a>
<FONT color="green">111</FONT>        m_incremental = ((Boolean) processor.getAttribute(<a name="line.111"></a>
<FONT color="green">112</FONT>                TransformerFactoryImpl.FEATURE_INCREMENTAL)).booleanValue();<a name="line.112"></a>
<FONT color="green">113</FONT>        m_source_location = ((Boolean) processor.getAttribute(<a name="line.113"></a>
<FONT color="green">114</FONT>                TransformerFactoryImpl.FEATURE_SOURCE_LOCATION)).booleanValue();<a name="line.114"></a>
<FONT color="green">115</FONT>        // m_schema = new XSLTSchema();<a name="line.115"></a>
<FONT color="green">116</FONT>        init(processor);<a name="line.116"></a>
<FONT color="green">117</FONT>        <a name="line.117"></a>
<FONT color="green">118</FONT>      }<a name="line.118"></a>
<FONT color="green">119</FONT>    <a name="line.119"></a>
<FONT color="green">120</FONT>      /**<a name="line.120"></a>
<FONT color="green">121</FONT>       * Do common initialization.<a name="line.121"></a>
<FONT color="green">122</FONT>       *<a name="line.122"></a>
<FONT color="green">123</FONT>       * @param processor non-null reference to the transformer factory that owns this handler.<a name="line.123"></a>
<FONT color="green">124</FONT>       */<a name="line.124"></a>
<FONT color="green">125</FONT>      void init(TransformerFactoryImpl processor)<a name="line.125"></a>
<FONT color="green">126</FONT>      {<a name="line.126"></a>
<FONT color="green">127</FONT>        m_stylesheetProcessor = processor;<a name="line.127"></a>
<FONT color="green">128</FONT>    <a name="line.128"></a>
<FONT color="green">129</FONT>        // Set the initial content handler.<a name="line.129"></a>
<FONT color="green">130</FONT>        m_processors.push(m_schema.getElementProcessor());<a name="line.130"></a>
<FONT color="green">131</FONT>        this.pushNewNamespaceSupport();<a name="line.131"></a>
<FONT color="green">132</FONT>    <a name="line.132"></a>
<FONT color="green">133</FONT>        // m_includeStack.push(SystemIDResolver.getAbsoluteURI(this.getBaseIdentifier(), null));<a name="line.133"></a>
<FONT color="green">134</FONT>        // initXPath(processor, null);<a name="line.134"></a>
<FONT color="green">135</FONT>      }<a name="line.135"></a>
<FONT color="green">136</FONT>    <a name="line.136"></a>
<FONT color="green">137</FONT>      /**<a name="line.137"></a>
<FONT color="green">138</FONT>       * Process an expression string into an XPath.<a name="line.138"></a>
<FONT color="green">139</FONT>       * Must be public for access by the AVT class.<a name="line.139"></a>
<FONT color="green">140</FONT>       *<a name="line.140"></a>
<FONT color="green">141</FONT>       * @param str A non-null reference to a valid or invalid XPath expression string.<a name="line.141"></a>
<FONT color="green">142</FONT>       *<a name="line.142"></a>
<FONT color="green">143</FONT>       * @return A non-null reference to an XPath object that represents the string argument.<a name="line.143"></a>
<FONT color="green">144</FONT>       *<a name="line.144"></a>
<FONT color="green">145</FONT>       * @throws javax.xml.transform.TransformerException if the expression can not be processed.<a name="line.145"></a>
<FONT color="green">146</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#section-Expressions"&gt;Section 4 Expressions in XSLT Specification&lt;/a&gt;<a name="line.146"></a>
<FONT color="green">147</FONT>       */<a name="line.147"></a>
<FONT color="green">148</FONT>      public XPath createXPath(String str, ElemTemplateElement owningTemplate)<a name="line.148"></a>
<FONT color="green">149</FONT>              throws javax.xml.transform.TransformerException<a name="line.149"></a>
<FONT color="green">150</FONT>      {<a name="line.150"></a>
<FONT color="green">151</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.151"></a>
<FONT color="green">152</FONT>        XPath xpath = new XPath(str, owningTemplate, this, XPath.SELECT, handler, <a name="line.152"></a>
<FONT color="green">153</FONT>                m_funcTable);<a name="line.153"></a>
<FONT color="green">154</FONT>        // Visit the expression, registering namespaces for any extension functions it includes.<a name="line.154"></a>
<FONT color="green">155</FONT>        xpath.callVisitors(xpath, new ExpressionVisitor(getStylesheetRoot()));<a name="line.155"></a>
<FONT color="green">156</FONT>        return xpath;<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>       * Process an expression string into an XPath.<a name="line.160"></a>
<FONT color="green">161</FONT>       *<a name="line.161"></a>
<FONT color="green">162</FONT>       * @param str A non-null reference to a valid or invalid match pattern string.<a name="line.162"></a>
<FONT color="green">163</FONT>       *<a name="line.163"></a>
<FONT color="green">164</FONT>       * @return A non-null reference to an XPath object that represents the string argument.<a name="line.164"></a>
<FONT color="green">165</FONT>       *<a name="line.165"></a>
<FONT color="green">166</FONT>       * @throws javax.xml.transform.TransformerException if the pattern can not be processed.<a name="line.166"></a>
<FONT color="green">167</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#patterns"&gt;Section 5.2 Patterns in XSLT Specification&lt;/a&gt;<a name="line.167"></a>
<FONT color="green">168</FONT>       */<a name="line.168"></a>
<FONT color="green">169</FONT>      XPath createMatchPatternXPath(String str, ElemTemplateElement owningTemplate)<a name="line.169"></a>
<FONT color="green">170</FONT>              throws javax.xml.transform.TransformerException<a name="line.170"></a>
<FONT color="green">171</FONT>      {<a name="line.171"></a>
<FONT color="green">172</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.172"></a>
<FONT color="green">173</FONT>        XPath xpath = new XPath(str, owningTemplate, this, XPath.MATCH, handler, <a name="line.173"></a>
<FONT color="green">174</FONT>            m_funcTable);<a name="line.174"></a>
<FONT color="green">175</FONT>        // Visit the expression, registering namespaces for any extension functions it includes.<a name="line.175"></a>
<FONT color="green">176</FONT>        xpath.callVisitors(xpath, new ExpressionVisitor(getStylesheetRoot()));<a name="line.176"></a>
<FONT color="green">177</FONT>        return xpath;    <a name="line.177"></a>
<FONT color="green">178</FONT>      }<a name="line.178"></a>
<FONT color="green">179</FONT>    <a name="line.179"></a>
<FONT color="green">180</FONT>      /**<a name="line.180"></a>
<FONT color="green">181</FONT>       * Given a namespace, get the corrisponding prefix from the current<a name="line.181"></a>
<FONT color="green">182</FONT>       * namespace support context.<a name="line.182"></a>
<FONT color="green">183</FONT>       *<a name="line.183"></a>
<FONT color="green">184</FONT>       * @param prefix The prefix to look up, which may be an empty string ("") for the default Namespace.<a name="line.184"></a>
<FONT color="green">185</FONT>       *<a name="line.185"></a>
<FONT color="green">186</FONT>       * @return The associated Namespace URI, or null if the prefix<a name="line.186"></a>
<FONT color="green">187</FONT>       *         is undeclared in this context.<a name="line.187"></a>
<FONT color="green">188</FONT>       */<a name="line.188"></a>
<FONT color="green">189</FONT>      public String getNamespaceForPrefix(String prefix)<a name="line.189"></a>
<FONT color="green">190</FONT>      {<a name="line.190"></a>
<FONT color="green">191</FONT>        return this.getNamespaceSupport().getURI(prefix);<a name="line.191"></a>
<FONT color="green">192</FONT>      }<a name="line.192"></a>
<FONT color="green">193</FONT>    <a name="line.193"></a>
<FONT color="green">194</FONT>      /**<a name="line.194"></a>
<FONT color="green">195</FONT>       * Given a namespace, get the corrisponding prefix.  This is here only<a name="line.195"></a>
<FONT color="green">196</FONT>       * to support the {@link org.apache.xml.utils.PrefixResolver} interface,<a name="line.196"></a>
<FONT color="green">197</FONT>       * and will throw an error if invoked on this object.<a name="line.197"></a>
<FONT color="green">198</FONT>       *<a name="line.198"></a>
<FONT color="green">199</FONT>       * @param prefix The prefix to look up, which may be an empty string ("") for the default Namespace.<a name="line.199"></a>
<FONT color="green">200</FONT>       * @param context The node context from which to look up the URI.<a name="line.200"></a>
<FONT color="green">201</FONT>       *<a name="line.201"></a>
<FONT color="green">202</FONT>       * @return The associated Namespace URI, or null if the prefix<a name="line.202"></a>
<FONT color="green">203</FONT>       *         is undeclared in this context.<a name="line.203"></a>
<FONT color="green">204</FONT>       */<a name="line.204"></a>
<FONT color="green">205</FONT>      public String getNamespaceForPrefix(String prefix, org.w3c.dom.Node context)<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>        // Don't need to support this here.  Return the current URI for the prefix,<a name="line.208"></a>
<FONT color="green">209</FONT>        // ignoring the context.<a name="line.209"></a>
<FONT color="green">210</FONT>        assertion(true, "can't process a context node in StylesheetHandler!");<a name="line.210"></a>
<FONT color="green">211</FONT>    <a name="line.211"></a>
<FONT color="green">212</FONT>        return null;<a name="line.212"></a>
<FONT color="green">213</FONT>      }<a name="line.213"></a>
<FONT color="green">214</FONT>    <a name="line.214"></a>
<FONT color="green">215</FONT>      /**<a name="line.215"></a>
<FONT color="green">216</FONT>       * Utility function to see if the stack contains the given URL.<a name="line.216"></a>
<FONT color="green">217</FONT>       *<a name="line.217"></a>
<FONT color="green">218</FONT>       * @param stack non-null reference to a Stack.<a name="line.218"></a>
<FONT color="green">219</FONT>       * @param url URL string on which an equality test will be performed.<a name="line.219"></a>
<FONT color="green">220</FONT>       *<a name="line.220"></a>
<FONT color="green">221</FONT>       * @return true if the stack contains the url argument.<a name="line.221"></a>
<FONT color="green">222</FONT>       */<a name="line.222"></a>
<FONT color="green">223</FONT>      private boolean stackContains(Stack stack, String url)<a name="line.223"></a>
<FONT color="green">224</FONT>      {<a name="line.224"></a>
<FONT color="green">225</FONT>    <a name="line.225"></a>
<FONT color="green">226</FONT>        int n = stack.size();<a name="line.226"></a>
<FONT color="green">227</FONT>        boolean contains = false;<a name="line.227"></a>
<FONT color="green">228</FONT>    <a name="line.228"></a>
<FONT color="green">229</FONT>        for (int i = 0; i &lt; n; i++)<a name="line.229"></a>
<FONT color="green">230</FONT>        {<a name="line.230"></a>
<FONT color="green">231</FONT>          String url2 = (String) stack.elementAt(i);<a name="line.231"></a>
<FONT color="green">232</FONT>    <a name="line.232"></a>
<FONT color="green">233</FONT>          if (url2.equals(url))<a name="line.233"></a>
<FONT color="green">234</FONT>          {<a name="line.234"></a>
<FONT color="green">235</FONT>            contains = true;<a name="line.235"></a>
<FONT color="green">236</FONT>    <a name="line.236"></a>
<FONT color="green">237</FONT>            break;<a name="line.237"></a>
<FONT color="green">238</FONT>          }<a name="line.238"></a>
<FONT color="green">239</FONT>        }<a name="line.239"></a>
<FONT color="green">240</FONT>    <a name="line.240"></a>
<FONT color="green">241</FONT>        return contains;<a name="line.241"></a>
<FONT color="green">242</FONT>      }<a name="line.242"></a>
<FONT color="green">243</FONT>    <a name="line.243"></a>
<FONT color="green">244</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.244"></a>
<FONT color="green">245</FONT>      // Implementation of the TRAX TemplatesBuilder interface.<a name="line.245"></a>
<FONT color="green">246</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.246"></a>
<FONT color="green">247</FONT>    <a name="line.247"></a>
<FONT color="green">248</FONT>      /**<a name="line.248"></a>
<FONT color="green">249</FONT>       * When this object is used as a ContentHandler or ContentHandler, it will<a name="line.249"></a>
<FONT color="green">250</FONT>       * create a Templates object, which the caller can get once<a name="line.250"></a>
<FONT color="green">251</FONT>       * the SAX events have been completed.<a name="line.251"></a>
<FONT color="green">252</FONT>       * @return The stylesheet object that was created during<a name="line.252"></a>
<FONT color="green">253</FONT>       * the SAX event process, or null if no stylesheet has<a name="line.253"></a>
<FONT color="green">254</FONT>       * been created.<a name="line.254"></a>
<FONT color="green">255</FONT>       * <a name="line.255"></a>
<FONT color="green">256</FONT>       * Author &lt;a href="mailto:scott_boag@lotus.com"&gt;Scott Boag&lt;/a&gt;<a name="line.256"></a>
<FONT color="green">257</FONT>       *<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>      public Templates getTemplates()<a name="line.260"></a>
<FONT color="green">261</FONT>      {<a name="line.261"></a>
<FONT color="green">262</FONT>        return getStylesheetRoot();<a name="line.262"></a>
<FONT color="green">263</FONT>      }<a name="line.263"></a>
<FONT color="green">264</FONT>    <a name="line.264"></a>
<FONT color="green">265</FONT>      /**<a name="line.265"></a>
<FONT color="green">266</FONT>       * Set the base ID (URL or system ID) for the stylesheet<a name="line.266"></a>
<FONT color="green">267</FONT>       * created by this builder.  This must be set in order to<a name="line.267"></a>
<FONT color="green">268</FONT>       * resolve relative URLs in the stylesheet.<a name="line.268"></a>
<FONT color="green">269</FONT>       *<a name="line.269"></a>
<FONT color="green">270</FONT>       * @param baseID Base URL for this stylesheet.<a name="line.270"></a>
<FONT color="green">271</FONT>       */<a name="line.271"></a>
<FONT color="green">272</FONT>      public void setSystemId(String baseID)<a name="line.272"></a>
<FONT color="green">273</FONT>      {<a name="line.273"></a>
<FONT color="green">274</FONT>        pushBaseIndentifier(baseID);<a name="line.274"></a>
<FONT color="green">275</FONT>      }<a name="line.275"></a>
<FONT color="green">276</FONT>    <a name="line.276"></a>
<FONT color="green">277</FONT>      /**<a name="line.277"></a>
<FONT color="green">278</FONT>       * Get the base ID (URI or system ID) from where relative<a name="line.278"></a>
<FONT color="green">279</FONT>       * URLs will be resolved.<a name="line.279"></a>
<FONT color="green">280</FONT>       *<a name="line.280"></a>
<FONT color="green">281</FONT>       * @return The systemID that was set with {@link #setSystemId}.<a name="line.281"></a>
<FONT color="green">282</FONT>       */<a name="line.282"></a>
<FONT color="green">283</FONT>      public String getSystemId()<a name="line.283"></a>
<FONT color="green">284</FONT>      {<a name="line.284"></a>
<FONT color="green">285</FONT>        return this.getBaseIdentifier();<a name="line.285"></a>
<FONT color="green">286</FONT>      }<a name="line.286"></a>
<FONT color="green">287</FONT>    <a name="line.287"></a>
<FONT color="green">288</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.288"></a>
<FONT color="green">289</FONT>      // Implementation of the EntityResolver interface.<a name="line.289"></a>
<FONT color="green">290</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.290"></a>
<FONT color="green">291</FONT>    <a name="line.291"></a>
<FONT color="green">292</FONT>      /**<a name="line.292"></a>
<FONT color="green">293</FONT>       * Resolve an external entity.<a name="line.293"></a>
<FONT color="green">294</FONT>       *<a name="line.294"></a>
<FONT color="green">295</FONT>       * @param publicId The public identifer, or null if none is<a name="line.295"></a>
<FONT color="green">296</FONT>       *                 available.<a name="line.296"></a>
<FONT color="green">297</FONT>       * @param systemId The system identifier provided in the XML<a name="line.297"></a>
<FONT color="green">298</FONT>       *                 document.<a name="line.298"></a>
<FONT color="green">299</FONT>       * @return The new input source, or null to require the<a name="line.299"></a>
<FONT color="green">300</FONT>       *         default behaviour.<a name="line.300"></a>
<FONT color="green">301</FONT>       *<a name="line.301"></a>
<FONT color="green">302</FONT>       * @throws org.xml.sax.SAXException if the entity can not be resolved.<a name="line.302"></a>
<FONT color="green">303</FONT>       */<a name="line.303"></a>
<FONT color="green">304</FONT>      public InputSource resolveEntity(String publicId, String systemId)<a name="line.304"></a>
<FONT color="green">305</FONT>              throws org.xml.sax.SAXException<a name="line.305"></a>
<FONT color="green">306</FONT>      {<a name="line.306"></a>
<FONT color="green">307</FONT>        return getCurrentProcessor().resolveEntity(this, publicId, systemId);<a name="line.307"></a>
<FONT color="green">308</FONT>      }<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>      // Implementation of DTDHandler interface.<a name="line.311"></a>
<FONT color="green">312</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.312"></a>
<FONT color="green">313</FONT>    <a name="line.313"></a>
<FONT color="green">314</FONT>      /**<a name="line.314"></a>
<FONT color="green">315</FONT>       * Receive notification of a notation declaration.<a name="line.315"></a>
<FONT color="green">316</FONT>       *<a name="line.316"></a>
<FONT color="green">317</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.317"></a>
<FONT color="green">318</FONT>       * method in a subclass if they wish to keep track of the notations<a name="line.318"></a>
<FONT color="green">319</FONT>       * declared in a document.&lt;/p&gt;<a name="line.319"></a>
<FONT color="green">320</FONT>       *<a name="line.320"></a>
<FONT color="green">321</FONT>       * @param name The notation name.<a name="line.321"></a>
<FONT color="green">322</FONT>       * @param publicId The notation public identifier, or null if not<a name="line.322"></a>
<FONT color="green">323</FONT>       *                 available.<a name="line.323"></a>
<FONT color="green">324</FONT>       * @param systemId The notation system identifier.<a name="line.324"></a>
<FONT color="green">325</FONT>       * @see org.xml.sax.DTDHandler#notationDecl<a name="line.325"></a>
<FONT color="green">326</FONT>       */<a name="line.326"></a>
<FONT color="green">327</FONT>      public void notationDecl(String name, String publicId, String systemId)<a name="line.327"></a>
<FONT color="green">328</FONT>      {<a name="line.328"></a>
<FONT color="green">329</FONT>        getCurrentProcessor().notationDecl(this, name, publicId, systemId);<a name="line.329"></a>
<FONT color="green">330</FONT>      }<a name="line.330"></a>
<FONT color="green">331</FONT>    <a name="line.331"></a>
<FONT color="green">332</FONT>      /**<a name="line.332"></a>
<FONT color="green">333</FONT>       * Receive notification of an unparsed entity declaration.<a name="line.333"></a>
<FONT color="green">334</FONT>       *<a name="line.334"></a>
<FONT color="green">335</FONT>       * @param name The entity name.<a name="line.335"></a>
<FONT color="green">336</FONT>       * @param publicId The entity public identifier, or null if not<a name="line.336"></a>
<FONT color="green">337</FONT>       *                 available.<a name="line.337"></a>
<FONT color="green">338</FONT>       * @param systemId The entity system identifier.<a name="line.338"></a>
<FONT color="green">339</FONT>       * @param notationName The name of the associated notation.<a name="line.339"></a>
<FONT color="green">340</FONT>       * @see org.xml.sax.DTDHandler#unparsedEntityDecl<a name="line.340"></a>
<FONT color="green">341</FONT>       */<a name="line.341"></a>
<FONT color="green">342</FONT>      public void unparsedEntityDecl(String name, String publicId,<a name="line.342"></a>
<FONT color="green">343</FONT>                                     String systemId, String notationName)<a name="line.343"></a>
<FONT color="green">344</FONT>      {<a name="line.344"></a>
<FONT color="green">345</FONT>        getCurrentProcessor().unparsedEntityDecl(this, name, publicId, systemId,<a name="line.345"></a>
<FONT color="green">346</FONT>                                                 notationName);<a name="line.346"></a>
<FONT color="green">347</FONT>      }<a name="line.347"></a>
<FONT color="green">348</FONT>    <a name="line.348"></a>
<FONT color="green">349</FONT>      /**<a name="line.349"></a>
<FONT color="green">350</FONT>       * Given a namespace URI, and a local name or a node type, get the processor<a name="line.350"></a>
<FONT color="green">351</FONT>       * for the element, or return null if not allowed.<a name="line.351"></a>
<FONT color="green">352</FONT>       *<a name="line.352"></a>
<FONT color="green">353</FONT>       * @param uri The Namespace URI, or an empty string.<a name="line.353"></a>
<FONT color="green">354</FONT>       * @param localName The local name (without prefix), or empty string if not namespace processing.<a name="line.354"></a>
<FONT color="green">355</FONT>       * @param rawName The qualified name (with prefix).<a name="line.355"></a>
<FONT color="green">356</FONT>       *<a name="line.356"></a>
<FONT color="green">357</FONT>       * @return A non-null reference to a element processor.<a name="line.357"></a>
<FONT color="green">358</FONT>       *<a name="line.358"></a>
<FONT color="green">359</FONT>       * @throws org.xml.sax.SAXException if the element is not allowed in the<a name="line.359"></a>
<FONT color="green">360</FONT>       * found position in the stylesheet.<a name="line.360"></a>
<FONT color="green">361</FONT>       */<a name="line.361"></a>
<FONT color="green">362</FONT>      XSLTElementProcessor getProcessorFor(<a name="line.362"></a>
<FONT color="green">363</FONT>              String uri, String localName, String rawName)<a name="line.363"></a>
<FONT color="green">364</FONT>                throws org.xml.sax.SAXException<a name="line.364"></a>
<FONT color="green">365</FONT>      {<a name="line.365"></a>
<FONT color="green">366</FONT>    <a name="line.366"></a>
<FONT color="green">367</FONT>        XSLTElementProcessor currentProcessor = getCurrentProcessor();<a name="line.367"></a>
<FONT color="green">368</FONT>        XSLTElementDef def = currentProcessor.getElemDef();<a name="line.368"></a>
<FONT color="green">369</FONT>        XSLTElementProcessor elemProcessor = def.getProcessorFor(uri, localName);<a name="line.369"></a>
<FONT color="green">370</FONT>    <a name="line.370"></a>
<FONT color="green">371</FONT>        if (null == elemProcessor<a name="line.371"></a>
<FONT color="green">372</FONT>                &amp;&amp; !(currentProcessor instanceof ProcessorStylesheetDoc)<a name="line.372"></a>
<FONT color="green">373</FONT>                &amp;&amp; ((null == getStylesheet()<a name="line.373"></a>
<FONT color="green">374</FONT>                    || Double.valueOf(getStylesheet().getVersion()).doubleValue()<a name="line.374"></a>
<FONT color="green">375</FONT>                       &gt; Constants.XSLTVERSUPPORTED) <a name="line.375"></a>
<FONT color="green">376</FONT>                    ||(!uri.equals(Constants.S_XSLNAMESPACEURL) &amp;&amp;<a name="line.376"></a>
<FONT color="green">377</FONT>                                currentProcessor instanceof ProcessorStylesheetElement)<a name="line.377"></a>
<FONT color="green">378</FONT>                    || getElemVersion() &gt; Constants.XSLTVERSUPPORTED<a name="line.378"></a>
<FONT color="green">379</FONT>            ))<a name="line.379"></a>
<FONT color="green">380</FONT>        {<a name="line.380"></a>
<FONT color="green">381</FONT>          elemProcessor = def.getProcessorForUnknown(uri, localName);<a name="line.381"></a>
<FONT color="green">382</FONT>        }<a name="line.382"></a>
<FONT color="green">383</FONT>    <a name="line.383"></a>
<FONT color="green">384</FONT>        if (null == elemProcessor)<a name="line.384"></a>
<FONT color="green">385</FONT>          error(XSLMessages.createMessage(XSLTErrorResources.ER_NOT_ALLOWED_IN_POSITION, new Object[]{rawName}),null);//rawName + " is not allowed in this position in the stylesheet!",<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>        return elemProcessor;<a name="line.388"></a>
<FONT color="green">389</FONT>      }<a name="line.389"></a>
<FONT color="green">390</FONT>    <a name="line.390"></a>
<FONT color="green">391</FONT>      ////////////////////////////////////////////////////////////////////<a name="line.391"></a>
<FONT color="green">392</FONT>      // Implementation of ContentHandler interface.<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>       * Receive a Locator object for document events.<a name="line.396"></a>
<FONT color="green">397</FONT>       * This is called by the parser to push a locator for the<a name="line.397"></a>
<FONT color="green">398</FONT>       * stylesheet being parsed. The stack needs to be popped<a name="line.398"></a>
<FONT color="green">399</FONT>       * after the stylesheet has been parsed. We pop in<a name="line.399"></a>
<FONT color="green">400</FONT>       * popStylesheet.<a name="line.400"></a>
<FONT color="green">401</FONT>       *<a name="line.401"></a>
<FONT color="green">402</FONT>       * @param locator A locator for all SAX document events.<a name="line.402"></a>
<FONT color="green">403</FONT>       * @see org.xml.sax.ContentHandler#setDocumentLocator<a name="line.403"></a>
<FONT color="green">404</FONT>       * @see org.xml.sax.Locator<a name="line.404"></a>
<FONT color="green">405</FONT>       */<a name="line.405"></a>
<FONT color="green">406</FONT>      public void setDocumentLocator(Locator locator)<a name="line.406"></a>
<FONT color="green">407</FONT>      {<a name="line.407"></a>
<FONT color="green">408</FONT>    <a name="line.408"></a>
<FONT color="green">409</FONT>        // System.out.println("pushing locator for: "+locator.getSystemId());<a name="line.409"></a>
<FONT color="green">410</FONT>        m_stylesheetLocatorStack.push(new SAXSourceLocator(locator));<a name="line.410"></a>
<FONT color="green">411</FONT>      }<a name="line.411"></a>
<FONT color="green">412</FONT>    <a name="line.412"></a>
<FONT color="green">413</FONT>      /**<a name="line.413"></a>
<FONT color="green">414</FONT>       * The level of the stylesheet we are at.<a name="line.414"></a>
<FONT color="green">415</FONT>       */<a name="line.415"></a>
<FONT color="green">416</FONT>      private int m_stylesheetLevel = -1;<a name="line.416"></a>
<FONT color="green">417</FONT>    <a name="line.417"></a>
<FONT color="green">418</FONT>      /**<a name="line.418"></a>
<FONT color="green">419</FONT>       * Receive notification of the beginning of the document.<a name="line.419"></a>
<FONT color="green">420</FONT>       *<a name="line.420"></a>
<FONT color="green">421</FONT>       * @see org.xml.sax.ContentHandler#startDocument<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 Any SAX exception, possibly<a name="line.423"></a>
<FONT color="green">424</FONT>       *            wrapping another exception.<a name="line.424"></a>
<FONT color="green">425</FONT>       */<a name="line.425"></a>
<FONT color="green">426</FONT>      public void startDocument() throws org.xml.sax.SAXException<a name="line.426"></a>
<FONT color="green">427</FONT>      {<a name="line.427"></a>
<FONT color="green">428</FONT>        m_stylesheetLevel++;<a name="line.428"></a>
<FONT color="green">429</FONT>        pushSpaceHandling(false);<a name="line.429"></a>
<FONT color="green">430</FONT>      }<a name="line.430"></a>
<FONT color="green">431</FONT>    <a name="line.431"></a>
<FONT color="green">432</FONT>      /** m_parsingComplete becomes true when the top-level stylesheet and all<a name="line.432"></a>
<FONT color="green">433</FONT>       * its included/imported stylesheets have been been fully parsed, as an<a name="line.433"></a>
<FONT color="green">434</FONT>       * indication that composition/optimization/compilation can begin.<a name="line.434"></a>
<FONT color="green">435</FONT>       * @see isStylesheetParsingComplete  */<a name="line.435"></a>
<FONT color="green">436</FONT>      private boolean m_parsingComplete = false;<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>       * Test whether the _last_ endDocument() has been processed.<a name="line.439"></a>
<FONT color="green">440</FONT>       * This is needed as guidance for stylesheet optimization<a name="line.440"></a>
<FONT color="green">441</FONT>       * and compilation engines, which generally don't want to start<a name="line.441"></a>
<FONT color="green">442</FONT>       * until all included and imported stylesheets have been fully<a name="line.442"></a>
<FONT color="green">443</FONT>       * parsed.<a name="line.443"></a>
<FONT color="green">444</FONT>       *<a name="line.444"></a>
<FONT color="green">445</FONT>       * @return true iff the complete stylesheet tree has been built.<a name="line.445"></a>
<FONT color="green">446</FONT>       */<a name="line.446"></a>
<FONT color="green">447</FONT>      public boolean isStylesheetParsingComplete()<a name="line.447"></a>
<FONT color="green">448</FONT>      {<a name="line.448"></a>
<FONT color="green">449</FONT>        return m_parsingComplete;<a name="line.449"></a>
<FONT color="green">450</FONT>      }<a name="line.450"></a>
<FONT color="green">451</FONT>    <a name="line.451"></a>
<FONT color="green">452</FONT>      /**<a name="line.452"></a>
<FONT color="green">453</FONT>       * Receive notification of the end of the document.<a name="line.453"></a>
<FONT color="green">454</FONT>       *<a name="line.454"></a>
<FONT color="green">455</FONT>       * @see org.xml.sax.ContentHandler#endDocument<a name="line.455"></a>
<FONT color="green">456</FONT>       *<a name="line.456"></a>
<FONT color="green">457</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.457"></a>
<FONT color="green">458</FONT>       *            wrapping another exception.<a name="line.458"></a>
<FONT color="green">459</FONT>       */<a name="line.459"></a>
<FONT color="green">460</FONT>      public void endDocument() throws org.xml.sax.SAXException<a name="line.460"></a>
<FONT color="green">461</FONT>      {<a name="line.461"></a>
<FONT color="green">462</FONT>    <a name="line.462"></a>
<FONT color="green">463</FONT>        try<a name="line.463"></a>
<FONT color="green">464</FONT>        {<a name="line.464"></a>
<FONT color="green">465</FONT>          if (null != getStylesheetRoot())<a name="line.465"></a>
<FONT color="green">466</FONT>          {<a name="line.466"></a>
<FONT color="green">467</FONT>            if (0 == m_stylesheetLevel)<a name="line.467"></a>
<FONT color="green">468</FONT>              getStylesheetRoot().recompose();        <a name="line.468"></a>
<FONT color="green">469</FONT>          }<a name="line.469"></a>
<FONT color="green">470</FONT>          else<a name="line.470"></a>
<FONT color="green">471</FONT>            throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_STYLESHEETROOT, null)); //"Did not find the stylesheet root!");<a name="line.471"></a>
<FONT color="green">472</FONT>    <a name="line.472"></a>
<FONT color="green">473</FONT>          XSLTElementProcessor elemProcessor = getCurrentProcessor();<a name="line.473"></a>
<FONT color="green">474</FONT>    <a name="line.474"></a>
<FONT color="green">475</FONT>          if (null != elemProcessor)<a name="line.475"></a>
<FONT color="green">476</FONT>            elemProcessor.startNonText(this);<a name="line.476"></a>
<FONT color="green">477</FONT>    <a name="line.477"></a>
<FONT color="green">478</FONT>          m_stylesheetLevel--;                      <a name="line.478"></a>
<FONT color="green">479</FONT>          <a name="line.479"></a>
<FONT color="green">480</FONT>          popSpaceHandling();<a name="line.480"></a>
<FONT color="green">481</FONT>    <a name="line.481"></a>
<FONT color="green">482</FONT>          // WARNING: This test works only as long as stylesheets are parsed<a name="line.482"></a>
<FONT color="green">483</FONT>          // more or less recursively. If we switch to an iterative "work-list"<a name="line.483"></a>
<FONT color="green">484</FONT>          // model, this will become true prematurely. In that case,<a name="line.484"></a>
<FONT color="green">485</FONT>          // isStylesheetParsingComplete() will have to be adjusted to be aware<a name="line.485"></a>
<FONT color="green">486</FONT>          // of the worklist.<a name="line.486"></a>
<FONT color="green">487</FONT>          m_parsingComplete = (m_stylesheetLevel &lt; 0);<a name="line.487"></a>
<FONT color="green">488</FONT>        }<a name="line.488"></a>
<FONT color="green">489</FONT>        catch (TransformerException te)<a name="line.489"></a>
<FONT color="green">490</FONT>        {<a name="line.490"></a>
<FONT color="green">491</FONT>          throw new org.xml.sax.SAXException(te);<a name="line.491"></a>
<FONT color="green">492</FONT>        }<a name="line.492"></a>
<FONT color="green">493</FONT>      }<a name="line.493"></a>
<FONT color="green">494</FONT>      <a name="line.494"></a>
<FONT color="green">495</FONT>      private java.util.Vector m_prefixMappings = new java.util.Vector();<a name="line.495"></a>
<FONT color="green">496</FONT>    <a name="line.496"></a>
<FONT color="green">497</FONT>      /**<a name="line.497"></a>
<FONT color="green">498</FONT>       * Receive notification of the start of a Namespace mapping.<a name="line.498"></a>
<FONT color="green">499</FONT>       *<a name="line.499"></a>
<FONT color="green">500</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.500"></a>
<FONT color="green">501</FONT>       * method in a subclass to take specific actions at the start of<a name="line.501"></a>
<FONT color="green">502</FONT>       * each element (such as allocating a new tree node or writing<a name="line.502"></a>
<FONT color="green">503</FONT>       * output to a file).&lt;/p&gt;<a name="line.503"></a>
<FONT color="green">504</FONT>       *<a name="line.504"></a>
<FONT color="green">505</FONT>       * @param prefix The Namespace prefix being declared.<a name="line.505"></a>
<FONT color="green">506</FONT>       * @param uri The Namespace URI mapped to the prefix.<a name="line.506"></a>
<FONT color="green">507</FONT>       * @see org.xml.sax.ContentHandler#startPrefixMapping<a name="line.507"></a>
<FONT color="green">508</FONT>       *<a name="line.508"></a>
<FONT color="green">509</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.509"></a>
<FONT color="green">510</FONT>       *            wrapping another exception.<a name="line.510"></a>
<FONT color="green">511</FONT>       */<a name="line.511"></a>
<FONT color="green">512</FONT>      public void startPrefixMapping(String prefix, String uri)<a name="line.512"></a>
<FONT color="green">513</FONT>              throws org.xml.sax.SAXException<a name="line.513"></a>
<FONT color="green">514</FONT>      {<a name="line.514"></a>
<FONT color="green">515</FONT>    <a name="line.515"></a>
<FONT color="green">516</FONT>        // m_nsSupport.pushContext();<a name="line.516"></a>
<FONT color="green">517</FONT>        // this.getNamespaceSupport().declarePrefix(prefix, uri);<a name="line.517"></a>
<FONT color="green">518</FONT>        //m_prefixMappings.add(prefix); // JDK 1.2+ only -sc<a name="line.518"></a>
<FONT color="green">519</FONT>        //m_prefixMappings.add(uri); // JDK 1.2+ only -sc<a name="line.519"></a>
<FONT color="green">520</FONT>        m_prefixMappings.addElement(prefix); // JDK 1.1.x compat -sc<a name="line.520"></a>
<FONT color="green">521</FONT>        m_prefixMappings.addElement(uri); // JDK 1.1.x compat -sc<a name="line.521"></a>
<FONT color="green">522</FONT>      }<a name="line.522"></a>
<FONT color="green">523</FONT>    <a name="line.523"></a>
<FONT color="green">524</FONT>      /**<a name="line.524"></a>
<FONT color="green">525</FONT>       * Receive notification of the end of a Namespace mapping.<a name="line.525"></a>
<FONT color="green">526</FONT>       *<a name="line.526"></a>
<FONT color="green">527</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.527"></a>
<FONT color="green">528</FONT>       * method in a subclass to take specific actions at the start of<a name="line.528"></a>
<FONT color="green">529</FONT>       * each element (such as allocating a new tree node or writing<a name="line.529"></a>
<FONT color="green">530</FONT>       * output to a file).&lt;/p&gt;<a name="line.530"></a>
<FONT color="green">531</FONT>       *<a name="line.531"></a>
<FONT color="green">532</FONT>       * @param prefix The Namespace prefix being declared.<a name="line.532"></a>
<FONT color="green">533</FONT>       * @see org.xml.sax.ContentHandler#endPrefixMapping<a name="line.533"></a>
<FONT color="green">534</FONT>       *<a name="line.534"></a>
<FONT color="green">535</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.535"></a>
<FONT color="green">536</FONT>       *            wrapping another exception.<a name="line.536"></a>
<FONT color="green">537</FONT>       */<a name="line.537"></a>
<FONT color="green">538</FONT>      public void endPrefixMapping(String prefix) throws org.xml.sax.SAXException<a name="line.538"></a>
<FONT color="green">539</FONT>      {<a name="line.539"></a>
<FONT color="green">540</FONT>    <a name="line.540"></a>
<FONT color="green">541</FONT>        // m_nsSupport.popContext();<a name="line.541"></a>
<FONT color="green">542</FONT>      }<a name="line.542"></a>
<FONT color="green">543</FONT>    <a name="line.543"></a>
<FONT color="green">544</FONT>      /**<a name="line.544"></a>
<FONT color="green">545</FONT>       * Flush the characters buffer.<a name="line.545"></a>
<FONT color="green">546</FONT>       *<a name="line.546"></a>
<FONT color="green">547</FONT>       * @throws org.xml.sax.SAXException<a name="line.547"></a>
<FONT color="green">548</FONT>       */<a name="line.548"></a>
<FONT color="green">549</FONT>      private void flushCharacters() throws org.xml.sax.SAXException<a name="line.549"></a>
<FONT color="green">550</FONT>      {<a name="line.550"></a>
<FONT color="green">551</FONT>    <a name="line.551"></a>
<FONT color="green">552</FONT>        XSLTElementProcessor elemProcessor = getCurrentProcessor();<a name="line.552"></a>
<FONT color="green">553</FONT>    <a name="line.553"></a>
<FONT color="green">554</FONT>        if (null != elemProcessor)<a name="line.554"></a>
<FONT color="green">555</FONT>          elemProcessor.startNonText(this);<a name="line.555"></a>
<FONT color="green">556</FONT>      }<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>       * Receive notification of the start of an element.<a name="line.559"></a>
<FONT color="green">560</FONT>       *<a name="line.560"></a>
<FONT color="green">561</FONT>       * @param uri The Namespace URI, or an empty string.<a name="line.561"></a>
<FONT color="green">562</FONT>       * @param localName The local name (without prefix), or empty string if not namespace processing.<a name="line.562"></a>
<FONT color="green">563</FONT>       * @param rawName The qualified name (with prefix).<a name="line.563"></a>
<FONT color="green">564</FONT>       * @param attributes The specified or defaulted attributes.<a name="line.564"></a>
<FONT color="green">565</FONT>       *<a name="line.565"></a>
<FONT color="green">566</FONT>       * @throws org.xml.sax.SAXException<a name="line.566"></a>
<FONT color="green">567</FONT>       */<a name="line.567"></a>
<FONT color="green">568</FONT>      public void startElement(<a name="line.568"></a>
<FONT color="green">569</FONT>              String uri, String localName, String rawName, Attributes attributes)<a name="line.569"></a>
<FONT color="green">570</FONT>                throws org.xml.sax.SAXException<a name="line.570"></a>
<FONT color="green">571</FONT>      {<a name="line.571"></a>
<FONT color="green">572</FONT>        NamespaceSupport nssupport = this.getNamespaceSupport();<a name="line.572"></a>
<FONT color="green">573</FONT>        nssupport.pushContext();<a name="line.573"></a>
<FONT color="green">574</FONT>        <a name="line.574"></a>
<FONT color="green">575</FONT>        int n = m_prefixMappings.size();<a name="line.575"></a>
<FONT color="green">576</FONT>    <a name="line.576"></a>
<FONT color="green">577</FONT>        for (int i = 0; i &lt; n; i++) <a name="line.577"></a>
<FONT color="green">578</FONT>        {<a name="line.578"></a>
<FONT color="green">579</FONT>          String prefix = (String)m_prefixMappings.elementAt(i++);<a name="line.579"></a>
<FONT color="green">580</FONT>          String nsURI = (String)m_prefixMappings.elementAt(i);<a name="line.580"></a>
<FONT color="green">581</FONT>          nssupport.declarePrefix(prefix, nsURI);<a name="line.581"></a>
<FONT color="green">582</FONT>        }<a name="line.582"></a>
<FONT color="green">583</FONT>        //m_prefixMappings.clear(); // JDK 1.2+ only -sc<a name="line.583"></a>
<FONT color="green">584</FONT>        m_prefixMappings.removeAllElements(); // JDK 1.1.x compat -sc<a name="line.584"></a>
<FONT color="green">585</FONT>    <a name="line.585"></a>
<FONT color="green">586</FONT>        m_elementID++;<a name="line.586"></a>
<FONT color="green">587</FONT>    <a name="line.587"></a>
<FONT color="green">588</FONT>        // This check is currently done for all elements.  We should possibly consider<a name="line.588"></a>
<FONT color="green">589</FONT>        // limiting this check to xsl:stylesheet elements only since that is all it really<a name="line.589"></a>
<FONT color="green">590</FONT>        // applies to.  Also, it could be bypassed if m_shouldProcess is already true.<a name="line.590"></a>
<FONT color="green">591</FONT>        // In other words, the next two statements could instead look something like this:<a name="line.591"></a>
<FONT color="green">592</FONT>        // if (!m_shouldProcess)<a name="line.592"></a>
<FONT color="green">593</FONT>        // {<a name="line.593"></a>
<FONT color="green">594</FONT>        //   if (localName.equals(Constants.ELEMNAME_STYLESHEET_STRING) &amp;&amp;<a name="line.594"></a>
<FONT color="green">595</FONT>        //       url.equals(Constants.S_XSLNAMESPACEURL))<a name="line.595"></a>
<FONT color="green">596</FONT>        //   {<a name="line.596"></a>
<FONT color="green">597</FONT>        //     checkForFragmentID(attributes);<a name="line.597"></a>
<FONT color="green">598</FONT>        //     if (!m_shouldProcess)<a name="line.598"></a>
<FONT color="green">599</FONT>        //       return;<a name="line.599"></a>
<FONT color="green">600</FONT>        //   }<a name="line.600"></a>
<FONT color="green">601</FONT>        //   else<a name="line.601"></a>
<FONT color="green">602</FONT>        //     return;<a name="line.602"></a>
<FONT color="green">603</FONT>        // } <a name="line.603"></a>
<FONT color="green">604</FONT>        // I didn't include this code statement at this time because in practice <a name="line.604"></a>
<FONT color="green">605</FONT>        // it is a small performance hit and I was waiting to see if its absence<a name="line.605"></a>
<FONT color="green">606</FONT>        // caused a problem. - GLP<a name="line.606"></a>
<FONT color="green">607</FONT>    <a name="line.607"></a>
<FONT color="green">608</FONT>        checkForFragmentID(attributes);<a name="line.608"></a>
<FONT color="green">609</FONT>    <a name="line.609"></a>
<FONT color="green">610</FONT>        if (!m_shouldProcess)<a name="line.610"></a>
<FONT color="green">611</FONT>          return;<a name="line.611"></a>
<FONT color="green">612</FONT>    <a name="line.612"></a>
<FONT color="green">613</FONT>        flushCharacters();<a name="line.613"></a>
<FONT color="green">614</FONT>        <a name="line.614"></a>
<FONT color="green">615</FONT>        pushSpaceHandling(attributes);<a name="line.615"></a>
<FONT color="green">616</FONT>    <a name="line.616"></a>
<FONT color="green">617</FONT>        XSLTElementProcessor elemProcessor = getProcessorFor(uri, localName,<a name="line.617"></a>
<FONT color="green">618</FONT>                                               rawName);<a name="line.618"></a>
<FONT color="green">619</FONT>    <a name="line.619"></a>
<FONT color="green">620</FONT>        if(null != elemProcessor)  // defensive, for better multiple error reporting. -sb<a name="line.620"></a>
<FONT color="green">621</FONT>        {<a name="line.621"></a>
<FONT color="green">622</FONT>          this.pushProcessor(elemProcessor);<a name="line.622"></a>
<FONT color="green">623</FONT>          elemProcessor.startElement(this, uri, localName, rawName, attributes);<a name="line.623"></a>
<FONT color="green">624</FONT>        }<a name="line.624"></a>
<FONT color="green">625</FONT>        else<a name="line.625"></a>
<FONT color="green">626</FONT>        {<a name="line.626"></a>
<FONT color="green">627</FONT>          m_shouldProcess = false;<a name="line.627"></a>
<FONT color="green">628</FONT>          popSpaceHandling();<a name="line.628"></a>
<FONT color="green">629</FONT>        }<a name="line.629"></a>
<FONT color="green">630</FONT>                    <a name="line.630"></a>
<FONT color="green">631</FONT>      }<a name="line.631"></a>
<FONT color="green">632</FONT>    <a name="line.632"></a>
<FONT color="green">633</FONT>      /**<a name="line.633"></a>
<FONT color="green">634</FONT>       * Receive notification of the end of an element.<a name="line.634"></a>
<FONT color="green">635</FONT>       *<a name="line.635"></a>
<FONT color="green">636</FONT>       * @param uri The Namespace URI, or an empty string.<a name="line.636"></a>
<FONT color="green">637</FONT>       * @param localName The local name (without prefix), or empty string if not namespace processing.<a name="line.637"></a>
<FONT color="green">638</FONT>       * @param rawName The qualified name (with prefix).<a name="line.638"></a>
<FONT color="green">639</FONT>       * @see org.xml.sax.ContentHandler#endElement<a name="line.639"></a>
<FONT color="green">640</FONT>       *<a name="line.640"></a>
<FONT color="green">641</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.641"></a>
<FONT color="green">642</FONT>       *            wrapping another exception.<a name="line.642"></a>
<FONT color="green">643</FONT>       */<a name="line.643"></a>
<FONT color="green">644</FONT>      public void endElement(String uri, String localName, String rawName)<a name="line.644"></a>
<FONT color="green">645</FONT>              throws org.xml.sax.SAXException<a name="line.645"></a>
<FONT color="green">646</FONT>      {<a name="line.646"></a>
<FONT color="green">647</FONT>    <a name="line.647"></a>
<FONT color="green">648</FONT>        m_elementID--;<a name="line.648"></a>
<FONT color="green">649</FONT>    <a name="line.649"></a>
<FONT color="green">650</FONT>        if (!m_shouldProcess)<a name="line.650"></a>
<FONT color="green">651</FONT>          return;<a name="line.651"></a>
<FONT color="green">652</FONT>    <a name="line.652"></a>
<FONT color="green">653</FONT>        if ((m_elementID + 1) == m_fragmentID)<a name="line.653"></a>
<FONT color="green">654</FONT>          m_shouldProcess = false;<a name="line.654"></a>
<FONT color="green">655</FONT>    <a name="line.655"></a>
<FONT color="green">656</FONT>        flushCharacters();<a name="line.656"></a>
<FONT color="green">657</FONT>        <a name="line.657"></a>
<FONT color="green">658</FONT>        popSpaceHandling();<a name="line.658"></a>
<FONT color="green">659</FONT>    <a name="line.659"></a>
<FONT color="green">660</FONT>        XSLTElementProcessor p = getCurrentProcessor();<a name="line.660"></a>
<FONT color="green">661</FONT>    <a name="line.661"></a>
<FONT color="green">662</FONT>        p.endElement(this, uri, localName, rawName);<a name="line.662"></a>
<FONT color="green">663</FONT>        this.popProcessor();<a name="line.663"></a>
<FONT color="green">664</FONT>        this.getNamespaceSupport().popContext();<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>       * Receive notification of character data inside an element.<a name="line.668"></a>
<FONT color="green">669</FONT>       *<a name="line.669"></a>
<FONT color="green">670</FONT>       * @param ch The characters.<a name="line.670"></a>
<FONT color="green">671</FONT>       * @param start The start position in the character array.<a name="line.671"></a>
<FONT color="green">672</FONT>       * @param length The number of characters to use from the<a name="line.672"></a>
<FONT color="green">673</FONT>       *               character array.<a name="line.673"></a>
<FONT color="green">674</FONT>       * @see org.xml.sax.ContentHandler#characters<a name="line.674"></a>
<FONT color="green">675</FONT>       *<a name="line.675"></a>
<FONT color="green">676</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.676"></a>
<FONT color="green">677</FONT>       *            wrapping another exception.<a name="line.677"></a>
<FONT color="green">678</FONT>       */<a name="line.678"></a>
<FONT color="green">679</FONT>      public void characters(char ch[], int start, int length)<a name="line.679"></a>
<FONT color="green">680</FONT>              throws org.xml.sax.SAXException<a name="line.680"></a>
<FONT color="green">681</FONT>      {<a name="line.681"></a>
<FONT color="green">682</FONT>    <a name="line.682"></a>
<FONT color="green">683</FONT>        if (!m_shouldProcess)<a name="line.683"></a>
<FONT color="green">684</FONT>          return;<a name="line.684"></a>
<FONT color="green">685</FONT>    <a name="line.685"></a>
<FONT color="green">686</FONT>        XSLTElementProcessor elemProcessor = getCurrentProcessor();<a name="line.686"></a>
<FONT color="green">687</FONT>        XSLTElementDef def = elemProcessor.getElemDef();<a name="line.687"></a>
<FONT color="green">688</FONT>    <a name="line.688"></a>
<FONT color="green">689</FONT>        if (def.getType() != XSLTElementDef.T_PCDATA)<a name="line.689"></a>
<FONT color="green">690</FONT>          elemProcessor = def.getProcessorFor(null, "text()");<a name="line.690"></a>
<FONT color="green">691</FONT>    <a name="line.691"></a>
<FONT color="green">692</FONT>        if (null == elemProcessor)<a name="line.692"></a>
<FONT color="green">693</FONT>        {<a name="line.693"></a>
<FONT color="green">694</FONT>    <a name="line.694"></a>
<FONT color="green">695</FONT>          // If it's whitespace, just ignore it, otherwise flag an error.<a name="line.695"></a>
<FONT color="green">696</FONT>          if (!XMLCharacterRecognizer.isWhiteSpace(ch, start, length))<a name="line.696"></a>
<FONT color="green">697</FONT>            error(<a name="line.697"></a>
<FONT color="green">698</FONT>              XSLMessages.createMessage(XSLTErrorResources.ER_NONWHITESPACE_NOT_ALLOWED_IN_POSITION, null),null);//"Non-whitespace text is not allowed in this position in the stylesheet!",<a name="line.698"></a>
<FONT color="green">699</FONT>              <a name="line.699"></a>
<FONT color="green">700</FONT>        }<a name="line.700"></a>
<FONT color="green">701</FONT>        else<a name="line.701"></a>
<FONT color="green">702</FONT>          elemProcessor.characters(this, ch, start, length);<a name="line.702"></a>
<FONT color="green">703</FONT>      }<a name="line.703"></a>
<FONT color="green">704</FONT>    <a name="line.704"></a>
<FONT color="green">705</FONT>      /**<a name="line.705"></a>
<FONT color="green">706</FONT>       * Receive notification of ignorable whitespace in element content.<a name="line.706"></a>
<FONT color="green">707</FONT>       *<a name="line.707"></a>
<FONT color="green">708</FONT>       * @param ch The whitespace characters.<a name="line.708"></a>
<FONT color="green">709</FONT>       * @param start The start position in the character array.<a name="line.709"></a>
<FONT color="green">710</FONT>       * @param length The number of characters to use from the<a name="line.710"></a>
<FONT color="green">711</FONT>       *               character array.<a name="line.711"></a>
<FONT color="green">712</FONT>       * @see org.xml.sax.ContentHandler#ignorableWhitespace<a name="line.712"></a>
<FONT color="green">713</FONT>       *<a name="line.713"></a>
<FONT color="green">714</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.714"></a>
<FONT color="green">715</FONT>       *            wrapping another exception.<a name="line.715"></a>
<FONT color="green">716</FONT>       */<a name="line.716"></a>
<FONT color="green">717</FONT>      public void ignorableWhitespace(char ch[], int start, int length)<a name="line.717"></a>
<FONT color="green">718</FONT>              throws org.xml.sax.SAXException<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>        if (!m_shouldProcess)<a name="line.721"></a>
<FONT color="green">722</FONT>          return;<a name="line.722"></a>
<FONT color="green">723</FONT>    <a name="line.723"></a>
<FONT color="green">724</FONT>        getCurrentProcessor().ignorableWhitespace(this, ch, start, length);<a name="line.724"></a>
<FONT color="green">725</FONT>      }<a name="line.725"></a>
<FONT color="green">726</FONT>    <a name="line.726"></a>
<FONT color="green">727</FONT>      /**<a name="line.727"></a>
<FONT color="green">728</FONT>       * Receive notification of a processing instruction.<a name="line.728"></a>
<FONT color="green">729</FONT>       *<a name="line.729"></a>
<FONT color="green">730</FONT>       * &lt;p&gt;The Parser will invoke this method once for each processing<a name="line.730"></a>
<FONT color="green">731</FONT>       * instruction found: note that processing instructions may occur<a name="line.731"></a>
<FONT color="green">732</FONT>       * before or after the main document element.&lt;/p&gt;<a name="line.732"></a>
<FONT color="green">733</FONT>       *<a name="line.733"></a>
<FONT color="green">734</FONT>       * &lt;p&gt;A SAX parser should never report an XML declaration (XML 1.0,<a name="line.734"></a>
<FONT color="green">735</FONT>       * section 2.8) or a text declaration (XML 1.0, section 4.3.1)<a name="line.735"></a>
<FONT color="green">736</FONT>       * using this method.&lt;/p&gt;<a name="line.736"></a>
<FONT color="green">737</FONT>       *<a name="line.737"></a>
<FONT color="green">738</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.738"></a>
<FONT color="green">739</FONT>       * method in a subclass to take specific actions for each<a name="line.739"></a>
<FONT color="green">740</FONT>       * processing instruction, such as setting status variables or<a name="line.740"></a>
<FONT color="green">741</FONT>       * invoking other methods.&lt;/p&gt;<a name="line.741"></a>
<FONT color="green">742</FONT>       *<a name="line.742"></a>
<FONT color="green">743</FONT>       * @param target The processing instruction target.<a name="line.743"></a>
<FONT color="green">744</FONT>       * @param data The processing instruction data, or null if<a name="line.744"></a>
<FONT color="green">745</FONT>       *             none is supplied.<a name="line.745"></a>
<FONT color="green">746</FONT>       * @see org.xml.sax.ContentHandler#processingInstruction<a name="line.746"></a>
<FONT color="green">747</FONT>       *<a name="line.747"></a>
<FONT color="green">748</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.748"></a>
<FONT color="green">749</FONT>       *            wrapping another exception.<a name="line.749"></a>
<FONT color="green">750</FONT>       */<a name="line.750"></a>
<FONT color="green">751</FONT>      public void processingInstruction(String target, String data)<a name="line.751"></a>
<FONT color="green">752</FONT>              throws org.xml.sax.SAXException<a name="line.752"></a>
<FONT color="green">753</FONT>      {<a name="line.753"></a>
<FONT color="green">754</FONT>        if (!m_shouldProcess)<a name="line.754"></a>
<FONT color="green">755</FONT>          return;<a name="line.755"></a>
<FONT color="green">756</FONT>    <a name="line.756"></a>
<FONT color="green">757</FONT>        // Recreating Scott's kluge:<a name="line.757"></a>
<FONT color="green">758</FONT>        // A xsl:for-each or xsl:apply-templates may have a special <a name="line.758"></a>
<FONT color="green">759</FONT>        // PI that tells us not to cache the document.  This PI <a name="line.759"></a>
<FONT color="green">760</FONT>        // should really be namespaced.<a name="line.760"></a>
<FONT color="green">761</FONT>        //    String localName = getLocalName(target);<a name="line.761"></a>
<FONT color="green">762</FONT>        //    String ns = m_stylesheet.getNamespaceFromStack(target);<a name="line.762"></a>
<FONT color="green">763</FONT>        //<a name="line.763"></a>
<FONT color="green">764</FONT>        // %REVIEW%: We need a better PI architecture<a name="line.764"></a>
<FONT color="green">765</FONT>        <a name="line.765"></a>
<FONT color="green">766</FONT>        String prefix="",ns="", localName=target;<a name="line.766"></a>
<FONT color="green">767</FONT>        int colon=target.indexOf(':');<a name="line.767"></a>
<FONT color="green">768</FONT>        if(colon&gt;=0)<a name="line.768"></a>
<FONT color="green">769</FONT>        {<a name="line.769"></a>
<FONT color="green">770</FONT>          ns=getNamespaceForPrefix(prefix=target.substring(0,colon));<a name="line.770"></a>
<FONT color="green">771</FONT>          localName=target.substring(colon+1);<a name="line.771"></a>
<FONT color="green">772</FONT>        }<a name="line.772"></a>
<FONT color="green">773</FONT>    <a name="line.773"></a>
<FONT color="green">774</FONT>        try<a name="line.774"></a>
<FONT color="green">775</FONT>        {<a name="line.775"></a>
<FONT color="green">776</FONT>          // A xsl:for-each or xsl:apply-templates may have a special <a name="line.776"></a>
<FONT color="green">777</FONT>          // PI that tells us not to cache the document.  This PI <a name="line.777"></a>
<FONT color="green">778</FONT>          // should really be namespaced... but since the XML Namespaces<a name="line.778"></a>
<FONT color="green">779</FONT>          // spec never defined namespaces as applying to PI's, and since<a name="line.779"></a>
<FONT color="green">780</FONT>          // the testcase we're trying to support is inconsistant in whether<a name="line.780"></a>
<FONT color="green">781</FONT>          // it binds the prefix, I'm going to make this sloppy for<a name="line.781"></a>
<FONT color="green">782</FONT>          // testing purposes.<a name="line.782"></a>
<FONT color="green">783</FONT>          if(<a name="line.783"></a>
<FONT color="green">784</FONT>            "xalan-doc-cache-off".equals(target) ||<a name="line.784"></a>
<FONT color="green">785</FONT>            "xalan:doc-cache-off".equals(target) ||<a name="line.785"></a>
<FONT color="green">786</FONT>               ("doc-cache-off".equals(localName) &amp;&amp;<a name="line.786"></a>
<FONT color="green">787</FONT>                ns.equals("org.apache.xalan.xslt.extensions.Redirect") )<a name="line.787"></a>
<FONT color="green">788</FONT>             )<a name="line.788"></a>
<FONT color="green">789</FONT>          {<a name="line.789"></a>
<FONT color="green">790</FONT>            if(!(m_elems.peek() instanceof ElemForEach))<a name="line.790"></a>
<FONT color="green">791</FONT>              throw new TransformerException<a name="line.791"></a>
<FONT color="green">792</FONT>                ("xalan:doc-cache-off not allowed here!", <a name="line.792"></a>
<FONT color="green">793</FONT>                 getLocator());<a name="line.793"></a>
<FONT color="green">794</FONT>            ElemForEach elem = (ElemForEach)m_elems.peek();<a name="line.794"></a>
<FONT color="green">795</FONT>    <a name="line.795"></a>
<FONT color="green">796</FONT>            elem.m_doc_cache_off = true;<a name="line.796"></a>
<FONT color="green">797</FONT>    <a name="line.797"></a>
<FONT color="green">798</FONT>            //System.out.println("JJK***** Recognized &lt;? {"+ns+"}"+prefix+":"+localName+" "+data+"?&gt;");<a name="line.798"></a>
<FONT color="green">799</FONT>          }<a name="line.799"></a>
<FONT color="green">800</FONT>        }<a name="line.800"></a>
<FONT color="green">801</FONT>        catch(Exception e)<a name="line.801"></a>
<FONT color="green">802</FONT>        {<a name="line.802"></a>
<FONT color="green">803</FONT>          // JJK: Officially, unknown PIs can just be ignored.<a name="line.803"></a>
<FONT color="green">804</FONT>          // Do we want to issue a warning?<a name="line.804"></a>
<FONT color="green">805</FONT>        }<a name="line.805"></a>
<FONT color="green">806</FONT>    <a name="line.806"></a>
<FONT color="green">807</FONT>    <a name="line.807"></a>
<FONT color="green">808</FONT>        flushCharacters();<a name="line.808"></a>
<FONT color="green">809</FONT>        getCurrentProcessor().processingInstruction(this, target, data);<a name="line.809"></a>
<FONT color="green">810</FONT>      }<a name="line.810"></a>
<FONT color="green">811</FONT>    <a name="line.811"></a>
<FONT color="green">812</FONT>      /**<a name="line.812"></a>
<FONT color="green">813</FONT>       * Receive notification of a skipped entity.<a name="line.813"></a>
<FONT color="green">814</FONT>       *<a name="line.814"></a>
<FONT color="green">815</FONT>       * &lt;p&gt;By default, do nothing.  Application writers may override this<a name="line.815"></a>
<FONT color="green">816</FONT>       * method in a subclass to take specific actions for each<a name="line.816"></a>
<FONT color="green">817</FONT>       * processing instruction, such as setting status variables or<a name="line.817"></a>
<FONT color="green">818</FONT>       * invoking other methods.&lt;/p&gt;<a name="line.818"></a>
<FONT color="green">819</FONT>       *<a name="line.819"></a>
<FONT color="green">820</FONT>       * @param name The name of the skipped entity.<a name="line.820"></a>
<FONT color="green">821</FONT>       * @see org.xml.sax.ContentHandler#processingInstruction<a name="line.821"></a>
<FONT color="green">822</FONT>       *<a name="line.822"></a>
<FONT color="green">823</FONT>       * @throws org.xml.sax.SAXException Any SAX exception, possibly<a name="line.823"></a>
<FONT color="green">824</FONT>       *            wrapping another exception.<a name="line.824"></a>
<FONT color="green">825</FONT>       */<a name="line.825"></a>
<FONT color="green">826</FONT>      public void skippedEntity(String name) throws org.xml.sax.SAXException<a name="line.826"></a>
<FONT color="green">827</FONT>      {<a name="line.827"></a>
<FONT color="green">828</FONT>    <a name="line.828"></a>
<FONT color="green">829</FONT>        if (!m_shouldProcess)<a name="line.829"></a>
<FONT color="green">830</FONT>          return;<a name="line.830"></a>
<FONT color="green">831</FONT>    <a name="line.831"></a>
<FONT color="green">832</FONT>        getCurrentProcessor().skippedEntity(this, name);<a name="line.832"></a>
<FONT color="green">833</FONT>      }<a name="line.833"></a>
<FONT color="green">834</FONT>    <a name="line.834"></a>
<FONT color="green">835</FONT>      /**<a name="line.835"></a>
<FONT color="green">836</FONT>       * Warn the user of an problem.<a name="line.836"></a>
<FONT color="green">837</FONT>       *<a name="line.837"></a>
<FONT color="green">838</FONT>       * @param msg An key into the {@link org.apache.xalan.res.XSLTErrorResources}<a name="line.838"></a>
<FONT color="green">839</FONT>       * table, that is one of the WG_ prefixed definitions.<a name="line.839"></a>
<FONT color="green">840</FONT>       * @param args An array of arguments for the given warning.<a name="line.840"></a>
<FONT color="green">841</FONT>       *<a name="line.841"></a>
<FONT color="green">842</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.842"></a>
<FONT color="green">843</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.843"></a>
<FONT color="green">844</FONT>       * {@link javax.xml.transform.ErrorListener#warning}<a name="line.844"></a>
<FONT color="green">845</FONT>       * method chooses to flag this condition as an error.<a name="line.845"></a>
<FONT color="green">846</FONT>       * @xsl.usage internal<a name="line.846"></a>
<FONT color="green">847</FONT>       */<a name="line.847"></a>
<FONT color="green">848</FONT>      public void warn(String msg, Object args[]) throws org.xml.sax.SAXException<a name="line.848"></a>
<FONT color="green">849</FONT>      {<a name="line.849"></a>
<FONT color="green">850</FONT>    <a name="line.850"></a>
<FONT color="green">851</FONT>        String formattedMsg = XSLMessages.createWarning(msg, args);<a name="line.851"></a>
<FONT color="green">852</FONT>        SAXSourceLocator locator = getLocator();<a name="line.852"></a>
<FONT color="green">853</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.853"></a>
<FONT color="green">854</FONT>    <a name="line.854"></a>
<FONT color="green">855</FONT>        try<a name="line.855"></a>
<FONT color="green">856</FONT>        {<a name="line.856"></a>
<FONT color="green">857</FONT>          if (null != handler)<a name="line.857"></a>
<FONT color="green">858</FONT>            handler.warning(new TransformerException(formattedMsg, locator));<a name="line.858"></a>
<FONT color="green">859</FONT>        }<a name="line.859"></a>
<FONT color="green">860</FONT>        catch (TransformerException te)<a name="line.860"></a>
<FONT color="green">861</FONT>        {<a name="line.861"></a>
<FONT color="green">862</FONT>          throw new org.xml.sax.SAXException(te);<a name="line.862"></a>
<FONT color="green">863</FONT>        }<a name="line.863"></a>
<FONT color="green">864</FONT>      }<a name="line.864"></a>
<FONT color="green">865</FONT>    <a name="line.865"></a>
<FONT color="green">866</FONT>      /**<a name="line.866"></a>
<FONT color="green">867</FONT>       * Assert that a condition is true.  If it is not true, throw an error.<a name="line.867"></a>
<FONT color="green">868</FONT>       *<a name="line.868"></a>
<FONT color="green">869</FONT>       * @param condition false if an error should not be thrown, otherwise true.<a name="line.869"></a>
<FONT color="green">870</FONT>       * @param msg Error message to be passed to the RuntimeException as an<a name="line.870"></a>
<FONT color="green">871</FONT>       * argument.<a name="line.871"></a>
<FONT color="green">872</FONT>       * @throws RuntimeException if the condition is not true.<a name="line.872"></a>
<FONT color="green">873</FONT>       * @xsl.usage internal<a name="line.873"></a>
<FONT color="green">874</FONT>       */<a name="line.874"></a>
<FONT color="green">875</FONT>      private void assertion(boolean condition, String msg) throws RuntimeException<a name="line.875"></a>
<FONT color="green">876</FONT>      {<a name="line.876"></a>
<FONT color="green">877</FONT>        if (!condition)<a name="line.877"></a>
<FONT color="green">878</FONT>          throw new RuntimeException(msg);<a name="line.878"></a>
<FONT color="green">879</FONT>      }<a name="line.879"></a>
<FONT color="green">880</FONT>    <a name="line.880"></a>
<FONT color="green">881</FONT>      /**<a name="line.881"></a>
<FONT color="green">882</FONT>       * Tell the user of an error, and probably throw an<a name="line.882"></a>
<FONT color="green">883</FONT>       * exception.<a name="line.883"></a>
<FONT color="green">884</FONT>       *<a name="line.884"></a>
<FONT color="green">885</FONT>       * @param msg An error message.<a name="line.885"></a>
<FONT color="green">886</FONT>       * @param e An error which the SAXException should wrap.<a name="line.886"></a>
<FONT color="green">887</FONT>       *<a name="line.887"></a>
<FONT color="green">888</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.888"></a>
<FONT color="green">889</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.889"></a>
<FONT color="green">890</FONT>       * {@link javax.xml.transform.ErrorListener#error}<a name="line.890"></a>
<FONT color="green">891</FONT>       * method chooses to flag this condition as an error.<a name="line.891"></a>
<FONT color="green">892</FONT>       * @xsl.usage internal<a name="line.892"></a>
<FONT color="green">893</FONT>       */<a name="line.893"></a>
<FONT color="green">894</FONT>      protected void error(String msg, Exception e)<a name="line.894"></a>
<FONT color="green">895</FONT>              throws org.xml.sax.SAXException<a name="line.895"></a>
<FONT color="green">896</FONT>      {<a name="line.896"></a>
<FONT color="green">897</FONT>    <a name="line.897"></a>
<FONT color="green">898</FONT>        SAXSourceLocator locator = getLocator();<a name="line.898"></a>
<FONT color="green">899</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.899"></a>
<FONT color="green">900</FONT>        TransformerException pe;<a name="line.900"></a>
<FONT color="green">901</FONT>    <a name="line.901"></a>
<FONT color="green">902</FONT>        if (!(e instanceof TransformerException))<a name="line.902"></a>
<FONT color="green">903</FONT>        {<a name="line.903"></a>
<FONT color="green">904</FONT>          pe = (null == e)<a name="line.904"></a>
<FONT color="green">905</FONT>               ? new TransformerException(msg, locator)<a name="line.905"></a>
<FONT color="green">906</FONT>               : new TransformerException(msg, locator, e);<a name="line.906"></a>
<FONT color="green">907</FONT>        }<a name="line.907"></a>
<FONT color="green">908</FONT>        else<a name="line.908"></a>
<FONT color="green">909</FONT>          pe = (TransformerException) e;<a name="line.909"></a>
<FONT color="green">910</FONT>    <a name="line.910"></a>
<FONT color="green">911</FONT>        if (null != handler)<a name="line.911"></a>
<FONT color="green">912</FONT>        {<a name="line.912"></a>
<FONT color="green">913</FONT>          try<a name="line.913"></a>
<FONT color="green">914</FONT>          {<a name="line.914"></a>
<FONT color="green">915</FONT>            handler.error(pe);<a name="line.915"></a>
<FONT color="green">916</FONT>          }<a name="line.916"></a>
<FONT color="green">917</FONT>          catch (TransformerException te)<a name="line.917"></a>
<FONT color="green">918</FONT>          {<a name="line.918"></a>
<FONT color="green">919</FONT>            throw new org.xml.sax.SAXException(te);<a name="line.919"></a>
<FONT color="green">920</FONT>          }<a name="line.920"></a>
<FONT color="green">921</FONT>        }<a name="line.921"></a>
<FONT color="green">922</FONT>        else<a name="line.922"></a>
<FONT color="green">923</FONT>          throw new org.xml.sax.SAXException(pe);<a name="line.923"></a>
<FONT color="green">924</FONT>      }<a name="line.924"></a>
<FONT color="green">925</FONT>    <a name="line.925"></a>
<FONT color="green">926</FONT>      /**<a name="line.926"></a>
<FONT color="green">927</FONT>       * Tell the user of an error, and probably throw an<a name="line.927"></a>
<FONT color="green">928</FONT>       * exception.<a name="line.928"></a>
<FONT color="green">929</FONT>       *<a name="line.929"></a>
<FONT color="green">930</FONT>       * @param msg A key into the {@link org.apache.xalan.res.XSLTErrorResources}<a name="line.930"></a>
<FONT color="green">931</FONT>       * table, that is one of the WG_ prefixed definitions.<a name="line.931"></a>
<FONT color="green">932</FONT>       * @param args An array of arguments for the given warning.<a name="line.932"></a>
<FONT color="green">933</FONT>       * @param e An error which the SAXException should wrap.<a name="line.933"></a>
<FONT color="green">934</FONT>       *<a name="line.934"></a>
<FONT color="green">935</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.935"></a>
<FONT color="green">936</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.936"></a>
<FONT color="green">937</FONT>       * {@link javax.xml.transform.ErrorListener#error}<a name="line.937"></a>
<FONT color="green">938</FONT>       * method chooses to flag this condition as an error.<a name="line.938"></a>
<FONT color="green">939</FONT>       * @xsl.usage internal<a name="line.939"></a>
<FONT color="green">940</FONT>       */<a name="line.940"></a>
<FONT color="green">941</FONT>      protected void error(String msg, Object args[], Exception e)<a name="line.941"></a>
<FONT color="green">942</FONT>              throws org.xml.sax.SAXException<a name="line.942"></a>
<FONT color="green">943</FONT>      {<a name="line.943"></a>
<FONT color="green">944</FONT>    <a name="line.944"></a>
<FONT color="green">945</FONT>        String formattedMsg = XSLMessages.createMessage(msg, args);<a name="line.945"></a>
<FONT color="green">946</FONT>    <a name="line.946"></a>
<FONT color="green">947</FONT>        error(formattedMsg, e);<a name="line.947"></a>
<FONT color="green">948</FONT>      }<a name="line.948"></a>
<FONT color="green">949</FONT>    <a name="line.949"></a>
<FONT color="green">950</FONT>      /**<a name="line.950"></a>
<FONT color="green">951</FONT>       * Receive notification of a XSLT processing warning.<a name="line.951"></a>
<FONT color="green">952</FONT>       *<a name="line.952"></a>
<FONT color="green">953</FONT>       * @param e The warning information encoded as an exception.<a name="line.953"></a>
<FONT color="green">954</FONT>       *<a name="line.954"></a>
<FONT color="green">955</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.955"></a>
<FONT color="green">956</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.956"></a>
<FONT color="green">957</FONT>       * {@link javax.xml.transform.ErrorListener#warning}<a name="line.957"></a>
<FONT color="green">958</FONT>       * method chooses to flag this condition as an error.<a name="line.958"></a>
<FONT color="green">959</FONT>       */<a name="line.959"></a>
<FONT color="green">960</FONT>      public void warning(org.xml.sax.SAXParseException e)<a name="line.960"></a>
<FONT color="green">961</FONT>              throws org.xml.sax.SAXException<a name="line.961"></a>
<FONT color="green">962</FONT>      {<a name="line.962"></a>
<FONT color="green">963</FONT>    <a name="line.963"></a>
<FONT color="green">964</FONT>        String formattedMsg = e.getMessage();<a name="line.964"></a>
<FONT color="green">965</FONT>        SAXSourceLocator locator = getLocator();<a name="line.965"></a>
<FONT color="green">966</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.966"></a>
<FONT color="green">967</FONT>    <a name="line.967"></a>
<FONT color="green">968</FONT>        try<a name="line.968"></a>
<FONT color="green">969</FONT>        {<a name="line.969"></a>
<FONT color="green">970</FONT>          handler.warning(new TransformerException(formattedMsg, locator));<a name="line.970"></a>
<FONT color="green">971</FONT>        }<a name="line.971"></a>
<FONT color="green">972</FONT>        catch (TransformerException te)<a name="line.972"></a>
<FONT color="green">973</FONT>        {<a name="line.973"></a>
<FONT color="green">974</FONT>          throw new org.xml.sax.SAXException(te);<a name="line.974"></a>
<FONT color="green">975</FONT>        }<a name="line.975"></a>
<FONT color="green">976</FONT>      }<a name="line.976"></a>
<FONT color="green">977</FONT>    <a name="line.977"></a>
<FONT color="green">978</FONT>      /**<a name="line.978"></a>
<FONT color="green">979</FONT>       * Receive notification of a recoverable XSLT processing error.<a name="line.979"></a>
<FONT color="green">980</FONT>       *<a name="line.980"></a>
<FONT color="green">981</FONT>       * @param e The error information encoded as an exception.<a name="line.981"></a>
<FONT color="green">982</FONT>       *<a name="line.982"></a>
<FONT color="green">983</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.983"></a>
<FONT color="green">984</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.984"></a>
<FONT color="green">985</FONT>       * {@link javax.xml.transform.ErrorListener#error}<a name="line.985"></a>
<FONT color="green">986</FONT>       * method chooses to flag this condition as an error.<a name="line.986"></a>
<FONT color="green">987</FONT>       */<a name="line.987"></a>
<FONT color="green">988</FONT>      public void error(org.xml.sax.SAXParseException e)<a name="line.988"></a>
<FONT color="green">989</FONT>              throws org.xml.sax.SAXException<a name="line.989"></a>
<FONT color="green">990</FONT>      {<a name="line.990"></a>
<FONT color="green">991</FONT>    <a name="line.991"></a>
<FONT color="green">992</FONT>        String formattedMsg = e.getMessage();<a name="line.992"></a>
<FONT color="green">993</FONT>        SAXSourceLocator locator = getLocator();<a name="line.993"></a>
<FONT color="green">994</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.994"></a>
<FONT color="green">995</FONT>    <a name="line.995"></a>
<FONT color="green">996</FONT>        try<a name="line.996"></a>
<FONT color="green">997</FONT>        {<a name="line.997"></a>
<FONT color="green">998</FONT>          handler.error(new TransformerException(formattedMsg, locator));<a name="line.998"></a>
<FONT color="green">999</FONT>        }<a name="line.999"></a>
<FONT color="green">1000</FONT>        catch (TransformerException te)<a name="line.1000"></a>
<FONT color="green">1001</FONT>        {<a name="line.1001"></a>
<FONT color="green">1002</FONT>          throw new org.xml.sax.SAXException(te);<a name="line.1002"></a>
<FONT color="green">1003</FONT>        }<a name="line.1003"></a>
<FONT color="green">1004</FONT>      }<a name="line.1004"></a>
<FONT color="green">1005</FONT>    <a name="line.1005"></a>
<FONT color="green">1006</FONT>      /**<a name="line.1006"></a>
<FONT color="green">1007</FONT>       * Report a fatal XSLT processing error.<a name="line.1007"></a>
<FONT color="green">1008</FONT>       *<a name="line.1008"></a>
<FONT color="green">1009</FONT>       * @param e The error information encoded as an exception.<a name="line.1009"></a>
<FONT color="green">1010</FONT>       *<a name="line.1010"></a>
<FONT color="green">1011</FONT>       * @throws org.xml.sax.SAXException that wraps a<a name="line.1011"></a>
<FONT color="green">1012</FONT>       * {@link javax.xml.transform.TransformerException} if the current<a name="line.1012"></a>
<FONT color="green">1013</FONT>       * {@link javax.xml.transform.ErrorListener#fatalError}<a name="line.1013"></a>
<FONT color="green">1014</FONT>       * method chooses to flag this condition as an error.<a name="line.1014"></a>
<FONT color="green">1015</FONT>       */<a name="line.1015"></a>
<FONT color="green">1016</FONT>      public void fatalError(org.xml.sax.SAXParseException e)<a name="line.1016"></a>
<FONT color="green">1017</FONT>              throws org.xml.sax.SAXException<a name="line.1017"></a>
<FONT color="green">1018</FONT>      {<a name="line.1018"></a>
<FONT color="green">1019</FONT>    <a name="line.1019"></a>
<FONT color="green">1020</FONT>        String formattedMsg = e.getMessage();<a name="line.1020"></a>
<FONT color="green">1021</FONT>        SAXSourceLocator locator = getLocator();<a name="line.1021"></a>
<FONT color="green">1022</FONT>        ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.1022"></a>
<FONT color="green">1023</FONT>    <a name="line.1023"></a>
<FONT color="green">1024</FONT>        try<a name="line.1024"></a>
<FONT color="green">1025</FONT>        {<a name="line.1025"></a>
<FONT color="green">1026</FONT>          handler.fatalError(new TransformerException(formattedMsg, locator));<a name="line.1026"></a>
<FONT color="green">1027</FONT>        }<a name="line.1027"></a>
<FONT color="green">1028</FONT>        catch (TransformerException te)<a name="line.1028"></a>
<FONT color="green">1029</FONT>        {<a name="line.1029"></a>
<FONT color="green">1030</FONT>          throw new org.xml.sax.SAXException(te);<a name="line.1030"></a>
<FONT color="green">1031</FONT>        }<a name="line.1031"></a>
<FONT color="green">1032</FONT>      }<a name="line.1032"></a>
<FONT color="green">1033</FONT>    <a name="line.1033"></a>
<FONT color="green">1034</FONT>      /**<a name="line.1034"></a>
<FONT color="green">1035</FONT>       * If we have a URL to a XML fragment, this is set<a name="line.1035"></a>
<FONT color="green">1036</FONT>       * to false until the ID is found.<a name="line.1036"></a>
<FONT color="green">1037</FONT>       * (warning: I worry that this should be in a stack).<a name="line.1037"></a>
<FONT color="green">1038</FONT>       */<a name="line.1038"></a>
<FONT color="green">1039</FONT>      private boolean m_shouldProcess = true;<a name="line.1039"></a>
<FONT color="green">1040</FONT>    <a name="line.1040"></a>
<FONT color="green">1041</FONT>      /**<a name="line.1041"></a>
<FONT color="green">1042</FONT>       * If we have a URL to a XML fragment, the value is stored<a name="line.1042"></a>
<FONT color="green">1043</FONT>       * in this string, and the m_shouldProcess flag is set to<a name="line.1043"></a>
<FONT color="green">1044</FONT>       * false until we match an ID with this string.<a name="line.1044"></a>
<FONT color="green">1045</FONT>       * (warning: I worry that this should be in a stack).<a name="line.1045"></a>
<FONT color="green">1046</FONT>       */<a name="line.1046"></a>
<FONT color="green">1047</FONT>      private String m_fragmentIDString;<a name="line.1047"></a>
<FONT color="green">1048</FONT>    <a name="line.1048"></a>
<FONT color="green">1049</FONT>      /**<a name="line.1049"></a>
<FONT color="green">1050</FONT>       * Keep track of the elementID, so we can tell when<a name="line.1050"></a>
<FONT color="green">1051</FONT>       * is has completed.  This isn't a real ID, but rather<a name="line.1051"></a>
<FONT color="green">1052</FONT>       * a nesting level.  However, it's good enough for<a name="line.1052"></a>
<FONT color="green">1053</FONT>       * our purposes.<a name="line.1053"></a>
<FONT color="green">1054</FONT>       * (warning: I worry that this should be in a stack).<a name="line.1054"></a>
<FONT color="green">1055</FONT>       */<a name="line.1055"></a>
<FONT color="green">1056</FONT>      private int m_elementID = 0;<a name="line.1056"></a>
<FONT color="green">1057</FONT>    <a name="line.1057"></a>
<FONT color="green">1058</FONT>      /**<a name="line.1058"></a>
<FONT color="green">1059</FONT>       * The ID of the fragment that has been found<a name="line.1059"></a>
<FONT color="green">1060</FONT>       * (warning: I worry that this should be in a stack).<a name="line.1060"></a>
<FONT color="green">1061</FONT>       */<a name="line.1061"></a>
<FONT color="green">1062</FONT>      private int m_fragmentID = 0;<a name="line.1062"></a>
<FONT color="green">1063</FONT>    <a name="line.1063"></a>
<FONT color="green">1064</FONT>      /**<a name="line.1064"></a>
<FONT color="green">1065</FONT>       * Check to see if an ID attribute matched the #id, called<a name="line.1065"></a>
<FONT color="green">1066</FONT>       * from startElement.<a name="line.1066"></a>
<FONT color="green">1067</FONT>       *<a name="line.1067"></a>
<FONT color="green">1068</FONT>       * @param attributes The specified or defaulted attributes.<a name="line.1068"></a>
<FONT color="green">1069</FONT>       */<a name="line.1069"></a>
<FONT color="green">1070</FONT>      private void checkForFragmentID(Attributes attributes)<a name="line.1070"></a>
<FONT color="green">1071</FONT>      {<a name="line.1071"></a>
<FONT color="green">1072</FONT>    <a name="line.1072"></a>
<FONT color="green">1073</FONT>        if (!m_shouldProcess)<a name="line.1073"></a>
<FONT color="green">1074</FONT>        {<a name="line.1074"></a>
<FONT color="green">1075</FONT>          if ((null != attributes) &amp;&amp; (null != m_fragmentIDString))<a name="line.1075"></a>
<FONT color="green">1076</FONT>          {<a name="line.1076"></a>
<FONT color="green">1077</FONT>            int n = attributes.getLength();<a name="line.1077"></a>
<FONT color="green">1078</FONT>    <a name="line.1078"></a>
<FONT color="green">1079</FONT>            for (int i = 0; i &lt; n; i++)<a name="line.1079"></a>
<FONT color="green">1080</FONT>            {<a name="line.1080"></a>
<FONT color="green">1081</FONT>              String name = attributes.getQName(i);<a name="line.1081"></a>
<FONT color="green">1082</FONT>    <a name="line.1082"></a>
<FONT color="green">1083</FONT>              if (name.equals(Constants.ATTRNAME_ID))<a name="line.1083"></a>
<FONT color="green">1084</FONT>              {<a name="line.1084"></a>
<FONT color="green">1085</FONT>                String val = attributes.getValue(i);<a name="line.1085"></a>
<FONT color="green">1086</FONT>    <a name="line.1086"></a>
<FONT color="green">1087</FONT>                if (val.equalsIgnoreCase(m_fragmentIDString))<a name="line.1087"></a>
<FONT color="green">1088</FONT>                {<a name="line.1088"></a>
<FONT color="green">1089</FONT>                  m_shouldProcess = true;<a name="line.1089"></a>
<FONT color="green">1090</FONT>                  m_fragmentID = m_elementID;<a name="line.1090"></a>
<FONT color="green">1091</FONT>                }<a name="line.1091"></a>
<FONT color="green">1092</FONT>              }<a name="line.1092"></a>
<FONT color="green">1093</FONT>            }<a name="line.1093"></a>
<FONT color="green">1094</FONT>          }<a name="line.1094"></a>
<FONT color="green">1095</FONT>        }<a name="line.1095"></a>
<FONT color="green">1096</FONT>      }<a name="line.1096"></a>
<FONT color="green">1097</FONT>    <a name="line.1097"></a>
<FONT color="green">1098</FONT>      /**<a name="line.1098"></a>
<FONT color="green">1099</FONT>       *  The XSLT TransformerFactory for needed services.<a name="line.1099"></a>
<FONT color="green">1100</FONT>       */<a name="line.1100"></a>
<FONT color="green">1101</FONT>      private TransformerFactoryImpl m_stylesheetProcessor;<a name="line.1101"></a>
<FONT color="green">1102</FONT>    <a name="line.1102"></a>
<FONT color="green">1103</FONT>      /**<a name="line.1103"></a>
<FONT color="green">1104</FONT>       * Get the XSLT TransformerFactoryImpl for needed services.<a name="line.1104"></a>
<FONT color="green">1105</FONT>       * TODO: This method should be renamed.<a name="line.1105"></a>
<FONT color="green">1106</FONT>       *<a name="line.1106"></a>
<FONT color="green">1107</FONT>       * @return The TransformerFactoryImpl that owns this handler.<a name="line.1107"></a>
<FONT color="green">1108</FONT>       */<a name="line.1108"></a>
<FONT color="green">1109</FONT>      public TransformerFactoryImpl getStylesheetProcessor()<a name="line.1109"></a>
<FONT color="green">1110</FONT>      {<a name="line.1110"></a>
<FONT color="green">1111</FONT>        return m_stylesheetProcessor;<a name="line.1111"></a>
<FONT color="green">1112</FONT>      }<a name="line.1112"></a>
<FONT color="green">1113</FONT>    <a name="line.1113"></a>
<FONT color="green">1114</FONT>      /**<a name="line.1114"></a>
<FONT color="green">1115</FONT>       * If getStylesheetType returns this value, the current stylesheet<a name="line.1115"></a>
<FONT color="green">1116</FONT>       *  is a root stylesheet.<a name="line.1116"></a>
<FONT color="green">1117</FONT>       * @xsl.usage internal<a name="line.1117"></a>
<FONT color="green">1118</FONT>       */<a name="line.1118"></a>
<FONT color="green">1119</FONT>      public static final int STYPE_ROOT = 1;<a name="line.1119"></a>
<FONT color="green">1120</FONT>    <a name="line.1120"></a>
<FONT color="green">1121</FONT>      /**<a name="line.1121"></a>
<FONT color="green">1122</FONT>       * If getStylesheetType returns this value, the current stylesheet<a name="line.1122"></a>
<FONT color="green">1123</FONT>       *  is an included stylesheet.<a name="line.1123"></a>
<FONT color="green">1124</FONT>       * @xsl.usage internal<a name="line.1124"></a>
<FONT color="green">1125</FONT>       */<a name="line.1125"></a>
<FONT color="green">1126</FONT>      public static final int STYPE_INCLUDE = 2;<a name="line.1126"></a>
<FONT color="green">1127</FONT>    <a name="line.1127"></a>
<FONT color="green">1128</FONT>      /**<a name="line.1128"></a>
<FONT color="green">1129</FONT>       * If getStylesheetType returns this value, the current stylesheet<a name="line.1129"></a>
<FONT color="green">1130</FONT>       *  is an imported stylesheet.<a name="line.1130"></a>
<FONT color="green">1131</FONT>       * @xsl.usage internal<a name="line.1131"></a>
<FONT color="green">1132</FONT>       */<a name="line.1132"></a>
<FONT color="green">1133</FONT>      public static final int STYPE_IMPORT = 3;<a name="line.1133"></a>
<FONT color="green">1134</FONT>    <a name="line.1134"></a>
<FONT color="green">1135</FONT>      /** The current stylesheet type. */<a name="line.1135"></a>
<FONT color="green">1136</FONT>      private int m_stylesheetType = STYPE_ROOT;<a name="line.1136"></a>
<FONT color="green">1137</FONT>    <a name="line.1137"></a>
<FONT color="green">1138</FONT>      /**<a name="line.1138"></a>
<FONT color="green">1139</FONT>       * Get the type of stylesheet that should be built<a name="line.1139"></a>
<FONT color="green">1140</FONT>       * or is being processed.<a name="line.1140"></a>
<FONT color="green">1141</FONT>       *<a name="line.1141"></a>
<FONT color="green">1142</FONT>       * @return one of STYPE_ROOT, STYPE_INCLUDE, or STYPE_IMPORT.<a name="line.1142"></a>
<FONT color="green">1143</FONT>       */<a name="line.1143"></a>
<FONT color="green">1144</FONT>      int getStylesheetType()<a name="line.1144"></a>
<FONT color="green">1145</FONT>      {<a name="line.1145"></a>
<FONT color="green">1146</FONT>        return m_stylesheetType;<a name="line.1146"></a>
<FONT color="green">1147</FONT>      }<a name="line.1147"></a>
<FONT color="green">1148</FONT>    <a name="line.1148"></a>
<FONT color="green">1149</FONT>      /**<a name="line.1149"></a>
<FONT color="green">1150</FONT>       * Set the type of stylesheet that should be built<a name="line.1150"></a>
<FONT color="green">1151</FONT>       * or is being processed.<a name="line.1151"></a>
<FONT color="green">1152</FONT>       *<a name="line.1152"></a>
<FONT color="green">1153</FONT>       * @param type Must be one of STYPE_ROOT, STYPE_INCLUDE, or STYPE_IMPORT.<a name="line.1153"></a>
<FONT color="green">1154</FONT>       */<a name="line.1154"></a>
<FONT color="green">1155</FONT>      void setStylesheetType(int type)<a name="line.1155"></a>
<FONT color="green">1156</FONT>      {<a name="line.1156"></a>
<FONT color="green">1157</FONT>        m_stylesheetType = type;<a name="line.1157"></a>
<FONT color="green">1158</FONT>      }<a name="line.1158"></a>
<FONT color="green">1159</FONT>    <a name="line.1159"></a>
<FONT color="green">1160</FONT>      /**<a name="line.1160"></a>
<FONT color="green">1161</FONT>       * The stack of stylesheets being processed.<a name="line.1161"></a>
<FONT color="green">1162</FONT>       */<a name="line.1162"></a>
<FONT color="green">1163</FONT>      private Stack m_stylesheets = new Stack();<a name="line.1163"></a>
<FONT color="green">1164</FONT>    <a name="line.1164"></a>
<FONT color="green">1165</FONT>      /**<a name="line.1165"></a>
<FONT color="green">1166</FONT>       * Return the stylesheet that this handler is constructing.<a name="line.1166"></a>
<FONT color="green">1167</FONT>       *<a name="line.1167"></a>
<FONT color="green">1168</FONT>       * @return The current stylesheet that is on top of the stylesheets stack,<a name="line.1168"></a>
<FONT color="green">1169</FONT>       *  or null if no stylesheet is on the stylesheets stack.<a name="line.1169"></a>
<FONT color="green">1170</FONT>       */<a name="line.1170"></a>
<FONT color="green">1171</FONT>      Stylesheet getStylesheet()<a name="line.1171"></a>
<FONT color="green">1172</FONT>      {<a name="line.1172"></a>
<FONT color="green">1173</FONT>        return (m_stylesheets.size() == 0)<a name="line.1173"></a>
<FONT color="green">1174</FONT>               ? null : (Stylesheet) m_stylesheets.peek();<a name="line.1174"></a>
<FONT color="green">1175</FONT>      }<a name="line.1175"></a>
<FONT color="green">1176</FONT>    <a name="line.1176"></a>
<FONT color="green">1177</FONT>      /**<a name="line.1177"></a>
<FONT color="green">1178</FONT>       * Return the last stylesheet that was popped off the stylesheets stack.<a name="line.1178"></a>
<FONT color="green">1179</FONT>       *<a name="line.1179"></a>
<FONT color="green">1180</FONT>       * @return The last popped stylesheet, or null.<a name="line.1180"></a>
<FONT color="green">1181</FONT>       */<a name="line.1181"></a>
<FONT color="green">1182</FONT>      Stylesheet getLastPoppedStylesheet()<a name="line.1182"></a>
<FONT color="green">1183</FONT>      {<a name="line.1183"></a>
<FONT color="green">1184</FONT>        return m_lastPoppedStylesheet;<a name="line.1184"></a>
<FONT color="green">1185</FONT>      }<a name="line.1185"></a>
<FONT color="green">1186</FONT>    <a name="line.1186"></a>
<FONT color="green">1187</FONT>      /**<a name="line.1187"></a>
<FONT color="green">1188</FONT>       * Return the stylesheet root that this handler is constructing.<a name="line.1188"></a>
<FONT color="green">1189</FONT>       *<a name="line.1189"></a>
<FONT color="green">1190</FONT>       * @return The root stylesheet of the stylesheets tree.<a name="line.1190"></a>
<FONT color="green">1191</FONT>       */<a name="line.1191"></a>
<FONT color="green">1192</FONT>      public StylesheetRoot getStylesheetRoot()<a name="line.1192"></a>
<FONT color="green">1193</FONT>      {<a name="line.1193"></a>
<FONT color="green">1194</FONT>        if (m_stylesheetRoot != null){<a name="line.1194"></a>
<FONT color="green">1195</FONT>            m_stylesheetRoot.setOptimizer(m_optimize);<a name="line.1195"></a>
<FONT color="green">1196</FONT>            m_stylesheetRoot.setIncremental(m_incremental);<a name="line.1196"></a>
<FONT color="green">1197</FONT>            m_stylesheetRoot.setSource_location(m_source_location);                 <a name="line.1197"></a>
<FONT color="green">1198</FONT>        }<a name="line.1198"></a>
<FONT color="green">1199</FONT>        return m_stylesheetRoot;<a name="line.1199"></a>
<FONT color="green">1200</FONT>      }<a name="line.1200"></a>
<FONT color="green">1201</FONT>    <a name="line.1201"></a>
<FONT color="green">1202</FONT>      /** The root stylesheet of the stylesheets tree. */<a name="line.1202"></a>
<FONT color="green">1203</FONT>      StylesheetRoot m_stylesheetRoot;<a name="line.1203"></a>
<FONT color="green">1204</FONT>            <a name="line.1204"></a>
<FONT color="green">1205</FONT>            /** The last stylesheet that was popped off the stylesheets stack. */<a name="line.1205"></a>
<FONT color="green">1206</FONT>      Stylesheet m_lastPoppedStylesheet;<a name="line.1206"></a>
<FONT color="green">1207</FONT>    <a name="line.1207"></a>
<FONT color="green">1208</FONT>      /**<a name="line.1208"></a>
<FONT color="green">1209</FONT>       * Push the current stylesheet being constructed. If no other stylesheets<a name="line.1209"></a>
<FONT color="green">1210</FONT>       * have been pushed onto the stack, assume the argument is a stylesheet<a name="line.1210"></a>
<FONT color="green">1211</FONT>       * root, and also set the stylesheet root member.<a name="line.1211"></a>
<FONT color="green">1212</FONT>       *<a name="line.1212"></a>
<FONT color="green">1213</FONT>       * @param s non-null reference to a stylesheet.<a name="line.1213"></a>
<FONT color="green">1214</FONT>       */<a name="line.1214"></a>
<FONT color="green">1215</FONT>      public void pushStylesheet(Stylesheet s)<a name="line.1215"></a>
<FONT color="green">1216</FONT>      {<a name="line.1216"></a>
<FONT color="green">1217</FONT>    <a name="line.1217"></a>
<FONT color="green">1218</FONT>        if (m_stylesheets.size() == 0)<a name="line.1218"></a>
<FONT color="green">1219</FONT>          m_stylesheetRoot = (StylesheetRoot) s;<a name="line.1219"></a>
<FONT color="green">1220</FONT>    <a name="line.1220"></a>
<FONT color="green">1221</FONT>        m_stylesheets.push(s);<a name="line.1221"></a>
<FONT color="green">1222</FONT>      }<a name="line.1222"></a>
<FONT color="green">1223</FONT>    <a name="line.1223"></a>
<FONT color="green">1224</FONT>      /**<a name="line.1224"></a>
<FONT color="green">1225</FONT>       * Pop the last stylesheet pushed, and return the stylesheet that this<a name="line.1225"></a>
<FONT color="green">1226</FONT>       * handler is constructing, and set the last popped stylesheet member.<a name="line.1226"></a>
<FONT color="green">1227</FONT>       * Also pop the stylesheet locator stack.<a name="line.1227"></a>
<FONT color="green">1228</FONT>       *<a name="line.1228"></a>
<FONT color="green">1229</FONT>       * @return The stylesheet popped off the stack, or the last popped stylesheet.<a name="line.1229"></a>
<FONT color="green">1230</FONT>       */<a name="line.1230"></a>
<FONT color="green">1231</FONT>      Stylesheet popStylesheet()<a name="line.1231"></a>
<FONT color="green">1232</FONT>      {<a name="line.1232"></a>
<FONT color="green">1233</FONT>    <a name="line.1233"></a>
<FONT color="green">1234</FONT>        // The stylesheetLocatorStack needs to be popped because<a name="line.1234"></a>
<FONT color="green">1235</FONT>        // a locator was pushed in for this stylesheet by the SAXparser by calling<a name="line.1235"></a>
<FONT color="green">1236</FONT>        // setDocumentLocator().<a name="line.1236"></a>
<FONT color="green">1237</FONT>        if (!m_stylesheetLocatorStack.isEmpty())<a name="line.1237"></a>
<FONT color="green">1238</FONT>          m_stylesheetLocatorStack.pop();<a name="line.1238"></a>
<FONT color="green">1239</FONT>    <a name="line.1239"></a>
<FONT color="green">1240</FONT>        if (!m_stylesheets.isEmpty())<a name="line.1240"></a>
<FONT color="green">1241</FONT>          m_lastPoppedStylesheet = (Stylesheet) m_stylesheets.pop();<a name="line.1241"></a>
<FONT color="green">1242</FONT>    <a name="line.1242"></a>
<FONT color="green">1243</FONT>        // Shouldn't this be null if stylesheets is empty?  -sb<a name="line.1243"></a>
<FONT color="green">1244</FONT>        return m_lastPoppedStylesheet;<a name="line.1244"></a>
<FONT color="green">1245</FONT>      }<a name="line.1245"></a>
<FONT color="green">1246</FONT>    <a name="line.1246"></a>
<FONT color="green">1247</FONT>      /**<a name="line.1247"></a>
<FONT color="green">1248</FONT>       * The stack of current processors.<a name="line.1248"></a>
<FONT color="green">1249</FONT>       */<a name="line.1249"></a>
<FONT color="green">1250</FONT>      private Stack m_processors = new Stack();<a name="line.1250"></a>
<FONT color="green">1251</FONT>    <a name="line.1251"></a>
<FONT color="green">1252</FONT>      /**<a name="line.1252"></a>
<FONT color="green">1253</FONT>       * Get the current XSLTElementProcessor at the top of the stack.<a name="line.1253"></a>
<FONT color="green">1254</FONT>       *<a name="line.1254"></a>
<FONT color="green">1255</FONT>       * @return Valid XSLTElementProcessor, which should never be null.<a name="line.1255"></a>
<FONT color="green">1256</FONT>       */<a name="line.1256"></a>
<FONT color="green">1257</FONT>      XSLTElementProcessor getCurrentProcessor()<a name="line.1257"></a>
<FONT color="green">1258</FONT>      {<a name="line.1258"></a>
<FONT color="green">1259</FONT>        return (XSLTElementProcessor) m_processors.peek();<a name="line.1259"></a>
<FONT color="green">1260</FONT>      }<a name="line.1260"></a>
<FONT color="green">1261</FONT>    <a name="line.1261"></a>
<FONT color="green">1262</FONT>      /**<a name="line.1262"></a>
<FONT color="green">1263</FONT>       * Push the current XSLTElementProcessor onto the top of the stack.<a name="line.1263"></a>
<FONT color="green">1264</FONT>       *<a name="line.1264"></a>
<FONT color="green">1265</FONT>       * @param processor non-null reference to the current element processor.<a name="line.1265"></a>
<FONT color="green">1266</FONT>       */<a name="line.1266"></a>
<FONT color="green">1267</FONT>      void pushProcessor(XSLTElementProcessor processor)<a name="line.1267"></a>
<FONT color="green">1268</FONT>      {<a name="line.1268"></a>
<FONT color="green">1269</FONT>        m_processors.push(processor);<a name="line.1269"></a>
<FONT color="green">1270</FONT>      }<a name="line.1270"></a>
<FONT color="green">1271</FONT>    <a name="line.1271"></a>
<FONT color="green">1272</FONT>      /**<a name="line.1272"></a>
<FONT color="green">1273</FONT>       * Pop the current XSLTElementProcessor from the top of the stack.<a name="line.1273"></a>
<FONT color="green">1274</FONT>       * @return the XSLTElementProcessor which was popped.<a name="line.1274"></a>
<FONT color="green">1275</FONT>       */<a name="line.1275"></a>
<FONT color="green">1276</FONT>      XSLTElementProcessor popProcessor()<a name="line.1276"></a>
<FONT color="green">1277</FONT>      {<a name="line.1277"></a>
<FONT color="green">1278</FONT>        return (XSLTElementProcessor) m_processors.pop();<a name="line.1278"></a>
<FONT color="green">1279</FONT>      }<a name="line.1279"></a>
<FONT color="green">1280</FONT>    <a name="line.1280"></a>
<FONT color="green">1281</FONT>      /**<a name="line.1281"></a>
<FONT color="green">1282</FONT>       * The root of the XSLT Schema, which tells us how to<a name="line.1282"></a>
<FONT color="green">1283</FONT>       * transition content handlers, create elements, etc.<a name="line.1283"></a>
<FONT color="green">1284</FONT>       * For the moment at least, this can't be static, since<a name="line.1284"></a>
<FONT color="green">1285</FONT>       * the processors store state.<a name="line.1285"></a>
<FONT color="green">1286</FONT>       */<a name="line.1286"></a>
<FONT color="green">1287</FONT>      private XSLTSchema m_schema = new XSLTSchema();<a name="line.1287"></a>
<FONT color="green">1288</FONT>    <a name="line.1288"></a>
<FONT color="green">1289</FONT>      /**<a name="line.1289"></a>
<FONT color="green">1290</FONT>       * Get the root of the XSLT Schema, which tells us how to<a name="line.1290"></a>
<FONT color="green">1291</FONT>       * transition content handlers, create elements, etc.<a name="line.1291"></a>
<FONT color="green">1292</FONT>       *<a name="line.1292"></a>
<FONT color="green">1293</FONT>       * @return The root XSLT Schema, which should never be null.<a name="line.1293"></a>
<FONT color="green">1294</FONT>       * @xsl.usage internal<a name="line.1294"></a>
<FONT color="green">1295</FONT>       */<a name="line.1295"></a>
<FONT color="green">1296</FONT>      public XSLTSchema getSchema()<a name="line.1296"></a>
<FONT color="green">1297</FONT>      {<a name="line.1297"></a>
<FONT color="green">1298</FONT>        return m_schema;<a name="line.1298"></a>
<FONT color="green">1299</FONT>      }<a name="line.1299"></a>
<FONT color="green">1300</FONT>    <a name="line.1300"></a>
<FONT color="green">1301</FONT>      /**<a name="line.1301"></a>
<FONT color="green">1302</FONT>       * The stack of elements, pushed and popped as events occur.<a name="line.1302"></a>
<FONT color="green">1303</FONT>       */<a name="line.1303"></a>
<FONT color="green">1304</FONT>      private Stack m_elems = new Stack();<a name="line.1304"></a>
<FONT color="green">1305</FONT>    <a name="line.1305"></a>
<FONT color="green">1306</FONT>      /**<a name="line.1306"></a>
<FONT color="green">1307</FONT>       * Get the current ElemTemplateElement at the top of the stack.<a name="line.1307"></a>
<FONT color="green">1308</FONT>       * @return Valid ElemTemplateElement, which may be null.<a name="line.1308"></a>
<FONT color="green">1309</FONT>       */<a name="line.1309"></a>
<FONT color="green">1310</FONT>      ElemTemplateElement getElemTemplateElement()<a name="line.1310"></a>
<FONT color="green">1311</FONT>      {<a name="line.1311"></a>
<FONT color="green">1312</FONT>    <a name="line.1312"></a>
<FONT color="green">1313</FONT>        try<a name="line.1313"></a>
<FONT color="green">1314</FONT>        {<a name="line.1314"></a>
<FONT color="green">1315</FONT>          return (ElemTemplateElement) m_elems.peek();<a name="line.1315"></a>
<FONT color="green">1316</FONT>        }<a name="line.1316"></a>
<FONT color="green">1317</FONT>        catch (java.util.EmptyStackException ese)<a name="line.1317"></a>
<FONT color="green">1318</FONT>        {<a name="line.1318"></a>
<FONT color="green">1319</FONT>          return null;<a name="line.1319"></a>
<FONT color="green">1320</FONT>        }<a name="line.1320"></a>
<FONT color="green">1321</FONT>      }  <a name="line.1321"></a>
<FONT color="green">1322</FONT>    <a name="line.1322"></a>
<FONT color="green">1323</FONT>      /** An increasing number that is used to indicate the order in which this element<a name="line.1323"></a>
<FONT color="green">1324</FONT>       *  was encountered during the parse of the XSLT tree.<a name="line.1324"></a>
<FONT color="green">1325</FONT>       */<a name="line.1325"></a>
<FONT color="green">1326</FONT>      private int m_docOrderCount = 0;<a name="line.1326"></a>
<FONT color="green">1327</FONT>    <a name="line.1327"></a>
<FONT color="green">1328</FONT>      /**<a name="line.1328"></a>
<FONT color="green">1329</FONT>       * Returns the next m_docOrderCount number and increments the number for future use.<a name="line.1329"></a>
<FONT color="green">1330</FONT>       */<a name="line.1330"></a>
<FONT color="green">1331</FONT>      int nextUid()<a name="line.1331"></a>
<FONT color="green">1332</FONT>      {<a name="line.1332"></a>
<FONT color="green">1333</FONT>        return m_docOrderCount++;<a name="line.1333"></a>
<FONT color="green">1334</FONT>      }<a name="line.1334"></a>
<FONT color="green">1335</FONT>    <a name="line.1335"></a>
<FONT color="green">1336</FONT>      /**<a name="line.1336"></a>
<FONT color="green">1337</FONT>       * Push the current XSLTElementProcessor to the top of the stack.  As a<a name="line.1337"></a>
<FONT color="green">1338</FONT>       * side-effect, set the document order index (simply because this is a<a name="line.1338"></a>
<FONT color="green">1339</FONT>       * convenient place to set it).<a name="line.1339"></a>
<FONT color="green">1340</FONT>       *<a name="line.1340"></a>
<FONT color="green">1341</FONT>       * @param elem Should be a non-null reference to the intended current<a name="line.1341"></a>
<FONT color="green">1342</FONT>       * template element.<a name="line.1342"></a>
<FONT color="green">1343</FONT>       */<a name="line.1343"></a>
<FONT color="green">1344</FONT>      void pushElemTemplateElement(ElemTemplateElement elem)<a name="line.1344"></a>
<FONT color="green">1345</FONT>      {<a name="line.1345"></a>
<FONT color="green">1346</FONT>    <a name="line.1346"></a>
<FONT color="green">1347</FONT>        if (elem.getUid() == -1)<a name="line.1347"></a>
<FONT color="green">1348</FONT>          elem.setUid(nextUid());<a name="line.1348"></a>
<FONT color="green">1349</FONT>    <a name="line.1349"></a>
<FONT color="green">1350</FONT>        m_elems.push(elem);<a name="line.1350"></a>
<FONT color="green">1351</FONT>      }<a name="line.1351"></a>
<FONT color="green">1352</FONT>    <a name="line.1352"></a>
<FONT color="green">1353</FONT>      /**<a name="line.1353"></a>
<FONT color="green">1354</FONT>       * Get the current XSLTElementProcessor from the top of the stack.<a name="line.1354"></a>
<FONT color="green">1355</FONT>       * @return the ElemTemplateElement which was popped.<a name="line.1355"></a>
<FONT color="green">1356</FONT>       */<a name="line.1356"></a>
<FONT color="green">1357</FONT>      ElemTemplateElement popElemTemplateElement()<a name="line.1357"></a>
<FONT color="green">1358</FONT>      {<a name="line.1358"></a>
<FONT color="green">1359</FONT>        return (ElemTemplateElement) m_elems.pop();<a name="line.1359"></a>
<FONT color="green">1360</FONT>      }<a name="line.1360"></a>
<FONT color="green">1361</FONT>    <a name="line.1361"></a>
<FONT color="green">1362</FONT>      /**<a name="line.1362"></a>
<FONT color="green">1363</FONT>       * This will act as a stack to keep track of the<a name="line.1363"></a>
<FONT color="green">1364</FONT>       * current include base.<a name="line.1364"></a>
<FONT color="green">1365</FONT>       */<a name="line.1365"></a>
<FONT color="green">1366</FONT>      Stack m_baseIdentifiers = new Stack();<a name="line.1366"></a>
<FONT color="green">1367</FONT>    <a name="line.1367"></a>
<FONT color="green">1368</FONT>      /**<a name="line.1368"></a>
<FONT color="green">1369</FONT>       * Push a base identifier onto the base URI stack.<a name="line.1369"></a>
<FONT color="green">1370</FONT>       *<a name="line.1370"></a>
<FONT color="green">1371</FONT>       * @param baseID The current base identifier for this position in the<a name="line.1371"></a>
<FONT color="green">1372</FONT>       * stylesheet, which may be a fragment identifier, or which may be null.<a name="line.1372"></a>
<FONT color="green">1373</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#base-uri"&gt;<a name="line.1373"></a>
<FONT color="green">1374</FONT>       * Section 3.2 Base URI of XSLT specification.&lt;/a&gt;<a name="line.1374"></a>
<FONT color="green">1375</FONT>       */<a name="line.1375"></a>
<FONT color="green">1376</FONT>      void pushBaseIndentifier(String baseID)<a name="line.1376"></a>
<FONT color="green">1377</FONT>      {<a name="line.1377"></a>
<FONT color="green">1378</FONT>    <a name="line.1378"></a>
<FONT color="green">1379</FONT>        if (null != baseID)<a name="line.1379"></a>
<FONT color="green">1380</FONT>        {<a name="line.1380"></a>
<FONT color="green">1381</FONT>          int posOfHash = baseID.indexOf('#');<a name="line.1381"></a>
<FONT color="green">1382</FONT>    <a name="line.1382"></a>
<FONT color="green">1383</FONT>          if (posOfHash &gt; -1)<a name="line.1383"></a>
<FONT color="green">1384</FONT>          {<a name="line.1384"></a>
<FONT color="green">1385</FONT>            m_fragmentIDString = baseID.substring(posOfHash + 1);<a name="line.1385"></a>
<FONT color="green">1386</FONT>            m_shouldProcess = false;<a name="line.1386"></a>
<FONT color="green">1387</FONT>          }<a name="line.1387"></a>
<FONT color="green">1388</FONT>          else<a name="line.1388"></a>
<FONT color="green">1389</FONT>            m_shouldProcess = true;<a name="line.1389"></a>
<FONT color="green">1390</FONT>        }<a name="line.1390"></a>
<FONT color="green">1391</FONT>        else<a name="line.1391"></a>
<FONT color="green">1392</FONT>          m_shouldProcess = true;<a name="line.1392"></a>
<FONT color="green">1393</FONT>    <a name="line.1393"></a>
<FONT color="green">1394</FONT>        m_baseIdentifiers.push(baseID);<a name="line.1394"></a>
<FONT color="green">1395</FONT>      }<a name="line.1395"></a>
<FONT color="green">1396</FONT>    <a name="line.1396"></a>
<FONT color="green">1397</FONT>      /**<a name="line.1397"></a>
<FONT color="green">1398</FONT>       * Pop a base URI from the stack.<a name="line.1398"></a>
<FONT color="green">1399</FONT>       * @return baseIdentifier.<a name="line.1399"></a>
<FONT color="green">1400</FONT>       */<a name="line.1400"></a>
<FONT color="green">1401</FONT>      String popBaseIndentifier()<a name="line.1401"></a>
<FONT color="green">1402</FONT>      {<a name="line.1402"></a>
<FONT color="green">1403</FONT>        return (String) m_baseIdentifiers.pop();<a name="line.1403"></a>
<FONT color="green">1404</FONT>      }<a name="line.1404"></a>
<FONT color="green">1405</FONT>    <a name="line.1405"></a>
<FONT color="green">1406</FONT>      /**<a name="line.1406"></a>
<FONT color="green">1407</FONT>       * Return the base identifier.<a name="line.1407"></a>
<FONT color="green">1408</FONT>       *<a name="line.1408"></a>
<FONT color="green">1409</FONT>       * @return The base identifier of the current stylesheet.<a name="line.1409"></a>
<FONT color="green">1410</FONT>       */<a name="line.1410"></a>
<FONT color="green">1411</FONT>      public String getBaseIdentifier()<a name="line.1411"></a>
<FONT color="green">1412</FONT>      {<a name="line.1412"></a>
<FONT color="green">1413</FONT>    <a name="line.1413"></a>
<FONT color="green">1414</FONT>        // Try to get the baseIdentifier from the baseIdentifier's stack,<a name="line.1414"></a>
<FONT color="green">1415</FONT>        // which may not be the same thing as the value found in the<a name="line.1415"></a>
<FONT color="green">1416</FONT>        // SourceLocators stack.<a name="line.1416"></a>
<FONT color="green">1417</FONT>        String base = (String) (m_baseIdentifiers.isEmpty()<a name="line.1417"></a>
<FONT color="green">1418</FONT>                                ? null : m_baseIdentifiers.peek());<a name="line.1418"></a>
<FONT color="green">1419</FONT>    <a name="line.1419"></a>
<FONT color="green">1420</FONT>        // Otherwise try the stylesheet.<a name="line.1420"></a>
<FONT color="green">1421</FONT>        if (null == base)<a name="line.1421"></a>
<FONT color="green">1422</FONT>        {<a name="line.1422"></a>
<FONT color="green">1423</FONT>          SourceLocator locator = getLocator();<a name="line.1423"></a>
<FONT color="green">1424</FONT>    <a name="line.1424"></a>
<FONT color="green">1425</FONT>          base = (null == locator) ? "" : locator.getSystemId();<a name="line.1425"></a>
<FONT color="green">1426</FONT>        }<a name="line.1426"></a>
<FONT color="green">1427</FONT>    <a name="line.1427"></a>
<FONT color="green">1428</FONT>        return base;<a name="line.1428"></a>
<FONT color="green">1429</FONT>      }<a name="line.1429"></a>
<FONT color="green">1430</FONT>    <a name="line.1430"></a>
<FONT color="green">1431</FONT>      /**<a name="line.1431"></a>
<FONT color="green">1432</FONT>       * The top of this stack should contain the currently processed<a name="line.1432"></a>
<FONT color="green">1433</FONT>       * stylesheet SAX locator object.<a name="line.1433"></a>
<FONT color="green">1434</FONT>       */<a name="line.1434"></a>
<FONT color="green">1435</FONT>      private Stack m_stylesheetLocatorStack = new Stack();<a name="line.1435"></a>
<FONT color="green">1436</FONT>    <a name="line.1436"></a>
<FONT color="green">1437</FONT>      /**<a name="line.1437"></a>
<FONT color="green">1438</FONT>       * Get the current stylesheet Locator object.<a name="line.1438"></a>
<FONT color="green">1439</FONT>       *<a name="line.1439"></a>
<FONT color="green">1440</FONT>       * @return non-null reference to the current locator object.<a name="line.1440"></a>
<FONT color="green">1441</FONT>       */<a name="line.1441"></a>
<FONT color="green">1442</FONT>      public SAXSourceLocator getLocator()<a name="line.1442"></a>
<FONT color="green">1443</FONT>      {<a name="line.1443"></a>
<FONT color="green">1444</FONT>    <a name="line.1444"></a>
<FONT color="green">1445</FONT>        if (m_stylesheetLocatorStack.isEmpty())<a name="line.1445"></a>
<FONT color="green">1446</FONT>        {<a name="line.1446"></a>
<FONT color="green">1447</FONT>          SAXSourceLocator locator = new SAXSourceLocator();<a name="line.1447"></a>
<FONT color="green">1448</FONT>    <a name="line.1448"></a>
<FONT color="green">1449</FONT>          locator.setSystemId(this.getStylesheetProcessor().getDOMsystemID());<a name="line.1449"></a>
<FONT color="green">1450</FONT>    <a name="line.1450"></a>
<FONT color="green">1451</FONT>          return locator;<a name="line.1451"></a>
<FONT color="green">1452</FONT>    <a name="line.1452"></a>
<FONT color="green">1453</FONT>          // m_stylesheetLocatorStack.push(locator);<a name="line.1453"></a>
<FONT color="green">1454</FONT>        }<a name="line.1454"></a>
<FONT color="green">1455</FONT>    <a name="line.1455"></a>
<FONT color="green">1456</FONT>        return ((SAXSourceLocator) m_stylesheetLocatorStack.peek());<a name="line.1456"></a>
<FONT color="green">1457</FONT>      }<a name="line.1457"></a>
<FONT color="green">1458</FONT>    <a name="line.1458"></a>
<FONT color="green">1459</FONT>      /**<a name="line.1459"></a>
<FONT color="green">1460</FONT>       * A stack of URL hrefs for imported stylesheets.  This is<a name="line.1460"></a>
<FONT color="green">1461</FONT>       * used to diagnose circular imports.<a name="line.1461"></a>
<FONT color="green">1462</FONT>       */<a name="line.1462"></a>
<FONT color="green">1463</FONT>      private Stack m_importStack = new Stack();<a name="line.1463"></a>
<FONT color="green">1464</FONT>      <a name="line.1464"></a>
<FONT color="green">1465</FONT>      /**<a name="line.1465"></a>
<FONT color="green">1466</FONT>       * A stack of Source objects obtained from a URIResolver,<a name="line.1466"></a>
<FONT color="green">1467</FONT>       * for each element in this stack there is a 1-1 correspondence<a name="line.1467"></a>
<FONT color="green">1468</FONT>       * with an element in the m_importStack.<a name="line.1468"></a>
<FONT color="green">1469</FONT>       */<a name="line.1469"></a>
<FONT color="green">1470</FONT>      private Stack m_importSourceStack = new Stack();<a name="line.1470"></a>
<FONT color="green">1471</FONT>    <a name="line.1471"></a>
<FONT color="green">1472</FONT>      /**<a name="line.1472"></a>
<FONT color="green">1473</FONT>       * Push an import href onto the stylesheet stack.<a name="line.1473"></a>
<FONT color="green">1474</FONT>       *<a name="line.1474"></a>
<FONT color="green">1475</FONT>       * @param hrefUrl non-null reference to the URL for the current imported<a name="line.1475"></a>
<FONT color="green">1476</FONT>       * stylesheet.<a name="line.1476"></a>
<FONT color="green">1477</FONT>       */<a name="line.1477"></a>
<FONT color="green">1478</FONT>      void pushImportURL(String hrefUrl)<a name="line.1478"></a>
<FONT color="green">1479</FONT>      {<a name="line.1479"></a>
<FONT color="green">1480</FONT>        m_importStack.push(hrefUrl);<a name="line.1480"></a>
<FONT color="green">1481</FONT>      }<a name="line.1481"></a>
<FONT color="green">1482</FONT>      <a name="line.1482"></a>
<FONT color="green">1483</FONT>      /**<a name="line.1483"></a>
<FONT color="green">1484</FONT>       * Push the Source of an import href onto the stylesheet stack,<a name="line.1484"></a>
<FONT color="green">1485</FONT>       * obtained from a URIResolver, null if there is no URIResolver,<a name="line.1485"></a>
<FONT color="green">1486</FONT>       * or if that resolver returned null.<a name="line.1486"></a>
<FONT color="green">1487</FONT>       */<a name="line.1487"></a>
<FONT color="green">1488</FONT>      void pushImportSource(Source sourceFromURIResolver)<a name="line.1488"></a>
<FONT color="green">1489</FONT>      {<a name="line.1489"></a>
<FONT color="green">1490</FONT>        m_importSourceStack.push(sourceFromURIResolver);<a name="line.1490"></a>
<FONT color="green">1491</FONT>      }<a name="line.1491"></a>
<FONT color="green">1492</FONT>    <a name="line.1492"></a>
<FONT color="green">1493</FONT>      /**<a name="line.1493"></a>
<FONT color="green">1494</FONT>       * See if the imported stylesheet stack already contains<a name="line.1494"></a>
<FONT color="green">1495</FONT>       * the given URL.  Used to test for recursive imports.<a name="line.1495"></a>
<FONT color="green">1496</FONT>       *<a name="line.1496"></a>
<FONT color="green">1497</FONT>       * @param hrefUrl non-null reference to a URL string.<a name="line.1497"></a>
<FONT color="green">1498</FONT>       *<a name="line.1498"></a>
<FONT color="green">1499</FONT>       * @return true if the URL is on the import stack.<a name="line.1499"></a>
<FONT color="green">1500</FONT>       */<a name="line.1500"></a>
<FONT color="green">1501</FONT>      boolean importStackContains(String hrefUrl)<a name="line.1501"></a>
<FONT color="green">1502</FONT>      {<a name="line.1502"></a>
<FONT color="green">1503</FONT>        return stackContains(m_importStack, hrefUrl);<a name="line.1503"></a>
<FONT color="green">1504</FONT>      }<a name="line.1504"></a>
<FONT color="green">1505</FONT>    <a name="line.1505"></a>
<FONT color="green">1506</FONT>      /**<a name="line.1506"></a>
<FONT color="green">1507</FONT>       * Pop an import href from the stylesheet stack.<a name="line.1507"></a>
<FONT color="green">1508</FONT>       *<a name="line.1508"></a>
<FONT color="green">1509</FONT>       * @return non-null reference to the import URL that was popped.<a name="line.1509"></a>
<FONT color="green">1510</FONT>       */<a name="line.1510"></a>
<FONT color="green">1511</FONT>      String popImportURL()<a name="line.1511"></a>
<FONT color="green">1512</FONT>      {<a name="line.1512"></a>
<FONT color="green">1513</FONT>        return (String) m_importStack.pop();<a name="line.1513"></a>
<FONT color="green">1514</FONT>      }<a name="line.1514"></a>
<FONT color="green">1515</FONT>      <a name="line.1515"></a>
<FONT color="green">1516</FONT>      String peekImportURL()<a name="line.1516"></a>
<FONT color="green">1517</FONT>      {<a name="line.1517"></a>
<FONT color="green">1518</FONT>        return (String) m_importStack.peek();<a name="line.1518"></a>
<FONT color="green">1519</FONT>      }<a name="line.1519"></a>
<FONT color="green">1520</FONT>      <a name="line.1520"></a>
<FONT color="green">1521</FONT>      Source peekSourceFromURIResolver()<a name="line.1521"></a>
<FONT color="green">1522</FONT>      {<a name="line.1522"></a>
<FONT color="green">1523</FONT>        return (Source) m_importSourceStack.peek();<a name="line.1523"></a>
<FONT color="green">1524</FONT>      }<a name="line.1524"></a>
<FONT color="green">1525</FONT>      <a name="line.1525"></a>
<FONT color="green">1526</FONT>      /**<a name="line.1526"></a>
<FONT color="green">1527</FONT>       * Pop a Source from a user provided URIResolver, corresponding<a name="line.1527"></a>
<FONT color="green">1528</FONT>       * to the URL popped from the m_importStack.<a name="line.1528"></a>
<FONT color="green">1529</FONT>       */<a name="line.1529"></a>
<FONT color="green">1530</FONT>      Source popImportSource()<a name="line.1530"></a>
<FONT color="green">1531</FONT>      {<a name="line.1531"></a>
<FONT color="green">1532</FONT>        return (Source) m_importSourceStack.pop();<a name="line.1532"></a>
<FONT color="green">1533</FONT>      }<a name="line.1533"></a>
<FONT color="green">1534</FONT>    <a name="line.1534"></a>
<FONT color="green">1535</FONT>      /**<a name="line.1535"></a>
<FONT color="green">1536</FONT>       * If this is set to true, we've already warned about using the<a name="line.1536"></a>
<FONT color="green">1537</FONT>       * older XSLT namespace URL.<a name="line.1537"></a>
<FONT color="green">1538</FONT>       */<a name="line.1538"></a>
<FONT color="green">1539</FONT>      private boolean warnedAboutOldXSLTNamespace = false;<a name="line.1539"></a>
<FONT color="green">1540</FONT>    <a name="line.1540"></a>
<FONT color="green">1541</FONT>      /** Stack of NamespaceSupport objects. */<a name="line.1541"></a>
<FONT color="green">1542</FONT>      Stack m_nsSupportStack = new Stack();<a name="line.1542"></a>
<FONT color="green">1543</FONT>    <a name="line.1543"></a>
<FONT color="green">1544</FONT>      /**<a name="line.1544"></a>
<FONT color="green">1545</FONT>       * Push a new NamespaceSupport instance.<a name="line.1545"></a>
<FONT color="green">1546</FONT>       */<a name="line.1546"></a>
<FONT color="green">1547</FONT>      void pushNewNamespaceSupport()<a name="line.1547"></a>
<FONT color="green">1548</FONT>      {<a name="line.1548"></a>
<FONT color="green">1549</FONT>        m_nsSupportStack.push(new NamespaceSupport2());<a name="line.1549"></a>
<FONT color="green">1550</FONT>      }<a name="line.1550"></a>
<FONT color="green">1551</FONT>    <a name="line.1551"></a>
<FONT color="green">1552</FONT>      /**<a name="line.1552"></a>
<FONT color="green">1553</FONT>       * Pop the current NamespaceSupport object.<a name="line.1553"></a>
<FONT color="green">1554</FONT>       *<a name="line.1554"></a>
<FONT color="green">1555</FONT>       */<a name="line.1555"></a>
<FONT color="green">1556</FONT>      void popNamespaceSupport()<a name="line.1556"></a>
<FONT color="green">1557</FONT>      {<a name="line.1557"></a>
<FONT color="green">1558</FONT>        m_nsSupportStack.pop();<a name="line.1558"></a>
<FONT color="green">1559</FONT>      }<a name="line.1559"></a>
<FONT color="green">1560</FONT>    <a name="line.1560"></a>
<FONT color="green">1561</FONT>      /**<a name="line.1561"></a>
<FONT color="green">1562</FONT>       * Get the current NamespaceSupport object.<a name="line.1562"></a>
<FONT color="green">1563</FONT>       *<a name="line.1563"></a>
<FONT color="green">1564</FONT>       * @return a non-null reference to the current NamespaceSupport object,<a name="line.1564"></a>
<FONT color="green">1565</FONT>       * which is the top of the namespace support stack.<a name="line.1565"></a>
<FONT color="green">1566</FONT>       */<a name="line.1566"></a>
<FONT color="green">1567</FONT>      NamespaceSupport getNamespaceSupport()<a name="line.1567"></a>
<FONT color="green">1568</FONT>      {<a name="line.1568"></a>
<FONT color="green">1569</FONT>        return (NamespaceSupport) m_nsSupportStack.peek();<a name="line.1569"></a>
<FONT color="green">1570</FONT>      }<a name="line.1570"></a>
<FONT color="green">1571</FONT>    <a name="line.1571"></a>
<FONT color="green">1572</FONT>      /**<a name="line.1572"></a>
<FONT color="green">1573</FONT>       * The originating node if the current stylesheet is being created<a name="line.1573"></a>
<FONT color="green">1574</FONT>       *  from a DOM.<a name="line.1574"></a>
<FONT color="green">1575</FONT>       *  @see org.apache.xml.utils.NodeConsumer<a name="line.1575"></a>
<FONT color="green">1576</FONT>       */<a name="line.1576"></a>
<FONT color="green">1577</FONT>      private Node m_originatingNode;<a name="line.1577"></a>
<FONT color="green">1578</FONT>    <a name="line.1578"></a>
<FONT color="green">1579</FONT>      /**<a name="line.1579"></a>
<FONT color="green">1580</FONT>       * Set the node that is originating the SAX event.<a name="line.1580"></a>
<FONT color="green">1581</FONT>       *<a name="line.1581"></a>
<FONT color="green">1582</FONT>       * @param n Reference to node that originated the current event.<a name="line.1582"></a>
<FONT color="green">1583</FONT>       * @see org.apache.xml.utils.NodeConsumer<a name="line.1583"></a>
<FONT color="green">1584</FONT>       */<a name="line.1584"></a>
<FONT color="green">1585</FONT>      public void setOriginatingNode(Node n)<a name="line.1585"></a>
<FONT color="green">1586</FONT>      {<a name="line.1586"></a>
<FONT color="green">1587</FONT>        m_originatingNode = n;<a name="line.1587"></a>
<FONT color="green">1588</FONT>      }<a name="line.1588"></a>
<FONT color="green">1589</FONT>    <a name="line.1589"></a>
<FONT color="green">1590</FONT>      /**<a name="line.1590"></a>
<FONT color="green">1591</FONT>       * Set the node that is originating the SAX event.<a name="line.1591"></a>
<FONT color="green">1592</FONT>       *<a name="line.1592"></a>
<FONT color="green">1593</FONT>       * @return Reference to node that originated the current event.<a name="line.1593"></a>
<FONT color="green">1594</FONT>       * @see org.apache.xml.utils.NodeConsumer<a name="line.1594"></a>
<FONT color="green">1595</FONT>       */<a name="line.1595"></a>
<FONT color="green">1596</FONT>      public Node getOriginatingNode()<a name="line.1596"></a>
<FONT color="green">1597</FONT>      {<a name="line.1597"></a>
<FONT color="green">1598</FONT>        return m_originatingNode;<a name="line.1598"></a>
<FONT color="green">1599</FONT>      }<a name="line.1599"></a>
<FONT color="green">1600</FONT>      <a name="line.1600"></a>
<FONT color="green">1601</FONT>      /**<a name="line.1601"></a>
<FONT color="green">1602</FONT>       * Stack of booleans that are pushed and popped in start/endElement depending <a name="line.1602"></a>
<FONT color="green">1603</FONT>       * on the value of xml:space=default/preserve.<a name="line.1603"></a>
<FONT color="green">1604</FONT>       */<a name="line.1604"></a>
<FONT color="green">1605</FONT>      private BoolStack m_spacePreserveStack = new BoolStack();<a name="line.1605"></a>
<FONT color="green">1606</FONT>      <a name="line.1606"></a>
<FONT color="green">1607</FONT>      /**<a name="line.1607"></a>
<FONT color="green">1608</FONT>       * Return boolean value from the spacePreserve stack depending on the value <a name="line.1608"></a>
<FONT color="green">1609</FONT>       * of xml:space=default/preserve.<a name="line.1609"></a>
<FONT color="green">1610</FONT>       * <a name="line.1610"></a>
<FONT color="green">1611</FONT>       * @return true if space should be preserved, false otherwise.<a name="line.1611"></a>
<FONT color="green">1612</FONT>       */<a name="line.1612"></a>
<FONT color="green">1613</FONT>      boolean isSpacePreserve()<a name="line.1613"></a>
<FONT color="green">1614</FONT>      {<a name="line.1614"></a>
<FONT color="green">1615</FONT>        return m_spacePreserveStack.peek();<a name="line.1615"></a>
<FONT color="green">1616</FONT>      }<a name="line.1616"></a>
<FONT color="green">1617</FONT>      <a name="line.1617"></a>
<FONT color="green">1618</FONT>      /**<a name="line.1618"></a>
<FONT color="green">1619</FONT>       * Pop boolean value from the spacePreserve stack.<a name="line.1619"></a>
<FONT color="green">1620</FONT>       */<a name="line.1620"></a>
<FONT color="green">1621</FONT>      void popSpaceHandling()<a name="line.1621"></a>
<FONT color="green">1622</FONT>      {<a name="line.1622"></a>
<FONT color="green">1623</FONT>        m_spacePreserveStack.pop();<a name="line.1623"></a>
<FONT color="green">1624</FONT>      }<a name="line.1624"></a>
<FONT color="green">1625</FONT>      <a name="line.1625"></a>
<FONT color="green">1626</FONT>      /**<a name="line.1626"></a>
<FONT color="green">1627</FONT>       * Push boolean value on to the spacePreserve stack.<a name="line.1627"></a>
<FONT color="green">1628</FONT>       * <a name="line.1628"></a>
<FONT color="green">1629</FONT>       * @param b true if space should be preserved, false otherwise.<a name="line.1629"></a>
<FONT color="green">1630</FONT>       */<a name="line.1630"></a>
<FONT color="green">1631</FONT>      void pushSpaceHandling(boolean b)<a name="line.1631"></a>
<FONT color="green">1632</FONT>        throws org.xml.sax.SAXParseException<a name="line.1632"></a>
<FONT color="green">1633</FONT>      {<a name="line.1633"></a>
<FONT color="green">1634</FONT>        m_spacePreserveStack.push(b);<a name="line.1634"></a>
<FONT color="green">1635</FONT>      }<a name="line.1635"></a>
<FONT color="green">1636</FONT>      <a name="line.1636"></a>
<FONT color="green">1637</FONT>      /**<a name="line.1637"></a>
<FONT color="green">1638</FONT>       * Push boolean value on to the spacePreserve stack depending on the value <a name="line.1638"></a>
<FONT color="green">1639</FONT>       * of xml:space=default/preserve.<a name="line.1639"></a>
<FONT color="green">1640</FONT>       * <a name="line.1640"></a>
<FONT color="green">1641</FONT>       * @param attrs list of attributes that were passed to startElement.<a name="line.1641"></a>
<FONT color="green">1642</FONT>       */<a name="line.1642"></a>
<FONT color="green">1643</FONT>      void pushSpaceHandling(Attributes attrs)<a name="line.1643"></a>
<FONT color="green">1644</FONT>        throws org.xml.sax.SAXParseException<a name="line.1644"></a>
<FONT color="green">1645</FONT>      {    <a name="line.1645"></a>
<FONT color="green">1646</FONT>        String value = attrs.getValue("xml:space");<a name="line.1646"></a>
<FONT color="green">1647</FONT>        if(null == value)<a name="line.1647"></a>
<FONT color="green">1648</FONT>        {<a name="line.1648"></a>
<FONT color="green">1649</FONT>          m_spacePreserveStack.push(m_spacePreserveStack.peekOrFalse());<a name="line.1649"></a>
<FONT color="green">1650</FONT>        }<a name="line.1650"></a>
<FONT color="green">1651</FONT>        else if(value.equals("preserve"))<a name="line.1651"></a>
<FONT color="green">1652</FONT>        {<a name="line.1652"></a>
<FONT color="green">1653</FONT>          m_spacePreserveStack.push(true);<a name="line.1653"></a>
<FONT color="green">1654</FONT>        }<a name="line.1654"></a>
<FONT color="green">1655</FONT>        else if(value.equals("default"))<a name="line.1655"></a>
<FONT color="green">1656</FONT>        {<a name="line.1656"></a>
<FONT color="green">1657</FONT>          m_spacePreserveStack.push(false);<a name="line.1657"></a>
<FONT color="green">1658</FONT>        }<a name="line.1658"></a>
<FONT color="green">1659</FONT>        else<a name="line.1659"></a>
<FONT color="green">1660</FONT>        {<a name="line.1660"></a>
<FONT color="green">1661</FONT>          SAXSourceLocator locator = getLocator();<a name="line.1661"></a>
<FONT color="green">1662</FONT>          ErrorListener handler = m_stylesheetProcessor.getErrorListener();<a name="line.1662"></a>
<FONT color="green">1663</FONT>      <a name="line.1663"></a>
<FONT color="green">1664</FONT>          try<a name="line.1664"></a>
<FONT color="green">1665</FONT>          {<a name="line.1665"></a>
<FONT color="green">1666</FONT>            handler.error(new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ILLEGAL_XMLSPACE_VALUE, null), locator)); //"Illegal value for xml:space", locator));<a name="line.1666"></a>
<FONT color="green">1667</FONT>          }<a name="line.1667"></a>
<FONT color="green">1668</FONT>          catch (TransformerException te)<a name="line.1668"></a>
<FONT color="green">1669</FONT>          {<a name="line.1669"></a>
<FONT color="green">1670</FONT>            throw new org.xml.sax.SAXParseException(te.getMessage(), locator, te);<a name="line.1670"></a>
<FONT color="green">1671</FONT>          }<a name="line.1671"></a>
<FONT color="green">1672</FONT>          m_spacePreserveStack.push(m_spacePreserveStack.peek());<a name="line.1672"></a>
<FONT color="green">1673</FONT>        }<a name="line.1673"></a>
<FONT color="green">1674</FONT>      }<a name="line.1674"></a>
<FONT color="green">1675</FONT>      <a name="line.1675"></a>
<FONT color="green">1676</FONT>      private double getElemVersion()<a name="line.1676"></a>
<FONT color="green">1677</FONT>      {<a name="line.1677"></a>
<FONT color="green">1678</FONT>        ElemTemplateElement elem = getElemTemplateElement();<a name="line.1678"></a>
<FONT color="green">1679</FONT>        double version = -1; <a name="line.1679"></a>
<FONT color="green">1680</FONT>        while ((version == -1 || version == Constants.XSLTVERSUPPORTED) &amp;&amp; elem != null)<a name="line.1680"></a>
<FONT color="green">1681</FONT>        {<a name="line.1681"></a>
<FONT color="green">1682</FONT>          try{<a name="line.1682"></a>
<FONT color="green">1683</FONT>          version = Double.valueOf(elem.getXmlVersion()).doubleValue();<a name="line.1683"></a>
<FONT color="green">1684</FONT>          }<a name="line.1684"></a>
<FONT color="green">1685</FONT>          catch (Exception ex)<a name="line.1685"></a>
<FONT color="green">1686</FONT>          {<a name="line.1686"></a>
<FONT color="green">1687</FONT>            version = -1;<a name="line.1687"></a>
<FONT color="green">1688</FONT>          }<a name="line.1688"></a>
<FONT color="green">1689</FONT>          elem = elem.getParentElem();<a name="line.1689"></a>
<FONT color="green">1690</FONT>          }<a name="line.1690"></a>
<FONT color="green">1691</FONT>        return (version == -1)? Constants.XSLTVERSUPPORTED : version;<a name="line.1691"></a>
<FONT color="green">1692</FONT>      }<a name="line.1692"></a>
<FONT color="green">1693</FONT>        /**<a name="line.1693"></a>
<FONT color="green">1694</FONT>         * @see PrefixResolver#handlesNullPrefixes()<a name="line.1694"></a>
<FONT color="green">1695</FONT>         */<a name="line.1695"></a>
<FONT color="green">1696</FONT>        public boolean handlesNullPrefixes() {<a name="line.1696"></a>
<FONT color="green">1697</FONT>            return false;<a name="line.1697"></a>
<FONT color="green">1698</FONT>        }<a name="line.1698"></a>
<FONT color="green">1699</FONT>    <a name="line.1699"></a>
<FONT color="green">1700</FONT>        /**<a name="line.1700"></a>
<FONT color="green">1701</FONT>         * @return Optimization flag<a name="line.1701"></a>
<FONT color="green">1702</FONT>         */<a name="line.1702"></a>
<FONT color="green">1703</FONT>        public boolean getOptimize() {<a name="line.1703"></a>
<FONT color="green">1704</FONT>            return m_optimize;<a name="line.1704"></a>
<FONT color="green">1705</FONT>        }<a name="line.1705"></a>
<FONT color="green">1706</FONT>    <a name="line.1706"></a>
<FONT color="green">1707</FONT>        /**<a name="line.1707"></a>
<FONT color="green">1708</FONT>         * @return Incremental flag<a name="line.1708"></a>
<FONT color="green">1709</FONT>         */<a name="line.1709"></a>
<FONT color="green">1710</FONT>        public boolean getIncremental() {<a name="line.1710"></a>
<FONT color="green">1711</FONT>            return m_incremental;<a name="line.1711"></a>
<FONT color="green">1712</FONT>        }<a name="line.1712"></a>
<FONT color="green">1713</FONT>    <a name="line.1713"></a>
<FONT color="green">1714</FONT>        /**<a name="line.1714"></a>
<FONT color="green">1715</FONT>         * @return Source Location flag<a name="line.1715"></a>
<FONT color="green">1716</FONT>         */<a name="line.1716"></a>
<FONT color="green">1717</FONT>        public boolean getSource_location() {<a name="line.1717"></a>
<FONT color="green">1718</FONT>            return m_source_location;<a name="line.1718"></a>
<FONT color="green">1719</FONT>        }<a name="line.1719"></a>
<FONT color="green">1720</FONT>    <a name="line.1720"></a>
<FONT color="green">1721</FONT>    }<a name="line.1721"></a>
<FONT color="green">1722</FONT>    <a name="line.1722"></a>
<FONT color="green">1723</FONT>    <a name="line.1723"></a>
<FONT color="green">1724</FONT>    <a name="line.1724"></a>




























































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