<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: SAXImpl.java 1225579 2011-12-29 15:56:06Z mrglavas $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    package org.apache.xalan.xsltc.dom;<a name="line.22"></a>
<FONT color="green">023</FONT>    <a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.Enumeration;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.Iterator;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.Map;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    import javax.xml.transform.Source;<a name="line.28"></a>
<FONT color="green">029</FONT>    import javax.xml.transform.dom.DOMSource;<a name="line.29"></a>
<FONT color="green">030</FONT>    <a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.xalan.xsltc.DOM;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.xalan.xsltc.DOMEnhancedForDTM;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xalan.xsltc.StripFilter;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.xalan.xsltc.TransletException;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.xalan.xsltc.runtime.BasisLibrary;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.xalan.xsltc.runtime.Hashtable;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.xml.dtm.Axis;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.xml.dtm.DTM;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.xml.dtm.DTMAxisIterator;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.xml.dtm.DTMManager;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.xml.dtm.DTMWSFilter;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.xml.dtm.ref.DTMAxisIterNodeList;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.xml.dtm.ref.DTMDefaultBase;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.xml.dtm.ref.DTMNodeProxy;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.xml.dtm.ref.EmptyIterator;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.xml.dtm.ref.sax2dtm.SAX2DTM2;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.xml.serializer.SerializationHandler;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.xml.serializer.ToXMLSAXHandler;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.xml.utils.SystemIDResolver;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.xml.utils.XMLStringFactory;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.w3c.dom.Document;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.w3c.dom.DocumentType;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.w3c.dom.Entity;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.w3c.dom.NamedNodeMap;<a name="line.54"></a>
<FONT color="green">055</FONT>    import org.w3c.dom.Node;<a name="line.55"></a>
<FONT color="green">056</FONT>    import org.w3c.dom.NodeList;<a name="line.56"></a>
<FONT color="green">057</FONT>    import org.xml.sax.Attributes;<a name="line.57"></a>
<FONT color="green">058</FONT>    import org.xml.sax.SAXException;<a name="line.58"></a>
<FONT color="green">059</FONT>    <a name="line.59"></a>
<FONT color="green">060</FONT>    <a name="line.60"></a>
<FONT color="green">061</FONT>    /**<a name="line.61"></a>
<FONT color="green">062</FONT>     * SAXImpl is the core model for SAX input source. SAXImpl objects are<a name="line.62"></a>
<FONT color="green">063</FONT>     * usually created from an XSLTCDTMManager.<a name="line.63"></a>
<FONT color="green">064</FONT>     *<a name="line.64"></a>
<FONT color="green">065</FONT>     * &lt;p&gt;DOMSource inputs are handled using DOM2SAX + SAXImpl. SAXImpl has a<a name="line.65"></a>
<FONT color="green">066</FONT>     * few specific fields (e.g. _node2Ids, _document) to keep DOM-related<a name="line.66"></a>
<FONT color="green">067</FONT>     * information. They are used when the processing behavior between DOM and<a name="line.67"></a>
<FONT color="green">068</FONT>     * SAX has to be different. Examples of these include id function and <a name="line.68"></a>
<FONT color="green">069</FONT>     * unparsed entity.<a name="line.69"></a>
<FONT color="green">070</FONT>     *<a name="line.70"></a>
<FONT color="green">071</FONT>     * &lt;p&gt;SAXImpl extends SAX2DTM2 instead of SAX2DTM for better performance.<a name="line.71"></a>
<FONT color="green">072</FONT>     * @author Jacek Ambroziak<a name="line.72"></a>
<FONT color="green">073</FONT>     * @author Santiago Pericas-Geertsen<a name="line.73"></a>
<FONT color="green">074</FONT>     * @author Morten Jorgensen<a name="line.74"></a>
<FONT color="green">075</FONT>     * @author Douglas Sellers &lt;douglasjsellers@hotmail.com&gt;<a name="line.75"></a>
<FONT color="green">076</FONT>     */<a name="line.76"></a>
<FONT color="green">077</FONT>    public final class SAXImpl extends SAX2DTM2<a name="line.77"></a>
<FONT color="green">078</FONT>                               implements DOMEnhancedForDTM, DOMBuilder<a name="line.78"></a>
<FONT color="green">079</FONT>    {<a name="line.79"></a>
<FONT color="green">080</FONT>        <a name="line.80"></a>
<FONT color="green">081</FONT>        /* ------------------------------------------------------------------- */<a name="line.81"></a>
<FONT color="green">082</FONT>        /* DOMBuilder fields BEGIN                                             */<a name="line.82"></a>
<FONT color="green">083</FONT>        /* ------------------------------------------------------------------- */<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        // Namespace prefix-to-uri mapping stuff<a name="line.85"></a>
<FONT color="green">086</FONT>        private int       _uriCount     = 0;<a name="line.86"></a>
<FONT color="green">087</FONT>        private int       _prefixCount  = 0;<a name="line.87"></a>
<FONT color="green">088</FONT>    <a name="line.88"></a>
<FONT color="green">089</FONT>        // Stack used to keep track of what whitespace text nodes are protected<a name="line.89"></a>
<FONT color="green">090</FONT>        // by xml:space="preserve" attributes and which nodes that are not.<a name="line.90"></a>
<FONT color="green">091</FONT>        private int[]   _xmlSpaceStack;<a name="line.91"></a>
<FONT color="green">092</FONT>        private int     _idx = 1;<a name="line.92"></a>
<FONT color="green">093</FONT>        private boolean _preserve = false;<a name="line.93"></a>
<FONT color="green">094</FONT>    <a name="line.94"></a>
<FONT color="green">095</FONT>        private static final String XML_STRING = "xml:";<a name="line.95"></a>
<FONT color="green">096</FONT>        private static final String XML_PREFIX   = "xml";   <a name="line.96"></a>
<FONT color="green">097</FONT>        private static final String XMLSPACE_STRING = "xml:space";<a name="line.97"></a>
<FONT color="green">098</FONT>        private static final String PRESERVE_STRING = "preserve";<a name="line.98"></a>
<FONT color="green">099</FONT>        private static final String XMLNS_PREFIX = "xmlns";<a name="line.99"></a>
<FONT color="green">100</FONT>        private static final String XML_URI = "http://www.w3.org/XML/1998/namespace";<a name="line.100"></a>
<FONT color="green">101</FONT>    <a name="line.101"></a>
<FONT color="green">102</FONT>        private boolean _escaping = true;<a name="line.102"></a>
<FONT color="green">103</FONT>        private boolean _disableEscaping = false;<a name="line.103"></a>
<FONT color="green">104</FONT>        private int _textNodeToProcess = DTM.NULL;<a name="line.104"></a>
<FONT color="green">105</FONT>    <a name="line.105"></a>
<FONT color="green">106</FONT>        /* ------------------------------------------------------------------- */<a name="line.106"></a>
<FONT color="green">107</FONT>        /* DOMBuilder fields END                                               */<a name="line.107"></a>
<FONT color="green">108</FONT>        /* ------------------------------------------------------------------- */<a name="line.108"></a>
<FONT color="green">109</FONT>    <a name="line.109"></a>
<FONT color="green">110</FONT>        // empty String for null attribute values<a name="line.110"></a>
<FONT color="green">111</FONT>        private final static String EMPTYSTRING = "";<a name="line.111"></a>
<FONT color="green">112</FONT>    <a name="line.112"></a>
<FONT color="green">113</FONT>        // empty iterator to be returned when there are no children<a name="line.113"></a>
<FONT color="green">114</FONT>        private final static DTMAxisIterator EMPTYITERATOR = EmptyIterator.getInstance();<a name="line.114"></a>
<FONT color="green">115</FONT>        // The number of expanded names<a name="line.115"></a>
<FONT color="green">116</FONT>        private int _namesSize = -1;<a name="line.116"></a>
<FONT color="green">117</FONT>    <a name="line.117"></a>
<FONT color="green">118</FONT>        // Namespace related stuff<a name="line.118"></a>
<FONT color="green">119</FONT>        private Hashtable _nsIndex = new Hashtable();<a name="line.119"></a>
<FONT color="green">120</FONT>       <a name="line.120"></a>
<FONT color="green">121</FONT>        // The initial size of the text buffer<a name="line.121"></a>
<FONT color="green">122</FONT>        private int _size = 0;<a name="line.122"></a>
<FONT color="green">123</FONT>        <a name="line.123"></a>
<FONT color="green">124</FONT>        // Tracks which textnodes are not escaped<a name="line.124"></a>
<FONT color="green">125</FONT>        private BitArray  _dontEscape = null;<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>        // The URI to this document<a name="line.127"></a>
<FONT color="green">128</FONT>        private String    _documentURI = null;<a name="line.128"></a>
<FONT color="green">129</FONT>        static private int _documentURIIndex = 0;<a name="line.129"></a>
<FONT color="green">130</FONT>    <a name="line.130"></a>
<FONT color="green">131</FONT>        // The owner Document when the input source is DOMSource.<a name="line.131"></a>
<FONT color="green">132</FONT>        private Document _document;<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>        // The hashtable for org.w3c.dom.Node to node id mapping.<a name="line.134"></a>
<FONT color="green">135</FONT>        // This is only used when the input is a DOMSource and the<a name="line.135"></a>
<FONT color="green">136</FONT>        // buildIdIndex flag is true.<a name="line.136"></a>
<FONT color="green">137</FONT>        private Hashtable _node2Ids = null;<a name="line.137"></a>
<FONT color="green">138</FONT>    <a name="line.138"></a>
<FONT color="green">139</FONT>        // True if the input source is a DOMSource.<a name="line.139"></a>
<FONT color="green">140</FONT>        private boolean _hasDOMSource = false;<a name="line.140"></a>
<FONT color="green">141</FONT>    <a name="line.141"></a>
<FONT color="green">142</FONT>        // The DTMManager<a name="line.142"></a>
<FONT color="green">143</FONT>        private XSLTCDTMManager _dtmManager;<a name="line.143"></a>
<FONT color="green">144</FONT>    <a name="line.144"></a>
<FONT color="green">145</FONT>        // Support for access/navigation through org.w3c.dom API<a name="line.145"></a>
<FONT color="green">146</FONT>        private Node[] _nodes;<a name="line.146"></a>
<FONT color="green">147</FONT>        private NodeList[] _nodeLists;<a name="line.147"></a>
<FONT color="green">148</FONT>        private final static String XML_LANG_ATTRIBUTE =<a name="line.148"></a>
<FONT color="green">149</FONT>            "http://www.w3.org/XML/1998/namespace:@lang";<a name="line.149"></a>
<FONT color="green">150</FONT>    <a name="line.150"></a>
<FONT color="green">151</FONT>        /**<a name="line.151"></a>
<FONT color="green">152</FONT>         * Define the origin of the document from which the tree was built<a name="line.152"></a>
<FONT color="green">153</FONT>         */<a name="line.153"></a>
<FONT color="green">154</FONT>        public void setDocumentURI(String uri) {<a name="line.154"></a>
<FONT color="green">155</FONT>            if (uri != null) {<a name="line.155"></a>
<FONT color="green">156</FONT>                setDocumentBaseURI(SystemIDResolver.getAbsoluteURI(uri));<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>        /**<a name="line.160"></a>
<FONT color="green">161</FONT>         * Returns the origin of the document from which the tree was built<a name="line.161"></a>
<FONT color="green">162</FONT>         */<a name="line.162"></a>
<FONT color="green">163</FONT>        public String getDocumentURI() {<a name="line.163"></a>
<FONT color="green">164</FONT>            String baseURI = getDocumentBaseURI();<a name="line.164"></a>
<FONT color="green">165</FONT>            return (baseURI != null) ? baseURI : "rtf" + _documentURIIndex++;<a name="line.165"></a>
<FONT color="green">166</FONT>        }<a name="line.166"></a>
<FONT color="green">167</FONT>    <a name="line.167"></a>
<FONT color="green">168</FONT>        public String getDocumentURI(int node) {<a name="line.168"></a>
<FONT color="green">169</FONT>            return getDocumentURI();<a name="line.169"></a>
<FONT color="green">170</FONT>        }<a name="line.170"></a>
<FONT color="green">171</FONT>    <a name="line.171"></a>
<FONT color="green">172</FONT>        public void setupMapping(String[] names, String[] urisArray,<a name="line.172"></a>
<FONT color="green">173</FONT>                                 int[] typesArray, String[] namespaces) {<a name="line.173"></a>
<FONT color="green">174</FONT>            // This method only has a function in DOM adapters<a name="line.174"></a>
<FONT color="green">175</FONT>        }<a name="line.175"></a>
<FONT color="green">176</FONT>    <a name="line.176"></a>
<FONT color="green">177</FONT>        /**<a name="line.177"></a>
<FONT color="green">178</FONT>         * Lookup a namespace URI from a prefix starting at node. This method<a name="line.178"></a>
<FONT color="green">179</FONT>         * is used in the execution of xsl:element when the prefix is not known<a name="line.179"></a>
<FONT color="green">180</FONT>         * at compile time.<a name="line.180"></a>
<FONT color="green">181</FONT>         */<a name="line.181"></a>
<FONT color="green">182</FONT>        public String lookupNamespace(int node, String prefix)<a name="line.182"></a>
<FONT color="green">183</FONT>            throws TransletException<a name="line.183"></a>
<FONT color="green">184</FONT>        {<a name="line.184"></a>
<FONT color="green">185</FONT>            int anode, nsnode;<a name="line.185"></a>
<FONT color="green">186</FONT>            final AncestorIterator ancestors = new AncestorIterator();<a name="line.186"></a>
<FONT color="green">187</FONT>    <a name="line.187"></a>
<FONT color="green">188</FONT>            if (isElement(node)) {<a name="line.188"></a>
<FONT color="green">189</FONT>                ancestors.includeSelf();<a name="line.189"></a>
<FONT color="green">190</FONT>            }<a name="line.190"></a>
<FONT color="green">191</FONT>    <a name="line.191"></a>
<FONT color="green">192</FONT>            ancestors.setStartNode(node);<a name="line.192"></a>
<FONT color="green">193</FONT>            while ((anode = ancestors.next()) != DTM.NULL) {<a name="line.193"></a>
<FONT color="green">194</FONT>                final NamespaceIterator namespaces = new NamespaceIterator();<a name="line.194"></a>
<FONT color="green">195</FONT>    <a name="line.195"></a>
<FONT color="green">196</FONT>                namespaces.setStartNode(anode);<a name="line.196"></a>
<FONT color="green">197</FONT>                while ((nsnode = namespaces.next()) != DTM.NULL) {<a name="line.197"></a>
<FONT color="green">198</FONT>                    if (getLocalName(nsnode).equals(prefix)) {<a name="line.198"></a>
<FONT color="green">199</FONT>                        return getNodeValue(nsnode);<a name="line.199"></a>
<FONT color="green">200</FONT>                    }<a name="line.200"></a>
<FONT color="green">201</FONT>                }<a name="line.201"></a>
<FONT color="green">202</FONT>            }<a name="line.202"></a>
<FONT color="green">203</FONT>    <a name="line.203"></a>
<FONT color="green">204</FONT>            BasisLibrary.runTimeError(BasisLibrary.NAMESPACE_PREFIX_ERR, prefix);<a name="line.204"></a>
<FONT color="green">205</FONT>            return null;<a name="line.205"></a>
<FONT color="green">206</FONT>        }<a name="line.206"></a>
<FONT color="green">207</FONT>    <a name="line.207"></a>
<FONT color="green">208</FONT>        /**<a name="line.208"></a>
<FONT color="green">209</FONT>         * Returns 'true' if a specific node is an element (of any type)<a name="line.209"></a>
<FONT color="green">210</FONT>         */<a name="line.210"></a>
<FONT color="green">211</FONT>        public boolean isElement(final int node) {<a name="line.211"></a>
<FONT color="green">212</FONT>            return getNodeType(node) == DTM.ELEMENT_NODE;<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>         * Returns 'true' if a specific node is an attribute (of any type)<a name="line.216"></a>
<FONT color="green">217</FONT>         */<a name="line.217"></a>
<FONT color="green">218</FONT>        public boolean isAttribute(final int node) {<a name="line.218"></a>
<FONT color="green">219</FONT>            return getNodeType(node) == DTM.ATTRIBUTE_NODE;<a name="line.219"></a>
<FONT color="green">220</FONT>        }<a name="line.220"></a>
<FONT color="green">221</FONT>    <a name="line.221"></a>
<FONT color="green">222</FONT>        /**<a name="line.222"></a>
<FONT color="green">223</FONT>         * Returns the number of nodes in the tree (used for indexing)<a name="line.223"></a>
<FONT color="green">224</FONT>         */<a name="line.224"></a>
<FONT color="green">225</FONT>        public int getSize() {<a name="line.225"></a>
<FONT color="green">226</FONT>            return getNumberOfNodes();<a name="line.226"></a>
<FONT color="green">227</FONT>        }<a name="line.227"></a>
<FONT color="green">228</FONT>    <a name="line.228"></a>
<FONT color="green">229</FONT>        /**<a name="line.229"></a>
<FONT color="green">230</FONT>         * Part of the DOM interface - no function here.<a name="line.230"></a>
<FONT color="green">231</FONT>         */<a name="line.231"></a>
<FONT color="green">232</FONT>        public void setFilter(StripFilter filter) {<a name="line.232"></a>
<FONT color="green">233</FONT>        }<a name="line.233"></a>
<FONT color="green">234</FONT>    <a name="line.234"></a>
<FONT color="green">235</FONT>    <a name="line.235"></a>
<FONT color="green">236</FONT>        /**<a name="line.236"></a>
<FONT color="green">237</FONT>         * Returns true if node1 comes before node2 in document order<a name="line.237"></a>
<FONT color="green">238</FONT>         */<a name="line.238"></a>
<FONT color="green">239</FONT>        public boolean lessThan(int node1, int node2) {<a name="line.239"></a>
<FONT color="green">240</FONT>            if (node1 == DTM.NULL) {<a name="line.240"></a>
<FONT color="green">241</FONT>                return false;<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>            if (node2 == DTM.NULL) {<a name="line.244"></a>
<FONT color="green">245</FONT>                return true;<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>            return (node1 &lt; node2);<a name="line.248"></a>
<FONT color="green">249</FONT>        }<a name="line.249"></a>
<FONT color="green">250</FONT>    <a name="line.250"></a>
<FONT color="green">251</FONT>        /**<a name="line.251"></a>
<FONT color="green">252</FONT>         * Create an org.w3c.dom.Node from a node in the tree<a name="line.252"></a>
<FONT color="green">253</FONT>         */<a name="line.253"></a>
<FONT color="green">254</FONT>        public Node makeNode(int index) {<a name="line.254"></a>
<FONT color="green">255</FONT>            if (_nodes == null) {<a name="line.255"></a>
<FONT color="green">256</FONT>                _nodes = new Node[_namesSize];<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>            int nodeID = makeNodeIdentity(index);<a name="line.259"></a>
<FONT color="green">260</FONT>            if (nodeID &lt; 0) {<a name="line.260"></a>
<FONT color="green">261</FONT>                return null;<a name="line.261"></a>
<FONT color="green">262</FONT>            }<a name="line.262"></a>
<FONT color="green">263</FONT>            else if (nodeID &lt; _nodes.length) {<a name="line.263"></a>
<FONT color="green">264</FONT>                return (_nodes[nodeID] != null) ? _nodes[nodeID] <a name="line.264"></a>
<FONT color="green">265</FONT>                    : (_nodes[nodeID] = new DTMNodeProxy((DTM)this, index));<a name="line.265"></a>
<FONT color="green">266</FONT>            }<a name="line.266"></a>
<FONT color="green">267</FONT>            else {<a name="line.267"></a>
<FONT color="green">268</FONT>                return new DTMNodeProxy((DTM)this, index);<a name="line.268"></a>
<FONT color="green">269</FONT>            }<a name="line.269"></a>
<FONT color="green">270</FONT>        }<a name="line.270"></a>
<FONT color="green">271</FONT>    <a name="line.271"></a>
<FONT color="green">272</FONT>        /**<a name="line.272"></a>
<FONT color="green">273</FONT>         * Create an org.w3c.dom.Node from a node in an iterator<a name="line.273"></a>
<FONT color="green">274</FONT>         * The iterator most be started before this method is called<a name="line.274"></a>
<FONT color="green">275</FONT>         */<a name="line.275"></a>
<FONT color="green">276</FONT>        public Node makeNode(DTMAxisIterator iter) {<a name="line.276"></a>
<FONT color="green">277</FONT>            return makeNode(iter.next());<a name="line.277"></a>
<FONT color="green">278</FONT>        }<a name="line.278"></a>
<FONT color="green">279</FONT>    <a name="line.279"></a>
<FONT color="green">280</FONT>        /**<a name="line.280"></a>
<FONT color="green">281</FONT>         * Create an org.w3c.dom.NodeList from a node in the tree<a name="line.281"></a>
<FONT color="green">282</FONT>         */<a name="line.282"></a>
<FONT color="green">283</FONT>        public NodeList makeNodeList(int index) {<a name="line.283"></a>
<FONT color="green">284</FONT>            if (_nodeLists == null) {<a name="line.284"></a>
<FONT color="green">285</FONT>                _nodeLists = new NodeList[_namesSize];<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>            int nodeID = makeNodeIdentity(index);<a name="line.288"></a>
<FONT color="green">289</FONT>            if (nodeID &lt; 0) {<a name="line.289"></a>
<FONT color="green">290</FONT>                return null;<a name="line.290"></a>
<FONT color="green">291</FONT>            }<a name="line.291"></a>
<FONT color="green">292</FONT>            else if (nodeID &lt; _nodeLists.length) {<a name="line.292"></a>
<FONT color="green">293</FONT>                return (_nodeLists[nodeID] != null) ? _nodeLists[nodeID]<a name="line.293"></a>
<FONT color="green">294</FONT>                       : (_nodeLists[nodeID] = new DTMAxisIterNodeList(this,<a name="line.294"></a>
<FONT color="green">295</FONT>                                                     new SingletonIterator(index)));<a name="line.295"></a>
<FONT color="green">296</FONT>        }<a name="line.296"></a>
<FONT color="green">297</FONT>            else {<a name="line.297"></a>
<FONT color="green">298</FONT>                return new DTMAxisIterNodeList(this, new SingletonIterator(index));<a name="line.298"></a>
<FONT color="green">299</FONT>            }<a name="line.299"></a>
<FONT color="green">300</FONT>        }<a name="line.300"></a>
<FONT color="green">301</FONT>    <a name="line.301"></a>
<FONT color="green">302</FONT>        /**<a name="line.302"></a>
<FONT color="green">303</FONT>         * Create an org.w3c.dom.NodeList from a node iterator<a name="line.303"></a>
<FONT color="green">304</FONT>         * The iterator most be started before this method is called<a name="line.304"></a>
<FONT color="green">305</FONT>         */<a name="line.305"></a>
<FONT color="green">306</FONT>        public NodeList makeNodeList(DTMAxisIterator iter) {<a name="line.306"></a>
<FONT color="green">307</FONT>            return new DTMAxisIterNodeList(this, iter);<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>         * Iterator that returns the namespace nodes as defined by the XPath data<a name="line.311"></a>
<FONT color="green">312</FONT>         * model for a given node, filtered by extended type ID.<a name="line.312"></a>
<FONT color="green">313</FONT>         */<a name="line.313"></a>
<FONT color="green">314</FONT>        public class TypedNamespaceIterator extends NamespaceIterator {<a name="line.314"></a>
<FONT color="green">315</FONT>            <a name="line.315"></a>
<FONT color="green">316</FONT>            private  String _nsPrefix;<a name="line.316"></a>
<FONT color="green">317</FONT>    <a name="line.317"></a>
<FONT color="green">318</FONT>            /**<a name="line.318"></a>
<FONT color="green">319</FONT>             * Constructor TypedChildrenIterator<a name="line.319"></a>
<FONT color="green">320</FONT>             *<a name="line.320"></a>
<FONT color="green">321</FONT>             *<a name="line.321"></a>
<FONT color="green">322</FONT>             * @param nodeType The extended type ID being requested.<a name="line.322"></a>
<FONT color="green">323</FONT>             */<a name="line.323"></a>
<FONT color="green">324</FONT>            public TypedNamespaceIterator(int nodeType) { <a name="line.324"></a>
<FONT color="green">325</FONT>                super();<a name="line.325"></a>
<FONT color="green">326</FONT>                if(m_expandedNameTable != null){<a name="line.326"></a>
<FONT color="green">327</FONT>                    _nsPrefix = m_expandedNameTable.getLocalName(nodeType);<a name="line.327"></a>
<FONT color="green">328</FONT>                }<a name="line.328"></a>
<FONT color="green">329</FONT>            }<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>            * Get the next node in the iteration.<a name="line.332"></a>
<FONT color="green">333</FONT>            *<a name="line.333"></a>
<FONT color="green">334</FONT>            * @return The next node handle in the iteration, or END.<a name="line.334"></a>
<FONT color="green">335</FONT>            */<a name="line.335"></a>
<FONT color="green">336</FONT>            public int next() {<a name="line.336"></a>
<FONT color="green">337</FONT>                if ((_nsPrefix == null) ||(_nsPrefix.length() == 0) ){<a name="line.337"></a>
<FONT color="green">338</FONT>                    return (END);<a name="line.338"></a>
<FONT color="green">339</FONT>                }          <a name="line.339"></a>
<FONT color="green">340</FONT>                int node = END;<a name="line.340"></a>
<FONT color="green">341</FONT>                for (node = super.next(); node != END; node = super.next()) {<a name="line.341"></a>
<FONT color="green">342</FONT>                    if (_nsPrefix.compareTo(getLocalName(node))== 0) {<a name="line.342"></a>
<FONT color="green">343</FONT>                        return returnNode(node);<a name="line.343"></a>
<FONT color="green">344</FONT>                    }<a name="line.344"></a>
<FONT color="green">345</FONT>                }<a name="line.345"></a>
<FONT color="green">346</FONT>                return (END);<a name="line.346"></a>
<FONT color="green">347</FONT>            }<a name="line.347"></a>
<FONT color="green">348</FONT>        }  // end of TypedNamespaceIterator<a name="line.348"></a>
<FONT color="green">349</FONT>    <a name="line.349"></a>
<FONT color="green">350</FONT>    <a name="line.350"></a>
<FONT color="green">351</FONT>    <a name="line.351"></a>
<FONT color="green">352</FONT>        /**************************************************************<a name="line.352"></a>
<FONT color="green">353</FONT>         * This is a specialised iterator for predicates comparing node or<a name="line.353"></a>
<FONT color="green">354</FONT>         * attribute values to variable or parameter values.<a name="line.354"></a>
<FONT color="green">355</FONT>         */<a name="line.355"></a>
<FONT color="green">356</FONT>        private final class NodeValueIterator extends InternalAxisIteratorBase<a name="line.356"></a>
<FONT color="green">357</FONT>        {<a name="line.357"></a>
<FONT color="green">358</FONT>    <a name="line.358"></a>
<FONT color="green">359</FONT>            private DTMAxisIterator _source;<a name="line.359"></a>
<FONT color="green">360</FONT>            private String _value;<a name="line.360"></a>
<FONT color="green">361</FONT>            private boolean _op;<a name="line.361"></a>
<FONT color="green">362</FONT>            private final boolean _isReverse;<a name="line.362"></a>
<FONT color="green">363</FONT>            private int _returnType = RETURN_PARENT;<a name="line.363"></a>
<FONT color="green">364</FONT>    <a name="line.364"></a>
<FONT color="green">365</FONT>            public NodeValueIterator(DTMAxisIterator source, int returnType,<a name="line.365"></a>
<FONT color="green">366</FONT>                                     String value, boolean op)<a name="line.366"></a>
<FONT color="green">367</FONT>            {<a name="line.367"></a>
<FONT color="green">368</FONT>                _source = source;<a name="line.368"></a>
<FONT color="green">369</FONT>                _returnType = returnType;<a name="line.369"></a>
<FONT color="green">370</FONT>                _value = value;<a name="line.370"></a>
<FONT color="green">371</FONT>                _op = op;<a name="line.371"></a>
<FONT color="green">372</FONT>                _isReverse = source.isReverse();<a name="line.372"></a>
<FONT color="green">373</FONT>            }<a name="line.373"></a>
<FONT color="green">374</FONT>    <a name="line.374"></a>
<FONT color="green">375</FONT>            public boolean isReverse()<a name="line.375"></a>
<FONT color="green">376</FONT>            {<a name="line.376"></a>
<FONT color="green">377</FONT>                return _isReverse;<a name="line.377"></a>
<FONT color="green">378</FONT>            }<a name="line.378"></a>
<FONT color="green">379</FONT>    <a name="line.379"></a>
<FONT color="green">380</FONT>            public DTMAxisIterator cloneIterator()<a name="line.380"></a>
<FONT color="green">381</FONT>            {<a name="line.381"></a>
<FONT color="green">382</FONT>                try {<a name="line.382"></a>
<FONT color="green">383</FONT>                    NodeValueIterator clone = (NodeValueIterator)super.clone();<a name="line.383"></a>
<FONT color="green">384</FONT>                    clone._isRestartable = false;<a name="line.384"></a>
<FONT color="green">385</FONT>                    clone._source = _source.cloneIterator();<a name="line.385"></a>
<FONT color="green">386</FONT>                    clone._value = _value;<a name="line.386"></a>
<FONT color="green">387</FONT>                    clone._op = _op;<a name="line.387"></a>
<FONT color="green">388</FONT>                    return clone.reset();<a name="line.388"></a>
<FONT color="green">389</FONT>                }<a name="line.389"></a>
<FONT color="green">390</FONT>                catch (CloneNotSupportedException e) {<a name="line.390"></a>
<FONT color="green">391</FONT>                    BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,<a name="line.391"></a>
<FONT color="green">392</FONT>                                              e.toString());<a name="line.392"></a>
<FONT color="green">393</FONT>                    return null;<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>      <a name="line.396"></a>
<FONT color="green">397</FONT>            public void setRestartable(boolean isRestartable)<a name="line.397"></a>
<FONT color="green">398</FONT>            {<a name="line.398"></a>
<FONT color="green">399</FONT>                _isRestartable = isRestartable;<a name="line.399"></a>
<FONT color="green">400</FONT>                _source.setRestartable(isRestartable);<a name="line.400"></a>
<FONT color="green">401</FONT>            }<a name="line.401"></a>
<FONT color="green">402</FONT>    <a name="line.402"></a>
<FONT color="green">403</FONT>            public DTMAxisIterator reset()<a name="line.403"></a>
<FONT color="green">404</FONT>            {<a name="line.404"></a>
<FONT color="green">405</FONT>                _source.reset();<a name="line.405"></a>
<FONT color="green">406</FONT>                return resetPosition();<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>            public int next()<a name="line.409"></a>
<FONT color="green">410</FONT>            {<a name="line.410"></a>
<FONT color="green">411</FONT>                int node;<a name="line.411"></a>
<FONT color="green">412</FONT>                while ((node = _source.next()) != END) {<a name="line.412"></a>
<FONT color="green">413</FONT>                    String val = getStringValueX(node);<a name="line.413"></a>
<FONT color="green">414</FONT>                    if (_value.equals(val) == _op) {<a name="line.414"></a>
<FONT color="green">415</FONT>                        if (_returnType == RETURN_CURRENT) {<a name="line.415"></a>
<FONT color="green">416</FONT>                            return returnNode(node);<a name="line.416"></a>
<FONT color="green">417</FONT>                        }<a name="line.417"></a>
<FONT color="green">418</FONT>                        else {<a name="line.418"></a>
<FONT color="green">419</FONT>                            return returnNode(getParent(node));<a name="line.419"></a>
<FONT color="green">420</FONT>                        }<a name="line.420"></a>
<FONT color="green">421</FONT>                    }<a name="line.421"></a>
<FONT color="green">422</FONT>                }<a name="line.422"></a>
<FONT color="green">423</FONT>                return END;<a name="line.423"></a>
<FONT color="green">424</FONT>            }<a name="line.424"></a>
<FONT color="green">425</FONT>    <a name="line.425"></a>
<FONT color="green">426</FONT>            public DTMAxisIterator setStartNode(int node)<a name="line.426"></a>
<FONT color="green">427</FONT>            {<a name="line.427"></a>
<FONT color="green">428</FONT>                if (_isRestartable) {<a name="line.428"></a>
<FONT color="green">429</FONT>                    _source.setStartNode(_startNode = node);<a name="line.429"></a>
<FONT color="green">430</FONT>                    return resetPosition();<a name="line.430"></a>
<FONT color="green">431</FONT>                }<a name="line.431"></a>
<FONT color="green">432</FONT>                return this;<a name="line.432"></a>
<FONT color="green">433</FONT>            }<a name="line.433"></a>
<FONT color="green">434</FONT>    <a name="line.434"></a>
<FONT color="green">435</FONT>            public void setMark()<a name="line.435"></a>
<FONT color="green">436</FONT>            {<a name="line.436"></a>
<FONT color="green">437</FONT>                _source.setMark();<a name="line.437"></a>
<FONT color="green">438</FONT>            }<a name="line.438"></a>
<FONT color="green">439</FONT>    <a name="line.439"></a>
<FONT color="green">440</FONT>            public void gotoMark()<a name="line.440"></a>
<FONT color="green">441</FONT>            {<a name="line.441"></a>
<FONT color="green">442</FONT>                _source.gotoMark();<a name="line.442"></a>
<FONT color="green">443</FONT>            }<a name="line.443"></a>
<FONT color="green">444</FONT>        } // end NodeValueIterator<a name="line.444"></a>
<FONT color="green">445</FONT>    <a name="line.445"></a>
<FONT color="green">446</FONT>        public DTMAxisIterator getNodeValueIterator(DTMAxisIterator iterator, int type,<a name="line.446"></a>
<FONT color="green">447</FONT>                                                 String value, boolean op)<a name="line.447"></a>
<FONT color="green">448</FONT>        {<a name="line.448"></a>
<FONT color="green">449</FONT>            return(DTMAxisIterator)(new NodeValueIterator(iterator, type, value, op));<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>         * Encapsulates an iterator in an OrderedIterator to ensure node order<a name="line.453"></a>
<FONT color="green">454</FONT>         */<a name="line.454"></a>
<FONT color="green">455</FONT>        public DTMAxisIterator orderNodes(DTMAxisIterator source, int node)<a name="line.455"></a>
<FONT color="green">456</FONT>        {<a name="line.456"></a>
<FONT color="green">457</FONT>            return new DupFilterIterator(source);<a name="line.457"></a>
<FONT color="green">458</FONT>        }<a name="line.458"></a>
<FONT color="green">459</FONT>    <a name="line.459"></a>
<FONT color="green">460</FONT>        /**<a name="line.460"></a>
<FONT color="green">461</FONT>         * Returns singleton iterator containg the document root<a name="line.461"></a>
<FONT color="green">462</FONT>         * Works for them main document (mark == 0).  It cannot be made<a name="line.462"></a>
<FONT color="green">463</FONT>         * to point to any other node through setStartNode().<a name="line.463"></a>
<FONT color="green">464</FONT>         */<a name="line.464"></a>
<FONT color="green">465</FONT>        public DTMAxisIterator getIterator()<a name="line.465"></a>
<FONT color="green">466</FONT>        {<a name="line.466"></a>
<FONT color="green">467</FONT>            return new SingletonIterator(getDocument(), true);<a name="line.467"></a>
<FONT color="green">468</FONT>        }<a name="line.468"></a>
<FONT color="green">469</FONT>    <a name="line.469"></a>
<FONT color="green">470</FONT>         /**<a name="line.470"></a>
<FONT color="green">471</FONT>         * Get mapping from DOM namespace types to external namespace types<a name="line.471"></a>
<FONT color="green">472</FONT>         */<a name="line.472"></a>
<FONT color="green">473</FONT>        public int getNSType(int node)<a name="line.473"></a>
<FONT color="green">474</FONT>        {<a name="line.474"></a>
<FONT color="green">475</FONT>            String s = getNamespaceURI(node);<a name="line.475"></a>
<FONT color="green">476</FONT>            if (s == null) {<a name="line.476"></a>
<FONT color="green">477</FONT>                return 0;<a name="line.477"></a>
<FONT color="green">478</FONT>            }<a name="line.478"></a>
<FONT color="green">479</FONT>            int eType = getIdForNamespace(s);<a name="line.479"></a>
<FONT color="green">480</FONT>            return ((Integer)_nsIndex.get(new Integer(eType))).intValue();        <a name="line.480"></a>
<FONT color="green">481</FONT>        }<a name="line.481"></a>
<FONT color="green">482</FONT>        <a name="line.482"></a>
<FONT color="green">483</FONT>        <a name="line.483"></a>
<FONT color="green">484</FONT>    <a name="line.484"></a>
<FONT color="green">485</FONT>        /**<a name="line.485"></a>
<FONT color="green">486</FONT>         * Returns the namespace type of a specific node<a name="line.486"></a>
<FONT color="green">487</FONT>         */<a name="line.487"></a>
<FONT color="green">488</FONT>        public int getNamespaceType(final int node)<a name="line.488"></a>
<FONT color="green">489</FONT>        {<a name="line.489"></a>
<FONT color="green">490</FONT>            return super.getNamespaceType(node);<a name="line.490"></a>
<FONT color="green">491</FONT>        }<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>         * Sets up a translet-to-dom type mapping table<a name="line.494"></a>
<FONT color="green">495</FONT>         */<a name="line.495"></a>
<FONT color="green">496</FONT>        private int[] setupMapping(String[] names, String[] uris, int[] types, int nNames) {<a name="line.496"></a>
<FONT color="green">497</FONT>            // Padding with number of names, because they<a name="line.497"></a>
<FONT color="green">498</FONT>            // may need to be added, i.e for RTFs. See copy03  <a name="line.498"></a>
<FONT color="green">499</FONT>            final int[] result = new int[m_expandedNameTable.getSize()];<a name="line.499"></a>
<FONT color="green">500</FONT>            for (int i = 0; i &lt; nNames; i++)      {<a name="line.500"></a>
<FONT color="green">501</FONT>                //int type = getGeneralizedType(namesArray[i]);<a name="line.501"></a>
<FONT color="green">502</FONT>                int type = m_expandedNameTable.getExpandedTypeID(uris[i], names[i], types[i], false);<a name="line.502"></a>
<FONT color="green">503</FONT>                result[type] = type;<a name="line.503"></a>
<FONT color="green">504</FONT>            }<a name="line.504"></a>
<FONT color="green">505</FONT>            return result;<a name="line.505"></a>
<FONT color="green">506</FONT>        }<a name="line.506"></a>
<FONT color="green">507</FONT>    <a name="line.507"></a>
<FONT color="green">508</FONT>        /**<a name="line.508"></a>
<FONT color="green">509</FONT>         * Returns the internal type associated with an expanded QName<a name="line.509"></a>
<FONT color="green">510</FONT>         */<a name="line.510"></a>
<FONT color="green">511</FONT>        public int getGeneralizedType(final String name) {<a name="line.511"></a>
<FONT color="green">512</FONT>            return getGeneralizedType(name, true);<a name="line.512"></a>
<FONT color="green">513</FONT>        }<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>         * Returns the internal type associated with an expanded QName<a name="line.516"></a>
<FONT color="green">517</FONT>         */<a name="line.517"></a>
<FONT color="green">518</FONT>        public int getGeneralizedType(final String name, boolean searchOnly) {<a name="line.518"></a>
<FONT color="green">519</FONT>            String lName, ns = null;<a name="line.519"></a>
<FONT color="green">520</FONT>            int index = -1;<a name="line.520"></a>
<FONT color="green">521</FONT>            int code;<a name="line.521"></a>
<FONT color="green">522</FONT>    <a name="line.522"></a>
<FONT color="green">523</FONT>            // Is there a prefix?<a name="line.523"></a>
<FONT color="green">524</FONT>            if ((index = name.lastIndexOf(':'))&gt; -1) {<a name="line.524"></a>
<FONT color="green">525</FONT>                ns = name.substring(0, index);<a name="line.525"></a>
<FONT color="green">526</FONT>            }<a name="line.526"></a>
<FONT color="green">527</FONT>    <a name="line.527"></a>
<FONT color="green">528</FONT>            // Local part of name is after colon.  lastIndexOf returns -1 if<a name="line.528"></a>
<FONT color="green">529</FONT>            // there is no colon, so lNameStartIdx will be zero in that case.<a name="line.529"></a>
<FONT color="green">530</FONT>            int lNameStartIdx = index+1;<a name="line.530"></a>
<FONT color="green">531</FONT>    <a name="line.531"></a>
<FONT color="green">532</FONT>            // Distinguish attribute and element names.  Attribute has @ before<a name="line.532"></a>
<FONT color="green">533</FONT>            // local part of name.<a name="line.533"></a>
<FONT color="green">534</FONT>            if (name.charAt(lNameStartIdx) == '@') {<a name="line.534"></a>
<FONT color="green">535</FONT>                code = DTM.ATTRIBUTE_NODE;<a name="line.535"></a>
<FONT color="green">536</FONT>                lNameStartIdx++;<a name="line.536"></a>
<FONT color="green">537</FONT>            }<a name="line.537"></a>
<FONT color="green">538</FONT>            else {<a name="line.538"></a>
<FONT color="green">539</FONT>                code = DTM.ELEMENT_NODE;<a name="line.539"></a>
<FONT color="green">540</FONT>            }<a name="line.540"></a>
<FONT color="green">541</FONT>    <a name="line.541"></a>
<FONT color="green">542</FONT>            // Extract local name<a name="line.542"></a>
<FONT color="green">543</FONT>            lName = (lNameStartIdx == 0) ? name : name.substring(lNameStartIdx);<a name="line.543"></a>
<FONT color="green">544</FONT>    <a name="line.544"></a>
<FONT color="green">545</FONT>            return m_expandedNameTable.getExpandedTypeID(ns, lName, code, searchOnly);<a name="line.545"></a>
<FONT color="green">546</FONT>        }<a name="line.546"></a>
<FONT color="green">547</FONT>    <a name="line.547"></a>
<FONT color="green">548</FONT>        /**<a name="line.548"></a>
<FONT color="green">549</FONT>         * Get mapping from DOM element/attribute types to external types<a name="line.549"></a>
<FONT color="green">550</FONT>         */<a name="line.550"></a>
<FONT color="green">551</FONT>        public short[] getMapping(String[] names, String[] uris, int[] types)<a name="line.551"></a>
<FONT color="green">552</FONT>        {<a name="line.552"></a>
<FONT color="green">553</FONT>            // Delegate the work to getMapping2 if the document is not fully built.<a name="line.553"></a>
<FONT color="green">554</FONT>            // Some of the processing has to be different in this case.<a name="line.554"></a>
<FONT color="green">555</FONT>            if (_namesSize &lt; 0) {<a name="line.555"></a>
<FONT color="green">556</FONT>                return getMapping2(names, uris, types);<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>            int i;<a name="line.559"></a>
<FONT color="green">560</FONT>            final int namesLength = names.length;<a name="line.560"></a>
<FONT color="green">561</FONT>            final int exLength = m_expandedNameTable.getSize();<a name="line.561"></a>
<FONT color="green">562</FONT>          <a name="line.562"></a>
<FONT color="green">563</FONT>            final short[] result = new short[exLength];<a name="line.563"></a>
<FONT color="green">564</FONT>    <a name="line.564"></a>
<FONT color="green">565</FONT>            // primitive types map to themselves<a name="line.565"></a>
<FONT color="green">566</FONT>            for (i = 0; i &lt; DTM.NTYPES; i++) {<a name="line.566"></a>
<FONT color="green">567</FONT>                result[i] = (short)i;<a name="line.567"></a>
<FONT color="green">568</FONT>            }<a name="line.568"></a>
<FONT color="green">569</FONT>            <a name="line.569"></a>
<FONT color="green">570</FONT>            for (i = NTYPES; i &lt; exLength; i++) { <a name="line.570"></a>
<FONT color="green">571</FONT>                result[i] = m_expandedNameTable.getType(i);<a name="line.571"></a>
<FONT color="green">572</FONT>            }<a name="line.572"></a>
<FONT color="green">573</FONT>            <a name="line.573"></a>
<FONT color="green">574</FONT>            // actual mapping of caller requested names<a name="line.574"></a>
<FONT color="green">575</FONT>            for (i = 0; i &lt; namesLength; i++) {<a name="line.575"></a>
<FONT color="green">576</FONT>                int genType = m_expandedNameTable.getExpandedTypeID(uris[i],<a name="line.576"></a>
<FONT color="green">577</FONT>                                                                    names[i],<a name="line.577"></a>
<FONT color="green">578</FONT>                                                                    types[i],<a name="line.578"></a>
<FONT color="green">579</FONT>                                                                    true);<a name="line.579"></a>
<FONT color="green">580</FONT>                if (genType &gt;= 0 &amp;&amp; genType &lt; exLength) {<a name="line.580"></a>
<FONT color="green">581</FONT>                    result[genType] = (short)(i + DTM.NTYPES);<a name="line.581"></a>
<FONT color="green">582</FONT>                }<a name="line.582"></a>
<FONT color="green">583</FONT>            }<a name="line.583"></a>
<FONT color="green">584</FONT>    <a name="line.584"></a>
<FONT color="green">585</FONT>            return result;<a name="line.585"></a>
<FONT color="green">586</FONT>        }<a name="line.586"></a>
<FONT color="green">587</FONT>    <a name="line.587"></a>
<FONT color="green">588</FONT>        /**<a name="line.588"></a>
<FONT color="green">589</FONT>         * Get mapping from external element/attribute types to DOM types<a name="line.589"></a>
<FONT color="green">590</FONT>         */<a name="line.590"></a>
<FONT color="green">591</FONT>        public int[] getReverseMapping(String[] names, String[] uris, int[] types)<a name="line.591"></a>
<FONT color="green">592</FONT>        {<a name="line.592"></a>
<FONT color="green">593</FONT>            int i;<a name="line.593"></a>
<FONT color="green">594</FONT>            final int[] result = new int[names.length + DTM.NTYPES];<a name="line.594"></a>
<FONT color="green">595</FONT>            <a name="line.595"></a>
<FONT color="green">596</FONT>            // primitive types map to themselves<a name="line.596"></a>
<FONT color="green">597</FONT>            for (i = 0; i &lt; DTM.NTYPES; i++) {<a name="line.597"></a>
<FONT color="green">598</FONT>                result[i] = i;<a name="line.598"></a>
<FONT color="green">599</FONT>            }<a name="line.599"></a>
<FONT color="green">600</FONT>            <a name="line.600"></a>
<FONT color="green">601</FONT>            // caller's types map into appropriate dom types<a name="line.601"></a>
<FONT color="green">602</FONT>            for (i = 0; i &lt; names.length; i++) {<a name="line.602"></a>
<FONT color="green">603</FONT>                int type = m_expandedNameTable.getExpandedTypeID(uris[i], names[i], types[i], true);<a name="line.603"></a>
<FONT color="green">604</FONT>                result[i+DTM.NTYPES] = type;<a name="line.604"></a>
<FONT color="green">605</FONT>            }<a name="line.605"></a>
<FONT color="green">606</FONT>            return(result);<a name="line.606"></a>
<FONT color="green">607</FONT>        }<a name="line.607"></a>
<FONT color="green">608</FONT>        <a name="line.608"></a>
<FONT color="green">609</FONT>        /**<a name="line.609"></a>
<FONT color="green">610</FONT>         * Get mapping from DOM element/attribute types to external types.<a name="line.610"></a>
<FONT color="green">611</FONT>         * This method is used when the document is not fully built.<a name="line.611"></a>
<FONT color="green">612</FONT>         */<a name="line.612"></a>
<FONT color="green">613</FONT>        private short[] getMapping2(String[] names, String[] uris, int[] types)<a name="line.613"></a>
<FONT color="green">614</FONT>        {<a name="line.614"></a>
<FONT color="green">615</FONT>            int i;<a name="line.615"></a>
<FONT color="green">616</FONT>            final int namesLength = names.length;<a name="line.616"></a>
<FONT color="green">617</FONT>            final int exLength = m_expandedNameTable.getSize();<a name="line.617"></a>
<FONT color="green">618</FONT>            int[] generalizedTypes = null;<a name="line.618"></a>
<FONT color="green">619</FONT>            if (namesLength &gt; 0) {<a name="line.619"></a>
<FONT color="green">620</FONT>                generalizedTypes = new int[namesLength];<a name="line.620"></a>
<FONT color="green">621</FONT>            }<a name="line.621"></a>
<FONT color="green">622</FONT>    <a name="line.622"></a>
<FONT color="green">623</FONT>            int resultLength = exLength;<a name="line.623"></a>
<FONT color="green">624</FONT>    <a name="line.624"></a>
<FONT color="green">625</FONT>            for (i = 0; i &lt; namesLength; i++) {<a name="line.625"></a>
<FONT color="green">626</FONT>                // When the document is not fully built, the searchOnly<a name="line.626"></a>
<FONT color="green">627</FONT>                // flag should be set to false. That means we should add<a name="line.627"></a>
<FONT color="green">628</FONT>                // the type if it is not already in the expanded name table.<a name="line.628"></a>
<FONT color="green">629</FONT>                //generalizedTypes[i] = getGeneralizedType(names[i], false);<a name="line.629"></a>
<FONT color="green">630</FONT>                generalizedTypes[i] =<a name="line.630"></a>
<FONT color="green">631</FONT>                    m_expandedNameTable.getExpandedTypeID(uris[i],<a name="line.631"></a>
<FONT color="green">632</FONT>                                                          names[i],<a name="line.632"></a>
<FONT color="green">633</FONT>                                                          types[i],<a name="line.633"></a>
<FONT color="green">634</FONT>                                                          false);<a name="line.634"></a>
<FONT color="green">635</FONT>                if (_namesSize &lt; 0 &amp;&amp; generalizedTypes[i] &gt;= resultLength) {<a name="line.635"></a>
<FONT color="green">636</FONT>                    resultLength = generalizedTypes[i] + 1;<a name="line.636"></a>
<FONT color="green">637</FONT>                }<a name="line.637"></a>
<FONT color="green">638</FONT>            }<a name="line.638"></a>
<FONT color="green">639</FONT>    <a name="line.639"></a>
<FONT color="green">640</FONT>            final short[] result = new short[resultLength];<a name="line.640"></a>
<FONT color="green">641</FONT>    <a name="line.641"></a>
<FONT color="green">642</FONT>            // primitive types map to themselves<a name="line.642"></a>
<FONT color="green">643</FONT>            for (i = 0; i &lt; DTM.NTYPES; i++) {<a name="line.643"></a>
<FONT color="green">644</FONT>                result[i] = (short)i;<a name="line.644"></a>
<FONT color="green">645</FONT>            }<a name="line.645"></a>
<FONT color="green">646</FONT>    <a name="line.646"></a>
<FONT color="green">647</FONT>            for (i = NTYPES; i &lt; exLength; i++) {<a name="line.647"></a>
<FONT color="green">648</FONT>                result[i] = m_expandedNameTable.getType(i);<a name="line.648"></a>
<FONT color="green">649</FONT>            }<a name="line.649"></a>
<FONT color="green">650</FONT>    <a name="line.650"></a>
<FONT color="green">651</FONT>            // actual mapping of caller requested names<a name="line.651"></a>
<FONT color="green">652</FONT>            for (i = 0; i &lt; namesLength; i++) {<a name="line.652"></a>
<FONT color="green">653</FONT>                int genType = generalizedTypes[i];<a name="line.653"></a>
<FONT color="green">654</FONT>                if (genType &gt;= 0 &amp;&amp; genType &lt; resultLength) {<a name="line.654"></a>
<FONT color="green">655</FONT>                    result[genType] = (short)(i + DTM.NTYPES);<a name="line.655"></a>
<FONT color="green">656</FONT>                }<a name="line.656"></a>
<FONT color="green">657</FONT>            }<a name="line.657"></a>
<FONT color="green">658</FONT>    <a name="line.658"></a>
<FONT color="green">659</FONT>            return(result);<a name="line.659"></a>
<FONT color="green">660</FONT>        }<a name="line.660"></a>
<FONT color="green">661</FONT>        /**<a name="line.661"></a>
<FONT color="green">662</FONT>         * Get mapping from DOM namespace types to external namespace types<a name="line.662"></a>
<FONT color="green">663</FONT>         */<a name="line.663"></a>
<FONT color="green">664</FONT>        public short[] getNamespaceMapping(String[] namespaces)<a name="line.664"></a>
<FONT color="green">665</FONT>        {<a name="line.665"></a>
<FONT color="green">666</FONT>            int i;<a name="line.666"></a>
<FONT color="green">667</FONT>            final int nsLength = namespaces.length;<a name="line.667"></a>
<FONT color="green">668</FONT>            final int mappingLength = _uriCount;<a name="line.668"></a>
<FONT color="green">669</FONT>    <a name="line.669"></a>
<FONT color="green">670</FONT>            final short[] result = new short[mappingLength];<a name="line.670"></a>
<FONT color="green">671</FONT>    <a name="line.671"></a>
<FONT color="green">672</FONT>            // Initialize all entries to -1<a name="line.672"></a>
<FONT color="green">673</FONT>            for (i=0; i&lt;mappingLength; i++) {<a name="line.673"></a>
<FONT color="green">674</FONT>                result[i] = (short)(-1);<a name="line.674"></a>
<FONT color="green">675</FONT>            }<a name="line.675"></a>
<FONT color="green">676</FONT>    <a name="line.676"></a>
<FONT color="green">677</FONT>            for (i=0; i&lt;nsLength; i++) {<a name="line.677"></a>
<FONT color="green">678</FONT>                int eType = getIdForNamespace(namespaces[i]); <a name="line.678"></a>
<FONT color="green">679</FONT>                Integer type = (Integer)_nsIndex.get(new Integer(eType));<a name="line.679"></a>
<FONT color="green">680</FONT>                if (type != null) {<a name="line.680"></a>
<FONT color="green">681</FONT>                    result[type.intValue()] = (short)i;<a name="line.681"></a>
<FONT color="green">682</FONT>                }<a name="line.682"></a>
<FONT color="green">683</FONT>            }<a name="line.683"></a>
<FONT color="green">684</FONT>    <a name="line.684"></a>
<FONT color="green">685</FONT>            return(result);<a name="line.685"></a>
<FONT color="green">686</FONT>        }<a name="line.686"></a>
<FONT color="green">687</FONT>    <a name="line.687"></a>
<FONT color="green">688</FONT>        /**<a name="line.688"></a>
<FONT color="green">689</FONT>         * Get mapping from external namespace types to DOM namespace types<a name="line.689"></a>
<FONT color="green">690</FONT>         */<a name="line.690"></a>
<FONT color="green">691</FONT>        public short[] getReverseNamespaceMapping(String[] namespaces)<a name="line.691"></a>
<FONT color="green">692</FONT>        {<a name="line.692"></a>
<FONT color="green">693</FONT>            int i;<a name="line.693"></a>
<FONT color="green">694</FONT>            final int length = namespaces.length;<a name="line.694"></a>
<FONT color="green">695</FONT>            final short[] result = new short[length];<a name="line.695"></a>
<FONT color="green">696</FONT>    <a name="line.696"></a>
<FONT color="green">697</FONT>            for (i = 0; i &lt; length; i++) {<a name="line.697"></a>
<FONT color="green">698</FONT>                int eType = getIdForNamespace(namespaces[i]);<a name="line.698"></a>
<FONT color="green">699</FONT>                Integer type = (Integer)_nsIndex.get(new Integer(eType));<a name="line.699"></a>
<FONT color="green">700</FONT>                result[i] = (type == null) ? -1 : type.shortValue();<a name="line.700"></a>
<FONT color="green">701</FONT>            }<a name="line.701"></a>
<FONT color="green">702</FONT>    <a name="line.702"></a>
<FONT color="green">703</FONT>            return result;<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>        /**<a name="line.706"></a>
<FONT color="green">707</FONT>         * Construct a SAXImpl object using the default block size.<a name="line.707"></a>
<FONT color="green">708</FONT>         */<a name="line.708"></a>
<FONT color="green">709</FONT>        public SAXImpl(XSLTCDTMManager mgr, Source source,<a name="line.709"></a>
<FONT color="green">710</FONT>                       int dtmIdentity, DTMWSFilter whiteSpaceFilter,<a name="line.710"></a>
<FONT color="green">711</FONT>                       XMLStringFactory xstringfactory,<a name="line.711"></a>
<FONT color="green">712</FONT>                       boolean doIndexing, boolean buildIdIndex)<a name="line.712"></a>
<FONT color="green">713</FONT>        {<a name="line.713"></a>
<FONT color="green">714</FONT>            this(mgr, source, dtmIdentity, whiteSpaceFilter, xstringfactory,<a name="line.714"></a>
<FONT color="green">715</FONT>                doIndexing, DEFAULT_BLOCKSIZE, buildIdIndex, false);<a name="line.715"></a>
<FONT color="green">716</FONT>        }<a name="line.716"></a>
<FONT color="green">717</FONT>        <a name="line.717"></a>
<FONT color="green">718</FONT>        /**<a name="line.718"></a>
<FONT color="green">719</FONT>         * Construct a SAXImpl object using the given block size.<a name="line.719"></a>
<FONT color="green">720</FONT>         */<a name="line.720"></a>
<FONT color="green">721</FONT>        public SAXImpl(XSLTCDTMManager mgr, Source source,<a name="line.721"></a>
<FONT color="green">722</FONT>                       int dtmIdentity, DTMWSFilter whiteSpaceFilter,<a name="line.722"></a>
<FONT color="green">723</FONT>                       XMLStringFactory xstringfactory,<a name="line.723"></a>
<FONT color="green">724</FONT>                       boolean doIndexing, int blocksize, <a name="line.724"></a>
<FONT color="green">725</FONT>                       boolean buildIdIndex,<a name="line.725"></a>
<FONT color="green">726</FONT>                       boolean newNameTable)<a name="line.726"></a>
<FONT color="green">727</FONT>        {<a name="line.727"></a>
<FONT color="green">728</FONT>            super(mgr, source, dtmIdentity, whiteSpaceFilter, xstringfactory,<a name="line.728"></a>
<FONT color="green">729</FONT>                doIndexing, blocksize, false, buildIdIndex, newNameTable);<a name="line.729"></a>
<FONT color="green">730</FONT>          <a name="line.730"></a>
<FONT color="green">731</FONT>            _dtmManager = mgr;      <a name="line.731"></a>
<FONT color="green">732</FONT>            _size = blocksize;<a name="line.732"></a>
<FONT color="green">733</FONT>          <a name="line.733"></a>
<FONT color="green">734</FONT>            // Use a smaller size for the space stack if the blocksize is small<a name="line.734"></a>
<FONT color="green">735</FONT>            _xmlSpaceStack = new int[blocksize &lt;= 64 ? 4 : 64];<a name="line.735"></a>
<FONT color="green">736</FONT>                                      <a name="line.736"></a>
<FONT color="green">737</FONT>            /* From DOMBuilder */ <a name="line.737"></a>
<FONT color="green">738</FONT>            _xmlSpaceStack[0] = DTMDefaultBase.ROOTNODE;<a name="line.738"></a>
<FONT color="green">739</FONT>          <a name="line.739"></a>
<FONT color="green">740</FONT>            // If the input source is DOMSource, set the _document field and<a name="line.740"></a>
<FONT color="green">741</FONT>            // create the node2Ids table.<a name="line.741"></a>
<FONT color="green">742</FONT>            if (source instanceof DOMSource) {<a name="line.742"></a>
<FONT color="green">743</FONT>                _hasDOMSource = true;<a name="line.743"></a>
<FONT color="green">744</FONT>                DOMSource domsrc = (DOMSource)source;<a name="line.744"></a>
<FONT color="green">745</FONT>                Node node = domsrc.getNode();<a name="line.745"></a>
<FONT color="green">746</FONT>                if (node instanceof Document) {<a name="line.746"></a>
<FONT color="green">747</FONT>                    _document = (Document)node;<a name="line.747"></a>
<FONT color="green">748</FONT>                }<a name="line.748"></a>
<FONT color="green">749</FONT>                else {<a name="line.749"></a>
<FONT color="green">750</FONT>                    _document = node.getOwnerDocument();<a name="line.750"></a>
<FONT color="green">751</FONT>                }<a name="line.751"></a>
<FONT color="green">752</FONT>                _node2Ids = new Hashtable();<a name="line.752"></a>
<FONT color="green">753</FONT>            }                          <a name="line.753"></a>
<FONT color="green">754</FONT>        }<a name="line.754"></a>
<FONT color="green">755</FONT>            <a name="line.755"></a>
<FONT color="green">756</FONT>        /**<a name="line.756"></a>
<FONT color="green">757</FONT>        * Migrate a DTM built with an old DTMManager to a new DTMManager.<a name="line.757"></a>
<FONT color="green">758</FONT>        * After the migration, the new DTMManager will treat the DTM as<a name="line.758"></a>
<FONT color="green">759</FONT>        * one that is built by itself.<a name="line.759"></a>
<FONT color="green">760</FONT>        * This is used to support DTM sharing between multiple transformations.<a name="line.760"></a>
<FONT color="green">761</FONT>        * @param manager the DTMManager<a name="line.761"></a>
<FONT color="green">762</FONT>        */<a name="line.762"></a>
<FONT color="green">763</FONT>        public void migrateTo(DTMManager manager) {<a name="line.763"></a>
<FONT color="green">764</FONT>            super.migrateTo(manager);<a name="line.764"></a>
<FONT color="green">765</FONT>            if (manager instanceof XSLTCDTMManager) {<a name="line.765"></a>
<FONT color="green">766</FONT>                _dtmManager = (XSLTCDTMManager)manager;<a name="line.766"></a>
<FONT color="green">767</FONT>            }<a name="line.767"></a>
<FONT color="green">768</FONT>        }<a name="line.768"></a>
<FONT color="green">769</FONT>            <a name="line.769"></a>
<FONT color="green">770</FONT>        /**<a name="line.770"></a>
<FONT color="green">771</FONT>         * Return the node identity for a given id String<a name="line.771"></a>
<FONT color="green">772</FONT>         * <a name="line.772"></a>
<FONT color="green">773</FONT>         * @param idString The id String<a name="line.773"></a>
<FONT color="green">774</FONT>         * @return The identity of the node whose id is the given String.<a name="line.774"></a>
<FONT color="green">775</FONT>         */<a name="line.775"></a>
<FONT color="green">776</FONT>        public int getElementById(String idString)<a name="line.776"></a>
<FONT color="green">777</FONT>        {<a name="line.777"></a>
<FONT color="green">778</FONT>            Node node = _document.getElementById(idString);<a name="line.778"></a>
<FONT color="green">779</FONT>            if (node != null) {<a name="line.779"></a>
<FONT color="green">780</FONT>                Integer id = (Integer)_node2Ids.get(node);<a name="line.780"></a>
<FONT color="green">781</FONT>                return (id != null) ? id.intValue() : DTM.NULL;<a name="line.781"></a>
<FONT color="green">782</FONT>            }<a name="line.782"></a>
<FONT color="green">783</FONT>            else {<a name="line.783"></a>
<FONT color="green">784</FONT>                return DTM.NULL;<a name="line.784"></a>
<FONT color="green">785</FONT>            }<a name="line.785"></a>
<FONT color="green">786</FONT>        }<a name="line.786"></a>
<FONT color="green">787</FONT>        <a name="line.787"></a>
<FONT color="green">788</FONT>        /**<a name="line.788"></a>
<FONT color="green">789</FONT>         * Return true if the input source is DOMSource.<a name="line.789"></a>
<FONT color="green">790</FONT>         */<a name="line.790"></a>
<FONT color="green">791</FONT>        public boolean hasDOMSource()<a name="line.791"></a>
<FONT color="green">792</FONT>        {<a name="line.792"></a>
<FONT color="green">793</FONT>            return _hasDOMSource;   <a name="line.793"></a>
<FONT color="green">794</FONT>        }<a name="line.794"></a>
<FONT color="green">795</FONT>    <a name="line.795"></a>
<FONT color="green">796</FONT>        /*---------------------------------------------------------------------------*/<a name="line.796"></a>
<FONT color="green">797</FONT>        /* DOMBuilder methods begin                                                  */<a name="line.797"></a>
<FONT color="green">798</FONT>        /*---------------------------------------------------------------------------*/<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>         * Call this when an xml:space attribute is encountered to<a name="line.801"></a>
<FONT color="green">802</FONT>         * define the whitespace strip/preserve settings.<a name="line.802"></a>
<FONT color="green">803</FONT>         */<a name="line.803"></a>
<FONT color="green">804</FONT>        private void xmlSpaceDefine(String val, final int node)<a name="line.804"></a>
<FONT color="green">805</FONT>        {<a name="line.805"></a>
<FONT color="green">806</FONT>            final boolean setting = val.equals(PRESERVE_STRING);<a name="line.806"></a>
<FONT color="green">807</FONT>            if (setting != _preserve) {<a name="line.807"></a>
<FONT color="green">808</FONT>                _xmlSpaceStack[_idx++] = node;<a name="line.808"></a>
<FONT color="green">809</FONT>                _preserve = setting;<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>        /**<a name="line.813"></a>
<FONT color="green">814</FONT>         * Call this from endElement() to revert strip/preserve setting<a name="line.814"></a>
<FONT color="green">815</FONT>         * to whatever it was before the corresponding startElement().<a name="line.815"></a>
<FONT color="green">816</FONT>         */<a name="line.816"></a>
<FONT color="green">817</FONT>        private void xmlSpaceRevert(final int node)<a name="line.817"></a>
<FONT color="green">818</FONT>        {<a name="line.818"></a>
<FONT color="green">819</FONT>            if (node == _xmlSpaceStack[_idx - 1]) {<a name="line.819"></a>
<FONT color="green">820</FONT>                _idx--;<a name="line.820"></a>
<FONT color="green">821</FONT>                _preserve = !_preserve;<a name="line.821"></a>
<FONT color="green">822</FONT>            }<a name="line.822"></a>
<FONT color="green">823</FONT>        }<a name="line.823"></a>
<FONT color="green">824</FONT>    <a name="line.824"></a>
<FONT color="green">825</FONT>        /**<a name="line.825"></a>
<FONT color="green">826</FONT>         * Find out whether or not to strip whitespace nodes.<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>         * @return whether or not to strip whitespace nodes.<a name="line.829"></a>
<FONT color="green">830</FONT>         */<a name="line.830"></a>
<FONT color="green">831</FONT>        protected boolean getShouldStripWhitespace()<a name="line.831"></a>
<FONT color="green">832</FONT>        {<a name="line.832"></a>
<FONT color="green">833</FONT>            return _preserve ? false : super.getShouldStripWhitespace();<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>        /**<a name="line.836"></a>
<FONT color="green">837</FONT>         * Creates a text-node and checks if it is a whitespace node.<a name="line.837"></a>
<FONT color="green">838</FONT>         */<a name="line.838"></a>
<FONT color="green">839</FONT>        private void handleTextEscaping() {<a name="line.839"></a>
<FONT color="green">840</FONT>            if (_disableEscaping &amp;&amp; _textNodeToProcess != DTM.NULL<a name="line.840"></a>
<FONT color="green">841</FONT>                &amp;&amp; _type(_textNodeToProcess) == DTM.TEXT_NODE) {<a name="line.841"></a>
<FONT color="green">842</FONT>                if (_dontEscape == null) {<a name="line.842"></a>
<FONT color="green">843</FONT>                    _dontEscape = new BitArray(_size);<a name="line.843"></a>
<FONT color="green">844</FONT>                }<a name="line.844"></a>
<FONT color="green">845</FONT>              <a name="line.845"></a>
<FONT color="green">846</FONT>                // Resize the _dontEscape BitArray if necessary.<a name="line.846"></a>
<FONT color="green">847</FONT>                if (_textNodeToProcess &gt;= _dontEscape.size()) {<a name="line.847"></a>
<FONT color="green">848</FONT>                    _dontEscape.resize(_dontEscape.size() * 2);<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>                _dontEscape.setBit(_textNodeToProcess);<a name="line.851"></a>
<FONT color="green">852</FONT>                _disableEscaping = false;<a name="line.852"></a>
<FONT color="green">853</FONT>            }<a name="line.853"></a>
<FONT color="green">854</FONT>            _textNodeToProcess = DTM.NULL;<a name="line.854"></a>
<FONT color="green">855</FONT>        }<a name="line.855"></a>
<FONT color="green">856</FONT>    <a name="line.856"></a>
<FONT color="green">857</FONT>    <a name="line.857"></a>
<FONT color="green">858</FONT>        /****************************************************************/<a name="line.858"></a>
<FONT color="green">859</FONT>        /*               SAX Interface Starts Here                      */<a name="line.859"></a>
<FONT color="green">860</FONT>        /****************************************************************/<a name="line.860"></a>
<FONT color="green">861</FONT>    <a name="line.861"></a>
<FONT color="green">862</FONT>        /**<a name="line.862"></a>
<FONT color="green">863</FONT>         * SAX2: Receive notification of character data.<a name="line.863"></a>
<FONT color="green">864</FONT>         */<a name="line.864"></a>
<FONT color="green">865</FONT>        public void characters(char[] ch, int start, int length) throws SAXException<a name="line.865"></a>
<FONT color="green">866</FONT>        {<a name="line.866"></a>
<FONT color="green">867</FONT>            super.characters(ch, start, length);<a name="line.867"></a>
<FONT color="green">868</FONT>            <a name="line.868"></a>
<FONT color="green">869</FONT>            _disableEscaping = !_escaping;  <a name="line.869"></a>
<FONT color="green">870</FONT>            _textNodeToProcess = getNumberOfNodes();<a name="line.870"></a>
<FONT color="green">871</FONT>        }<a name="line.871"></a>
<FONT color="green">872</FONT>    <a name="line.872"></a>
<FONT color="green">873</FONT>        /**<a name="line.873"></a>
<FONT color="green">874</FONT>         * SAX2: Receive notification of the beginning of a document.<a name="line.874"></a>
<FONT color="green">875</FONT>         */<a name="line.875"></a>
<FONT color="green">876</FONT>        public void startDocument() throws SAXException<a name="line.876"></a>
<FONT color="green">877</FONT>        {<a name="line.877"></a>
<FONT color="green">878</FONT>            super.startDocument();<a name="line.878"></a>
<FONT color="green">879</FONT>    <a name="line.879"></a>
<FONT color="green">880</FONT>            _nsIndex.put(new Integer(0), new Integer(_uriCount++));<a name="line.880"></a>
<FONT color="green">881</FONT>            definePrefixAndUri(XML_PREFIX, XML_URI);<a name="line.881"></a>
<FONT color="green">882</FONT>        }<a name="line.882"></a>
<FONT color="green">883</FONT>    <a name="line.883"></a>
<FONT color="green">884</FONT>        /**<a name="line.884"></a>
<FONT color="green">885</FONT>         * SAX2: Receive notification of the end of a document.<a name="line.885"></a>
<FONT color="green">886</FONT>         */<a name="line.886"></a>
<FONT color="green">887</FONT>        public void endDocument() throws SAXException<a name="line.887"></a>
<FONT color="green">888</FONT>        {<a name="line.888"></a>
<FONT color="green">889</FONT>            super.endDocument();<a name="line.889"></a>
<FONT color="green">890</FONT>            <a name="line.890"></a>
<FONT color="green">891</FONT>            handleTextEscaping();<a name="line.891"></a>
<FONT color="green">892</FONT>            _namesSize = m_expandedNameTable.getSize();<a name="line.892"></a>
<FONT color="green">893</FONT>        }<a name="line.893"></a>
<FONT color="green">894</FONT>    <a name="line.894"></a>
<FONT color="green">895</FONT>        /**<a name="line.895"></a>
<FONT color="green">896</FONT>         * Specialized interface used by DOM2SAX. This one has an extra Node<a name="line.896"></a>
<FONT color="green">897</FONT>         * parameter to build the Node -&gt; id map.<a name="line.897"></a>
<FONT color="green">898</FONT>         */<a name="line.898"></a>
<FONT color="green">899</FONT>        public void startElement(String uri, String localName,<a name="line.899"></a>
<FONT color="green">900</FONT>                                 String qname, Attributes attributes,<a name="line.900"></a>
<FONT color="green">901</FONT>                                 Node node)<a name="line.901"></a>
<FONT color="green">902</FONT>            throws SAXException<a name="line.902"></a>
<FONT color="green">903</FONT>        {<a name="line.903"></a>
<FONT color="green">904</FONT>            this.startElement(uri, localName, qname, attributes);<a name="line.904"></a>
<FONT color="green">905</FONT>            <a name="line.905"></a>
<FONT color="green">906</FONT>            if (m_buildIdIndex) {<a name="line.906"></a>
<FONT color="green">907</FONT>                _node2Ids.put(node, new Integer(m_parents.peek()));<a name="line.907"></a>
<FONT color="green">908</FONT>            }<a name="line.908"></a>
<FONT color="green">909</FONT>        }<a name="line.909"></a>
<FONT color="green">910</FONT>        <a name="line.910"></a>
<FONT color="green">911</FONT>        /**<a name="line.911"></a>
<FONT color="green">912</FONT>         * SAX2: Receive notification of the beginning of an element.<a name="line.912"></a>
<FONT color="green">913</FONT>         */<a name="line.913"></a>
<FONT color="green">914</FONT>        public void startElement(String uri, String localName,<a name="line.914"></a>
<FONT color="green">915</FONT>                     String qname, Attributes attributes)<a name="line.915"></a>
<FONT color="green">916</FONT>            throws SAXException<a name="line.916"></a>
<FONT color="green">917</FONT>        {<a name="line.917"></a>
<FONT color="green">918</FONT>            super.startElement(uri, localName, qname, attributes);<a name="line.918"></a>
<FONT color="green">919</FONT>            <a name="line.919"></a>
<FONT color="green">920</FONT>            handleTextEscaping();<a name="line.920"></a>
<FONT color="green">921</FONT>    <a name="line.921"></a>
<FONT color="green">922</FONT>            if (m_wsfilter != null) {<a name="line.922"></a>
<FONT color="green">923</FONT>                // Look for any xml:space attributes<a name="line.923"></a>
<FONT color="green">924</FONT>                // Depending on the implementation of attributes, this<a name="line.924"></a>
<FONT color="green">925</FONT>                // might be faster than looping through all attributes. ILENE<a name="line.925"></a>
<FONT color="green">926</FONT>                final int index = attributes.getIndex(XMLSPACE_STRING);<a name="line.926"></a>
<FONT color="green">927</FONT>                if (index &gt;= 0) {<a name="line.927"></a>
<FONT color="green">928</FONT>                    xmlSpaceDefine(attributes.getValue(index), m_parents.peek());<a name="line.928"></a>
<FONT color="green">929</FONT>                }<a name="line.929"></a>
<FONT color="green">930</FONT>            }<a name="line.930"></a>
<FONT color="green">931</FONT>        }<a name="line.931"></a>
<FONT color="green">932</FONT>    <a name="line.932"></a>
<FONT color="green">933</FONT>        /**<a name="line.933"></a>
<FONT color="green">934</FONT>         * SAX2: Receive notification of the end of an element.<a name="line.934"></a>
<FONT color="green">935</FONT>         */<a name="line.935"></a>
<FONT color="green">936</FONT>        public void endElement(String namespaceURI, String localName, String qname)<a name="line.936"></a>
<FONT color="green">937</FONT>            throws SAXException<a name="line.937"></a>
<FONT color="green">938</FONT>        {<a name="line.938"></a>
<FONT color="green">939</FONT>            super.endElement(namespaceURI, localName, qname);<a name="line.939"></a>
<FONT color="green">940</FONT>            <a name="line.940"></a>
<FONT color="green">941</FONT>            handleTextEscaping();<a name="line.941"></a>
<FONT color="green">942</FONT>    <a name="line.942"></a>
<FONT color="green">943</FONT>            // Revert to strip/preserve-space setting from before this element<a name="line.943"></a>
<FONT color="green">944</FONT>            if (m_wsfilter != null) {<a name="line.944"></a>
<FONT color="green">945</FONT>                xmlSpaceRevert(m_previous);<a name="line.945"></a>
<FONT color="green">946</FONT>            }<a name="line.946"></a>
<FONT color="green">947</FONT>        }<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>         * SAX2: Receive notification of a processing instruction.<a name="line.950"></a>
<FONT color="green">951</FONT>         */<a name="line.951"></a>
<FONT color="green">952</FONT>        public void processingInstruction(String target, String data)<a name="line.952"></a>
<FONT color="green">953</FONT>            throws SAXException<a name="line.953"></a>
<FONT color="green">954</FONT>        {<a name="line.954"></a>
<FONT color="green">955</FONT>            super.processingInstruction(target, data);<a name="line.955"></a>
<FONT color="green">956</FONT>            handleTextEscaping();<a name="line.956"></a>
<FONT color="green">957</FONT>        }<a name="line.957"></a>
<FONT color="green">958</FONT>    <a name="line.958"></a>
<FONT color="green">959</FONT>        /**<a name="line.959"></a>
<FONT color="green">960</FONT>         * SAX2: Receive notification of ignorable whitespace in element<a name="line.960"></a>
<FONT color="green">961</FONT>         * content. Similar to characters(char[], int, int).<a name="line.961"></a>
<FONT color="green">962</FONT>         */<a name="line.962"></a>
<FONT color="green">963</FONT>        public void ignorableWhitespace(char[] ch, int start, int length)<a name="line.963"></a>
<FONT color="green">964</FONT>            throws SAXException<a name="line.964"></a>
<FONT color="green">965</FONT>        {<a name="line.965"></a>
<FONT color="green">966</FONT>            super.ignorableWhitespace(ch, start, length);<a name="line.966"></a>
<FONT color="green">967</FONT>            _textNodeToProcess = getNumberOfNodes();<a name="line.967"></a>
<FONT color="green">968</FONT>        }<a name="line.968"></a>
<FONT color="green">969</FONT>    <a name="line.969"></a>
<FONT color="green">970</FONT>        /**<a name="line.970"></a>
<FONT color="green">971</FONT>         * SAX2: Begin the scope of a prefix-URI Namespace mapping.<a name="line.971"></a>
<FONT color="green">972</FONT>         */<a name="line.972"></a>
<FONT color="green">973</FONT>        public void startPrefixMapping(String prefix, String uri)<a name="line.973"></a>
<FONT color="green">974</FONT>            throws SAXException<a name="line.974"></a>
<FONT color="green">975</FONT>        {<a name="line.975"></a>
<FONT color="green">976</FONT>            super.startPrefixMapping(prefix, uri);<a name="line.976"></a>
<FONT color="green">977</FONT>            handleTextEscaping();<a name="line.977"></a>
<FONT color="green">978</FONT>    <a name="line.978"></a>
<FONT color="green">979</FONT>            definePrefixAndUri(prefix, uri);<a name="line.979"></a>
<FONT color="green">980</FONT>        }<a name="line.980"></a>
<FONT color="green">981</FONT>    <a name="line.981"></a>
<FONT color="green">982</FONT>        private void definePrefixAndUri(String prefix, String uri) <a name="line.982"></a>
<FONT color="green">983</FONT>            throws SAXException <a name="line.983"></a>
<FONT color="green">984</FONT>        {<a name="line.984"></a>
<FONT color="green">985</FONT>            // Check if the URI already exists before pushing on stack<a name="line.985"></a>
<FONT color="green">986</FONT>            Integer eType = new Integer(getIdForNamespace(uri));<a name="line.986"></a>
<FONT color="green">987</FONT>            if ((Integer)_nsIndex.get(eType) == null) {<a name="line.987"></a>
<FONT color="green">988</FONT>                _nsIndex.put(eType, new Integer(_uriCount++));<a name="line.988"></a>
<FONT color="green">989</FONT>            }<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>        /**<a name="line.992"></a>
<FONT color="green">993</FONT>         * SAX2: Report an XML comment anywhere in the document.<a name="line.993"></a>
<FONT color="green">994</FONT>         */<a name="line.994"></a>
<FONT color="green">995</FONT>        public void comment(char[] ch, int start, int length)<a name="line.995"></a>
<FONT color="green">996</FONT>            throws SAXException<a name="line.996"></a>
<FONT color="green">997</FONT>        {<a name="line.997"></a>
<FONT color="green">998</FONT>            super.comment(ch, start, length);<a name="line.998"></a>
<FONT color="green">999</FONT>            handleTextEscaping();<a name="line.999"></a>
<FONT color="green">1000</FONT>        }<a name="line.1000"></a>
<FONT color="green">1001</FONT>    <a name="line.1001"></a>
<FONT color="green">1002</FONT>        public boolean setEscaping(boolean value) {<a name="line.1002"></a>
<FONT color="green">1003</FONT>            final boolean temp = _escaping;<a name="line.1003"></a>
<FONT color="green">1004</FONT>            _escaping = value; <a name="line.1004"></a>
<FONT color="green">1005</FONT>            return temp;<a name="line.1005"></a>
<FONT color="green">1006</FONT>        }<a name="line.1006"></a>
<FONT color="green">1007</FONT>       <a name="line.1007"></a>
<FONT color="green">1008</FONT>       /*---------------------------------------------------------------------------*/<a name="line.1008"></a>
<FONT color="green">1009</FONT>       /* DOMBuilder methods end                                                    */<a name="line.1009"></a>
<FONT color="green">1010</FONT>       /*---------------------------------------------------------------------------*/<a name="line.1010"></a>
<FONT color="green">1011</FONT>    <a name="line.1011"></a>
<FONT color="green">1012</FONT>        /**<a name="line.1012"></a>
<FONT color="green">1013</FONT>         * Prints the whole tree to standard output<a name="line.1013"></a>
<FONT color="green">1014</FONT>         */<a name="line.1014"></a>
<FONT color="green">1015</FONT>        public void print(int node, int level)<a name="line.1015"></a>
<FONT color="green">1016</FONT>        {<a name="line.1016"></a>
<FONT color="green">1017</FONT>            switch(getNodeType(node))<a name="line.1017"></a>
<FONT color="green">1018</FONT>            {<a name="line.1018"></a>
<FONT color="green">1019</FONT>                case DTM.ROOT_NODE:<a name="line.1019"></a>
<FONT color="green">1020</FONT>                case DTM.DOCUMENT_NODE:<a name="line.1020"></a>
<FONT color="green">1021</FONT>                    print(getFirstChild(node), level);<a name="line.1021"></a>
<FONT color="green">1022</FONT>                    break;<a name="line.1022"></a>
<FONT color="green">1023</FONT>                case DTM.TEXT_NODE:<a name="line.1023"></a>
<FONT color="green">1024</FONT>                case DTM.COMMENT_NODE:<a name="line.1024"></a>
<FONT color="green">1025</FONT>                case DTM.PROCESSING_INSTRUCTION_NODE:<a name="line.1025"></a>
<FONT color="green">1026</FONT>                    System.out.print(getStringValueX(node));<a name="line.1026"></a>
<FONT color="green">1027</FONT>                    break;<a name="line.1027"></a>
<FONT color="green">1028</FONT>                default:<a name="line.1028"></a>
<FONT color="green">1029</FONT>                    final String name = getNodeName(node);<a name="line.1029"></a>
<FONT color="green">1030</FONT>                    System.out.print("&lt;" + name);<a name="line.1030"></a>
<FONT color="green">1031</FONT>                    for (int a = getFirstAttribute(node); a != DTM.NULL; a = getNextAttribute(a))<a name="line.1031"></a>
<FONT color="green">1032</FONT>                    {<a name="line.1032"></a>
<FONT color="green">1033</FONT>                        System.out.print("\n" + getNodeName(a) + "=\"" + getStringValueX(a) + "\"");<a name="line.1033"></a>
<FONT color="green">1034</FONT>                    }<a name="line.1034"></a>
<FONT color="green">1035</FONT>                    System.out.print('&gt;');<a name="line.1035"></a>
<FONT color="green">1036</FONT>                    for (int child = getFirstChild(node); child != DTM.NULL;<a name="line.1036"></a>
<FONT color="green">1037</FONT>                        child = getNextSibling(child)) {<a name="line.1037"></a>
<FONT color="green">1038</FONT>                        print(child, level + 1);<a name="line.1038"></a>
<FONT color="green">1039</FONT>                    }<a name="line.1039"></a>
<FONT color="green">1040</FONT>                    System.out.println("&lt;/" + name + '&gt;');<a name="line.1040"></a>
<FONT color="green">1041</FONT>                    break;<a name="line.1041"></a>
<FONT color="green">1042</FONT>            }<a name="line.1042"></a>
<FONT color="green">1043</FONT>        }<a name="line.1043"></a>
<FONT color="green">1044</FONT>    <a name="line.1044"></a>
<FONT color="green">1045</FONT>        /**<a name="line.1045"></a>
<FONT color="green">1046</FONT>         * Returns the name of a node (attribute or element).<a name="line.1046"></a>
<FONT color="green">1047</FONT>         */<a name="line.1047"></a>
<FONT color="green">1048</FONT>        public String getNodeName(final int node)<a name="line.1048"></a>
<FONT color="green">1049</FONT>        {<a name="line.1049"></a>
<FONT color="green">1050</FONT>            // Get the node type and make sure that it is within limits<a name="line.1050"></a>
<FONT color="green">1051</FONT>            int nodeh = node;<a name="line.1051"></a>
<FONT color="green">1052</FONT>            final short type = getNodeType(nodeh);<a name="line.1052"></a>
<FONT color="green">1053</FONT>            switch(type)<a name="line.1053"></a>
<FONT color="green">1054</FONT>            {<a name="line.1054"></a>
<FONT color="green">1055</FONT>                case DTM.ROOT_NODE:<a name="line.1055"></a>
<FONT color="green">1056</FONT>                case DTM.DOCUMENT_NODE:<a name="line.1056"></a>
<FONT color="green">1057</FONT>                case DTM.TEXT_NODE:<a name="line.1057"></a>
<FONT color="green">1058</FONT>                case DTM.COMMENT_NODE:<a name="line.1058"></a>
<FONT color="green">1059</FONT>                    return EMPTYSTRING;<a name="line.1059"></a>
<FONT color="green">1060</FONT>                case DTM.NAMESPACE_NODE:<a name="line.1060"></a>
<FONT color="green">1061</FONT>                    return this.getLocalName(nodeh);<a name="line.1061"></a>
<FONT color="green">1062</FONT>                default:<a name="line.1062"></a>
<FONT color="green">1063</FONT>                    return super.getNodeName(nodeh);<a name="line.1063"></a>
<FONT color="green">1064</FONT>            }<a name="line.1064"></a>
<FONT color="green">1065</FONT>        }    <a name="line.1065"></a>
<FONT color="green">1066</FONT>    <a name="line.1066"></a>
<FONT color="green">1067</FONT>        /**<a name="line.1067"></a>
<FONT color="green">1068</FONT>         * Returns the namespace URI to which a node belongs<a name="line.1068"></a>
<FONT color="green">1069</FONT>         */<a name="line.1069"></a>
<FONT color="green">1070</FONT>        public String getNamespaceName(final int node)<a name="line.1070"></a>
<FONT color="green">1071</FONT>        {<a name="line.1071"></a>
<FONT color="green">1072</FONT>            if (node == DTM.NULL) {<a name="line.1072"></a>
<FONT color="green">1073</FONT>                return "";<a name="line.1073"></a>
<FONT color="green">1074</FONT>            }<a name="line.1074"></a>
<FONT color="green">1075</FONT>            <a name="line.1075"></a>
<FONT color="green">1076</FONT>            String s;<a name="line.1076"></a>
<FONT color="green">1077</FONT>            return (s = getNamespaceURI(node)) == null ? EMPTYSTRING : s;<a name="line.1077"></a>
<FONT color="green">1078</FONT>        }<a name="line.1078"></a>
<FONT color="green">1079</FONT>    <a name="line.1079"></a>
<FONT color="green">1080</FONT>     <a name="line.1080"></a>
<FONT color="green">1081</FONT>        /**<a name="line.1081"></a>
<FONT color="green">1082</FONT>         * Returns the attribute node of a given type (if any) for an element<a name="line.1082"></a>
<FONT color="green">1083</FONT>         */<a name="line.1083"></a>
<FONT color="green">1084</FONT>        public int getAttributeNode(final int type, final int element)<a name="line.1084"></a>
<FONT color="green">1085</FONT>        {<a name="line.1085"></a>
<FONT color="green">1086</FONT>            for (int attr = getFirstAttribute(element);<a name="line.1086"></a>
<FONT color="green">1087</FONT>               attr != DTM.NULL;<a name="line.1087"></a>
<FONT color="green">1088</FONT>               attr = getNextAttribute(attr))<a name="line.1088"></a>
<FONT color="green">1089</FONT>            {<a name="line.1089"></a>
<FONT color="green">1090</FONT>                if (getExpandedTypeID(attr) == type) return attr;<a name="line.1090"></a>
<FONT color="green">1091</FONT>            }<a name="line.1091"></a>
<FONT color="green">1092</FONT>            return DTM.NULL;<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>         * Returns the value of a given attribute type of a given element<a name="line.1096"></a>
<FONT color="green">1097</FONT>         */<a name="line.1097"></a>
<FONT color="green">1098</FONT>        public String getAttributeValue(final int type, final int element)<a name="line.1098"></a>
<FONT color="green">1099</FONT>        {<a name="line.1099"></a>
<FONT color="green">1100</FONT>            final int attr = getAttributeNode(type, element);<a name="line.1100"></a>
<FONT color="green">1101</FONT>            return (attr != DTM.NULL) ? getStringValueX(attr) : EMPTYSTRING;<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>        /**<a name="line.1104"></a>
<FONT color="green">1105</FONT>         * This method is for testing/debugging only<a name="line.1105"></a>
<FONT color="green">1106</FONT>         */<a name="line.1106"></a>
<FONT color="green">1107</FONT>        public String getAttributeValue(final String name, final int element)<a name="line.1107"></a>
<FONT color="green">1108</FONT>        {<a name="line.1108"></a>
<FONT color="green">1109</FONT>            return getAttributeValue(getGeneralizedType(name), element);<a name="line.1109"></a>
<FONT color="green">1110</FONT>        }<a name="line.1110"></a>
<FONT color="green">1111</FONT>    <a name="line.1111"></a>
<FONT color="green">1112</FONT>        /**<a name="line.1112"></a>
<FONT color="green">1113</FONT>         * Returns an iterator with all the children of a given node<a name="line.1113"></a>
<FONT color="green">1114</FONT>         */<a name="line.1114"></a>
<FONT color="green">1115</FONT>        public DTMAxisIterator getChildren(final int node)<a name="line.1115"></a>
<FONT color="green">1116</FONT>        {<a name="line.1116"></a>
<FONT color="green">1117</FONT>            return (new ChildrenIterator()).setStartNode(node);<a name="line.1117"></a>
<FONT color="green">1118</FONT>        }<a name="line.1118"></a>
<FONT color="green">1119</FONT>    <a name="line.1119"></a>
<FONT color="green">1120</FONT>        /**<a name="line.1120"></a>
<FONT color="green">1121</FONT>         * Returns an iterator with all children of a specific type<a name="line.1121"></a>
<FONT color="green">1122</FONT>         * for a given node (element)<a name="line.1122"></a>
<FONT color="green">1123</FONT>         */<a name="line.1123"></a>
<FONT color="green">1124</FONT>        public DTMAxisIterator getTypedChildren(final int type)<a name="line.1124"></a>
<FONT color="green">1125</FONT>        {<a name="line.1125"></a>
<FONT color="green">1126</FONT>            return(new TypedChildrenIterator(type));<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>        /**<a name="line.1129"></a>
<FONT color="green">1130</FONT>         * This is a shortcut to the iterators that implement the<a name="line.1130"></a>
<FONT color="green">1131</FONT>         * supported XPath axes (only namespace::) is not supported.<a name="line.1131"></a>
<FONT color="green">1132</FONT>         * Returns a bare-bones iterator that must be initialized<a name="line.1132"></a>
<FONT color="green">1133</FONT>         * with a start node (using iterator.setStartNode()).<a name="line.1133"></a>
<FONT color="green">1134</FONT>         */<a name="line.1134"></a>
<FONT color="green">1135</FONT>        public DTMAxisIterator getAxisIterator(final int axis)<a name="line.1135"></a>
<FONT color="green">1136</FONT>        {<a name="line.1136"></a>
<FONT color="green">1137</FONT>            switch (axis)<a name="line.1137"></a>
<FONT color="green">1138</FONT>            {<a name="line.1138"></a>
<FONT color="green">1139</FONT>                case Axis.SELF:<a name="line.1139"></a>
<FONT color="green">1140</FONT>                    return new SingletonIterator();<a name="line.1140"></a>
<FONT color="green">1141</FONT>                case Axis.CHILD:<a name="line.1141"></a>
<FONT color="green">1142</FONT>                    return new ChildrenIterator();<a name="line.1142"></a>
<FONT color="green">1143</FONT>                case Axis.PARENT:<a name="line.1143"></a>
<FONT color="green">1144</FONT>                    return new ParentIterator();<a name="line.1144"></a>
<FONT color="green">1145</FONT>                case Axis.ANCESTOR:<a name="line.1145"></a>
<FONT color="green">1146</FONT>                    return new AncestorIterator();<a name="line.1146"></a>
<FONT color="green">1147</FONT>                case Axis.ANCESTORORSELF:<a name="line.1147"></a>
<FONT color="green">1148</FONT>                    return (new AncestorIterator()).includeSelf();<a name="line.1148"></a>
<FONT color="green">1149</FONT>                case Axis.ATTRIBUTE:<a name="line.1149"></a>
<FONT color="green">1150</FONT>                    return new AttributeIterator();<a name="line.1150"></a>
<FONT color="green">1151</FONT>                case Axis.DESCENDANT:<a name="line.1151"></a>
<FONT color="green">1152</FONT>                    return new DescendantIterator();<a name="line.1152"></a>
<FONT color="green">1153</FONT>                case Axis.DESCENDANTORSELF:<a name="line.1153"></a>
<FONT color="green">1154</FONT>                    return (new DescendantIterator()).includeSelf();<a name="line.1154"></a>
<FONT color="green">1155</FONT>                case Axis.FOLLOWING:<a name="line.1155"></a>
<FONT color="green">1156</FONT>                    return new FollowingIterator();<a name="line.1156"></a>
<FONT color="green">1157</FONT>                case Axis.PRECEDING:<a name="line.1157"></a>
<FONT color="green">1158</FONT>                    return new PrecedingIterator();<a name="line.1158"></a>
<FONT color="green">1159</FONT>                case Axis.FOLLOWINGSIBLING:<a name="line.1159"></a>
<FONT color="green">1160</FONT>                    return new FollowingSiblingIterator();<a name="line.1160"></a>
<FONT color="green">1161</FONT>                case Axis.PRECEDINGSIBLING:<a name="line.1161"></a>
<FONT color="green">1162</FONT>                    return new PrecedingSiblingIterator();<a name="line.1162"></a>
<FONT color="green">1163</FONT>                case Axis.NAMESPACE:<a name="line.1163"></a>
<FONT color="green">1164</FONT>                    return new NamespaceIterator();<a name="line.1164"></a>
<FONT color="green">1165</FONT>                case Axis.ROOT:<a name="line.1165"></a>
<FONT color="green">1166</FONT>                    return new RootIterator();<a name="line.1166"></a>
<FONT color="green">1167</FONT>                default:<a name="line.1167"></a>
<FONT color="green">1168</FONT>                    BasisLibrary.runTimeError(BasisLibrary.AXIS_SUPPORT_ERR, <a name="line.1168"></a>
<FONT color="green">1169</FONT>                            Axis.getNames(axis));<a name="line.1169"></a>
<FONT color="green">1170</FONT>            }<a name="line.1170"></a>
<FONT color="green">1171</FONT>            return null;<a name="line.1171"></a>
<FONT color="green">1172</FONT>        }<a name="line.1172"></a>
<FONT color="green">1173</FONT>    <a name="line.1173"></a>
<FONT color="green">1174</FONT>        /**<a name="line.1174"></a>
<FONT color="green">1175</FONT>         * Similar to getAxisIterator, but this one returns an iterator<a name="line.1175"></a>
<FONT color="green">1176</FONT>         * containing nodes of a typed axis (ex.: child::foo)<a name="line.1176"></a>
<FONT color="green">1177</FONT>         */<a name="line.1177"></a>
<FONT color="green">1178</FONT>        public DTMAxisIterator getTypedAxisIterator(int axis, int type)<a name="line.1178"></a>
<FONT color="green">1179</FONT>        {<a name="line.1179"></a>
<FONT color="green">1180</FONT>            // Most common case handled first<a name="line.1180"></a>
<FONT color="green">1181</FONT>            if (axis == Axis.CHILD) {<a name="line.1181"></a>
<FONT color="green">1182</FONT>                return new TypedChildrenIterator(type);<a name="line.1182"></a>
<FONT color="green">1183</FONT>            }<a name="line.1183"></a>
<FONT color="green">1184</FONT>    <a name="line.1184"></a>
<FONT color="green">1185</FONT>            if (type == NO_TYPE) {<a name="line.1185"></a>
<FONT color="green">1186</FONT>                return(EMPTYITERATOR);<a name="line.1186"></a>
<FONT color="green">1187</FONT>            }<a name="line.1187"></a>
<FONT color="green">1188</FONT>    <a name="line.1188"></a>
<FONT color="green">1189</FONT>            switch (axis)<a name="line.1189"></a>
<FONT color="green">1190</FONT>            {<a name="line.1190"></a>
<FONT color="green">1191</FONT>                case Axis.SELF:<a name="line.1191"></a>
<FONT color="green">1192</FONT>                    return new TypedSingletonIterator(type);<a name="line.1192"></a>
<FONT color="green">1193</FONT>                case Axis.CHILD:<a name="line.1193"></a>
<FONT color="green">1194</FONT>                    return new TypedChildrenIterator(type);<a name="line.1194"></a>
<FONT color="green">1195</FONT>                case Axis.PARENT:<a name="line.1195"></a>
<FONT color="green">1196</FONT>                    return new ParentIterator().setNodeType(type);<a name="line.1196"></a>
<FONT color="green">1197</FONT>                case Axis.ANCESTOR:<a name="line.1197"></a>
<FONT color="green">1198</FONT>                    return new TypedAncestorIterator(type);<a name="line.1198"></a>
<FONT color="green">1199</FONT>                case Axis.ANCESTORORSELF:<a name="line.1199"></a>
<FONT color="green">1200</FONT>                    return (new TypedAncestorIterator(type)).includeSelf();<a name="line.1200"></a>
<FONT color="green">1201</FONT>                case Axis.ATTRIBUTE:<a name="line.1201"></a>
<FONT color="green">1202</FONT>                    return new TypedAttributeIterator(type);<a name="line.1202"></a>
<FONT color="green">1203</FONT>                case Axis.DESCENDANT:<a name="line.1203"></a>
<FONT color="green">1204</FONT>                    return new TypedDescendantIterator(type);<a name="line.1204"></a>
<FONT color="green">1205</FONT>                case Axis.DESCENDANTORSELF:<a name="line.1205"></a>
<FONT color="green">1206</FONT>                    return (new TypedDescendantIterator(type)).includeSelf();<a name="line.1206"></a>
<FONT color="green">1207</FONT>                case Axis.FOLLOWING:<a name="line.1207"></a>
<FONT color="green">1208</FONT>                    return new TypedFollowingIterator(type);<a name="line.1208"></a>
<FONT color="green">1209</FONT>                case Axis.PRECEDING:<a name="line.1209"></a>
<FONT color="green">1210</FONT>                    return new TypedPrecedingIterator(type);<a name="line.1210"></a>
<FONT color="green">1211</FONT>                case Axis.FOLLOWINGSIBLING:<a name="line.1211"></a>
<FONT color="green">1212</FONT>                    return new TypedFollowingSiblingIterator(type);<a name="line.1212"></a>
<FONT color="green">1213</FONT>                case Axis.PRECEDINGSIBLING:<a name="line.1213"></a>
<FONT color="green">1214</FONT>                    return new TypedPrecedingSiblingIterator(type);<a name="line.1214"></a>
<FONT color="green">1215</FONT>                case Axis.NAMESPACE:<a name="line.1215"></a>
<FONT color="green">1216</FONT>                    return  new TypedNamespaceIterator(type);<a name="line.1216"></a>
<FONT color="green">1217</FONT>                case Axis.ROOT:<a name="line.1217"></a>
<FONT color="green">1218</FONT>                    return new TypedRootIterator(type);<a name="line.1218"></a>
<FONT color="green">1219</FONT>                default:<a name="line.1219"></a>
<FONT color="green">1220</FONT>                    BasisLibrary.runTimeError(BasisLibrary.TYPED_AXIS_SUPPORT_ERR, <a name="line.1220"></a>
<FONT color="green">1221</FONT>                            Axis.getNames(axis));<a name="line.1221"></a>
<FONT color="green">1222</FONT>            }<a name="line.1222"></a>
<FONT color="green">1223</FONT>            return null;<a name="line.1223"></a>
<FONT color="green">1224</FONT>        }<a name="line.1224"></a>
<FONT color="green">1225</FONT>    <a name="line.1225"></a>
<FONT color="green">1226</FONT>        /**<a name="line.1226"></a>
<FONT color="green">1227</FONT>         * Do not think that this returns an iterator for the namespace axis.<a name="line.1227"></a>
<FONT color="green">1228</FONT>         * It returns an iterator with nodes that belong in a certain namespace,<a name="line.1228"></a>
<FONT color="green">1229</FONT>         * such as with &lt;xsl:apply-templates select="blob/foo:*"/&gt;<a name="line.1229"></a>
<FONT color="green">1230</FONT>         * The 'axis' specifies the axis for the base iterator from which the<a name="line.1230"></a>
<FONT color="green">1231</FONT>         * nodes are taken, while 'ns' specifies the namespace URI type.<a name="line.1231"></a>
<FONT color="green">1232</FONT>         */<a name="line.1232"></a>
<FONT color="green">1233</FONT>        public DTMAxisIterator getNamespaceAxisIterator(int axis, int ns)<a name="line.1233"></a>
<FONT color="green">1234</FONT>        {<a name="line.1234"></a>
<FONT color="green">1235</FONT>    <a name="line.1235"></a>
<FONT color="green">1236</FONT>            DTMAxisIterator iterator = null;<a name="line.1236"></a>
<FONT color="green">1237</FONT>    <a name="line.1237"></a>
<FONT color="green">1238</FONT>            if (ns == NO_TYPE) {<a name="line.1238"></a>
<FONT color="green">1239</FONT>                return EMPTYITERATOR;<a name="line.1239"></a>
<FONT color="green">1240</FONT>            }<a name="line.1240"></a>
<FONT color="green">1241</FONT>            else {<a name="line.1241"></a>
<FONT color="green">1242</FONT>                switch (axis) {<a name="line.1242"></a>
<FONT color="green">1243</FONT>                    case Axis.CHILD:<a name="line.1243"></a>
<FONT color="green">1244</FONT>                        return new NamespaceChildrenIterator(ns);<a name="line.1244"></a>
<FONT color="green">1245</FONT>                    case Axis.ATTRIBUTE:<a name="line.1245"></a>
<FONT color="green">1246</FONT>                        return new NamespaceAttributeIterator(ns);<a name="line.1246"></a>
<FONT color="green">1247</FONT>                    default:<a name="line.1247"></a>
<FONT color="green">1248</FONT>                        return new NamespaceWildcardIterator(axis, ns);<a name="line.1248"></a>
<FONT color="green">1249</FONT>                }<a name="line.1249"></a>
<FONT color="green">1250</FONT>            }<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>        /**<a name="line.1253"></a>
<FONT color="green">1254</FONT>         * Iterator that handles node tests that test for a namespace, but have<a name="line.1254"></a>
<FONT color="green">1255</FONT>         * a wild card for the local name of the node, i.e., node tests of the<a name="line.1255"></a>
<FONT color="green">1256</FONT>         * form &lt;axis&gt;::&lt;prefix&gt;:*<a name="line.1256"></a>
<FONT color="green">1257</FONT>         */<a name="line.1257"></a>
<FONT color="green">1258</FONT>        public final class NamespaceWildcardIterator<a name="line.1258"></a>
<FONT color="green">1259</FONT>            extends InternalAxisIteratorBase<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>             * The namespace type index.<a name="line.1262"></a>
<FONT color="green">1263</FONT>             */<a name="line.1263"></a>
<FONT color="green">1264</FONT>            protected int m_nsType;<a name="line.1264"></a>
<FONT color="green">1265</FONT>    <a name="line.1265"></a>
<FONT color="green">1266</FONT>            /**<a name="line.1266"></a>
<FONT color="green">1267</FONT>             * A nested typed axis iterator that retrieves nodes of the principal<a name="line.1267"></a>
<FONT color="green">1268</FONT>             * node kind for that axis.<a name="line.1268"></a>
<FONT color="green">1269</FONT>             */<a name="line.1269"></a>
<FONT color="green">1270</FONT>            protected DTMAxisIterator m_baseIterator;<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>             * Constructor NamespaceWildcard<a name="line.1273"></a>
<FONT color="green">1274</FONT>             *<a name="line.1274"></a>
<FONT color="green">1275</FONT>             * @param axis The axis that this iterator will traverse<a name="line.1275"></a>
<FONT color="green">1276</FONT>             * @param nsType The namespace type index<a name="line.1276"></a>
<FONT color="green">1277</FONT>             */<a name="line.1277"></a>
<FONT color="green">1278</FONT>            public NamespaceWildcardIterator(int axis, int nsType) {<a name="line.1278"></a>
<FONT color="green">1279</FONT>                m_nsType = nsType;<a name="line.1279"></a>
<FONT color="green">1280</FONT>    <a name="line.1280"></a>
<FONT color="green">1281</FONT>                // Create a nested iterator that will select nodes of<a name="line.1281"></a>
<FONT color="green">1282</FONT>                // the principal node kind for the selected axis.<a name="line.1282"></a>
<FONT color="green">1283</FONT>                switch (axis) {<a name="line.1283"></a>
<FONT color="green">1284</FONT>                    case Axis.ATTRIBUTE: {<a name="line.1284"></a>
<FONT color="green">1285</FONT>                        // For "attribute::p:*", the principal node kind is<a name="line.1285"></a>
<FONT color="green">1286</FONT>                        // attribute<a name="line.1286"></a>
<FONT color="green">1287</FONT>                        m_baseIterator = getAxisIterator(axis);<a name="line.1287"></a>
<FONT color="green">1288</FONT>                    }<a name="line.1288"></a>
<FONT color="green">1289</FONT>                    case Axis.NAMESPACE: {<a name="line.1289"></a>
<FONT color="green">1290</FONT>                        // This covers "namespace::p:*".  It is syntactically<a name="line.1290"></a>
<FONT color="green">1291</FONT>                        // correct, though it doesn't make much sense.<a name="line.1291"></a>
<FONT color="green">1292</FONT>                        m_baseIterator = getAxisIterator(axis);<a name="line.1292"></a>
<FONT color="green">1293</FONT>                    }<a name="line.1293"></a>
<FONT color="green">1294</FONT>                    default: {<a name="line.1294"></a>
<FONT color="green">1295</FONT>                        // In all other cases, the principal node kind is<a name="line.1295"></a>
<FONT color="green">1296</FONT>                        // element<a name="line.1296"></a>
<FONT color="green">1297</FONT>                        m_baseIterator = getTypedAxisIterator(axis,<a name="line.1297"></a>
<FONT color="green">1298</FONT>                                                              DTM.ELEMENT_NODE);<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>    <a name="line.1302"></a>
<FONT color="green">1303</FONT>            /**<a name="line.1303"></a>
<FONT color="green">1304</FONT>             * Set start to END should 'close' the iterator,<a name="line.1304"></a>
<FONT color="green">1305</FONT>             * i.e. subsequent call to next() should return END.<a name="line.1305"></a>
<FONT color="green">1306</FONT>             *<a name="line.1306"></a>
<FONT color="green">1307</FONT>             * @param node Sets the root of the iteration.<a name="line.1307"></a>
<FONT color="green">1308</FONT>             *<a name="line.1308"></a>
<FONT color="green">1309</FONT>             * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1309"></a>
<FONT color="green">1310</FONT>             */<a name="line.1310"></a>
<FONT color="green">1311</FONT>            public DTMAxisIterator setStartNode(int node) {<a name="line.1311"></a>
<FONT color="green">1312</FONT>                if (_isRestartable) {<a name="line.1312"></a>
<FONT color="green">1313</FONT>                    _startNode = node;<a name="line.1313"></a>
<FONT color="green">1314</FONT>                    m_baseIterator.setStartNode(node);<a name="line.1314"></a>
<FONT color="green">1315</FONT>                    resetPosition();<a name="line.1315"></a>
<FONT color="green">1316</FONT>                }<a name="line.1316"></a>
<FONT color="green">1317</FONT>                return this;<a name="line.1317"></a>
<FONT color="green">1318</FONT>            }<a name="line.1318"></a>
<FONT color="green">1319</FONT>    <a name="line.1319"></a>
<FONT color="green">1320</FONT>            /**<a name="line.1320"></a>
<FONT color="green">1321</FONT>             * Get the next node in the iteration.<a name="line.1321"></a>
<FONT color="green">1322</FONT>             *<a name="line.1322"></a>
<FONT color="green">1323</FONT>             * @return The next node handle in the iteration, or END.<a name="line.1323"></a>
<FONT color="green">1324</FONT>             */<a name="line.1324"></a>
<FONT color="green">1325</FONT>            public int next() {<a name="line.1325"></a>
<FONT color="green">1326</FONT>                int node;<a name="line.1326"></a>
<FONT color="green">1327</FONT>    <a name="line.1327"></a>
<FONT color="green">1328</FONT>                while ((node = m_baseIterator.next()) != END) {<a name="line.1328"></a>
<FONT color="green">1329</FONT>                    // Return only nodes that are in the selected namespace<a name="line.1329"></a>
<FONT color="green">1330</FONT>                    if (getNSType(node) == m_nsType) {<a name="line.1330"></a>
<FONT color="green">1331</FONT>                        return returnNode(node);<a name="line.1331"></a>
<FONT color="green">1332</FONT>                    }<a name="line.1332"></a>
<FONT color="green">1333</FONT>                }<a name="line.1333"></a>
<FONT color="green">1334</FONT>    <a name="line.1334"></a>
<FONT color="green">1335</FONT>                return END;<a name="line.1335"></a>
<FONT color="green">1336</FONT>            }<a name="line.1336"></a>
<FONT color="green">1337</FONT>    <a name="line.1337"></a>
<FONT color="green">1338</FONT>            /**<a name="line.1338"></a>
<FONT color="green">1339</FONT>             * Returns a deep copy of this iterator.  The cloned iterator is not<a name="line.1339"></a>
<FONT color="green">1340</FONT>             * reset.<a name="line.1340"></a>
<FONT color="green">1341</FONT>             *<a name="line.1341"></a>
<FONT color="green">1342</FONT>             * @return a deep copy of this iterator.<a name="line.1342"></a>
<FONT color="green">1343</FONT>             */<a name="line.1343"></a>
<FONT color="green">1344</FONT>            public DTMAxisIterator cloneIterator() {<a name="line.1344"></a>
<FONT color="green">1345</FONT>                try {<a name="line.1345"></a>
<FONT color="green">1346</FONT>                    DTMAxisIterator nestedClone = m_baseIterator.cloneIterator();<a name="line.1346"></a>
<FONT color="green">1347</FONT>                    NamespaceWildcardIterator clone =<a name="line.1347"></a>
<FONT color="green">1348</FONT>                        (NamespaceWildcardIterator) super.clone();<a name="line.1348"></a>
<FONT color="green">1349</FONT>    <a name="line.1349"></a>
<FONT color="green">1350</FONT>                    clone.m_baseIterator = nestedClone;<a name="line.1350"></a>
<FONT color="green">1351</FONT>                    clone.m_nsType = m_nsType;<a name="line.1351"></a>
<FONT color="green">1352</FONT>                    clone._isRestartable = false;<a name="line.1352"></a>
<FONT color="green">1353</FONT>    <a name="line.1353"></a>
<FONT color="green">1354</FONT>                    return clone;<a name="line.1354"></a>
<FONT color="green">1355</FONT>                } catch (CloneNotSupportedException e) {<a name="line.1355"></a>
<FONT color="green">1356</FONT>                    BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,<a name="line.1356"></a>
<FONT color="green">1357</FONT>                                              e.toString());<a name="line.1357"></a>
<FONT color="green">1358</FONT>                    return null;<a name="line.1358"></a>
<FONT color="green">1359</FONT>                }<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>             * True if this iterator has a reversed axis.<a name="line.1363"></a>
<FONT color="green">1364</FONT>             *<a name="line.1364"></a>
<FONT color="green">1365</FONT>             * @return &lt;code&gt;true&lt;/code&gt; if this iterator is a reversed axis.<a name="line.1365"></a>
<FONT color="green">1366</FONT>             */<a name="line.1366"></a>
<FONT color="green">1367</FONT>            public boolean isReverse() {<a name="line.1367"></a>
<FONT color="green">1368</FONT>                return m_baseIterator.isReverse();<a name="line.1368"></a>
<FONT color="green">1369</FONT>            }<a name="line.1369"></a>
<FONT color="green">1370</FONT>    <a name="line.1370"></a>
<FONT color="green">1371</FONT>            public void setMark() {<a name="line.1371"></a>
<FONT color="green">1372</FONT>                m_baseIterator.setMark();<a name="line.1372"></a>
<FONT color="green">1373</FONT>            }<a name="line.1373"></a>
<FONT color="green">1374</FONT>    <a name="line.1374"></a>
<FONT color="green">1375</FONT>            public void gotoMark() {<a name="line.1375"></a>
<FONT color="green">1376</FONT>                m_baseIterator.gotoMark();<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>    <a name="line.1379"></a>
<FONT color="green">1380</FONT>        /**<a name="line.1380"></a>
<FONT color="green">1381</FONT>         * Iterator that returns children within a given namespace for a<a name="line.1381"></a>
<FONT color="green">1382</FONT>         * given node. The functionality chould be achieved by putting a<a name="line.1382"></a>
<FONT color="green">1383</FONT>         * filter on top of a basic child iterator, but a specialised<a name="line.1383"></a>
<FONT color="green">1384</FONT>         * iterator is used for efficiency (both speed and size of translet).<a name="line.1384"></a>
<FONT color="green">1385</FONT>         */<a name="line.1385"></a>
<FONT color="green">1386</FONT>        public final class NamespaceChildrenIterator<a name="line.1386"></a>
<FONT color="green">1387</FONT>            extends InternalAxisIteratorBase<a name="line.1387"></a>
<FONT color="green">1388</FONT>        {<a name="line.1388"></a>
<FONT color="green">1389</FONT>    <a name="line.1389"></a>
<FONT color="green">1390</FONT>            /** The extended type ID being requested. */<a name="line.1390"></a>
<FONT color="green">1391</FONT>            private final int _nsType;<a name="line.1391"></a>
<FONT color="green">1392</FONT>    <a name="line.1392"></a>
<FONT color="green">1393</FONT>            /**<a name="line.1393"></a>
<FONT color="green">1394</FONT>             * Constructor NamespaceChildrenIterator<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>             * @param type The extended type ID being requested.<a name="line.1397"></a>
<FONT color="green">1398</FONT>             */<a name="line.1398"></a>
<FONT color="green">1399</FONT>            public NamespaceChildrenIterator(final int type) {<a name="line.1399"></a>
<FONT color="green">1400</FONT>                _nsType = type;<a name="line.1400"></a>
<FONT color="green">1401</FONT>            }<a name="line.1401"></a>
<FONT color="green">1402</FONT>    <a name="line.1402"></a>
<FONT color="green">1403</FONT>            /**<a name="line.1403"></a>
<FONT color="green">1404</FONT>             * Set start to END should 'close' the iterator,<a name="line.1404"></a>
<FONT color="green">1405</FONT>             * i.e. subsequent call to next() should return END.<a name="line.1405"></a>
<FONT color="green">1406</FONT>             *<a name="line.1406"></a>
<FONT color="green">1407</FONT>             * @param node Sets the root of the iteration.<a name="line.1407"></a>
<FONT color="green">1408</FONT>             *<a name="line.1408"></a>
<FONT color="green">1409</FONT>             * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1409"></a>
<FONT color="green">1410</FONT>             */<a name="line.1410"></a>
<FONT color="green">1411</FONT>            public DTMAxisIterator setStartNode(int node) {<a name="line.1411"></a>
<FONT color="green">1412</FONT>                //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1412"></a>
<FONT color="green">1413</FONT>                if (node == DTMDefaultBase.ROOTNODE) {<a name="line.1413"></a>
<FONT color="green">1414</FONT>                    node = getDocument();<a name="line.1414"></a>
<FONT color="green">1415</FONT>                }<a name="line.1415"></a>
<FONT color="green">1416</FONT>    <a name="line.1416"></a>
<FONT color="green">1417</FONT>                if (_isRestartable) {<a name="line.1417"></a>
<FONT color="green">1418</FONT>                    _startNode = node;<a name="line.1418"></a>
<FONT color="green">1419</FONT>                    _currentNode = (node == DTM.NULL) ? DTM.NULL : NOTPROCESSED;<a name="line.1419"></a>
<FONT color="green">1420</FONT>    <a name="line.1420"></a>
<FONT color="green">1421</FONT>                    return resetPosition();<a name="line.1421"></a>
<FONT color="green">1422</FONT>                }<a name="line.1422"></a>
<FONT color="green">1423</FONT>    <a name="line.1423"></a>
<FONT color="green">1424</FONT>                return this;<a name="line.1424"></a>
<FONT color="green">1425</FONT>            }<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>             * Get the next node in the iteration.<a name="line.1428"></a>
<FONT color="green">1429</FONT>             *<a name="line.1429"></a>
<FONT color="green">1430</FONT>             * @return The next node handle in the iteration, or END.<a name="line.1430"></a>
<FONT color="green">1431</FONT>             */<a name="line.1431"></a>
<FONT color="green">1432</FONT>            public int next() {<a name="line.1432"></a>
<FONT color="green">1433</FONT>                if (_currentNode != DTM.NULL) {<a name="line.1433"></a>
<FONT color="green">1434</FONT>                    for (int node = (NOTPROCESSED == _currentNode)<a name="line.1434"></a>
<FONT color="green">1435</FONT>                                         ? _firstch(makeNodeIdentity(_startNode))<a name="line.1435"></a>
<FONT color="green">1436</FONT>                                         : _nextsib(_currentNode);<a name="line.1436"></a>
<FONT color="green">1437</FONT>                         node != END;<a name="line.1437"></a>
<FONT color="green">1438</FONT>                         node = _nextsib(node)) {<a name="line.1438"></a>
<FONT color="green">1439</FONT>                        int nodeHandle = makeNodeHandle(node);<a name="line.1439"></a>
<FONT color="green">1440</FONT>    <a name="line.1440"></a>
<FONT color="green">1441</FONT>                        if (getNSType(nodeHandle) == _nsType) {<a name="line.1441"></a>
<FONT color="green">1442</FONT>                            _currentNode = node;<a name="line.1442"></a>
<FONT color="green">1443</FONT>    <a name="line.1443"></a>
<FONT color="green">1444</FONT>                            return returnNode(nodeHandle);<a name="line.1444"></a>
<FONT color="green">1445</FONT>                        }<a name="line.1445"></a>
<FONT color="green">1446</FONT>                    }<a name="line.1446"></a>
<FONT color="green">1447</FONT>                }<a name="line.1447"></a>
<FONT color="green">1448</FONT>    <a name="line.1448"></a>
<FONT color="green">1449</FONT>                return END;<a name="line.1449"></a>
<FONT color="green">1450</FONT>            }<a name="line.1450"></a>
<FONT color="green">1451</FONT>        }  // end of NamespaceChildrenIterator<a name="line.1451"></a>
<FONT color="green">1452</FONT>    <a name="line.1452"></a>
<FONT color="green">1453</FONT>        /**<a name="line.1453"></a>
<FONT color="green">1454</FONT>         * Iterator that returns attributes within a given namespace for a node.<a name="line.1454"></a>
<FONT color="green">1455</FONT>         */<a name="line.1455"></a>
<FONT color="green">1456</FONT>        public final class NamespaceAttributeIterator<a name="line.1456"></a>
<FONT color="green">1457</FONT>                extends InternalAxisIteratorBase<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>            /** The extended type ID being requested. */<a name="line.1460"></a>
<FONT color="green">1461</FONT>            private final int _nsType;<a name="line.1461"></a>
<FONT color="green">1462</FONT>    <a name="line.1462"></a>
<FONT color="green">1463</FONT>            /**<a name="line.1463"></a>
<FONT color="green">1464</FONT>             * Constructor NamespaceAttributeIterator<a name="line.1464"></a>
<FONT color="green">1465</FONT>             *<a name="line.1465"></a>
<FONT color="green">1466</FONT>             *<a name="line.1466"></a>
<FONT color="green">1467</FONT>             * @param nsType The extended type ID being requested.<a name="line.1467"></a>
<FONT color="green">1468</FONT>             */<a name="line.1468"></a>
<FONT color="green">1469</FONT>            public NamespaceAttributeIterator(int nsType) {<a name="line.1469"></a>
<FONT color="green">1470</FONT>                super();<a name="line.1470"></a>
<FONT color="green">1471</FONT>    <a name="line.1471"></a>
<FONT color="green">1472</FONT>                _nsType = nsType;<a name="line.1472"></a>
<FONT color="green">1473</FONT>            }<a name="line.1473"></a>
<FONT color="green">1474</FONT>    <a name="line.1474"></a>
<FONT color="green">1475</FONT>            /**<a name="line.1475"></a>
<FONT color="green">1476</FONT>             * Set start to END should 'close' the iterator,<a name="line.1476"></a>
<FONT color="green">1477</FONT>             * i.e. subsequent call to next() should return END.<a name="line.1477"></a>
<FONT color="green">1478</FONT>             *<a name="line.1478"></a>
<FONT color="green">1479</FONT>             * @param node Sets the root of the iteration.<a name="line.1479"></a>
<FONT color="green">1480</FONT>             *<a name="line.1480"></a>
<FONT color="green">1481</FONT>             * @return A DTMAxisIterator set to the start of the iteration.<a name="line.1481"></a>
<FONT color="green">1482</FONT>             */<a name="line.1482"></a>
<FONT color="green">1483</FONT>            public DTMAxisIterator setStartNode(int node) {<a name="line.1483"></a>
<FONT color="green">1484</FONT>                //%HZ%: Added reference to DTMDefaultBase.ROOTNODE back in, temporarily<a name="line.1484"></a>
<FONT color="green">1485</FONT>                if (node == DTMDefaultBase.ROOTNODE) {<a name="line.1485"></a>
<FONT color="green">1486</FONT>                    node = getDocument();<a name="line.1486"></a>
<FONT color="green">1487</FONT>                }<a name="line.1487"></a>
<FONT color="green">1488</FONT>    <a name="line.1488"></a>
<FONT color="green">1489</FONT>                if (_isRestartable) {<a name="line.1489"></a>
<FONT color="green">1490</FONT>                    int nsType = _nsType;<a name="line.1490"></a>
<FONT color="green">1491</FONT>    <a name="line.1491"></a>
<FONT color="green">1492</FONT>                    _startNode = node;<a name="line.1492"></a>
<FONT color="green">1493</FONT>    <a name="line.1493"></a>
<FONT color="green">1494</FONT>                    for (node = getFirstAttribute(node);<a name="line.1494"></a>
<FONT color="green">1495</FONT>                         node != END;<a name="line.1495"></a>
<FONT color="green">1496</FONT>                         node = getNextAttribute(node)) {<a name="line.1496"></a>
<FONT color="green">1497</FONT>                        if (getNSType(node) == nsType) {<a name="line.1497"></a>
<FONT color="green">1498</FONT>                            break;<a name="line.1498"></a>
<FONT color="green">1499</FONT>                        }<a name="line.1499"></a>
<FONT color="green">1500</FONT>                    }<a name="line.1500"></a>
<FONT color="green">1501</FONT>    <a name="line.1501"></a>
<FONT color="green">1502</FONT>                    _currentNode = node;<a name="line.1502"></a>
<FONT color="green">1503</FONT>                    return resetPosition();<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>                return this;<a name="line.1506"></a>
<FONT color="green">1507</FONT>            }<a name="line.1507"></a>
<FONT color="green">1508</FONT>    <a name="line.1508"></a>
<FONT color="green">1509</FONT>            /**<a name="line.1509"></a>
<FONT color="green">1510</FONT>             * Get the next node in the iteration.<a name="line.1510"></a>
<FONT color="green">1511</FONT>             *<a name="line.1511"></a>
<FONT color="green">1512</FONT>             * @return The next node handle in the iteration, or END.<a name="line.1512"></a>
<FONT color="green">1513</FONT>             */<a name="line.1513"></a>
<FONT color="green">1514</FONT>            public int next() {<a name="line.1514"></a>
<FONT color="green">1515</FONT>                int node = _currentNode;<a name="line.1515"></a>
<FONT color="green">1516</FONT>                int nsType = _nsType;<a name="line.1516"></a>
<FONT color="green">1517</FONT>                int nextNode;<a name="line.1517"></a>
<FONT color="green">1518</FONT>    <a name="line.1518"></a>
<FONT color="green">1519</FONT>                if (node == END) {<a name="line.1519"></a>
<FONT color="green">1520</FONT>                    return END;<a name="line.1520"></a>
<FONT color="green">1521</FONT>                }<a name="line.1521"></a>
<FONT color="green">1522</FONT>    <a name="line.1522"></a>
<FONT color="green">1523</FONT>                for (nextNode = getNextAttribute(node);<a name="line.1523"></a>
<FONT color="green">1524</FONT>                     nextNode != END;<a name="line.1524"></a>
<FONT color="green">1525</FONT>                     nextNode = getNextAttribute(nextNode)) {<a name="line.1525"></a>
<FONT color="green">1526</FONT>                    if (getNSType(nextNode) == nsType) {<a name="line.1526"></a>
<FONT color="green">1527</FONT>                        break;<a name="line.1527"></a>
<FONT color="green">1528</FONT>                    }<a name="line.1528"></a>
<FONT color="green">1529</FONT>                }<a name="line.1529"></a>
<FONT color="green">1530</FONT>    <a name="line.1530"></a>
<FONT color="green">1531</FONT>                _currentNode = nextNode;<a name="line.1531"></a>
<FONT color="green">1532</FONT>    <a name="line.1532"></a>
<FONT color="green">1533</FONT>                return returnNode(node);<a name="line.1533"></a>
<FONT color="green">1534</FONT>            }<a name="line.1534"></a>
<FONT color="green">1535</FONT>        }  // end of NamespaceAttributeIterator<a name="line.1535"></a>
<FONT color="green">1536</FONT>    <a name="line.1536"></a>
<FONT color="green">1537</FONT>        /**<a name="line.1537"></a>
<FONT color="green">1538</FONT>         * Returns an iterator with all descendants of a node that are of<a name="line.1538"></a>
<FONT color="green">1539</FONT>         * a given type.<a name="line.1539"></a>
<FONT color="green">1540</FONT>         */<a name="line.1540"></a>
<FONT color="green">1541</FONT>        public DTMAxisIterator getTypedDescendantIterator(int type)<a name="line.1541"></a>
<FONT color="green">1542</FONT>        {<a name="line.1542"></a>
<FONT color="green">1543</FONT>            return new TypedDescendantIterator(type);<a name="line.1543"></a>
<FONT color="green">1544</FONT>        }<a name="line.1544"></a>
<FONT color="green">1545</FONT>    <a name="line.1545"></a>
<FONT color="green">1546</FONT>        /**<a name="line.1546"></a>
<FONT color="green">1547</FONT>         * Returns the nth descendant of a node<a name="line.1547"></a>
<FONT color="green">1548</FONT>         */<a name="line.1548"></a>
<FONT color="green">1549</FONT>        public DTMAxisIterator getNthDescendant(int type, int n, boolean includeself)<a name="line.1549"></a>
<FONT color="green">1550</FONT>        {<a name="line.1550"></a>
<FONT color="green">1551</FONT>            DTMAxisIterator source = (DTMAxisIterator) new TypedDescendantIterator(type);<a name="line.1551"></a>
<FONT color="green">1552</FONT>            return new NthDescendantIterator(n);<a name="line.1552"></a>
<FONT color="green">1553</FONT>        }<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>         * Copy the string value of a node directly to an output handler<a name="line.1556"></a>
<FONT color="green">1557</FONT>         */<a name="line.1557"></a>
<FONT color="green">1558</FONT>        public void characters(final int node, SerializationHandler handler)<a name="line.1558"></a>
<FONT color="green">1559</FONT>            throws TransletException<a name="line.1559"></a>
<FONT color="green">1560</FONT>        {<a name="line.1560"></a>
<FONT color="green">1561</FONT>            if (node != DTM.NULL) {<a name="line.1561"></a>
<FONT color="green">1562</FONT>                try {<a name="line.1562"></a>
<FONT color="green">1563</FONT>                    dispatchCharactersEvents(node, handler, false);<a name="line.1563"></a>
<FONT color="green">1564</FONT>                } catch (SAXException e) {<a name="line.1564"></a>
<FONT color="green">1565</FONT>                    throw new TransletException(e);<a name="line.1565"></a>
<FONT color="green">1566</FONT>                }<a name="line.1566"></a>
<FONT color="green">1567</FONT>            }<a name="line.1567"></a>
<FONT color="green">1568</FONT>        }<a name="line.1568"></a>
<FONT color="green">1569</FONT>        <a name="line.1569"></a>
<FONT color="green">1570</FONT>        /**<a name="line.1570"></a>
<FONT color="green">1571</FONT>         * Copy a node-set to an output handler<a name="line.1571"></a>
<FONT color="green">1572</FONT>         */<a name="line.1572"></a>
<FONT color="green">1573</FONT>        public void copy(DTMAxisIterator nodes, SerializationHandler handler)<a name="line.1573"></a>
<FONT color="green">1574</FONT>            throws TransletException<a name="line.1574"></a>
<FONT color="green">1575</FONT>        {<a name="line.1575"></a>
<FONT color="green">1576</FONT>            int node;<a name="line.1576"></a>
<FONT color="green">1577</FONT>            while ((node = nodes.next()) != DTM.NULL) {<a name="line.1577"></a>
<FONT color="green">1578</FONT>                copy(node, handler);<a name="line.1578"></a>
<FONT color="green">1579</FONT>            }<a name="line.1579"></a>
<FONT color="green">1580</FONT>        }<a name="line.1580"></a>
<FONT color="green">1581</FONT>    <a name="line.1581"></a>
<FONT color="green">1582</FONT>        /**<a name="line.1582"></a>
<FONT color="green">1583</FONT>         * Copy the whole tree to an output handler<a name="line.1583"></a>
<FONT color="green">1584</FONT>         */<a name="line.1584"></a>
<FONT color="green">1585</FONT>        public void copy(SerializationHandler handler) throws TransletException<a name="line.1585"></a>
<FONT color="green">1586</FONT>        {<a name="line.1586"></a>
<FONT color="green">1587</FONT>            copy(getDocument(), handler);<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>         * Performs a deep copy (ref. XSLs copy-of())<a name="line.1591"></a>
<FONT color="green">1592</FONT>         *<a name="line.1592"></a>
<FONT color="green">1593</FONT>         * TODO: Copy namespace declarations. Can't be done until we<a name="line.1593"></a>
<FONT color="green">1594</FONT>         *       add namespace nodes and keep track of NS prefixes<a name="line.1594"></a>
<FONT color="green">1595</FONT>         * TODO: Copy comment nodes<a name="line.1595"></a>
<FONT color="green">1596</FONT>         */<a name="line.1596"></a>
<FONT color="green">1597</FONT>        public void copy(final int node, SerializationHandler handler)<a name="line.1597"></a>
<FONT color="green">1598</FONT>            throws TransletException<a name="line.1598"></a>
<FONT color="green">1599</FONT>        {<a name="line.1599"></a>
<FONT color="green">1600</FONT>            copy(node, handler, false );<a name="line.1600"></a>
<FONT color="green">1601</FONT>        }<a name="line.1601"></a>
<FONT color="green">1602</FONT>    <a name="line.1602"></a>
<FONT color="green">1603</FONT>    <a name="line.1603"></a>
<FONT color="green">1604</FONT>     private final void copy(final int node, SerializationHandler handler, boolean isChild)<a name="line.1604"></a>
<FONT color="green">1605</FONT>            throws TransletException<a name="line.1605"></a>
<FONT color="green">1606</FONT>        {<a name="line.1606"></a>
<FONT color="green">1607</FONT>         int nodeID = makeNodeIdentity(node);<a name="line.1607"></a>
<FONT color="green">1608</FONT>            int eType = _exptype2(nodeID);<a name="line.1608"></a>
<FONT color="green">1609</FONT>            int type = _exptype2Type(eType);<a name="line.1609"></a>
<FONT color="green">1610</FONT>    <a name="line.1610"></a>
<FONT color="green">1611</FONT>            try {<a name="line.1611"></a>
<FONT color="green">1612</FONT>                switch(type)<a name="line.1612"></a>
<FONT color="green">1613</FONT>                {<a name="line.1613"></a>
<FONT color="green">1614</FONT>                    case DTM.ROOT_NODE:<a name="line.1614"></a>
<FONT color="green">1615</FONT>                    case DTM.DOCUMENT_NODE:<a name="line.1615"></a>
<FONT color="green">1616</FONT>                        for(int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c)) {<a name="line.1616"></a>
<FONT color="green">1617</FONT>                            copy(makeNodeHandle(c), handler, true);<a name="line.1617"></a>
<FONT color="green">1618</FONT>                        }<a name="line.1618"></a>
<FONT color="green">1619</FONT>                        break;<a name="line.1619"></a>
<FONT color="green">1620</FONT>                    case DTM.PROCESSING_INSTRUCTION_NODE:<a name="line.1620"></a>
<FONT color="green">1621</FONT>                        copyPI(node, handler);<a name="line.1621"></a>
<FONT color="green">1622</FONT>                        break;<a name="line.1622"></a>
<FONT color="green">1623</FONT>                    case DTM.COMMENT_NODE:<a name="line.1623"></a>
<FONT color="green">1624</FONT>                        handler.comment(getStringValueX(node));<a name="line.1624"></a>
<FONT color="green">1625</FONT>                        break;<a name="line.1625"></a>
<FONT color="green">1626</FONT>                    case DTM.TEXT_NODE:<a name="line.1626"></a>
<FONT color="green">1627</FONT>                        boolean oldEscapeSetting = false;<a name="line.1627"></a>
<FONT color="green">1628</FONT>                        boolean escapeBit = false;<a name="line.1628"></a>
<FONT color="green">1629</FONT>    <a name="line.1629"></a>
<FONT color="green">1630</FONT>                        if (_dontEscape != null) {<a name="line.1630"></a>
<FONT color="green">1631</FONT>                            escapeBit = _dontEscape.getBit(getNodeIdent(node));<a name="line.1631"></a>
<FONT color="green">1632</FONT>                            if (escapeBit) {<a name="line.1632"></a>
<FONT color="green">1633</FONT>                                oldEscapeSetting = handler.setEscaping(false);<a name="line.1633"></a>
<FONT color="green">1634</FONT>                            }<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>                        copyTextNode(nodeID, handler);<a name="line.1637"></a>
<FONT color="green">1638</FONT>            <a name="line.1638"></a>
<FONT color="green">1639</FONT>                        if (escapeBit) {<a name="line.1639"></a>
<FONT color="green">1640</FONT>                            handler.setEscaping(oldEscapeSetting);<a name="line.1640"></a>
<FONT color="green">1641</FONT>                        }<a name="line.1641"></a>
<FONT color="green">1642</FONT>                        break;<a name="line.1642"></a>
<FONT color="green">1643</FONT>                    case DTM.ATTRIBUTE_NODE:<a name="line.1643"></a>
<FONT color="green">1644</FONT>                        copyAttribute(nodeID, eType, handler);<a name="line.1644"></a>
<FONT color="green">1645</FONT>                        break;<a name="line.1645"></a>
<FONT color="green">1646</FONT>                    case DTM.NAMESPACE_NODE:<a name="line.1646"></a>
<FONT color="green">1647</FONT>                        handler.namespaceAfterStartElement(getNodeNameX(node), getNodeValue(node));<a name="line.1647"></a>
<FONT color="green">1648</FONT>                        break;<a name="line.1648"></a>
<FONT color="green">1649</FONT>                    default:<a name="line.1649"></a>
<FONT color="green">1650</FONT>                        if (type == DTM.ELEMENT_NODE) <a name="line.1650"></a>
<FONT color="green">1651</FONT>                        {<a name="line.1651"></a>
<FONT color="green">1652</FONT>                            // Start element definition<a name="line.1652"></a>
<FONT color="green">1653</FONT>                            final String name = copyElement(nodeID, eType, handler);<a name="line.1653"></a>
<FONT color="green">1654</FONT>                            //if(isChild) =&gt; not to copy any namespaces  from parents<a name="line.1654"></a>
<FONT color="green">1655</FONT>                            // else copy all namespaces in scope<a name="line.1655"></a>
<FONT color="green">1656</FONT>                            copyNS(nodeID, handler,!isChild);<a name="line.1656"></a>
<FONT color="green">1657</FONT>                            copyAttributes(nodeID, handler);<a name="line.1657"></a>
<FONT color="green">1658</FONT>                            // Copy element children<a name="line.1658"></a>
<FONT color="green">1659</FONT>                            for (int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c)) {<a name="line.1659"></a>
<FONT color="green">1660</FONT>                                copy(makeNodeHandle(c), handler, true);<a name="line.1660"></a>
<FONT color="green">1661</FONT>                            }<a name="line.1661"></a>
<FONT color="green">1662</FONT>              <a name="line.1662"></a>
<FONT color="green">1663</FONT>                            // Close element definition<a name="line.1663"></a>
<FONT color="green">1664</FONT>                            handler.endElement(name);<a name="line.1664"></a>
<FONT color="green">1665</FONT>                        }<a name="line.1665"></a>
<FONT color="green">1666</FONT>                        // Shallow copy of attribute to output handler<a name="line.1666"></a>
<FONT color="green">1667</FONT>                        else {<a name="line.1667"></a>
<FONT color="green">1668</FONT>                            final String uri = getNamespaceName(node);<a name="line.1668"></a>
<FONT color="green">1669</FONT>                            if (uri.length() != 0) {<a name="line.1669"></a>
<FONT color="green">1670</FONT>                                final String prefix = getPrefix(node);<a name="line.1670"></a>
<FONT color="green">1671</FONT>                                handler.namespaceAfterStartElement(prefix, uri);<a name="line.1671"></a>
<FONT color="green">1672</FONT>                            }<a name="line.1672"></a>
<FONT color="green">1673</FONT>                            handler.addAttribute(getNodeName(node), getNodeValue(node));<a name="line.1673"></a>
<FONT color="green">1674</FONT>                        }<a name="line.1674"></a>
<FONT color="green">1675</FONT>                        break;<a name="line.1675"></a>
<FONT color="green">1676</FONT>                }<a name="line.1676"></a>
<FONT color="green">1677</FONT>            } <a name="line.1677"></a>
<FONT color="green">1678</FONT>            catch (Exception e) {<a name="line.1678"></a>
<FONT color="green">1679</FONT>                throw new TransletException(e);<a name="line.1679"></a>
<FONT color="green">1680</FONT>            }<a name="line.1680"></a>
<FONT color="green">1681</FONT>        <a name="line.1681"></a>
<FONT color="green">1682</FONT>        }<a name="line.1682"></a>
<FONT color="green">1683</FONT>        /**<a name="line.1683"></a>
<FONT color="green">1684</FONT>         * Copies a processing instruction node to an output handler<a name="line.1684"></a>
<FONT color="green">1685</FONT>         */<a name="line.1685"></a>
<FONT color="green">1686</FONT>        private void copyPI(final int node, SerializationHandler handler)<a name="line.1686"></a>
<FONT color="green">1687</FONT>            throws TransletException<a name="line.1687"></a>
<FONT color="green">1688</FONT>        {<a name="line.1688"></a>
<FONT color="green">1689</FONT>            final String target = getNodeName(node);<a name="line.1689"></a>
<FONT color="green">1690</FONT>            final String value = getStringValueX(node);<a name="line.1690"></a>
<FONT color="green">1691</FONT>          <a name="line.1691"></a>
<FONT color="green">1692</FONT>            try {<a name="line.1692"></a>
<FONT color="green">1693</FONT>                handler.processingInstruction(target, value);<a name="line.1693"></a>
<FONT color="green">1694</FONT>            } catch (Exception e) {<a name="line.1694"></a>
<FONT color="green">1695</FONT>                throw new TransletException(e);<a name="line.1695"></a>
<FONT color="green">1696</FONT>            }<a name="line.1696"></a>
<FONT color="green">1697</FONT>        }<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>         * Performs a shallow copy (ref. XSLs copy())<a name="line.1700"></a>
<FONT color="green">1701</FONT>         */<a name="line.1701"></a>
<FONT color="green">1702</FONT>        public String shallowCopy(final int node, SerializationHandler handler)<a name="line.1702"></a>
<FONT color="green">1703</FONT>            throws TransletException<a name="line.1703"></a>
<FONT color="green">1704</FONT>        {<a name="line.1704"></a>
<FONT color="green">1705</FONT>            int nodeID = makeNodeIdentity(node);<a name="line.1705"></a>
<FONT color="green">1706</FONT>            int exptype = _exptype2(nodeID);<a name="line.1706"></a>
<FONT color="green">1707</FONT>            int type = _exptype2Type(exptype);<a name="line.1707"></a>
<FONT color="green">1708</FONT>          <a name="line.1708"></a>
<FONT color="green">1709</FONT>            try {<a name="line.1709"></a>
<FONT color="green">1710</FONT>                switch(type)<a name="line.1710"></a>
<FONT color="green">1711</FONT>                {<a name="line.1711"></a>
<FONT color="green">1712</FONT>                    case DTM.ELEMENT_NODE:<a name="line.1712"></a>
<FONT color="green">1713</FONT>                        final String name = copyElement(nodeID, exptype, handler);<a name="line.1713"></a>
<FONT color="green">1714</FONT>                        copyNS(nodeID, handler, true);<a name="line.1714"></a>
<FONT color="green">1715</FONT>                        return name;<a name="line.1715"></a>
<FONT color="green">1716</FONT>                    case DTM.ROOT_NODE:<a name="line.1716"></a>
<FONT color="green">1717</FONT>                    case DTM.DOCUMENT_NODE:<a name="line.1717"></a>
<FONT color="green">1718</FONT>                        return EMPTYSTRING;<a name="line.1718"></a>
<FONT color="green">1719</FONT>                    case DTM.TEXT_NODE:<a name="line.1719"></a>
<FONT color="green">1720</FONT>                        copyTextNode(nodeID, handler);<a name="line.1720"></a>
<FONT color="green">1721</FONT>                        return null;<a name="line.1721"></a>
<FONT color="green">1722</FONT>                    case DTM.PROCESSING_INSTRUCTION_NODE:<a name="line.1722"></a>
<FONT color="green">1723</FONT>                        copyPI(node, handler);<a name="line.1723"></a>
<FONT color="green">1724</FONT>                        return null;<a name="line.1724"></a>
<FONT color="green">1725</FONT>                    case DTM.COMMENT_NODE:<a name="line.1725"></a>
<FONT color="green">1726</FONT>                        handler.comment(getStringValueX(node));<a name="line.1726"></a>
<FONT color="green">1727</FONT>                        return null;<a name="line.1727"></a>
<FONT color="green">1728</FONT>                    case DTM.NAMESPACE_NODE:<a name="line.1728"></a>
<FONT color="green">1729</FONT>                        handler.namespaceAfterStartElement(getNodeNameX(node), getNodeValue(node));<a name="line.1729"></a>
<FONT color="green">1730</FONT>                        return null;<a name="line.1730"></a>
<FONT color="green">1731</FONT>                    case DTM.ATTRIBUTE_NODE:<a name="line.1731"></a>
<FONT color="green">1732</FONT>                        copyAttribute(nodeID, exptype, handler);<a name="line.1732"></a>
<FONT color="green">1733</FONT>                        return null;  <a name="line.1733"></a>
<FONT color="green">1734</FONT>                    default:<a name="line.1734"></a>
<FONT color="green">1735</FONT>                        final String uri1 = getNamespaceName(node);<a name="line.1735"></a>
<FONT color="green">1736</FONT>                        if (uri1.length() != 0) {<a name="line.1736"></a>
<FONT color="green">1737</FONT>                            final String prefix = getPrefix(node);<a name="line.1737"></a>
<FONT color="green">1738</FONT>                            handler.namespaceAfterStartElement(prefix, uri1);<a name="line.1738"></a>
<FONT color="green">1739</FONT>                        }<a name="line.1739"></a>
<FONT color="green">1740</FONT>                        handler.addAttribute(getNodeName(node), getNodeValue(node));<a name="line.1740"></a>
<FONT color="green">1741</FONT>                        return null;<a name="line.1741"></a>
<FONT color="green">1742</FONT>                }<a name="line.1742"></a>
<FONT color="green">1743</FONT>            } catch (Exception e) {<a name="line.1743"></a>
<FONT color="green">1744</FONT>                throw new TransletException(e);<a name="line.1744"></a>
<FONT color="green">1745</FONT>            }   <a name="line.1745"></a>
<FONT color="green">1746</FONT>        }<a name="line.1746"></a>
<FONT color="green">1747</FONT>        <a name="line.1747"></a>
<FONT color="green">1748</FONT>        /**<a name="line.1748"></a>
<FONT color="green">1749</FONT>         * Returns a node' defined language for a node (if any)<a name="line.1749"></a>
<FONT color="green">1750</FONT>         */<a name="line.1750"></a>
<FONT color="green">1751</FONT>        public String getLanguage(int node)<a name="line.1751"></a>
<FONT color="green">1752</FONT>        {<a name="line.1752"></a>
<FONT color="green">1753</FONT>            int parent = node;<a name="line.1753"></a>
<FONT color="green">1754</FONT>            while (DTM.NULL != parent) {<a name="line.1754"></a>
<FONT color="green">1755</FONT>                if (DTM.ELEMENT_NODE == getNodeType(parent)) {<a name="line.1755"></a>
<FONT color="green">1756</FONT>                    int langAttr = getAttributeNode(parent, "http://www.w3.org/XML/1998/namespace", "lang");<a name="line.1756"></a>
<FONT color="green">1757</FONT>    <a name="line.1757"></a>
<FONT color="green">1758</FONT>                    if (DTM.NULL != langAttr) {<a name="line.1758"></a>
<FONT color="green">1759</FONT>                        return getNodeValue(langAttr);     <a name="line.1759"></a>
<FONT color="green">1760</FONT>                    }<a name="line.1760"></a>
<FONT color="green">1761</FONT>                }<a name="line.1761"></a>
<FONT color="green">1762</FONT>    <a name="line.1762"></a>
<FONT color="green">1763</FONT>                parent = getParent(parent);<a name="line.1763"></a>
<FONT color="green">1764</FONT>            }      <a name="line.1764"></a>
<FONT color="green">1765</FONT>            return(null);<a name="line.1765"></a>
<FONT color="green">1766</FONT>        }<a name="line.1766"></a>
<FONT color="green">1767</FONT>    <a name="line.1767"></a>
<FONT color="green">1768</FONT>        /**<a name="line.1768"></a>
<FONT color="green">1769</FONT>         * Returns an instance of the DOMBuilder inner class<a name="line.1769"></a>
<FONT color="green">1770</FONT>         * This class will consume the input document through a SAX2<a name="line.1770"></a>
<FONT color="green">1771</FONT>         * interface and populate the tree.<a name="line.1771"></a>
<FONT color="green">1772</FONT>         */<a name="line.1772"></a>
<FONT color="green">1773</FONT>        public DOMBuilder getBuilder()<a name="line.1773"></a>
<FONT color="green">1774</FONT>        {<a name="line.1774"></a>
<FONT color="green">1775</FONT>            return this;<a name="line.1775"></a>
<FONT color="green">1776</FONT>        }<a name="line.1776"></a>
<FONT color="green">1777</FONT>        <a name="line.1777"></a>
<FONT color="green">1778</FONT>        /**<a name="line.1778"></a>
<FONT color="green">1779</FONT>         * Return a SerializationHandler for output handling.<a name="line.1779"></a>
<FONT color="green">1780</FONT>         * This method is used by Result Tree Fragments.<a name="line.1780"></a>
<FONT color="green">1781</FONT>         */<a name="line.1781"></a>
<FONT color="green">1782</FONT>        public SerializationHandler getOutputDomBuilder()<a name="line.1782"></a>
<FONT color="green">1783</FONT>        {<a name="line.1783"></a>
<FONT color="green">1784</FONT>            return new ToXMLSAXHandler(this, "UTF-8");<a name="line.1784"></a>
<FONT color="green">1785</FONT>        }<a name="line.1785"></a>
<FONT color="green">1786</FONT>        <a name="line.1786"></a>
<FONT color="green">1787</FONT>        /**<a name="line.1787"></a>
<FONT color="green">1788</FONT>         * Return a instance of a DOM class to be used as an RTF<a name="line.1788"></a>
<FONT color="green">1789</FONT>         */ <a name="line.1789"></a>
<FONT color="green">1790</FONT>        public DOM getResultTreeFrag(int initSize, int rtfType)<a name="line.1790"></a>
<FONT color="green">1791</FONT>        {<a name="line.1791"></a>
<FONT color="green">1792</FONT>            return getResultTreeFrag(initSize, rtfType, true);<a name="line.1792"></a>
<FONT color="green">1793</FONT>        }<a name="line.1793"></a>
<FONT color="green">1794</FONT>            <a name="line.1794"></a>
<FONT color="green">1795</FONT>        /**<a name="line.1795"></a>
<FONT color="green">1796</FONT>         * Return a instance of a DOM class to be used as an RTF<a name="line.1796"></a>
<FONT color="green">1797</FONT>         *<a name="line.1797"></a>
<FONT color="green">1798</FONT>         * @param initSize The initial size of the DOM.<a name="line.1798"></a>
<FONT color="green">1799</FONT>         * @param rtfType The type of the RTF<a name="line.1799"></a>
<FONT color="green">1800</FONT>         * @param addToManager true if the RTF should be registered with the DTMManager.<a name="line.1800"></a>
<FONT color="green">1801</FONT>         * @return The DOM object which represents the RTF.<a name="line.1801"></a>
<FONT color="green">1802</FONT>         */ <a name="line.1802"></a>
<FONT color="green">1803</FONT>        public DOM getResultTreeFrag(int initSize, int rtfType, boolean addToManager)<a name="line.1803"></a>
<FONT color="green">1804</FONT>        {<a name="line.1804"></a>
<FONT color="green">1805</FONT>            if (rtfType == DOM.SIMPLE_RTF) {<a name="line.1805"></a>
<FONT color="green">1806</FONT>                if (addToManager) {<a name="line.1806"></a>
<FONT color="green">1807</FONT>                    int dtmPos = _dtmManager.getFirstFreeDTMID();<a name="line.1807"></a>
<FONT color="green">1808</FONT>                    SimpleResultTreeImpl rtf = new SimpleResultTreeImpl(_dtmManager,<a name="line.1808"></a>
<FONT color="green">1809</FONT>                                               dtmPos &lt;&lt; DTMManager.IDENT_DTM_NODE_BITS);<a name="line.1809"></a>
<FONT color="green">1810</FONT>                    _dtmManager.addDTM(rtf, dtmPos, 0);<a name="line.1810"></a>
<FONT color="green">1811</FONT>                    return rtf;<a name="line.1811"></a>
<FONT color="green">1812</FONT>                }<a name="line.1812"></a>
<FONT color="green">1813</FONT>                else {<a name="line.1813"></a>
<FONT color="green">1814</FONT>                    return new SimpleResultTreeImpl(_dtmManager, 0);<a name="line.1814"></a>
<FONT color="green">1815</FONT>                }<a name="line.1815"></a>
<FONT color="green">1816</FONT>            }<a name="line.1816"></a>
<FONT color="green">1817</FONT>            else if (rtfType == DOM.ADAPTIVE_RTF) {<a name="line.1817"></a>
<FONT color="green">1818</FONT>                if (addToManager) {<a name="line.1818"></a>
<FONT color="green">1819</FONT>                    int dtmPos = _dtmManager.getFirstFreeDTMID();<a name="line.1819"></a>
<FONT color="green">1820</FONT>                    AdaptiveResultTreeImpl rtf = new AdaptiveResultTreeImpl(_dtmManager,<a name="line.1820"></a>
<FONT color="green">1821</FONT>                                           dtmPos &lt;&lt; DTMManager.IDENT_DTM_NODE_BITS,<a name="line.1821"></a>
<FONT color="green">1822</FONT>                                           m_wsfilter, initSize, m_buildIdIndex);<a name="line.1822"></a>
<FONT color="green">1823</FONT>                    _dtmManager.addDTM(rtf, dtmPos, 0);<a name="line.1823"></a>
<FONT color="green">1824</FONT>                    return rtf;<a name="line.1824"></a>
<FONT color="green">1825</FONT>            <a name="line.1825"></a>
<FONT color="green">1826</FONT>                }<a name="line.1826"></a>
<FONT color="green">1827</FONT>                else {<a name="line.1827"></a>
<FONT color="green">1828</FONT>                    return new AdaptiveResultTreeImpl(_dtmManager, 0,<a name="line.1828"></a>
<FONT color="green">1829</FONT>                                           m_wsfilter, initSize, m_buildIdIndex);<a name="line.1829"></a>
<FONT color="green">1830</FONT>                }           <a name="line.1830"></a>
<FONT color="green">1831</FONT>            }<a name="line.1831"></a>
<FONT color="green">1832</FONT>            else {<a name="line.1832"></a>
<FONT color="green">1833</FONT>                return (DOM) _dtmManager.getDTM(null, true, m_wsfilter,<a name="line.1833"></a>
<FONT color="green">1834</FONT>                                                true, false, false,<a name="line.1834"></a>
<FONT color="green">1835</FONT>                                                initSize, m_buildIdIndex);<a name="line.1835"></a>
<FONT color="green">1836</FONT>            }<a name="line.1836"></a>
<FONT color="green">1837</FONT>        }<a name="line.1837"></a>
<FONT color="green">1838</FONT>    <a name="line.1838"></a>
<FONT color="green">1839</FONT>        /**<a name="line.1839"></a>
<FONT color="green">1840</FONT>         * %HZ% Need Javadoc<a name="line.1840"></a>
<FONT color="green">1841</FONT>         */<a name="line.1841"></a>
<FONT color="green">1842</FONT>        public Hashtable getElementsWithIDs() {<a name="line.1842"></a>
<FONT color="green">1843</FONT>            if (m_idAttributes == null) {<a name="line.1843"></a>
<FONT color="green">1844</FONT>                return null;<a name="line.1844"></a>
<FONT color="green">1845</FONT>            }<a name="line.1845"></a>
<FONT color="green">1846</FONT>    <a name="line.1846"></a>
<FONT color="green">1847</FONT>            // Convert a java.util.Hashtable to an xsltc.runtime.Hashtable<a name="line.1847"></a>
<FONT color="green">1848</FONT>            Iterator idEntries = m_idAttributes.entrySet().iterator();<a name="line.1848"></a>
<FONT color="green">1849</FONT>            if (!idEntries.hasNext()) {<a name="line.1849"></a>
<FONT color="green">1850</FONT>                return null;<a name="line.1850"></a>
<FONT color="green">1851</FONT>            }<a name="line.1851"></a>
<FONT color="green">1852</FONT>    <a name="line.1852"></a>
<FONT color="green">1853</FONT>            Hashtable idAttrsTable = new Hashtable();<a name="line.1853"></a>
<FONT color="green">1854</FONT>            <a name="line.1854"></a>
<FONT color="green">1855</FONT>            while (idEntries.hasNext()) {<a name="line.1855"></a>
<FONT color="green">1856</FONT>                Map.Entry entry = (Map.Entry) idEntries.next();<a name="line.1856"></a>
<FONT color="green">1857</FONT>                idAttrsTable.put(entry.getKey(), entry.getValue());<a name="line.1857"></a>
<FONT color="green">1858</FONT>            }<a name="line.1858"></a>
<FONT color="green">1859</FONT>    <a name="line.1859"></a>
<FONT color="green">1860</FONT>            return idAttrsTable;<a name="line.1860"></a>
<FONT color="green">1861</FONT>        }<a name="line.1861"></a>
<FONT color="green">1862</FONT>    <a name="line.1862"></a>
<FONT color="green">1863</FONT>        /**<a name="line.1863"></a>
<FONT color="green">1864</FONT>         * The getUnparsedEntityURI function returns the URI of the unparsed<a name="line.1864"></a>
<FONT color="green">1865</FONT>         * entity with the specified name in the same document as the context<a name="line.1865"></a>
<FONT color="green">1866</FONT>         * node (see [3.3 Unparsed Entities]). It returns the empty string if<a name="line.1866"></a>
<FONT color="green">1867</FONT>         * there is no such entity.<a name="line.1867"></a>
<FONT color="green">1868</FONT>         */<a name="line.1868"></a>
<FONT color="green">1869</FONT>        public String getUnparsedEntityURI(String name)<a name="line.1869"></a>
<FONT color="green">1870</FONT>        {<a name="line.1870"></a>
<FONT color="green">1871</FONT>            // Special handling for DOM input<a name="line.1871"></a>
<FONT color="green">1872</FONT>            if (_document != null) {<a name="line.1872"></a>
<FONT color="green">1873</FONT>                String uri = "";<a name="line.1873"></a>
<FONT color="green">1874</FONT>                DocumentType doctype = _document.getDoctype();<a name="line.1874"></a>
<FONT color="green">1875</FONT>                if (doctype != null) {<a name="line.1875"></a>
<FONT color="green">1876</FONT>                    NamedNodeMap entities = doctype.getEntities();<a name="line.1876"></a>
<FONT color="green">1877</FONT>                    <a name="line.1877"></a>
<FONT color="green">1878</FONT>                    if (entities == null) {<a name="line.1878"></a>
<FONT color="green">1879</FONT>                        return uri;<a name="line.1879"></a>
<FONT color="green">1880</FONT>                    }<a name="line.1880"></a>
<FONT color="green">1881</FONT>                    <a name="line.1881"></a>
<FONT color="green">1882</FONT>                    Entity entity = (Entity) entities.getNamedItem(name);<a name="line.1882"></a>
<FONT color="green">1883</FONT>                    <a name="line.1883"></a>
<FONT color="green">1884</FONT>                    if (entity == null) {<a name="line.1884"></a>
<FONT color="green">1885</FONT>                        return uri;<a name="line.1885"></a>
<FONT color="green">1886</FONT>                    }<a name="line.1886"></a>
<FONT color="green">1887</FONT>                    <a name="line.1887"></a>
<FONT color="green">1888</FONT>                    String notationName = entity.getNotationName();<a name="line.1888"></a>
<FONT color="green">1889</FONT>                    if (notationName != null) {<a name="line.1889"></a>
<FONT color="green">1890</FONT>                        uri = entity.getSystemId();<a name="line.1890"></a>
<FONT color="green">1891</FONT>                        if (uri == null) {<a name="line.1891"></a>
<FONT color="green">1892</FONT>                            uri = entity.getPublicId();<a name="line.1892"></a>
<FONT color="green">1893</FONT>                        }<a name="line.1893"></a>
<FONT color="green">1894</FONT>                    }<a name="line.1894"></a>
<FONT color="green">1895</FONT>                }<a name="line.1895"></a>
<FONT color="green">1896</FONT>                return uri;<a name="line.1896"></a>
<FONT color="green">1897</FONT>            }<a name="line.1897"></a>
<FONT color="green">1898</FONT>            else {<a name="line.1898"></a>
<FONT color="green">1899</FONT>                return super.getUnparsedEntityURI(name);<a name="line.1899"></a>
<FONT color="green">1900</FONT>            }       <a name="line.1900"></a>
<FONT color="green">1901</FONT>        }<a name="line.1901"></a>
<FONT color="green">1902</FONT>    <a name="line.1902"></a>
<FONT color="green">1903</FONT>    }<a name="line.1903"></a>




























































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