<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: DecimalFormatProperties.java 468643 2006-10-28 06:56:03Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.templates;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.text.DecimalFormatSymbols;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.xml.utils.QName;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    /**<a name="line.27"></a>
<FONT color="green">028</FONT>     * Implement xsl:decimal-format.<a name="line.28"></a>
<FONT color="green">029</FONT>     * &lt;pre&gt;<a name="line.29"></a>
<FONT color="green">030</FONT>     * &lt;!ELEMENT xsl:decimal-format EMPTY&gt;<a name="line.30"></a>
<FONT color="green">031</FONT>     * &lt;!ATTLIST xsl:decimal-format<a name="line.31"></a>
<FONT color="green">032</FONT>     *   name %qname; #IMPLIED<a name="line.32"></a>
<FONT color="green">033</FONT>     *   decimal-separator %char; "."<a name="line.33"></a>
<FONT color="green">034</FONT>     *   grouping-separator %char; ","<a name="line.34"></a>
<FONT color="green">035</FONT>     *   infinity CDATA "Infinity"<a name="line.35"></a>
<FONT color="green">036</FONT>     *   minus-sign %char; "-"<a name="line.36"></a>
<FONT color="green">037</FONT>     *   NaN CDATA "NaN"<a name="line.37"></a>
<FONT color="green">038</FONT>     *   percent %char; "%"<a name="line.38"></a>
<FONT color="green">039</FONT>     *   per-mille %char; "&amp;#x2030;"<a name="line.39"></a>
<FONT color="green">040</FONT>     *   zero-digit %char; "0"<a name="line.40"></a>
<FONT color="green">041</FONT>     *   digit %char; "#"<a name="line.41"></a>
<FONT color="green">042</FONT>     *   pattern-separator %char; ";"<a name="line.42"></a>
<FONT color="green">043</FONT>     * &gt;<a name="line.43"></a>
<FONT color="green">044</FONT>     * &lt;/pre&gt;<a name="line.44"></a>
<FONT color="green">045</FONT>     * @see &lt;a href="http://www.w3.org/TR/xslt#format-number"&gt;format-number in XSLT Specification&lt;/a&gt;<a name="line.45"></a>
<FONT color="green">046</FONT>     * @xsl.usage advanced<a name="line.46"></a>
<FONT color="green">047</FONT>     */<a name="line.47"></a>
<FONT color="green">048</FONT>    public class DecimalFormatProperties extends ElemTemplateElement<a name="line.48"></a>
<FONT color="green">049</FONT>    {<a name="line.49"></a>
<FONT color="green">050</FONT>        static final long serialVersionUID = -6559409339256269446L;<a name="line.50"></a>
<FONT color="green">051</FONT>    <a name="line.51"></a>
<FONT color="green">052</FONT>      /** An instance of DecimalFormatSymbols for this element.<a name="line.52"></a>
<FONT color="green">053</FONT>       *  @serial       */<a name="line.53"></a>
<FONT color="green">054</FONT>      DecimalFormatSymbols m_dfs;<a name="line.54"></a>
<FONT color="green">055</FONT>    <a name="line.55"></a>
<FONT color="green">056</FONT>      /**<a name="line.56"></a>
<FONT color="green">057</FONT>       * Constructor DecimalFormatProperties<a name="line.57"></a>
<FONT color="green">058</FONT>       *<a name="line.58"></a>
<FONT color="green">059</FONT>       */<a name="line.59"></a>
<FONT color="green">060</FONT>      public DecimalFormatProperties(int docOrderNumber)<a name="line.60"></a>
<FONT color="green">061</FONT>      {<a name="line.61"></a>
<FONT color="green">062</FONT>    <a name="line.62"></a>
<FONT color="green">063</FONT>        m_dfs = new java.text.DecimalFormatSymbols();<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>        // Set default values, they can be overiden if necessary.  <a name="line.65"></a>
<FONT color="green">066</FONT>        m_dfs.setInfinity(Constants.ATTRVAL_INFINITY);<a name="line.66"></a>
<FONT color="green">067</FONT>        m_dfs.setNaN(Constants.ATTRVAL_NAN);<a name="line.67"></a>
<FONT color="green">068</FONT>    <a name="line.68"></a>
<FONT color="green">069</FONT>        m_docOrderNumber = docOrderNumber;<a name="line.69"></a>
<FONT color="green">070</FONT>      }<a name="line.70"></a>
<FONT color="green">071</FONT>    <a name="line.71"></a>
<FONT color="green">072</FONT>      /**<a name="line.72"></a>
<FONT color="green">073</FONT>       * Return the decimal format Symbols for this element.<a name="line.73"></a>
<FONT color="green">074</FONT>       * &lt;p&gt;The xsl:decimal-format element declares a decimal-format,<a name="line.74"></a>
<FONT color="green">075</FONT>       * which controls the interpretation of a format pattern used by<a name="line.75"></a>
<FONT color="green">076</FONT>       * the format-number function. If there is a name attribute, then<a name="line.76"></a>
<FONT color="green">077</FONT>       * the element declares a named decimal-format; otherwise, it<a name="line.77"></a>
<FONT color="green">078</FONT>       * declares the default decimal-format. The value of the name<a name="line.78"></a>
<FONT color="green">079</FONT>       * attribute is a QName, which is expanded as described in [2.4 Qualified Names].<a name="line.79"></a>
<FONT color="green">080</FONT>       * It is an error to declare either the default decimal-format or a<a name="line.80"></a>
<FONT color="green">081</FONT>       * decimal-format with a given name more than once (even with different<a name="line.81"></a>
<FONT color="green">082</FONT>       * import precedence), unless it is declared every time with the same<a name="line.82"></a>
<FONT color="green">083</FONT>       * value for all attributes (taking into account any default values).&lt;/p&gt;<a name="line.83"></a>
<FONT color="green">084</FONT>       * &lt;p&gt;The other attributes on xsl:decimal-format correspond to the<a name="line.84"></a>
<FONT color="green">085</FONT>       * methods on the JDK 1.1 DecimalFormatSymbols class. For each get/set<a name="line.85"></a>
<FONT color="green">086</FONT>       * method pair there is an attribute defined for the xsl:decimal-format<a name="line.86"></a>
<FONT color="green">087</FONT>       * element.&lt;/p&gt;<a name="line.87"></a>
<FONT color="green">088</FONT>       *<a name="line.88"></a>
<FONT color="green">089</FONT>       * @return the decimal format Symbols for this element.<a name="line.89"></a>
<FONT color="green">090</FONT>       */<a name="line.90"></a>
<FONT color="green">091</FONT>      public DecimalFormatSymbols getDecimalFormatSymbols()<a name="line.91"></a>
<FONT color="green">092</FONT>      {<a name="line.92"></a>
<FONT color="green">093</FONT>        return m_dfs;<a name="line.93"></a>
<FONT color="green">094</FONT>      }<a name="line.94"></a>
<FONT color="green">095</FONT>    <a name="line.95"></a>
<FONT color="green">096</FONT>      /**<a name="line.96"></a>
<FONT color="green">097</FONT>       * If there is a name attribute, then the element declares a named<a name="line.97"></a>
<FONT color="green">098</FONT>       * decimal-format; otherwise, it declares the default decimal-format.<a name="line.98"></a>
<FONT color="green">099</FONT>       * @serial<a name="line.99"></a>
<FONT color="green">100</FONT>       */<a name="line.100"></a>
<FONT color="green">101</FONT>      private QName m_qname = null;<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>      /**<a name="line.103"></a>
<FONT color="green">104</FONT>       * Set the "name" attribute.<a name="line.104"></a>
<FONT color="green">105</FONT>       * If there is a name attribute, then the element declares a named<a name="line.105"></a>
<FONT color="green">106</FONT>       * decimal-format; otherwise, it declares the default decimal-format.<a name="line.106"></a>
<FONT color="green">107</FONT>       *<a name="line.107"></a>
<FONT color="green">108</FONT>       * @param qname The name to set as the "name" attribute.<a name="line.108"></a>
<FONT color="green">109</FONT>       */<a name="line.109"></a>
<FONT color="green">110</FONT>      public void setName(QName qname)<a name="line.110"></a>
<FONT color="green">111</FONT>      {<a name="line.111"></a>
<FONT color="green">112</FONT>        m_qname = qname;<a name="line.112"></a>
<FONT color="green">113</FONT>      }<a name="line.113"></a>
<FONT color="green">114</FONT>    <a name="line.114"></a>
<FONT color="green">115</FONT>      /**<a name="line.115"></a>
<FONT color="green">116</FONT>       * Get the "name" attribute.<a name="line.116"></a>
<FONT color="green">117</FONT>       * If there is a name attribute, then the element declares a named<a name="line.117"></a>
<FONT color="green">118</FONT>       * decimal-format; otherwise, it declares the default decimal-format.<a name="line.118"></a>
<FONT color="green">119</FONT>       *<a name="line.119"></a>
<FONT color="green">120</FONT>       * @return the value of the "name" attribute.<a name="line.120"></a>
<FONT color="green">121</FONT>       */<a name="line.121"></a>
<FONT color="green">122</FONT>      public QName getName()<a name="line.122"></a>
<FONT color="green">123</FONT>      {<a name="line.123"></a>
<FONT color="green">124</FONT>    <a name="line.124"></a>
<FONT color="green">125</FONT>        if (m_qname == null)<a name="line.125"></a>
<FONT color="green">126</FONT>          return new QName("");<a name="line.126"></a>
<FONT color="green">127</FONT>        else<a name="line.127"></a>
<FONT color="green">128</FONT>          return m_qname;<a name="line.128"></a>
<FONT color="green">129</FONT>      }<a name="line.129"></a>
<FONT color="green">130</FONT>    <a name="line.130"></a>
<FONT color="green">131</FONT>      /**<a name="line.131"></a>
<FONT color="green">132</FONT>       * Set the "decimal-separator" attribute.<a name="line.132"></a>
<FONT color="green">133</FONT>       * decimal-separator specifies the character used for the decimal sign;<a name="line.133"></a>
<FONT color="green">134</FONT>       * the default value is the period character (.).<a name="line.134"></a>
<FONT color="green">135</FONT>       *<a name="line.135"></a>
<FONT color="green">136</FONT>       * @param ds Character to set as decimal separator <a name="line.136"></a>
<FONT color="green">137</FONT>       */<a name="line.137"></a>
<FONT color="green">138</FONT>      public void setDecimalSeparator(char ds)<a name="line.138"></a>
<FONT color="green">139</FONT>      {<a name="line.139"></a>
<FONT color="green">140</FONT>        m_dfs.setDecimalSeparator(ds);<a name="line.140"></a>
<FONT color="green">141</FONT>      }<a name="line.141"></a>
<FONT color="green">142</FONT>    <a name="line.142"></a>
<FONT color="green">143</FONT>      /**<a name="line.143"></a>
<FONT color="green">144</FONT>       * Get the "decimal-separator" attribute.<a name="line.144"></a>
<FONT color="green">145</FONT>       * decimal-separator specifies the character used for the decimal sign;<a name="line.145"></a>
<FONT color="green">146</FONT>       * the default value is the period character (.).<a name="line.146"></a>
<FONT color="green">147</FONT>       *<a name="line.147"></a>
<FONT color="green">148</FONT>       * @return the character to use as decimal separator<a name="line.148"></a>
<FONT color="green">149</FONT>       */<a name="line.149"></a>
<FONT color="green">150</FONT>      public char getDecimalSeparator()<a name="line.150"></a>
<FONT color="green">151</FONT>      {<a name="line.151"></a>
<FONT color="green">152</FONT>        return m_dfs.getDecimalSeparator();<a name="line.152"></a>
<FONT color="green">153</FONT>      }<a name="line.153"></a>
<FONT color="green">154</FONT>    <a name="line.154"></a>
<FONT color="green">155</FONT>      /**<a name="line.155"></a>
<FONT color="green">156</FONT>       * Set the "grouping-separator" attribute.<a name="line.156"></a>
<FONT color="green">157</FONT>       * grouping-separator specifies the character used as a grouping<a name="line.157"></a>
<FONT color="green">158</FONT>       * (e.g. thousands) separator; the default value is the comma character (,).<a name="line.158"></a>
<FONT color="green">159</FONT>       *<a name="line.159"></a>
<FONT color="green">160</FONT>       * @param gs Character to use a grouping separator <a name="line.160"></a>
<FONT color="green">161</FONT>       */<a name="line.161"></a>
<FONT color="green">162</FONT>      public void setGroupingSeparator(char gs)<a name="line.162"></a>
<FONT color="green">163</FONT>      {<a name="line.163"></a>
<FONT color="green">164</FONT>        m_dfs.setGroupingSeparator(gs);<a name="line.164"></a>
<FONT color="green">165</FONT>      }<a name="line.165"></a>
<FONT color="green">166</FONT>    <a name="line.166"></a>
<FONT color="green">167</FONT>      /**<a name="line.167"></a>
<FONT color="green">168</FONT>       * Get the "grouping-separator" attribute.<a name="line.168"></a>
<FONT color="green">169</FONT>       * grouping-separator specifies the character used as a grouping<a name="line.169"></a>
<FONT color="green">170</FONT>       * (e.g. thousands) separator; the default value is the comma character (,).<a name="line.170"></a>
<FONT color="green">171</FONT>       *<a name="line.171"></a>
<FONT color="green">172</FONT>       * @return Character to use a grouping separator <a name="line.172"></a>
<FONT color="green">173</FONT>       */<a name="line.173"></a>
<FONT color="green">174</FONT>      public char getGroupingSeparator()<a name="line.174"></a>
<FONT color="green">175</FONT>      {<a name="line.175"></a>
<FONT color="green">176</FONT>        return m_dfs.getGroupingSeparator();<a name="line.176"></a>
<FONT color="green">177</FONT>      }<a name="line.177"></a>
<FONT color="green">178</FONT>    <a name="line.178"></a>
<FONT color="green">179</FONT>      /**<a name="line.179"></a>
<FONT color="green">180</FONT>       * Set the "infinity" attribute.<a name="line.180"></a>
<FONT color="green">181</FONT>       * infinity specifies the string used to represent infinity;<a name="line.181"></a>
<FONT color="green">182</FONT>       * the default value is the string Infinity.<a name="line.182"></a>
<FONT color="green">183</FONT>       *<a name="line.183"></a>
<FONT color="green">184</FONT>       * @param inf String to use as the "infinity" attribute.<a name="line.184"></a>
<FONT color="green">185</FONT>       */<a name="line.185"></a>
<FONT color="green">186</FONT>      public void setInfinity(String inf)<a name="line.186"></a>
<FONT color="green">187</FONT>      {<a name="line.187"></a>
<FONT color="green">188</FONT>        m_dfs.setInfinity(inf);<a name="line.188"></a>
<FONT color="green">189</FONT>      }<a name="line.189"></a>
<FONT color="green">190</FONT>    <a name="line.190"></a>
<FONT color="green">191</FONT>      /**<a name="line.191"></a>
<FONT color="green">192</FONT>       * Get the "infinity" attribute.<a name="line.192"></a>
<FONT color="green">193</FONT>       * infinity specifies the string used to represent infinity;<a name="line.193"></a>
<FONT color="green">194</FONT>       * the default value is the string Infinity.<a name="line.194"></a>
<FONT color="green">195</FONT>       *<a name="line.195"></a>
<FONT color="green">196</FONT>       * @return String to use as the "infinity" attribute.<a name="line.196"></a>
<FONT color="green">197</FONT>       */<a name="line.197"></a>
<FONT color="green">198</FONT>      public String getInfinity()<a name="line.198"></a>
<FONT color="green">199</FONT>      {<a name="line.199"></a>
<FONT color="green">200</FONT>        return m_dfs.getInfinity();<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>       * Set the "minus-sign" attribute.<a name="line.204"></a>
<FONT color="green">205</FONT>       * minus-sign specifies the character used as the default minus sign; the<a name="line.205"></a>
<FONT color="green">206</FONT>       * default value is the hyphen-minus character (-, #x2D).<a name="line.206"></a>
<FONT color="green">207</FONT>       *<a name="line.207"></a>
<FONT color="green">208</FONT>       * @param v Character to use as minus sign<a name="line.208"></a>
<FONT color="green">209</FONT>       */<a name="line.209"></a>
<FONT color="green">210</FONT>      public void setMinusSign(char v)<a name="line.210"></a>
<FONT color="green">211</FONT>      {<a name="line.211"></a>
<FONT color="green">212</FONT>        m_dfs.setMinusSign(v);<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>       * Get the "minus-sign" attribute.<a name="line.216"></a>
<FONT color="green">217</FONT>       * minus-sign specifies the character used as the default minus sign; the<a name="line.217"></a>
<FONT color="green">218</FONT>       * default value is the hyphen-minus character (-, #x2D).<a name="line.218"></a>
<FONT color="green">219</FONT>       *<a name="line.219"></a>
<FONT color="green">220</FONT>       * @return Character to use as minus sign<a name="line.220"></a>
<FONT color="green">221</FONT>       */<a name="line.221"></a>
<FONT color="green">222</FONT>      public char getMinusSign()<a name="line.222"></a>
<FONT color="green">223</FONT>      {<a name="line.223"></a>
<FONT color="green">224</FONT>        return m_dfs.getMinusSign();<a name="line.224"></a>
<FONT color="green">225</FONT>      }<a name="line.225"></a>
<FONT color="green">226</FONT>    <a name="line.226"></a>
<FONT color="green">227</FONT>      /**<a name="line.227"></a>
<FONT color="green">228</FONT>       * Set the "NaN" attribute.<a name="line.228"></a>
<FONT color="green">229</FONT>       * NaN specifies the string used to represent the NaN value;<a name="line.229"></a>
<FONT color="green">230</FONT>       * the default value is the string NaN.<a name="line.230"></a>
<FONT color="green">231</FONT>       *<a name="line.231"></a>
<FONT color="green">232</FONT>       * @param v String to use as the "NaN" attribute.<a name="line.232"></a>
<FONT color="green">233</FONT>       */<a name="line.233"></a>
<FONT color="green">234</FONT>      public void setNaN(String v)<a name="line.234"></a>
<FONT color="green">235</FONT>      {<a name="line.235"></a>
<FONT color="green">236</FONT>        m_dfs.setNaN(v);<a name="line.236"></a>
<FONT color="green">237</FONT>      }<a name="line.237"></a>
<FONT color="green">238</FONT>    <a name="line.238"></a>
<FONT color="green">239</FONT>      /**<a name="line.239"></a>
<FONT color="green">240</FONT>       * Get the "NaN" attribute.<a name="line.240"></a>
<FONT color="green">241</FONT>       * NaN specifies the string used to represent the NaN value;<a name="line.241"></a>
<FONT color="green">242</FONT>       * the default value is the string NaN.<a name="line.242"></a>
<FONT color="green">243</FONT>       *<a name="line.243"></a>
<FONT color="green">244</FONT>       * @return String to use as the "NaN" attribute.<a name="line.244"></a>
<FONT color="green">245</FONT>       */<a name="line.245"></a>
<FONT color="green">246</FONT>      public String getNaN()<a name="line.246"></a>
<FONT color="green">247</FONT>      {<a name="line.247"></a>
<FONT color="green">248</FONT>        return m_dfs.getNaN();<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>       * Return the node name.<a name="line.252"></a>
<FONT color="green">253</FONT>       *<a name="line.253"></a>
<FONT color="green">254</FONT>       * @return the element's name<a name="line.254"></a>
<FONT color="green">255</FONT>       */<a name="line.255"></a>
<FONT color="green">256</FONT>      public String getNodeName()<a name="line.256"></a>
<FONT color="green">257</FONT>      {<a name="line.257"></a>
<FONT color="green">258</FONT>        return Constants.ELEMNAME_DECIMALFORMAT_STRING;<a name="line.258"></a>
<FONT color="green">259</FONT>      }<a name="line.259"></a>
<FONT color="green">260</FONT>    <a name="line.260"></a>
<FONT color="green">261</FONT>      /**<a name="line.261"></a>
<FONT color="green">262</FONT>       * Set the "percent" attribute.<a name="line.262"></a>
<FONT color="green">263</FONT>       * percent specifies the character used as a percent sign; the default<a name="line.263"></a>
<FONT color="green">264</FONT>       * value is the percent character (%).<a name="line.264"></a>
<FONT color="green">265</FONT>       *<a name="line.265"></a>
<FONT color="green">266</FONT>       * @param v Character to use as percent <a name="line.266"></a>
<FONT color="green">267</FONT>       */<a name="line.267"></a>
<FONT color="green">268</FONT>      public void setPercent(char v)<a name="line.268"></a>
<FONT color="green">269</FONT>      {<a name="line.269"></a>
<FONT color="green">270</FONT>        m_dfs.setPercent(v);<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>      /**<a name="line.273"></a>
<FONT color="green">274</FONT>       * Get the "percent" attribute.<a name="line.274"></a>
<FONT color="green">275</FONT>       * percent specifies the character used as a percent sign; the default<a name="line.275"></a>
<FONT color="green">276</FONT>       * value is the percent character (%).<a name="line.276"></a>
<FONT color="green">277</FONT>       *<a name="line.277"></a>
<FONT color="green">278</FONT>       * @return Character to use as percent <a name="line.278"></a>
<FONT color="green">279</FONT>       */<a name="line.279"></a>
<FONT color="green">280</FONT>      public char getPercent()<a name="line.280"></a>
<FONT color="green">281</FONT>      {<a name="line.281"></a>
<FONT color="green">282</FONT>        return m_dfs.getPercent();<a name="line.282"></a>
<FONT color="green">283</FONT>      }<a name="line.283"></a>
<FONT color="green">284</FONT>    <a name="line.284"></a>
<FONT color="green">285</FONT>      /**<a name="line.285"></a>
<FONT color="green">286</FONT>       * Set the "per-mille" attribute.<a name="line.286"></a>
<FONT color="green">287</FONT>       * per-mille specifies the character used as a per mille sign; the default<a name="line.287"></a>
<FONT color="green">288</FONT>       * value is the Unicode per-mille character (#x2030).<a name="line.288"></a>
<FONT color="green">289</FONT>       *<a name="line.289"></a>
<FONT color="green">290</FONT>       * @param v Character to use as per-mille<a name="line.290"></a>
<FONT color="green">291</FONT>       */<a name="line.291"></a>
<FONT color="green">292</FONT>      public void setPerMille(char v)<a name="line.292"></a>
<FONT color="green">293</FONT>      {<a name="line.293"></a>
<FONT color="green">294</FONT>        m_dfs.setPerMill(v);<a name="line.294"></a>
<FONT color="green">295</FONT>      }<a name="line.295"></a>
<FONT color="green">296</FONT>    <a name="line.296"></a>
<FONT color="green">297</FONT>      /**<a name="line.297"></a>
<FONT color="green">298</FONT>       * Get the "per-mille" attribute.<a name="line.298"></a>
<FONT color="green">299</FONT>       * per-mille specifies the character used as a per mille sign; the default<a name="line.299"></a>
<FONT color="green">300</FONT>       * value is the Unicode per-mille character (#x2030).<a name="line.300"></a>
<FONT color="green">301</FONT>       *<a name="line.301"></a>
<FONT color="green">302</FONT>       * @return Character to use as per-mille <a name="line.302"></a>
<FONT color="green">303</FONT>       */<a name="line.303"></a>
<FONT color="green">304</FONT>      public char getPerMille()<a name="line.304"></a>
<FONT color="green">305</FONT>      {<a name="line.305"></a>
<FONT color="green">306</FONT>        return m_dfs.getPerMill();<a name="line.306"></a>
<FONT color="green">307</FONT>      }<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>       * Get an int constant identifying the type of element.<a name="line.310"></a>
<FONT color="green">311</FONT>       * @see org.apache.xalan.templates.Constants<a name="line.311"></a>
<FONT color="green">312</FONT>       *<a name="line.312"></a>
<FONT color="green">313</FONT>       * @return The token ID for this element<a name="line.313"></a>
<FONT color="green">314</FONT>       */<a name="line.314"></a>
<FONT color="green">315</FONT>      public int getXSLToken()<a name="line.315"></a>
<FONT color="green">316</FONT>      {<a name="line.316"></a>
<FONT color="green">317</FONT>        return Constants.ELEMNAME_DECIMALFORMAT;<a name="line.317"></a>
<FONT color="green">318</FONT>      }<a name="line.318"></a>
<FONT color="green">319</FONT>      <a name="line.319"></a>
<FONT color="green">320</FONT>      /**<a name="line.320"></a>
<FONT color="green">321</FONT>       * Set the "zero-digit" attribute.<a name="line.321"></a>
<FONT color="green">322</FONT>       * zero-digit specifies the character used as the digit zero; the default<a name="line.322"></a>
<FONT color="green">323</FONT>       * value is the digit zero (0).<a name="line.323"></a>
<FONT color="green">324</FONT>       *<a name="line.324"></a>
<FONT color="green">325</FONT>       * @param v Character to use as the digit zero<a name="line.325"></a>
<FONT color="green">326</FONT>       */<a name="line.326"></a>
<FONT color="green">327</FONT>      public void setZeroDigit(char v)<a name="line.327"></a>
<FONT color="green">328</FONT>      {<a name="line.328"></a>
<FONT color="green">329</FONT>        m_dfs.setZeroDigit(v);<a name="line.329"></a>
<FONT color="green">330</FONT>      }<a name="line.330"></a>
<FONT color="green">331</FONT>    <a name="line.331"></a>
<FONT color="green">332</FONT>      /**<a name="line.332"></a>
<FONT color="green">333</FONT>       * Get the "zero-digit" attribute.<a name="line.333"></a>
<FONT color="green">334</FONT>       * zero-digit specifies the character used as the digit zero; the default<a name="line.334"></a>
<FONT color="green">335</FONT>       * value is the digit zero (0).<a name="line.335"></a>
<FONT color="green">336</FONT>       *<a name="line.336"></a>
<FONT color="green">337</FONT>       * @return Character to use as the digit zero<a name="line.337"></a>
<FONT color="green">338</FONT>       */<a name="line.338"></a>
<FONT color="green">339</FONT>      public char getZeroDigit()<a name="line.339"></a>
<FONT color="green">340</FONT>      {<a name="line.340"></a>
<FONT color="green">341</FONT>        return m_dfs.getZeroDigit();<a name="line.341"></a>
<FONT color="green">342</FONT>      }<a name="line.342"></a>
<FONT color="green">343</FONT>    <a name="line.343"></a>
<FONT color="green">344</FONT>      /**<a name="line.344"></a>
<FONT color="green">345</FONT>       * Set the "digit" attribute.<a name="line.345"></a>
<FONT color="green">346</FONT>       * digit specifies the character used for a digit in the format pattern;<a name="line.346"></a>
<FONT color="green">347</FONT>       * the default value is the number sign character (#).<a name="line.347"></a>
<FONT color="green">348</FONT>       *<a name="line.348"></a>
<FONT color="green">349</FONT>       * @param v Character to use for a digit in format pattern<a name="line.349"></a>
<FONT color="green">350</FONT>       */<a name="line.350"></a>
<FONT color="green">351</FONT>      public void setDigit(char v)<a name="line.351"></a>
<FONT color="green">352</FONT>      {<a name="line.352"></a>
<FONT color="green">353</FONT>        m_dfs.setDigit(v);<a name="line.353"></a>
<FONT color="green">354</FONT>      }<a name="line.354"></a>
<FONT color="green">355</FONT>    <a name="line.355"></a>
<FONT color="green">356</FONT>      /**<a name="line.356"></a>
<FONT color="green">357</FONT>       * Get the "digit" attribute.<a name="line.357"></a>
<FONT color="green">358</FONT>       * digit specifies the character used for a digit in the format pattern;<a name="line.358"></a>
<FONT color="green">359</FONT>       * the default value is the number sign character (#).<a name="line.359"></a>
<FONT color="green">360</FONT>       *<a name="line.360"></a>
<FONT color="green">361</FONT>       * @return Character to use for a digit in format pattern<a name="line.361"></a>
<FONT color="green">362</FONT>       */<a name="line.362"></a>
<FONT color="green">363</FONT>      public char getDigit()<a name="line.363"></a>
<FONT color="green">364</FONT>      {<a name="line.364"></a>
<FONT color="green">365</FONT>        return m_dfs.getDigit();<a name="line.365"></a>
<FONT color="green">366</FONT>      }<a name="line.366"></a>
<FONT color="green">367</FONT>    <a name="line.367"></a>
<FONT color="green">368</FONT>      /**<a name="line.368"></a>
<FONT color="green">369</FONT>       * Set the "pattern-separator" attribute.<a name="line.369"></a>
<FONT color="green">370</FONT>       * pattern-separator specifies the character used to separate positive<a name="line.370"></a>
<FONT color="green">371</FONT>       * and negative sub patterns in a pattern; the default value is the<a name="line.371"></a>
<FONT color="green">372</FONT>       * semi-colon character (;).<a name="line.372"></a>
<FONT color="green">373</FONT>       *<a name="line.373"></a>
<FONT color="green">374</FONT>       * @param v Character to use as a pattern separator<a name="line.374"></a>
<FONT color="green">375</FONT>       */<a name="line.375"></a>
<FONT color="green">376</FONT>      public void setPatternSeparator(char v)<a name="line.376"></a>
<FONT color="green">377</FONT>      {<a name="line.377"></a>
<FONT color="green">378</FONT>        m_dfs.setPatternSeparator(v);<a name="line.378"></a>
<FONT color="green">379</FONT>      }<a name="line.379"></a>
<FONT color="green">380</FONT>    <a name="line.380"></a>
<FONT color="green">381</FONT>      /**<a name="line.381"></a>
<FONT color="green">382</FONT>       * Get the "pattern-separator" attribute.<a name="line.382"></a>
<FONT color="green">383</FONT>       * pattern-separator specifies the character used to separate positive<a name="line.383"></a>
<FONT color="green">384</FONT>       * and negative sub patterns in a pattern; the default value is the<a name="line.384"></a>
<FONT color="green">385</FONT>       * semi-colon character (;).<a name="line.385"></a>
<FONT color="green">386</FONT>       *<a name="line.386"></a>
<FONT color="green">387</FONT>       * @return Character to use as a pattern separator<a name="line.387"></a>
<FONT color="green">388</FONT>       */<a name="line.388"></a>
<FONT color="green">389</FONT>      public char getPatternSeparator()<a name="line.389"></a>
<FONT color="green">390</FONT>      {<a name="line.390"></a>
<FONT color="green">391</FONT>        return m_dfs.getPatternSeparator();<a name="line.391"></a>
<FONT color="green">392</FONT>      }<a name="line.392"></a>
<FONT color="green">393</FONT>    <a name="line.393"></a>
<FONT color="green">394</FONT>      /**<a name="line.394"></a>
<FONT color="green">395</FONT>       * This function is called to recompose() all of the decimal format properties elements.<a name="line.395"></a>
<FONT color="green">396</FONT>       * <a name="line.396"></a>
<FONT color="green">397</FONT>       * @param root Stylesheet root<a name="line.397"></a>
<FONT color="green">398</FONT>       */<a name="line.398"></a>
<FONT color="green">399</FONT>      public void recompose(StylesheetRoot root)<a name="line.399"></a>
<FONT color="green">400</FONT>      {<a name="line.400"></a>
<FONT color="green">401</FONT>        root.recomposeDecimalFormats(this);<a name="line.401"></a>
<FONT color="green">402</FONT>      }<a name="line.402"></a>
<FONT color="green">403</FONT>    <a name="line.403"></a>
<FONT color="green">404</FONT>    }<a name="line.404"></a>




























































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