Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / java / text / DecimalFormat.js
1 Clazz.declarePackage ("java.text");
2 Clazz.load (["java.text.NumberFormat", "java.util.Hashtable", "java.text.DigitList"], "java.text.DecimalFormat", ["java.lang.Byte", "$.Character", "$.Double", "$.Float", "$.IllegalArgumentException", "$.InternalError", "$.Long", "$.NullPointerException", "$.Number", "$.Short", "$.StringBuffer", "java.util.ArrayList", "java.text.CharacterIteratorFieldDelegate", "$.DecimalFormatSymbols", "$.FieldPosition", "$.ParsePosition", "java.util.Locale", "jssun.util.resources.LocaleData"], function () {
3 c$ = Clazz.decorateAsClass (function () {
4 this.digitList = null;
5 this.positivePrefix = "";
6 this.positiveSuffix = "";
7 this.negativePrefix = "-";
8 this.negativeSuffix = "";
9 this.posPrefixPattern = null;
10 this.posSuffixPattern = null;
11 this.negPrefixPattern = null;
12 this.negSuffixPattern = null;
13 this.multiplier = 1;
14 this.groupingSize = 3;
15 this.decimalSeparatorAlwaysShown = false;
16 this.parseBigDecimal = false;
17 this.isCurrencyFormat = false;
18 this.symbols = null;
19 this.useExponentialNotation = false;
20 this.positivePrefixFieldPositions = null;
21 this.positiveSuffixFieldPositions = null;
22 this.negativePrefixFieldPositions = null;
23 this.negativeSuffixFieldPositions = null;
24 this.minExponentDigits = 0;
25 this.$maximumIntegerDigits = 0;
26 this.$minimumIntegerDigits = 0;
27 this.$maximumFractionDigits = 0;
28 this.$minimumFractionDigits = 0;
29 this.roundingMode = null;
30 Clazz.instantialize (this, arguments);
31 }, java.text, "DecimalFormat", java.text.NumberFormat);
32 Clazz.prepareFields (c$, function () {
33 this.digitList =  new java.text.DigitList ();
34 this.$maximumIntegerDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumIntegerDigits", []);
35 this.$minimumIntegerDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumIntegerDigits", []);
36 this.$maximumFractionDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumFractionDigits", []);
37 this.$minimumFractionDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumFractionDigits", []);
38 });
39 Clazz.makeConstructor (c$, 
40 function () {
41 Clazz.superConstructor (this, java.text.DecimalFormat, []);
42 var def = java.util.Locale.getDefault ();
43 var pattern = java.text.DecimalFormat.$cachedLocaleData.get (def);
44 if (pattern == null) {
45 var rb = jssun.util.resources.LocaleData.getNumberFormatData (def);
46 var all = rb.getStringArray ("NumberPatterns");
47 pattern = all[0];
48 java.text.DecimalFormat.$cachedLocaleData.put (def, pattern);
49 }this.symbols =  new java.text.DecimalFormatSymbols (def);
50 this.applyPattern (pattern, false);
51 });
52 Clazz.makeConstructor (c$, 
53 function (pattern) {
54 Clazz.superConstructor (this, java.text.DecimalFormat, []);
55 this.symbols =  new java.text.DecimalFormatSymbols (java.util.Locale.getDefault ());
56 this.applyPattern (pattern, false);
57 }, "~S");
58 Clazz.makeConstructor (c$, 
59 function (pattern, symbols) {
60 Clazz.superConstructor (this, java.text.DecimalFormat, []);
61 this.symbols = symbols.clone ();
62 this.applyPattern (pattern, false);
63 }, "~S,java.text.DecimalFormatSymbols");
64 Clazz.defineMethod (c$, "format", 
65 function (number, toAppendTo, pos) {
66 if (Clazz.instanceOf (number, Long) || Clazz.instanceOf (number, Integer) || Clazz.instanceOf (number, Short) || Clazz.instanceOf (number, Byte)) {
67 return this.format ((number).longValue (), toAppendTo, pos);
68 } else if (Clazz.instanceOf (number, Number)) {
69 return this.format ((number).doubleValue (), toAppendTo, pos);
70 } else {
71 throw  new IllegalArgumentException ("Cannot format given Object as a Number");
72 }}, "~O,StringBuffer,java.text.FieldPosition");
73 Clazz.defineMethod (c$, "format", 
74 function (number, result, fieldPosition) {
75 fieldPosition.setBeginIndex (0);
76 fieldPosition.setEndIndex (0);
77 var isInt = (number == Clazz.doubleToInt (number) && Math.abs (number) < 2147483647);
78 if (isInt) return this.formatLong (Clazz.doubleToInt (number), result, fieldPosition.getFieldDelegate ());
79  else return this.formatDouble (number, result, fieldPosition.getFieldDelegate ());
80 }, "~N,StringBuffer,java.text.FieldPosition");
81 Clazz.defineMethod (c$, "formatDouble", 
82  function (number, result, delegate) {
83 if (Double.isNaN (number) || (Double.isInfinite (number) && this.multiplier == 0)) {
84 var iFieldStart = result.length ();
85 result.append (this.symbols.getNaN ());
86 delegate.formatted (0, java.text.NumberFormat.Field.INTEGER, java.text.NumberFormat.Field.INTEGER, iFieldStart, result.length (), result);
87 return result;
88 }var isNegative =  new Boolean (((number < 0.0) || (number == 0.0 && 1 / number < 0.0)) ^ (this.multiplier < 0)).valueOf ();
89 if (this.multiplier != 1) {
90 number *= this.multiplier;
91 }if (Double.isInfinite (number)) {
92 if (isNegative) {
93 this.append (result, this.negativePrefix, delegate, this.getNegativePrefixFieldPositions (), java.text.NumberFormat.Field.SIGN);
94 } else {
95 this.append (result, this.positivePrefix, delegate, this.getPositivePrefixFieldPositions (), java.text.NumberFormat.Field.SIGN);
96 }var iFieldStart = result.length ();
97 result.append (this.symbols.getInfinity ());
98 delegate.formatted (0, java.text.NumberFormat.Field.INTEGER, java.text.NumberFormat.Field.INTEGER, iFieldStart, result.length (), result);
99 if (isNegative) {
100 this.append (result, this.negativeSuffix, delegate, this.getNegativeSuffixFieldPositions (), java.text.NumberFormat.Field.SIGN);
101 } else {
102 this.append (result, this.positiveSuffix, delegate, this.getPositiveSuffixFieldPositions (), java.text.NumberFormat.Field.SIGN);
103 }return result;
104 }if (isNegative) {
105 number = -number;
106 }{
107 var maxIntDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumIntegerDigits", []);
108 var minIntDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumIntegerDigits", []);
109 var maxFraDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumFractionDigits", []);
110 var minFraDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumFractionDigits", []);
111 this.digitList.set (isNegative, number, this.useExponentialNotation ? maxIntDigits + maxFraDigits : maxFraDigits, !this.useExponentialNotation);
112 return this.subformat (result, delegate, isNegative, false, maxIntDigits, minIntDigits, maxFraDigits, minFraDigits);
113 }}, "~N,StringBuffer,java.text.Format.FieldDelegate");
114 Clazz.defineMethod (c$, "formatLong", 
115  function (number, result, delegate) {
116 var isNegative = (number < 0);
117 if (isNegative) {
118 number = -number;
119 }if (number < 0) {
120 } else if (this.multiplier != 1 && this.multiplier != 0) {
121 var cutoff = Clazz.doubleToInt (9223372036854775807 / this.multiplier);
122 if (cutoff < 0) {
123 cutoff = -cutoff;
124 }}number *= this.multiplier;
125 if (number == 0) {
126 isNegative = false;
127 } else {
128 if (this.multiplier < 0) {
129 number = -number;
130 isNegative = !isNegative;
131 }}{
132 var maxIntDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumIntegerDigits", []);
133 var minIntDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumIntegerDigits", []);
134 var maxFraDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMaximumFractionDigits", []);
135 var minFraDigits = Clazz.superCall (this, java.text.DecimalFormat, "getMinimumFractionDigits", []);
136 this.digitList.setLong (isNegative, number, this.useExponentialNotation ? maxIntDigits + maxFraDigits : 0);
137 return this.subformat (result, delegate, isNegative, true, maxIntDigits, minIntDigits, maxFraDigits, minFraDigits);
138 }}, "~N,StringBuffer,java.text.Format.FieldDelegate");
139 Clazz.overrideMethod (c$, "formatToCharacterIterator", 
140 function (obj) {
141 var delegate =  new java.text.CharacterIteratorFieldDelegate ();
142 var sb =  new StringBuffer ();
143 if (Clazz.instanceOf (obj, Double) || Clazz.instanceOf (obj, Float)) {
144 this.formatDouble ((obj).doubleValue (), sb, delegate);
145 } else if (Clazz.instanceOf (obj, Long) || Clazz.instanceOf (obj, Integer) || Clazz.instanceOf (obj, Short) || Clazz.instanceOf (obj, Byte)) {
146 this.formatLong ((obj).longValue (), sb, delegate);
147 } else if (obj == null) {
148 throw  new NullPointerException ("formatToCharacterIterator must be passed non-null object");
149 } else {
150 throw  new IllegalArgumentException ("Cannot format given Object as a Number");
151 }return delegate.getIterator (sb.toString ());
152 }, "~O");
153 Clazz.defineMethod (c$, "subformat", 
154  function (result, delegate, isNegative, isInteger, maxIntDigits, minIntDigits, maxFraDigits, minFraDigits) {
155 var zero = this.symbols.getZeroDigit ();
156 var zeroDelta = zero.charCodeAt (0) - 48;
157 var grouping = this.symbols.getGroupingSeparator ();
158 var decimal = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator () : this.symbols.getDecimalSeparator ();
159 if (this.digitList.isZero ()) {
160 this.digitList.decimalAt = 0;
161 }if (isNegative) {
162 this.append (result, this.negativePrefix, delegate, this.getNegativePrefixFieldPositions (), java.text.NumberFormat.Field.SIGN);
163 } else {
164 this.append (result, this.positivePrefix, delegate, this.getPositivePrefixFieldPositions (), java.text.NumberFormat.Field.SIGN);
165 }if (this.useExponentialNotation) {
166 var iFieldStart = result.length ();
167 var iFieldEnd = -1;
168 var fFieldStart = -1;
169 var exponent = this.digitList.decimalAt;
170 var repeat = maxIntDigits;
171 var minimumIntegerDigits = minIntDigits;
172 if (repeat > 1 && repeat > minIntDigits) {
173 if (exponent >= 1) {
174 exponent = (Clazz.doubleToInt ((exponent - 1) / repeat)) * repeat;
175 } else {
176 exponent = (Clazz.doubleToInt ((exponent - repeat) / repeat)) * repeat;
177 }minimumIntegerDigits = 1;
178 } else {
179 exponent -= minimumIntegerDigits;
180 }var minimumDigits = minIntDigits + minFraDigits;
181 if (minimumDigits < 0) {
182 minimumDigits = 2147483647;
183 }var integerDigits = this.digitList.isZero () ? minimumIntegerDigits : this.digitList.decimalAt - exponent;
184 if (minimumDigits < integerDigits) {
185 minimumDigits = integerDigits;
186 }var totalDigits = this.digitList.count;
187 if (minimumDigits > totalDigits) {
188 totalDigits = minimumDigits;
189 }var addedDecimalSeparator = false;
190 for (var i = 0; i < totalDigits; ++i) {
191 if (i == integerDigits) {
192 iFieldEnd = result.length ();
193 result.append (decimal);
194 addedDecimalSeparator = true;
195 fFieldStart = result.length ();
196 }result.append ((i < this.digitList.count) ? String.fromCharCode ((this.digitList.digits[i]).charCodeAt (0) + zeroDelta) : zero);
197 }
198 if (this.decimalSeparatorAlwaysShown && totalDigits == integerDigits) {
199 iFieldEnd = result.length ();
200 result.append (decimal);
201 addedDecimalSeparator = true;
202 fFieldStart = result.length ();
203 }if (iFieldEnd == -1) {
204 iFieldEnd = result.length ();
205 }delegate.formatted (0, java.text.NumberFormat.Field.INTEGER, java.text.NumberFormat.Field.INTEGER, iFieldStart, iFieldEnd, result);
206 if (addedDecimalSeparator) {
207 delegate.formatted (java.text.NumberFormat.Field.DECIMAL_SEPARATOR, java.text.NumberFormat.Field.DECIMAL_SEPARATOR, iFieldEnd, fFieldStart, result);
208 }if (fFieldStart == -1) {
209 fFieldStart = result.length ();
210 }delegate.formatted (1, java.text.NumberFormat.Field.FRACTION, java.text.NumberFormat.Field.FRACTION, fFieldStart, result.length (), result);
211 var fieldStart = result.length ();
212 result.append (this.symbols.getExponentSeparator ());
213 delegate.formatted (java.text.NumberFormat.Field.EXPONENT_SYMBOL, java.text.NumberFormat.Field.EXPONENT_SYMBOL, fieldStart, result.length (), result);
214 if (this.digitList.isZero ()) {
215 exponent = 0;
216 }var negativeExponent = exponent < 0;
217 if (negativeExponent) {
218 exponent = -exponent;
219 fieldStart = result.length ();
220 result.append (this.symbols.getMinusSign ());
221 delegate.formatted (java.text.NumberFormat.Field.EXPONENT_SIGN, java.text.NumberFormat.Field.EXPONENT_SIGN, fieldStart, result.length (), result);
222 }this.digitList.setExp (negativeExponent, exponent);
223 var eFieldStart = result.length ();
224 for (var i = this.digitList.decimalAt; i < this.minExponentDigits; ++i) {
225 result.append (zero);
226 }
227 for (var i = 0; i < this.digitList.decimalAt; ++i) {
228 result.append ((i < this.digitList.count) ? String.fromCharCode ((this.digitList.digits[i]).charCodeAt (0) + zeroDelta) : zero);
229 }
230 delegate.formatted (java.text.NumberFormat.Field.EXPONENT, java.text.NumberFormat.Field.EXPONENT, eFieldStart, result.length (), result);
231 } else {
232 var iFieldStart = result.length ();
233 var count = minIntDigits;
234 var digitIndex = 0;
235 if (this.digitList.decimalAt > 0 && count < this.digitList.decimalAt) {
236 count = this.digitList.decimalAt;
237 }if (count > maxIntDigits) {
238 count = maxIntDigits;
239 digitIndex = this.digitList.decimalAt - count;
240 }var sizeBeforeIntegerPart = result.length ();
241 for (var i = count - 1; i >= 0; --i) {
242 if (i < this.digitList.decimalAt && digitIndex < this.digitList.count) {
243 result.append (String.fromCharCode ((this.digitList.digits[digitIndex++]).charCodeAt (0) + zeroDelta));
244 } else {
245 result.append (zero);
246 }if (this.isGroupingUsed () && i > 0 && (this.groupingSize != 0) && (i % this.groupingSize == 0)) {
247 var gStart = result.length ();
248 result.append (grouping);
249 delegate.formatted (java.text.NumberFormat.Field.GROUPING_SEPARATOR, java.text.NumberFormat.Field.GROUPING_SEPARATOR, gStart, result.length (), result);
250 }}
251 var fractionPresent = (minFraDigits > 0) || (!isInteger && digitIndex < this.digitList.count);
252 if (!fractionPresent && result.length () == sizeBeforeIntegerPart) {
253 result.append (zero);
254 }delegate.formatted (0, java.text.NumberFormat.Field.INTEGER, java.text.NumberFormat.Field.INTEGER, iFieldStart, result.length (), result);
255 var sStart = result.length ();
256 if (this.decimalSeparatorAlwaysShown || fractionPresent) {
257 result.append (decimal);
258 }if (sStart != result.length ()) {
259 delegate.formatted (java.text.NumberFormat.Field.DECIMAL_SEPARATOR, java.text.NumberFormat.Field.DECIMAL_SEPARATOR, sStart, result.length (), result);
260 }var fFieldStart = result.length ();
261 for (var i = 0; i < maxFraDigits; ++i) {
262 if (i >= minFraDigits && (isInteger || digitIndex >= this.digitList.count)) {
263 break;
264 }if (-1 - i > (this.digitList.decimalAt - 1)) {
265 result.append (zero);
266 continue;
267 }if (!isInteger && digitIndex < this.digitList.count) {
268 result.append (String.fromCharCode ((this.digitList.digits[digitIndex++]).charCodeAt (0) + zeroDelta));
269 } else {
270 result.append (zero);
271 }}
272 delegate.formatted (1, java.text.NumberFormat.Field.FRACTION, java.text.NumberFormat.Field.FRACTION, fFieldStart, result.length (), result);
273 }if (isNegative) {
274 this.append (result, this.negativeSuffix, delegate, this.getNegativeSuffixFieldPositions (), java.text.NumberFormat.Field.SIGN);
275 } else {
276 this.append (result, this.positiveSuffix, delegate, this.getPositiveSuffixFieldPositions (), java.text.NumberFormat.Field.SIGN);
277 }return result;
278 }, "StringBuffer,java.text.Format.FieldDelegate,~B,~B,~N,~N,~N,~N");
279 Clazz.defineMethod (c$, "append", 
280  function (result, string, delegate, positions, signAttribute) {
281 var start = result.length ();
282 if (string.length > 0) {
283 result.append (string);
284 for (var counter = 0, max = positions.length; counter < max; counter++) {
285 var fp = positions[counter];
286 var attribute = fp.getFieldAttribute ();
287 if (attribute === java.text.NumberFormat.Field.SIGN) {
288 attribute = signAttribute;
289 }delegate.formatted (attribute, attribute, start + fp.getBeginIndex (), start + fp.getEndIndex (), result);
290 }
291 }}, "StringBuffer,~S,java.text.Format.FieldDelegate,~A,java.text.Format.Field");
292 Clazz.defineMethod (c$, "parse", 
293 function (text, pos) {
294 if (text.regionMatches (pos.index, this.symbols.getNaN (), 0, this.symbols.getNaN ().length)) {
295 pos.index = pos.index + this.symbols.getNaN ().length;
296 return  new Double (NaN);
297 }var status =  Clazz.newBooleanArray (2, false);
298 if (!this.subparse (text, pos, this.positivePrefix, this.negativePrefix, this.digitList, false, status)) {
299 return null;
300 }if (status[0]) {
301 if (status[1] == (this.multiplier >= 0)) {
302 return  new Double (Infinity);
303 } else {
304 return  new Double (-Infinity);
305 }}if (this.multiplier == 0) {
306 if (this.digitList.isZero ()) {
307 return  new Double (NaN);
308 } else if (status[1]) {
309 return  new Double (Infinity);
310 } else {
311 return  new Double (-Infinity);
312 }}var gotDouble = true;
313 var gotLongMinimum = false;
314 var doubleResult = 0.0;
315 var longResult = 0;
316 if (this.digitList.fitsIntoLong (status[1], this.isParseIntegerOnly ())) {
317 gotDouble = false;
318 longResult = this.digitList.getLong ();
319 if (longResult < 0) {
320 gotLongMinimum = true;
321 }} else {
322 doubleResult = this.digitList.getDouble ();
323 }if (this.multiplier != 1) {
324 if (gotDouble) {
325 doubleResult /= this.multiplier;
326 } else {
327 if (longResult % this.multiplier == 0) {
328 longResult = Clazz.doubleToInt (longResult / this.multiplier);
329 } else {
330 doubleResult = (longResult) / this.multiplier;
331 gotDouble = true;
332 }}}if (!status[1] && !gotLongMinimum) {
333 doubleResult = -doubleResult;
334 longResult = -longResult;
335 }if (this.multiplier != 1 && gotDouble) {
336 longResult = Clazz.doubleToLong (doubleResult);
337 gotDouble = ((doubleResult != longResult) || (doubleResult == 0.0 && 1 / doubleResult < 0.0)) && !this.isParseIntegerOnly ();
338 }return gotDouble ?  new Double (doubleResult) :  new Long (longResult);
339 }, "~S,java.text.ParsePosition");
340 Clazz.defineMethod (c$, "subparse", 
341  function (text, parsePosition, positivePrefix, negativePrefix, digits, isExponent, status) {
342 var position = parsePosition.index;
343 var oldStart = parsePosition.index;
344 var backup;
345 var gotPositive;
346 var gotNegative;
347 gotPositive = text.regionMatches (position, positivePrefix, 0, positivePrefix.length);
348 gotNegative = text.regionMatches (position, negativePrefix, 0, negativePrefix.length);
349 if (gotPositive && gotNegative) {
350 if (positivePrefix.length > negativePrefix.length) {
351 gotNegative = false;
352 } else if (positivePrefix.length < negativePrefix.length) {
353 gotPositive = false;
354 }}if (gotPositive) {
355 position += positivePrefix.length;
356 } else if (gotNegative) {
357 position += negativePrefix.length;
358 } else {
359 parsePosition.errorIndex = position;
360 return false;
361 }status[0] = false;
362 if (!isExponent && text.regionMatches (position, this.symbols.getInfinity (), 0, this.symbols.getInfinity ().length)) {
363 position += this.symbols.getInfinity ().length;
364 status[0] = true;
365 } else {
366 digits.decimalAt = digits.count = 0;
367 var zero = this.symbols.getZeroDigit ();
368 var decimal = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator () : this.symbols.getDecimalSeparator ();
369 var grouping = this.symbols.getGroupingSeparator ();
370 var exponentString = this.symbols.getExponentSeparator ();
371 var sawDecimal = false;
372 var sawExponent = false;
373 var sawDigit = false;
374 var exponent = 0;
375 var digitCount = 0;
376 backup = -1;
377 for (; position < text.length; ++position) {
378 var ch = text.charAt (position);
379 var digit = ch.charCodeAt (0) - zero.charCodeAt (0);
380 if (digit < 0 || digit > 9) {
381 digit = Character.digit (ch, 10);
382 }if (digit == 0) {
383 backup = -1;
384 sawDigit = true;
385 if (digits.count == 0) {
386 if (!sawDecimal) {
387 continue;
388 }--digits.decimalAt;
389 } else {
390 ++digitCount;
391 digits.append (String.fromCharCode (digit + 48));
392 }} else if (digit > 0 && digit <= 9) {
393 sawDigit = true;
394 ++digitCount;
395 digits.append (String.fromCharCode (digit + 48));
396 backup = -1;
397 } else if (!isExponent && ch == decimal) {
398 if (this.isParseIntegerOnly () || sawDecimal) {
399 break;
400 }digits.decimalAt = digitCount;
401 sawDecimal = true;
402 } else if (!isExponent && ch == grouping && this.isGroupingUsed ()) {
403 if (sawDecimal) {
404 break;
405 }backup = position;
406 } else if (!isExponent && text.regionMatches (position, exponentString, 0, exponentString.length) && !sawExponent) {
407 var pos =  new java.text.ParsePosition (position + exponentString.length);
408 var stat =  Clazz.newBooleanArray (2, false);
409 var exponentDigits =  new java.text.DigitList ();
410 if (this.subparse (text, pos, "", Character.toString (this.symbols.getMinusSign ()), exponentDigits, true, stat) && exponentDigits.fitsIntoLong (stat[1], true)) {
411 position = pos.index;
412 exponent = exponentDigits.getLong ();
413 if (!stat[1]) {
414 exponent = -exponent;
415 }sawExponent = true;
416 }break;
417 } else {
418 break;
419 }}
420 if (backup != -1) {
421 position = backup;
422 }if (!sawDecimal) {
423 digits.decimalAt = digitCount;
424 }digits.decimalAt += exponent;
425 if (!sawDigit && digitCount == 0) {
426 parsePosition.index = oldStart;
427 parsePosition.errorIndex = oldStart;
428 return false;
429 }}if (!isExponent) {
430 if (gotPositive) {
431 gotPositive = text.regionMatches (position, this.positiveSuffix, 0, this.positiveSuffix.length);
432 }if (gotNegative) {
433 gotNegative = text.regionMatches (position, this.negativeSuffix, 0, this.negativeSuffix.length);
434 }if (gotPositive && gotNegative) {
435 if (this.positiveSuffix.length > this.negativeSuffix.length) {
436 gotNegative = false;
437 } else if (this.positiveSuffix.length < this.negativeSuffix.length) {
438 gotPositive = false;
439 }}if (gotPositive == gotNegative) {
440 parsePosition.errorIndex = position;
441 return false;
442 }parsePosition.index = position + (gotPositive ? this.positiveSuffix.length : this.negativeSuffix.length);
443 } else {
444 parsePosition.index = position;
445 }status[1] = gotPositive;
446 if (parsePosition.index == oldStart) {
447 parsePosition.errorIndex = position;
448 return false;
449 }return true;
450 }, "~S,java.text.ParsePosition,~S,~S,java.text.DigitList,~B,~A");
451 Clazz.defineMethod (c$, "getDecimalFormatSymbols", 
452 function () {
453 try {
454 return this.symbols.clone ();
455 } catch (foo) {
456 if (Clazz.exceptionOf (foo, Exception)) {
457 return null;
458 } else {
459 throw foo;
460 }
461 }
462 });
463 Clazz.defineMethod (c$, "setDecimalFormatSymbols", 
464 function (newSymbols) {
465 try {
466 this.symbols = newSymbols.clone ();
467 this.expandAffixes ();
468 } catch (foo) {
469 if (Clazz.exceptionOf (foo, Exception)) {
470 } else {
471 throw foo;
472 }
473 }
474 }, "java.text.DecimalFormatSymbols");
475 Clazz.defineMethod (c$, "getPositivePrefix", 
476 function () {
477 return this.positivePrefix;
478 });
479 Clazz.defineMethod (c$, "setPositivePrefix", 
480 function (newValue) {
481 this.positivePrefix = newValue;
482 this.posPrefixPattern = null;
483 this.positivePrefixFieldPositions = null;
484 }, "~S");
485 Clazz.defineMethod (c$, "getPositivePrefixFieldPositions", 
486  function () {
487 if (this.positivePrefixFieldPositions == null) {
488 if (this.posPrefixPattern != null) {
489 this.positivePrefixFieldPositions = this.expandAffix (this.posPrefixPattern);
490 } else {
491 this.positivePrefixFieldPositions = java.text.DecimalFormat.EmptyFieldPositionArray;
492 }}return this.positivePrefixFieldPositions;
493 });
494 Clazz.defineMethod (c$, "getNegativePrefix", 
495 function () {
496 return this.negativePrefix;
497 });
498 Clazz.defineMethod (c$, "setNegativePrefix", 
499 function (newValue) {
500 this.negativePrefix = newValue;
501 this.negPrefixPattern = null;
502 }, "~S");
503 Clazz.defineMethod (c$, "getNegativePrefixFieldPositions", 
504  function () {
505 if (this.negativePrefixFieldPositions == null) {
506 if (this.negPrefixPattern != null) {
507 this.negativePrefixFieldPositions = this.expandAffix (this.negPrefixPattern);
508 } else {
509 this.negativePrefixFieldPositions = java.text.DecimalFormat.EmptyFieldPositionArray;
510 }}return this.negativePrefixFieldPositions;
511 });
512 Clazz.defineMethod (c$, "getPositiveSuffix", 
513 function () {
514 return this.positiveSuffix;
515 });
516 Clazz.defineMethod (c$, "setPositiveSuffix", 
517 function (newValue) {
518 this.positiveSuffix = newValue;
519 this.posSuffixPattern = null;
520 }, "~S");
521 Clazz.defineMethod (c$, "getPositiveSuffixFieldPositions", 
522  function () {
523 if (this.positiveSuffixFieldPositions == null) {
524 if (this.posSuffixPattern != null) {
525 this.positiveSuffixFieldPositions = this.expandAffix (this.posSuffixPattern);
526 } else {
527 this.positiveSuffixFieldPositions = java.text.DecimalFormat.EmptyFieldPositionArray;
528 }}return this.positiveSuffixFieldPositions;
529 });
530 Clazz.defineMethod (c$, "getNegativeSuffix", 
531 function () {
532 return this.negativeSuffix;
533 });
534 Clazz.defineMethod (c$, "setNegativeSuffix", 
535 function (newValue) {
536 this.negativeSuffix = newValue;
537 this.negSuffixPattern = null;
538 }, "~S");
539 Clazz.defineMethod (c$, "getNegativeSuffixFieldPositions", 
540  function () {
541 if (this.negativeSuffixFieldPositions == null) {
542 if (this.negSuffixPattern != null) {
543 this.negativeSuffixFieldPositions = this.expandAffix (this.negSuffixPattern);
544 } else {
545 this.negativeSuffixFieldPositions = java.text.DecimalFormat.EmptyFieldPositionArray;
546 }}return this.negativeSuffixFieldPositions;
547 });
548 Clazz.defineMethod (c$, "getMultiplier", 
549 function () {
550 return this.multiplier;
551 });
552 Clazz.defineMethod (c$, "setMultiplier", 
553 function (newValue) {
554 this.multiplier = newValue;
555 }, "~N");
556 Clazz.defineMethod (c$, "getGroupingSize", 
557 function () {
558 return this.groupingSize;
559 });
560 Clazz.defineMethod (c$, "setGroupingSize", 
561 function (newValue) {
562 this.groupingSize = newValue;
563 }, "~N");
564 Clazz.defineMethod (c$, "isDecimalSeparatorAlwaysShown", 
565 function () {
566 return this.decimalSeparatorAlwaysShown;
567 });
568 Clazz.defineMethod (c$, "setDecimalSeparatorAlwaysShown", 
569 function (newValue) {
570 this.decimalSeparatorAlwaysShown = newValue;
571 }, "~B");
572 Clazz.defineMethod (c$, "isParseBigDecimal", 
573 function () {
574 return this.parseBigDecimal;
575 });
576 Clazz.defineMethod (c$, "setParseBigDecimal", 
577 function (newValue) {
578 this.parseBigDecimal = newValue;
579 }, "~B");
580 Clazz.defineMethod (c$, "clone", 
581 function () {
582 try {
583 var other = Clazz.superCall (this, java.text.DecimalFormat, "clone", []);
584 other.symbols = this.symbols.clone ();
585 other.digitList = this.digitList.clone ();
586 return other;
587 } catch (e) {
588 if (Clazz.exceptionOf (e, Exception)) {
589 throw  new InternalError ();
590 } else {
591 throw e;
592 }
593 }
594 });
595 Clazz.defineMethod (c$, "equals", 
596 function (obj) {
597 if (obj == null) return false;
598 if (!Clazz.superCall (this, java.text.DecimalFormat, "equals", [obj])) return false;
599 var other = obj;
600 return ((this.posPrefixPattern === other.posPrefixPattern && this.positivePrefix.equals (other.positivePrefix)) || (this.posPrefixPattern != null && this.posPrefixPattern.equals (other.posPrefixPattern))) && ((this.posSuffixPattern === other.posSuffixPattern && this.positiveSuffix.equals (other.positiveSuffix)) || (this.posSuffixPattern != null && this.posSuffixPattern.equals (other.posSuffixPattern))) && ((this.negPrefixPattern === other.negPrefixPattern && this.negativePrefix.equals (other.negativePrefix)) || (this.negPrefixPattern != null && this.negPrefixPattern.equals (other.negPrefixPattern))) && ((this.negSuffixPattern === other.negSuffixPattern && this.negativeSuffix.equals (other.negativeSuffix)) || (this.negSuffixPattern != null && this.negSuffixPattern.equals (other.negSuffixPattern))) && this.multiplier == other.multiplier && this.groupingSize == other.groupingSize && this.decimalSeparatorAlwaysShown == other.decimalSeparatorAlwaysShown && this.parseBigDecimal == other.parseBigDecimal && this.useExponentialNotation == other.useExponentialNotation && (!this.useExponentialNotation || this.minExponentDigits == other.minExponentDigits) && this.$maximumIntegerDigits == other.$maximumIntegerDigits && this.$minimumIntegerDigits == other.$minimumIntegerDigits && this.$maximumFractionDigits == other.$maximumFractionDigits && this.$minimumFractionDigits == other.$minimumFractionDigits && this.roundingMode === other.roundingMode && this.symbols.equals (other.symbols);
601 }, "~O");
602 Clazz.defineMethod (c$, "hashCode", 
603 function () {
604 return Clazz.superCall (this, java.text.DecimalFormat, "hashCode", []) * 37 + this.positivePrefix.hashCode ();
605 });
606 Clazz.defineMethod (c$, "toPattern", 
607 function () {
608 return this.toPattern (false);
609 });
610 Clazz.defineMethod (c$, "toLocalizedPattern", 
611 function () {
612 return this.toPattern (true);
613 });
614 Clazz.defineMethod (c$, "expandAffixes", 
615  function () {
616 var buffer =  new StringBuffer ();
617 if (this.posPrefixPattern != null) {
618 this.positivePrefix = this.expandAffix (this.posPrefixPattern, buffer);
619 this.positivePrefixFieldPositions = null;
620 }if (this.posSuffixPattern != null) {
621 this.positiveSuffix = this.expandAffix (this.posSuffixPattern, buffer);
622 this.positiveSuffixFieldPositions = null;
623 }if (this.negPrefixPattern != null) {
624 this.negativePrefix = this.expandAffix (this.negPrefixPattern, buffer);
625 this.negativePrefixFieldPositions = null;
626 }if (this.negSuffixPattern != null) {
627 this.negativeSuffix = this.expandAffix (this.negSuffixPattern, buffer);
628 this.negativeSuffixFieldPositions = null;
629 }});
630 Clazz.defineMethod (c$, "expandAffix", 
631  function (pattern, buffer) {
632 buffer.setLength (0);
633 for (var i = 0; i < pattern.length; ) {
634 var c = pattern.charAt (i++);
635 if (c == '\'') {
636 c = pattern.charAt (i++);
637 switch (c) {
638 case '\u00a4':
639 if (i < pattern.length && pattern.charAt (i) == '\u00a4') {
640 ++i;
641 buffer.append (this.symbols.getInternationalCurrencySymbol ());
642 } else {
643 buffer.append (this.symbols.getCurrencySymbol ());
644 }continue;
645 case '%':
646 c = this.symbols.getPercent ();
647 break;
648 case '\u2030':
649 c = this.symbols.getPerMill ();
650 break;
651 case '-':
652 c = this.symbols.getMinusSign ();
653 break;
654 }
655 }buffer.append (c);
656 }
657 return buffer.toString ();
658 }, "~S,StringBuffer");
659 Clazz.defineMethod (c$, "expandAffix", 
660  function (pattern) {
661 var positions = null;
662 var stringIndex = 0;
663 for (var i = 0; i < pattern.length; ) {
664 var c = pattern.charAt (i++);
665 if (c == '\'') {
666 var field = -1;
667 var fieldID = null;
668 c = pattern.charAt (i++);
669 switch (c) {
670 case '\u00a4':
671 var string;
672 if (i < pattern.length && pattern.charAt (i) == '\u00a4') {
673 ++i;
674 string = this.symbols.getInternationalCurrencySymbol ();
675 } else {
676 string = this.symbols.getCurrencySymbol ();
677 }if (string.length > 0) {
678 if (positions == null) {
679 positions =  new java.util.ArrayList (2);
680 }var fp =  new java.text.FieldPosition (java.text.NumberFormat.Field.CURRENCY);
681 fp.setBeginIndex (stringIndex);
682 fp.setEndIndex (stringIndex + string.length);
683 positions.add (fp);
684 stringIndex += string.length;
685 }continue;
686 case '%':
687 c = this.symbols.getPercent ();
688 field = -1;
689 fieldID = java.text.NumberFormat.Field.PERCENT;
690 break;
691 case '\u2030':
692 c = this.symbols.getPerMill ();
693 field = -1;
694 fieldID = java.text.NumberFormat.Field.PERMILLE;
695 break;
696 case '-':
697 c = this.symbols.getMinusSign ();
698 field = -1;
699 fieldID = java.text.NumberFormat.Field.SIGN;
700 break;
701 }
702 if (fieldID != null) {
703 if (positions == null) {
704 positions =  new java.util.ArrayList (2);
705 }var fp =  new java.text.FieldPosition (fieldID, field);
706 fp.setBeginIndex (stringIndex);
707 fp.setEndIndex (stringIndex + 1);
708 positions.add (fp);
709 }}stringIndex++;
710 }
711 if (positions != null) {
712 return positions.toArray (java.text.DecimalFormat.EmptyFieldPositionArray);
713 }return java.text.DecimalFormat.EmptyFieldPositionArray;
714 }, "~S");
715 Clazz.defineMethod (c$, "appendAffix", 
716  function (buffer, affixPattern, expAffix, localized) {
717 if (affixPattern == null) {
718 this.appendAffix (buffer, expAffix, localized);
719 } else {
720 var i;
721 for (var pos = 0; pos < affixPattern.length; pos = i) {
722 i = affixPattern.indexOf ('\'', pos);
723 if (i < 0) {
724 this.appendAffix (buffer, affixPattern.substring (pos), localized);
725 break;
726 }if (i > pos) {
727 this.appendAffix (buffer, affixPattern.substring (pos, i), localized);
728 }var c = affixPattern.charAt (++i);
729 ++i;
730 if (c == '\'') {
731 buffer.append (c);
732 } else if (c == '\u00a4' && i < affixPattern.length && affixPattern.charAt (i) == '\u00a4') {
733 ++i;
734 buffer.append (c);
735 } else if (localized) {
736 switch (c) {
737 case '%':
738 c = this.symbols.getPercent ();
739 break;
740 case '\u2030':
741 c = this.symbols.getPerMill ();
742 break;
743 case '-':
744 c = this.symbols.getMinusSign ();
745 break;
746 }
747 }buffer.append (c);
748 }
749 }}, "StringBuffer,~S,~S,~B");
750 Clazz.defineMethod (c$, "appendAffix", 
751  function (buffer, affix, localized) {
752 var needQuote;
753 if (localized) {
754 needQuote = affix.indexOf (this.symbols.getZeroDigit ()) >= 0 || affix.indexOf (this.symbols.getGroupingSeparator ()) >= 0 || affix.indexOf (this.symbols.getDecimalSeparator ()) >= 0 || affix.indexOf (this.symbols.getPercent ()) >= 0 || affix.indexOf (this.symbols.getPerMill ()) >= 0 || affix.indexOf (this.symbols.getDigit ()) >= 0 || affix.indexOf (this.symbols.getPatternSeparator ()) >= 0 || affix.indexOf (this.symbols.getMinusSign ()) >= 0 || affix.indexOf ('\u00a4') >= 0;
755 } else {
756 needQuote = affix.indexOf ('0') >= 0 || affix.indexOf (',') >= 0 || affix.indexOf ('.') >= 0 || affix.indexOf ('%') >= 0 || affix.indexOf ('\u2030') >= 0 || affix.indexOf ('#') >= 0 || affix.indexOf (';') >= 0 || affix.indexOf ('-') >= 0 || affix.indexOf ('\u00a4') >= 0;
757 }if (needQuote) buffer.append ('\'');
758 if (affix.indexOf ('\'') < 0) buffer.append (affix);
759  else {
760 for (var j = 0; j < affix.length; ++j) {
761 var c = affix.charAt (j);
762 buffer.append (c);
763 if (c == '\'') buffer.append (c);
764 }
765 }if (needQuote) buffer.append ('\'');
766 }, "StringBuffer,~S,~B");
767 Clazz.defineMethod (c$, "toPattern", 
768  function (localized) {
769 var result =  new StringBuffer ();
770 for (var j = 1; j >= 0; --j) {
771 if (j == 1) this.appendAffix (result, this.posPrefixPattern, this.positivePrefix, localized);
772  else this.appendAffix (result, this.negPrefixPattern, this.negativePrefix, localized);
773 var i;
774 var digitCount = this.useExponentialNotation ? this.getMaximumIntegerDigits () : Math.max (this.groupingSize, this.getMinimumIntegerDigits ()) + 1;
775 for (i = digitCount; i > 0; --i) {
776 if (i != digitCount && this.isGroupingUsed () && this.groupingSize != 0 && i % this.groupingSize == 0) {
777 result.append (localized ? this.symbols.getGroupingSeparator () : ',');
778 }result.append (i <= this.getMinimumIntegerDigits () ? (localized ? this.symbols.getZeroDigit () : '0') : (localized ? this.symbols.getDigit () : '#'));
779 }
780 if (this.getMaximumFractionDigits () > 0 || this.decimalSeparatorAlwaysShown) result.append (localized ? this.symbols.getDecimalSeparator () : '.');
781 for (i = 0; i < this.getMaximumFractionDigits (); ++i) {
782 if (i < this.getMinimumFractionDigits ()) {
783 result.append (localized ? this.symbols.getZeroDigit () : '0');
784 } else {
785 result.append (localized ? this.symbols.getDigit () : '#');
786 }}
787 if (this.useExponentialNotation) {
788 result.append (localized ? this.symbols.getExponentSeparator () : "E");
789 for (i = 0; i < this.minExponentDigits; ++i) result.append (localized ? this.symbols.getZeroDigit () : '0');
790
791 }if (j == 1) {
792 this.appendAffix (result, this.posSuffixPattern, this.positiveSuffix, localized);
793 if ((this.negSuffixPattern === this.posSuffixPattern && this.negativeSuffix.equals (this.positiveSuffix)) || (this.negSuffixPattern != null && this.negSuffixPattern.equals (this.posSuffixPattern))) {
794 if ((this.negPrefixPattern != null && this.posPrefixPattern != null && this.negPrefixPattern.equals ("'-" + this.posPrefixPattern)) || (this.negPrefixPattern === this.posPrefixPattern && this.negativePrefix.equals (this.symbols.getMinusSign () + this.positivePrefix))) break;
795 }result.append (localized ? this.symbols.getPatternSeparator () : ';');
796 } else this.appendAffix (result, this.negSuffixPattern, this.negativeSuffix, localized);
797 }
798 return result.toString ();
799 }, "~B");
800 Clazz.defineMethod (c$, "applyPattern", 
801 function (pattern) {
802 this.applyPattern (pattern, false);
803 }, "~S");
804 Clazz.defineMethod (c$, "applyLocalizedPattern", 
805 function (pattern) {
806 this.applyPattern (pattern, true);
807 }, "~S");
808 Clazz.defineMethod (c$, "applyPattern", 
809  function (pattern, localized) {
810 var zeroDigit = '0';
811 var groupingSeparator = ',';
812 var decimalSeparator = '.';
813 var percent = '%';
814 var perMill = '\u2030';
815 var digit = '#';
816 var separator = ';';
817 var exponent = "E";
818 var minus = '-';
819 if (localized) {
820 zeroDigit = this.symbols.getZeroDigit ();
821 groupingSeparator = this.symbols.getGroupingSeparator ();
822 decimalSeparator = this.symbols.getDecimalSeparator ();
823 percent = this.symbols.getPercent ();
824 perMill = this.symbols.getPerMill ();
825 digit = this.symbols.getDigit ();
826 separator = this.symbols.getPatternSeparator ();
827 exponent = this.symbols.getExponentSeparator ();
828 minus = this.symbols.getMinusSign ();
829 }var gotNegative = false;
830 this.decimalSeparatorAlwaysShown = false;
831 this.isCurrencyFormat = false;
832 this.useExponentialNotation = false;
833 var phaseOneLength = 0;
834 var start = 0;
835 for (var j = 1; j >= 0 && start < pattern.length; --j) {
836 var inQuote = false;
837 var prefix =  new StringBuffer ();
838 var suffix =  new StringBuffer ();
839 var decimalPos = -1;
840 var multiplier = 1;
841 var digitLeftCount = 0;
842 var zeroDigitCount = 0;
843 var digitRightCount = 0;
844 var groupingCount = -1;
845 var phase = 0;
846 var affix = prefix;
847 for (var pos = start; pos < pattern.length; ++pos) {
848 var ch = pattern.charAt (pos);
849 switch (phase) {
850 case 0:
851 case 2:
852 if (inQuote) {
853 if (ch == '\'') {
854 if ((pos + 1) < pattern.length && pattern.charAt (pos + 1) == '\'') {
855 ++pos;
856 affix.append ("''");
857 } else {
858 inQuote = false;
859 }continue;
860 }} else {
861 if (ch == digit || ch == zeroDigit || ch == groupingSeparator || ch == decimalSeparator) {
862 phase = 1;
863 --pos;
864 continue;
865 } else if (ch == '\u00a4') {
866 var doubled = (pos + 1) < pattern.length && pattern.charAt (pos + 1) == '\u00a4';
867 if (doubled) {
868 ++pos;
869 }this.isCurrencyFormat = true;
870 affix.append (doubled ? "'\u00A4\u00A4" : "'\u00A4");
871 continue;
872 } else if (ch == '\'') {
873 if (ch == '\'') {
874 if ((pos + 1) < pattern.length && pattern.charAt (pos + 1) == '\'') {
875 ++pos;
876 affix.append ("''");
877 } else {
878 inQuote = true;
879 }continue;
880 }} else if (ch == separator) {
881 if (phase == 0 || j == 0) {
882 throw  new IllegalArgumentException ("Unquoted special character '" + ch + "' in pattern \"" + pattern + '"');
883 }start = pos + 1;
884 pos = pattern.length;
885 continue;
886 } else if (ch == percent) {
887 if (multiplier != 1) {
888 throw  new IllegalArgumentException ("Too many percent/per mille characters in pattern \"" + pattern + '"');
889 }multiplier = 100;
890 affix.append ("'%");
891 continue;
892 } else if (ch == perMill) {
893 if (multiplier != 1) {
894 throw  new IllegalArgumentException ("Too many percent/per mille characters in pattern \"" + pattern + '"');
895 }multiplier = 1000;
896 affix.append ("'\u2030");
897 continue;
898 } else if (ch == minus) {
899 affix.append ("'-");
900 continue;
901 }}affix.append (ch);
902 break;
903 case 1:
904 if (j == 1) {
905 ++phaseOneLength;
906 } else {
907 if (--phaseOneLength == 0) {
908 phase = 2;
909 affix = suffix;
910 }continue;
911 }if (ch == digit) {
912 if (zeroDigitCount > 0) {
913 ++digitRightCount;
914 } else {
915 ++digitLeftCount;
916 }if (groupingCount >= 0 && decimalPos < 0) {
917 ++groupingCount;
918 }} else if (ch == zeroDigit) {
919 if (digitRightCount > 0) {
920 throw  new IllegalArgumentException ("Unexpected '0' in pattern \"" + pattern + '"');
921 }++zeroDigitCount;
922 if (groupingCount >= 0 && decimalPos < 0) {
923 ++groupingCount;
924 }} else if (ch == groupingSeparator) {
925 groupingCount = 0;
926 } else if (ch == decimalSeparator) {
927 if (decimalPos >= 0) {
928 throw  new IllegalArgumentException ("Multiple decimal separators in pattern \"" + pattern + '"');
929 }decimalPos = digitLeftCount + zeroDigitCount + digitRightCount;
930 } else if (pattern.regionMatches (pos, exponent, 0, exponent.length)) {
931 if (this.useExponentialNotation) {
932 throw  new IllegalArgumentException ("Multiple exponential symbols in pattern \"" + pattern + '"');
933 }this.useExponentialNotation = true;
934 this.minExponentDigits = 0;
935 pos = pos + exponent.length;
936 while (pos < pattern.length && pattern.charAt (pos) == zeroDigit) {
937 ++this.minExponentDigits;
938 ++phaseOneLength;
939 ++pos;
940 }
941 if ((digitLeftCount + zeroDigitCount) < 1 || this.minExponentDigits < 1) {
942 throw  new IllegalArgumentException ("Malformed exponential pattern \"" + pattern + '"');
943 }phase = 2;
944 affix = suffix;
945 --pos;
946 continue;
947 } else {
948 phase = 2;
949 affix = suffix;
950 --pos;
951 --phaseOneLength;
952 continue;
953 }break;
954 }
955 }
956 if (zeroDigitCount == 0 && digitLeftCount > 0 && decimalPos >= 0) {
957 var n = decimalPos;
958 if (n == 0) {
959 ++n;
960 }digitRightCount = digitLeftCount - n;
961 digitLeftCount = n - 1;
962 zeroDigitCount = 1;
963 }if ((decimalPos < 0 && digitRightCount > 0) || (decimalPos >= 0 && (decimalPos < digitLeftCount || decimalPos > (digitLeftCount + zeroDigitCount))) || groupingCount == 0 || inQuote) {
964 throw  new IllegalArgumentException ("Malformed pattern \"" + pattern + '"');
965 }if (j == 1) {
966 this.posPrefixPattern = prefix.toString ();
967 this.posSuffixPattern = suffix.toString ();
968 this.negPrefixPattern = this.posPrefixPattern;
969 this.negSuffixPattern = this.posSuffixPattern;
970 var digitTotalCount = digitLeftCount + zeroDigitCount + digitRightCount;
971 var effectiveDecimalPos = decimalPos >= 0 ? decimalPos : digitTotalCount;
972 this.setMinimumIntegerDigits (effectiveDecimalPos - digitLeftCount);
973 this.setMaximumIntegerDigits (this.useExponentialNotation ? digitLeftCount + this.getMinimumIntegerDigits () : 2147483647);
974 this.setMaximumFractionDigits (decimalPos >= 0 ? (digitTotalCount - decimalPos) : 0);
975 this.setMinimumFractionDigits (decimalPos >= 0 ? (digitLeftCount + zeroDigitCount - decimalPos) : 0);
976 this.setGroupingUsed (groupingCount > 0);
977 this.groupingSize = (groupingCount > 0) ? groupingCount : 0;
978 this.multiplier = multiplier;
979 this.setDecimalSeparatorAlwaysShown (decimalPos == 0 || decimalPos == digitTotalCount);
980 } else {
981 this.negPrefixPattern = prefix.toString ();
982 this.negSuffixPattern = suffix.toString ();
983 gotNegative = true;
984 }}
985 if (pattern.length == 0) {
986 this.posPrefixPattern = this.posSuffixPattern = "";
987 this.setMinimumIntegerDigits (0);
988 this.setMaximumIntegerDigits (2147483647);
989 this.setMinimumFractionDigits (0);
990 this.setMaximumFractionDigits (2147483647);
991 }if (!gotNegative || (this.negPrefixPattern.equals (this.posPrefixPattern) && this.negSuffixPattern.equals (this.posSuffixPattern))) {
992 this.negSuffixPattern = this.posSuffixPattern;
993 this.negPrefixPattern = "'-" + this.posPrefixPattern;
994 }this.expandAffixes ();
995 }, "~S,~B");
996 Clazz.defineMethod (c$, "setMaximumIntegerDigits", 
997 function (newValue) {
998 this.$maximumIntegerDigits = Math.min (Math.max (0, newValue), 2147483647);
999 Clazz.superCall (this, java.text.DecimalFormat, "setMaximumIntegerDigits", [(this.$maximumIntegerDigits > 309) ? 309 : this.$maximumIntegerDigits]);
1000 if (this.$minimumIntegerDigits > this.$maximumIntegerDigits) {
1001 this.$minimumIntegerDigits = this.$maximumIntegerDigits;
1002 Clazz.superCall (this, java.text.DecimalFormat, "setMinimumIntegerDigits", [(this.$minimumIntegerDigits > 309) ? 309 : this.$minimumIntegerDigits]);
1003 }}, "~N");
1004 Clazz.defineMethod (c$, "setMinimumIntegerDigits", 
1005 function (newValue) {
1006 this.$minimumIntegerDigits = Math.min (Math.max (0, newValue), 2147483647);
1007 Clazz.superCall (this, java.text.DecimalFormat, "setMinimumIntegerDigits", [(this.$minimumIntegerDigits > 309) ? 309 : this.$minimumIntegerDigits]);
1008 if (this.$minimumIntegerDigits > this.$maximumIntegerDigits) {
1009 this.$maximumIntegerDigits = this.$minimumIntegerDigits;
1010 Clazz.superCall (this, java.text.DecimalFormat, "setMaximumIntegerDigits", [(this.$maximumIntegerDigits > 309) ? 309 : this.$maximumIntegerDigits]);
1011 }}, "~N");
1012 Clazz.defineMethod (c$, "setMaximumFractionDigits", 
1013 function (newValue) {
1014 this.$maximumFractionDigits = Math.min (Math.max (0, newValue), 2147483647);
1015 Clazz.superCall (this, java.text.DecimalFormat, "setMaximumFractionDigits", [(this.$maximumFractionDigits > 340) ? 340 : this.$maximumFractionDigits]);
1016 if (this.$minimumFractionDigits > this.$maximumFractionDigits) {
1017 this.$minimumFractionDigits = this.$maximumFractionDigits;
1018 Clazz.superCall (this, java.text.DecimalFormat, "setMinimumFractionDigits", [(this.$minimumFractionDigits > 340) ? 340 : this.$minimumFractionDigits]);
1019 }}, "~N");
1020 Clazz.defineMethod (c$, "setMinimumFractionDigits", 
1021 function (newValue) {
1022 this.$minimumFractionDigits = Math.min (Math.max (0, newValue), 2147483647);
1023 Clazz.superCall (this, java.text.DecimalFormat, "setMinimumFractionDigits", [(this.$minimumFractionDigits > 340) ? 340 : this.$minimumFractionDigits]);
1024 if (this.$minimumFractionDigits > this.$maximumFractionDigits) {
1025 this.$maximumFractionDigits = this.$minimumFractionDigits;
1026 Clazz.superCall (this, java.text.DecimalFormat, "setMaximumFractionDigits", [(this.$maximumFractionDigits > 340) ? 340 : this.$maximumFractionDigits]);
1027 }}, "~N");
1028 Clazz.defineMethod (c$, "getMaximumIntegerDigits", 
1029 function () {
1030 return this.$maximumIntegerDigits;
1031 });
1032 Clazz.defineMethod (c$, "getMinimumIntegerDigits", 
1033 function () {
1034 return this.$minimumIntegerDigits;
1035 });
1036 Clazz.defineMethod (c$, "getMaximumFractionDigits", 
1037 function () {
1038 return this.$maximumFractionDigits;
1039 });
1040 Clazz.defineMethod (c$, "getMinimumFractionDigits", 
1041 function () {
1042 return this.$minimumFractionDigits;
1043 });
1044 Clazz.overrideMethod (c$, "getRoundingMode", 
1045 function () {
1046 return this.roundingMode;
1047 });
1048 Clazz.overrideMethod (c$, "setRoundingMode", 
1049 function (roundingMode) {
1050 if (roundingMode == null) {
1051 throw  new NullPointerException ();
1052 }this.roundingMode = roundingMode;
1053 this.digitList.setRoundingMode (roundingMode);
1054 }, "java.math.RoundingMode");
1055 Clazz.defineMethod (c$, "adjustForCurrencyDefaultFractionDigits", 
1056 function () {
1057 var digits = 2;
1058 var oldMinDigits = this.getMinimumFractionDigits ();
1059 if (oldMinDigits == this.getMaximumFractionDigits ()) {
1060 this.setMinimumFractionDigits (digits);
1061 this.setMaximumFractionDigits (digits);
1062 } else {
1063 this.setMinimumFractionDigits (Math.min (digits, oldMinDigits));
1064 this.setMaximumFractionDigits (digits);
1065 }});
1066 Clazz.defineStatics (c$,
1067 "STATUS_INFINITE", 0,
1068 "STATUS_POSITIVE", 1,
1069 "STATUS_LENGTH", 2,
1070 "PATTERN_ZERO_DIGIT", '0',
1071 "PATTERN_GROUPING_SEPARATOR", ',',
1072 "PATTERN_DECIMAL_SEPARATOR", '.',
1073 "PATTERN_PER_MILLE", '\u2030',
1074 "PATTERN_PERCENT", '%',
1075 "PATTERN_DIGIT", '#',
1076 "PATTERN_SEPARATOR", ';',
1077 "PATTERN_EXPONENT", "E",
1078 "PATTERN_MINUS", '-',
1079 "CURRENCY_SIGN", '\u00A4',
1080 "QUOTE", '\'');
1081 c$.EmptyFieldPositionArray = c$.prototype.EmptyFieldPositionArray =  new Array (0);
1082 Clazz.defineStatics (c$,
1083 "DOUBLE_INTEGER_DIGITS", 309,
1084 "DOUBLE_FRACTION_DIGITS", 340,
1085 "MAXIMUM_INTEGER_DIGITS", 2147483647,
1086 "MAXIMUM_FRACTION_DIGITS", 2147483647);
1087 c$.$cachedLocaleData = c$.prototype.$cachedLocaleData =  new java.util.Hashtable (3);
1088 });