home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.io.IOException;
- import java.io.InvalidObjectException;
- import java.io.ObjectInputStream;
- import java.util.Hashtable;
- import java.util.Locale;
- import java.util.ResourceBundle;
-
- public class DecimalFormat extends NumberFormat {
- private static final int STATUS_INFINITE = 0;
- private static final int STATUS_POSITIVE = 1;
- private static final int STATUS_LENGTH = 2;
- private transient DigitList digitList = new DigitList();
- private String positivePrefix = "";
- private String positiveSuffix = "";
- private String negativePrefix = "-";
- private String negativeSuffix = "";
- private String posPrefixPattern;
- private String posSuffixPattern;
- private String negPrefixPattern;
- private String negSuffixPattern;
- private int multiplier = 1;
- private byte groupingSize = 3;
- private boolean decimalSeparatorAlwaysShown = false;
- private transient boolean isCurrencyFormat = false;
- private DecimalFormatSymbols symbols = null;
- private boolean useExponentialNotation;
- private byte minExponentDigits;
- static final int currentSerialVersion = 2;
- private int serialVersionOnStream = 2;
- private static final char PATTERN_ZERO_DIGIT = '0';
- private static final char PATTERN_GROUPING_SEPARATOR = ',';
- private static final char PATTERN_DECIMAL_SEPARATOR = '.';
- private static final char PATTERN_PER_MILLE = '‰';
- private static final char PATTERN_PERCENT = '%';
- private static final char PATTERN_DIGIT = '#';
- private static final char PATTERN_SEPARATOR = ';';
- private static final char PATTERN_EXPONENT = 'E';
- private static final char PATTERN_MINUS = '-';
- private static final char CURRENCY_SIGN = '¤';
- private static final char QUOTE = '\'';
- static final int DOUBLE_INTEGER_DIGITS = 309;
- static final int DOUBLE_FRACTION_DIGITS = 340;
- static final long serialVersionUID = 864413376551465018L;
- private static Hashtable cachedLocaleData = new Hashtable(3);
-
- public DecimalFormat() {
- Locale var1 = Locale.getDefault();
- String var2 = (String)cachedLocaleData.get(var1);
- if (var2 == null) {
- ResourceBundle var3 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var1);
- String[] var4 = var3.getStringArray("NumberPatterns");
- var2 = var4[0];
- cachedLocaleData.put(var1, var2);
- }
-
- this.symbols = new DecimalFormatSymbols(var1);
- this.applyPattern(var2, false);
- }
-
- public DecimalFormat(String var1) {
- this.symbols = new DecimalFormatSymbols(Locale.getDefault());
- this.applyPattern(var1, false);
- }
-
- public DecimalFormat(String var1, DecimalFormatSymbols var2) {
- this.symbols = (DecimalFormatSymbols)var2.clone();
- this.applyPattern(var1, false);
- }
-
- public StringBuffer format(double var1, StringBuffer var3, FieldPosition var4) {
- var4.setBeginIndex(0);
- var4.setEndIndex(0);
- if (Double.isNaN(var1)) {
- if (var4.getField() == 0) {
- var4.setBeginIndex(var3.length());
- }
-
- var3.append(this.symbols.getNaN());
- if (var4.getField() == 0) {
- var4.setEndIndex(var3.length());
- }
-
- return var3;
- } else {
- boolean var5 = var1 < (double)0.0F || var1 == (double)0.0F && (double)1.0F / var1 < (double)0.0F;
- if (var5) {
- var1 = -var1;
- }
-
- if (this.multiplier != 1) {
- var1 *= (double)this.multiplier;
- }
-
- if (Double.isInfinite(var1)) {
- var3.append(var5 ? this.negativePrefix : this.positivePrefix);
- if (var4.getField() == 0) {
- var4.setBeginIndex(var3.length());
- }
-
- var3.append(this.symbols.getInfinity());
- if (var4.getField() == 0) {
- var4.setEndIndex(var3.length());
- }
-
- var3.append(var5 ? this.negativeSuffix : this.positiveSuffix);
- return var3;
- } else {
- DigitList var6 = this.digitList;
- synchronized(var6) {
- this.digitList.set(var1, this.useExponentialNotation ? ((NumberFormat)this).getMaximumIntegerDigits() + ((NumberFormat)this).getMaximumFractionDigits() : ((NumberFormat)this).getMaximumFractionDigits(), !this.useExponentialNotation);
- StringBuffer var7 = this.subformat(var3, var4, var5, false);
- return var7;
- }
- }
- }
- }
-
- public StringBuffer format(long var1, StringBuffer var3, FieldPosition var4) {
- var4.setBeginIndex(0);
- var4.setEndIndex(0);
- boolean var5 = var1 < 0L;
- if (var5) {
- var1 = -var1;
- }
-
- if (this.multiplier != 1 && this.multiplier != 0) {
- boolean var6 = false;
- if (var1 < 0L) {
- long var7 = Long.MIN_VALUE / (long)this.multiplier;
- var6 = var1 < var7;
- } else {
- long var14 = Long.MAX_VALUE / (long)this.multiplier;
- var6 = var1 > var14;
- }
-
- if (var6) {
- double var16 = var5 ? (double)(-var1) : (double)var1;
- return this.format(var16, var3, var4);
- }
- }
-
- var1 *= (long)this.multiplier;
- DigitList var13 = this.digitList;
- synchronized(var13) {
- this.digitList.set(var1, this.useExponentialNotation ? ((NumberFormat)this).getMaximumIntegerDigits() + ((NumberFormat)this).getMaximumFractionDigits() : 0);
- StringBuffer var15 = this.subformat(var3, var4, var5, true);
- return var15;
- }
- }
-
- private StringBuffer subformat(StringBuffer var1, FieldPosition var2, boolean var3, boolean var4) {
- char var5 = this.symbols.getZeroDigit();
- int var6 = var5 - 48;
- char var7 = this.symbols.getGroupingSeparator();
- char var8 = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator() : this.symbols.getDecimalSeparator();
- if (this.digitList.isZero()) {
- this.digitList.decimalAt = 0;
- }
-
- var1.append(var3 ? this.negativePrefix : this.positivePrefix);
- if (this.useExponentialNotation) {
- if (var2.getField() == 0) {
- var2.setBeginIndex(var1.length());
- var2.setEndIndex(-1);
- } else if (var2.getField() == 1) {
- var2.setBeginIndex(-1);
- }
-
- int var9 = this.digitList.decimalAt;
- int var10 = ((NumberFormat)this).getMaximumIntegerDigits();
- if (var10 > 1 && var10 != ((NumberFormat)this).getMinimumIntegerDigits()) {
- var9 -= var9 < 0 ? var10 : 1;
- var9 = var9 / var10 * var10;
- } else {
- var9 -= ((NumberFormat)this).getMinimumIntegerDigits();
- }
-
- int var11 = ((NumberFormat)this).getMinimumIntegerDigits() + ((NumberFormat)this).getMinimumFractionDigits();
- int var12 = this.digitList.isZero() ? ((NumberFormat)this).getMinimumIntegerDigits() : this.digitList.decimalAt - var9;
- int var13 = this.digitList.count;
- if (var11 > var13) {
- var13 = var11;
- }
-
- for(int var14 = 0; var14 < var13; ++var14) {
- if (var14 == var12) {
- if (var2.getField() == 0) {
- var2.setEndIndex(var1.length());
- }
-
- var1.append(var8);
- if (var2.getField() == 1) {
- var2.setBeginIndex(var1.length());
- }
- }
-
- var1.append(var14 < this.digitList.count ? (char)(this.digitList.digits[var14] + var6) : var5);
- }
-
- if (var2.getField() == 0) {
- if (var2.getEndIndex() < 0) {
- var2.setEndIndex(var1.length());
- }
- } else if (var2.getField() == 1) {
- if (var2.getBeginIndex() < 0) {
- var2.setBeginIndex(var1.length());
- }
-
- var2.setEndIndex(var1.length());
- }
-
- var1.append(this.symbols.getExponentialSymbol());
- if (this.digitList.isZero()) {
- var9 = 0;
- }
-
- boolean var15 = var9 < 0;
- if (var15) {
- var9 = -var9;
- }
-
- var1.append(var15 ? this.negativePrefix : this.positivePrefix);
- this.digitList.set((long)var9);
-
- for(int var16 = this.digitList.decimalAt; var16 < this.minExponentDigits; ++var16) {
- var1.append(var5);
- }
-
- for(int var17 = 0; var17 < this.digitList.decimalAt; ++var17) {
- var1.append(var17 < this.digitList.count ? (char)(this.digitList.digits[var17] + var6) : var5);
- }
-
- var1.append(var15 ? this.negativeSuffix : this.positiveSuffix);
- } else {
- if (var2.getField() == 0) {
- var2.setBeginIndex(var1.length());
- }
-
- int var20 = ((NumberFormat)this).getMinimumIntegerDigits();
- int var21 = 0;
- if (this.digitList.decimalAt > 0 && var20 < this.digitList.decimalAt) {
- var20 = this.digitList.decimalAt;
- }
-
- if (var20 > ((NumberFormat)this).getMaximumIntegerDigits()) {
- var20 = ((NumberFormat)this).getMaximumIntegerDigits();
- var21 = this.digitList.decimalAt - var20;
- }
-
- int var22 = var1.length();
-
- for(int var23 = var20 - 1; var23 >= 0; --var23) {
- if (var23 < this.digitList.decimalAt && var21 < this.digitList.count) {
- var1.append((char)(this.digitList.digits[var21++] + var6));
- } else {
- var1.append(var5);
- }
-
- if (((NumberFormat)this).isGroupingUsed() && var23 > 0 && this.groupingSize != 0 && var23 % this.groupingSize == 0) {
- var1.append(var7);
- }
- }
-
- if (var2.getField() == 0) {
- var2.setEndIndex(var1.length());
- }
-
- boolean var24 = ((NumberFormat)this).getMinimumFractionDigits() > 0 || !var4 && var21 < this.digitList.count;
- if (!var24 && var1.length() == var22) {
- var1.append(var5);
- }
-
- if (this.decimalSeparatorAlwaysShown || var24) {
- var1.append(var8);
- }
-
- if (var2.getField() == 1) {
- var2.setBeginIndex(var1.length());
- }
-
- for(int var25 = 0; var25 < ((NumberFormat)this).getMaximumFractionDigits() && (var25 < ((NumberFormat)this).getMinimumFractionDigits() || !var4 && var21 < this.digitList.count); ++var25) {
- if (-1 - var25 > this.digitList.decimalAt - 1) {
- var1.append(var5);
- } else if (!var4 && var21 < this.digitList.count) {
- var1.append((char)(this.digitList.digits[var21++] + var6));
- } else {
- var1.append(var5);
- }
- }
-
- if (var2.getField() == 1) {
- var2.setEndIndex(var1.length());
- }
- }
-
- var1.append(var3 ? this.negativeSuffix : this.positiveSuffix);
- return var1;
- }
-
- public Number parse(String var1, ParsePosition var2) {
- if (var1.regionMatches(var2.index, this.symbols.getNaN(), 0, this.symbols.getNaN().length())) {
- var2.index += this.symbols.getNaN().length();
- return new Double(Double.NaN);
- } else {
- boolean[] var3 = new boolean[2];
- if (!this.subparse(var1, var2, this.digitList, false, var3)) {
- return null;
- } else {
- double var4 = (double)0.0F;
- long var6 = 0L;
- boolean var8 = true;
- if (var3[0]) {
- var4 = Double.POSITIVE_INFINITY;
- } else if (this.digitList.fitsIntoLong(var3[1], ((NumberFormat)this).isParseIntegerOnly())) {
- var8 = false;
- var6 = this.digitList.getLong();
- } else {
- var4 = this.digitList.getDouble();
- }
-
- if (this.multiplier != 1) {
- if (var8) {
- var4 /= (double)this.multiplier;
- } else if (var6 % (long)this.multiplier == 0L) {
- var6 /= (long)this.multiplier;
- } else {
- var4 = (double)var6 / (double)this.multiplier;
- if (var4 < (double)0.0F) {
- var4 = -var4;
- }
-
- var8 = true;
- }
- }
-
- if (!var3[1]) {
- var4 = -var4;
- if (var6 > 0L) {
- var6 = -var6;
- }
- }
-
- if (this.multiplier != 1 && var8) {
- var6 = (long)var4;
- var8 = var4 != (double)var6 || var4 == (double)0.0F && !var3[1] && !((NumberFormat)this).isParseIntegerOnly();
- }
-
- return (Number)(var8 ? new Double(var4) : new Long(var6));
- }
- }
- }
-
- private final boolean subparse(String var1, ParsePosition var2, DigitList var3, boolean var4, boolean[] var5) {
- int var6 = var2.index;
- int var7 = var2.index;
- boolean var9 = var1.regionMatches(var6, this.positivePrefix, 0, this.positivePrefix.length());
- boolean var10 = var1.regionMatches(var6, this.negativePrefix, 0, this.negativePrefix.length());
- if (var9 && var10) {
- if (this.positivePrefix.length() > this.negativePrefix.length()) {
- var10 = false;
- } else if (this.positivePrefix.length() < this.negativePrefix.length()) {
- var9 = false;
- }
- }
-
- if (var9) {
- var6 += this.positivePrefix.length();
- } else {
- if (!var10) {
- var2.errorIndex = var6;
- return false;
- }
-
- var6 += this.negativePrefix.length();
- }
-
- var5[0] = false;
- if (!var4 && var1.regionMatches(var6, this.symbols.getInfinity(), 0, this.symbols.getInfinity().length())) {
- var6 += this.symbols.getInfinity().length();
- var5[0] = true;
- } else {
- var3.decimalAt = var3.count = 0;
- char var11 = this.symbols.getZeroDigit();
- char var12 = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator() : this.symbols.getDecimalSeparator();
- char var13 = this.symbols.getGroupingSeparator();
- char var14 = this.symbols.getExponentialSymbol();
- boolean var15 = false;
- boolean var16 = false;
- boolean var17 = false;
- int var18 = 0;
- int var19 = 0;
-
- int var8;
- for(var8 = -1; var6 < var1.length(); ++var6) {
- char var20 = var1.charAt(var6);
- int var21 = var20 - var11;
- if (var21 < 0 || var21 > 9) {
- var21 = Character.digit(var20, 10);
- }
-
- if (var21 == 0) {
- var8 = -1;
- var17 = true;
- if (var3.count == 0) {
- if (var15) {
- --var3.decimalAt;
- }
- } else {
- ++var19;
- var3.append((char)(var21 + 48));
- }
- } else if (var21 > 0 && var21 <= 9) {
- var17 = true;
- ++var19;
- var3.append((char)(var21 + 48));
- var8 = -1;
- } else if (!var4 && var20 == var12) {
- if (((NumberFormat)this).isParseIntegerOnly() || var15) {
- break;
- }
-
- var3.decimalAt = var19;
- var15 = true;
- } else {
- if (var4 || var20 != var13 || !((NumberFormat)this).isGroupingUsed()) {
- if (!var4 && var20 == var14 && !var16) {
- ParsePosition var22 = new ParsePosition(var6 + 1);
- boolean[] var23 = new boolean[2];
- DigitList var24 = new DigitList();
- if (this.subparse(var1, var22, var24, true, var23) && var24.fitsIntoLong(var23[1], true)) {
- var6 = var22.index;
- var18 = (int)var24.getLong();
- if (!var23[1]) {
- var18 = -var18;
- }
-
- var16 = true;
- }
- }
- break;
- }
-
- if (var15) {
- break;
- }
-
- var8 = var6;
- }
- }
-
- if (var8 != -1) {
- var6 = var8;
- }
-
- if (!var15) {
- var3.decimalAt = var19;
- }
-
- var3.decimalAt += var18;
- if (!var17 && var19 == 0) {
- var2.index = var7;
- var2.errorIndex = var7;
- return false;
- }
- }
-
- if (var9) {
- var9 = var1.regionMatches(var6, this.positiveSuffix, 0, this.positiveSuffix.length());
- }
-
- if (var10) {
- var10 = var1.regionMatches(var6, this.negativeSuffix, 0, this.negativeSuffix.length());
- }
-
- if (var9 && var10) {
- if (this.positiveSuffix.length() > this.negativeSuffix.length()) {
- var10 = false;
- } else if (this.positiveSuffix.length() < this.negativeSuffix.length()) {
- var9 = false;
- }
- }
-
- if (var9 == var10) {
- var2.errorIndex = var6;
- return false;
- } else {
- var2.index = var6 + (var9 ? this.positiveSuffix.length() : this.negativeSuffix.length());
- var5[1] = var9;
- if (var2.index == var7) {
- var2.errorIndex = var6;
- return false;
- } else {
- return true;
- }
- }
- }
-
- public DecimalFormatSymbols getDecimalFormatSymbols() {
- try {
- return (DecimalFormatSymbols)this.symbols.clone();
- } catch (Exception var2) {
- return null;
- }
- }
-
- public void setDecimalFormatSymbols(DecimalFormatSymbols var1) {
- try {
- this.symbols = (DecimalFormatSymbols)var1.clone();
- this.expandAffixes();
- } catch (Exception var3) {
- }
-
- }
-
- public String getPositivePrefix() {
- return this.positivePrefix;
- }
-
- public void setPositivePrefix(String var1) {
- this.positivePrefix = var1;
- this.posPrefixPattern = null;
- }
-
- public String getNegativePrefix() {
- return this.negativePrefix;
- }
-
- public void setNegativePrefix(String var1) {
- this.negativePrefix = var1;
- this.negPrefixPattern = null;
- }
-
- public String getPositiveSuffix() {
- return this.positiveSuffix;
- }
-
- public void setPositiveSuffix(String var1) {
- this.positiveSuffix = var1;
- this.posSuffixPattern = null;
- }
-
- public String getNegativeSuffix() {
- return this.negativeSuffix;
- }
-
- public void setNegativeSuffix(String var1) {
- this.negativeSuffix = var1;
- this.negSuffixPattern = null;
- }
-
- public int getMultiplier() {
- return this.multiplier;
- }
-
- public void setMultiplier(int var1) {
- this.multiplier = var1;
- }
-
- public int getGroupingSize() {
- return this.groupingSize;
- }
-
- public void setGroupingSize(int var1) {
- this.groupingSize = (byte)var1;
- }
-
- public boolean isDecimalSeparatorAlwaysShown() {
- return this.decimalSeparatorAlwaysShown;
- }
-
- public void setDecimalSeparatorAlwaysShown(boolean var1) {
- this.decimalSeparatorAlwaysShown = var1;
- }
-
- public Object clone() {
- try {
- DecimalFormat var1 = (DecimalFormat)super.clone();
- var1.symbols = (DecimalFormatSymbols)this.symbols.clone();
- return var1;
- } catch (Exception var2) {
- throw new InternalError();
- }
- }
-
- public boolean equals(Object var1) {
- if (var1 == null) {
- return false;
- } else if (!super.equals(var1)) {
- return false;
- } else {
- DecimalFormat var2 = (DecimalFormat)var1;
- return (this.posPrefixPattern == var2.posPrefixPattern && this.positivePrefix.equals(var2.positivePrefix) || this.posPrefixPattern != null && this.posPrefixPattern.equals(var2.posPrefixPattern)) && (this.posSuffixPattern == var2.posSuffixPattern && this.positiveSuffix.equals(var2.positiveSuffix) || this.posSuffixPattern != null && this.posSuffixPattern.equals(var2.posSuffixPattern)) && (this.negPrefixPattern == var2.negPrefixPattern && this.negativePrefix.equals(var2.negativePrefix) || this.negPrefixPattern != null && this.negPrefixPattern.equals(var2.negPrefixPattern)) && (this.negSuffixPattern == var2.negSuffixPattern && this.negativeSuffix.equals(var2.negativeSuffix) || this.negSuffixPattern != null && this.negSuffixPattern.equals(var2.negSuffixPattern)) && this.multiplier == var2.multiplier && this.groupingSize == var2.groupingSize && this.decimalSeparatorAlwaysShown == var2.decimalSeparatorAlwaysShown && this.useExponentialNotation == var2.useExponentialNotation && (!this.useExponentialNotation || this.minExponentDigits == var2.minExponentDigits) && this.symbols.equals(var2.symbols);
- }
- }
-
- public int hashCode() {
- return super.hashCode() * 37 + this.positivePrefix.hashCode();
- }
-
- public String toPattern() {
- return this.toPattern(false);
- }
-
- public String toLocalizedPattern() {
- return this.toPattern(true);
- }
-
- private void expandAffixes() {
- StringBuffer var1 = new StringBuffer();
- if (this.posPrefixPattern != null) {
- this.positivePrefix = this.expandAffix(this.posPrefixPattern, var1);
- }
-
- if (this.posSuffixPattern != null) {
- this.positiveSuffix = this.expandAffix(this.posSuffixPattern, var1);
- }
-
- if (this.negPrefixPattern != null) {
- this.negativePrefix = this.expandAffix(this.negPrefixPattern, var1);
- }
-
- if (this.negSuffixPattern != null) {
- this.negativeSuffix = this.expandAffix(this.negSuffixPattern, var1);
- }
-
- }
-
- private String expandAffix(String var1, StringBuffer var2) {
- var2.setLength(0);
- int var3 = 0;
-
- while(var3 < var1.length()) {
- char var4 = var1.charAt(var3++);
- if (var4 == '\'') {
- var4 = var1.charAt(var3++);
- switch (var4) {
- case '%':
- var4 = this.symbols.getPercent();
- break;
- case '-':
- var4 = this.symbols.getMinusSign();
- break;
- case '¤':
- if (var3 < var1.length() && var1.charAt(var3) == 164) {
- ++var3;
- var2.append(this.symbols.getInternationalCurrencySymbol());
- continue;
- }
-
- var2.append(this.symbols.getCurrencySymbol());
- continue;
- case '‰':
- var4 = this.symbols.getPerMill();
- }
- }
-
- var2.append(var4);
- }
-
- return var2.toString();
- }
-
- private void appendAffix(StringBuffer var1, String var2, String var3, boolean var4) {
- int var5;
- if (var2 == null) {
- this.appendAffix(var1, var3, var4);
- } else {
- for(int var6 = 0; var6 < var2.length(); var6 = var5) {
- var5 = var2.indexOf(39, var6);
- if (var5 < 0) {
- this.appendAffix(var1, var2.substring(var6), var4);
- break;
- }
-
- if (var5 > var6) {
- this.appendAffix(var1, var2.substring(var6, var5), var4);
- }
-
- ++var5;
- char var7 = var2.charAt(var5);
- ++var5;
- if (var7 == '\'') {
- var1.append(var7);
- } else if (var7 == 164 && var5 < var2.length() && var2.charAt(var5) == 164) {
- ++var5;
- var1.append(var7);
- } else if (var4) {
- switch (var7) {
- case '%':
- var7 = this.symbols.getPercent();
- break;
- case '-':
- var7 = this.symbols.getMinusSign();
- break;
- case '‰':
- var7 = this.symbols.getPerMill();
- }
- }
-
- var1.append(var7);
- }
- }
-
- }
-
- private void appendAffix(StringBuffer var1, String var2, boolean var3) {
- boolean var4;
- if (var3) {
- var4 = var2.indexOf(this.symbols.getZeroDigit()) >= 0 || var2.indexOf(this.symbols.getGroupingSeparator()) >= 0 || var2.indexOf(this.symbols.getDecimalSeparator()) >= 0 || var2.indexOf(this.symbols.getPercent()) >= 0 || var2.indexOf(this.symbols.getPerMill()) >= 0 || var2.indexOf(this.symbols.getDigit()) >= 0 || var2.indexOf(this.symbols.getPatternSeparator()) >= 0 || var2.indexOf(this.symbols.getMinusSign()) >= 0 || var2.indexOf(164) >= 0;
- } else {
- var4 = var2.indexOf(48) >= 0 || var2.indexOf(44) >= 0 || var2.indexOf(46) >= 0 || var2.indexOf(37) >= 0 || var2.indexOf(8240) >= 0 || var2.indexOf(35) >= 0 || var2.indexOf(59) >= 0 || var2.indexOf(45) >= 0 || var2.indexOf(164) >= 0;
- }
-
- if (var4) {
- var1.append('\'');
- }
-
- if (var2.indexOf(39) < 0) {
- var1.append(var2);
- } else {
- for(int var5 = 0; var5 < var2.length(); ++var5) {
- char var6 = var2.charAt(var5);
- var1.append(var6);
- if (var6 == '\'') {
- var1.append(var6);
- }
- }
- }
-
- if (var4) {
- var1.append('\'');
- }
-
- }
-
- private String toPattern(boolean var1) {
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 1; var3 >= 0; --var3) {
- if (var3 == 1) {
- this.appendAffix(var2, this.posPrefixPattern, this.positivePrefix, var1);
- } else {
- this.appendAffix(var2, this.negPrefixPattern, this.negativePrefix, var1);
- }
-
- int var5 = this.useExponentialNotation ? ((NumberFormat)this).getMaximumIntegerDigits() : Math.max(this.groupingSize, ((NumberFormat)this).getMinimumIntegerDigits()) + 1;
-
- for(int var4 = var5; var4 > 0; --var4) {
- if (var4 != var5 && ((NumberFormat)this).isGroupingUsed() && this.groupingSize != 0 && var4 % this.groupingSize == 0) {
- var2.append(var1 ? this.symbols.getGroupingSeparator() : ',');
- }
-
- var2.append(var4 <= ((NumberFormat)this).getMinimumIntegerDigits() ? (var1 ? this.symbols.getZeroDigit() : '0') : (var1 ? this.symbols.getDigit() : '#'));
- }
-
- if (((NumberFormat)this).getMaximumFractionDigits() > 0 || this.decimalSeparatorAlwaysShown) {
- var2.append(var1 ? this.symbols.getDecimalSeparator() : '.');
- }
-
- for(int var6 = 0; var6 < ((NumberFormat)this).getMaximumFractionDigits(); ++var6) {
- if (var6 < ((NumberFormat)this).getMinimumFractionDigits()) {
- var2.append(var1 ? this.symbols.getZeroDigit() : '0');
- } else {
- var2.append(var1 ? this.symbols.getDigit() : '#');
- }
- }
-
- if (this.useExponentialNotation) {
- var2.append(var1 ? this.symbols.getExponentialSymbol() : 'E');
-
- for(int var7 = 0; var7 < this.minExponentDigits; ++var7) {
- var2.append(var1 ? this.symbols.getZeroDigit() : '0');
- }
- }
-
- if (var3 == 1) {
- this.appendAffix(var2, this.posSuffixPattern, this.positiveSuffix, var1);
- if ((this.negSuffixPattern == this.posSuffixPattern && this.negativeSuffix.equals(this.positiveSuffix) || this.negSuffixPattern != null && this.negSuffixPattern.equals(this.posSuffixPattern)) && (this.negPrefixPattern != null && this.posPrefixPattern != null && this.negPrefixPattern.equals("'-" + this.posPrefixPattern) || this.negPrefixPattern == this.posPrefixPattern && this.negativePrefix.equals(this.symbols.getMinusSign() + this.positivePrefix))) {
- break;
- }
-
- var2.append(var1 ? this.symbols.getPatternSeparator() : ';');
- } else {
- this.appendAffix(var2, this.negSuffixPattern, this.negativeSuffix, var1);
- }
- }
-
- return var2.toString();
- }
-
- public void applyPattern(String var1) {
- this.applyPattern(var1, false);
- }
-
- public void applyLocalizedPattern(String var1) {
- this.applyPattern(var1, true);
- }
-
- private void applyPattern(String var1, boolean var2) {
- char var3 = '0';
- char var4 = ',';
- char var5 = '.';
- char var6 = '%';
- char var7 = 8240;
- char var8 = '#';
- char var9 = ';';
- char var10 = 'E';
- char var11 = '-';
- if (var2) {
- var3 = this.symbols.getZeroDigit();
- var4 = this.symbols.getGroupingSeparator();
- var5 = this.symbols.getDecimalSeparator();
- var6 = this.symbols.getPercent();
- var7 = this.symbols.getPerMill();
- var8 = this.symbols.getDigit();
- var9 = this.symbols.getPatternSeparator();
- var10 = this.symbols.getExponentialSymbol();
- var11 = this.symbols.getMinusSign();
- }
-
- boolean var12 = false;
- this.decimalSeparatorAlwaysShown = false;
- this.isCurrencyFormat = false;
- this.useExponentialNotation = false;
- boolean var13 = false;
- int var14 = 0;
- int var15 = 0;
- int var16 = 1;
-
- while(true) {
- if (var16 >= 0 && var15 < var1.length()) {
- boolean var17 = false;
- StringBuffer var18 = new StringBuffer();
- StringBuffer var19 = new StringBuffer();
- int var20 = -1;
- short var21 = 1;
- int var22 = 0;
- int var23 = 0;
- int var24 = 0;
- byte var25 = -1;
- byte var26 = 0;
- StringBuffer var27 = var18;
-
- for(int var28 = var15; var28 < var1.length(); ++var28) {
- char var29 = var1.charAt(var28);
- switch (var26) {
- case 0:
- case 2:
- if (var17) {
- if (var29 == '\'') {
- if (var28 + 1 < var1.length() && var1.charAt(var28 + 1) == '\'') {
- ++var28;
- var27.append("''");
- } else {
- var17 = false;
- }
- break;
- }
- } else {
- if (var29 == var8 || var29 == var3 || var29 == var4 || var29 == var5) {
- var26 = 1;
- if (var16 == 1) {
- ;
- }
-
- --var28;
- break;
- }
-
- if (var29 == 164) {
- boolean var30 = var28 + 1 < var1.length() && var1.charAt(var28 + 1) == 164;
- if (var30) {
- ++var28;
- }
-
- this.isCurrencyFormat = true;
- var27.append(var30 ? "'¤¤" : "'¤");
- break;
- }
-
- if (var29 == '\'') {
- if (var29 == '\'') {
- if (var28 + 1 < var1.length() && var1.charAt(var28 + 1) == '\'') {
- ++var28;
- var27.append("''");
- } else {
- var17 = true;
- }
- break;
- }
- } else {
- if (var29 == var9) {
- if (var26 == 0 || var16 == 0) {
- throw new IllegalArgumentException("Unquoted special character '" + var29 + "' in pattern \"" + var1 + '"');
- }
-
- var15 = var28 + 1;
- var28 = var1.length();
- break;
- }
-
- if (var29 == var6) {
- if (var21 != 1) {
- throw new IllegalArgumentException("Too many percent/permille characters in pattern \"" + var1 + '"');
- }
-
- var21 = 100;
- var27.append("'%");
- break;
- }
-
- if (var29 == var7) {
- if (var21 != 1) {
- throw new IllegalArgumentException("Too many percent/permille characters in pattern \"" + var1 + '"');
- }
-
- var21 = 1000;
- var27.append("'‰");
- break;
- }
-
- if (var29 == var11) {
- var27.append("'-");
- break;
- }
- }
- }
-
- var27.append(var29);
- break;
- case 1:
- if (var16 == 1) {
- ++var14;
- if (var29 == var8) {
- if (var23 > 0) {
- ++var24;
- } else {
- ++var22;
- }
-
- if (var25 >= 0 && var20 < 0) {
- ++var25;
- }
- } else if (var29 == var3) {
- if (var24 > 0) {
- throw new IllegalArgumentException("Unexpected '0' in pattern \"" + var1 + '"');
- }
-
- ++var23;
- if (var25 >= 0 && var20 < 0) {
- ++var25;
- }
- } else if (var29 == var4) {
- var25 = 0;
- } else if (var29 == var5) {
- if (var20 >= 0) {
- throw new IllegalArgumentException("Multiple decimal separators in pattern \"" + var1 + '"');
- }
-
- var20 = var22 + var23 + var24;
- } else if (var29 != var10) {
- var26 = 2;
- var27 = var19;
- --var28;
- --var14;
- } else {
- if (this.useExponentialNotation) {
- throw new IllegalArgumentException("Multiple exponential symbols in pattern \"" + var1 + '"');
- }
-
- this.useExponentialNotation = true;
- this.minExponentDigits = 0;
-
- while(true) {
- ++var28;
- if (var28 >= var1.length() || var1.charAt(var28) != var3) {
- if (var22 + var23 < 1 || this.minExponentDigits < 1) {
- throw new IllegalArgumentException("Malformed exponential pattern \"" + var1 + '"');
- }
-
- var26 = 2;
- var27 = var19;
- --var28;
- break;
- }
-
- ++this.minExponentDigits;
- ++var14;
- }
- }
- } else {
- --var14;
- if (var14 == 0) {
- var26 = 2;
- var27 = var19;
- }
- }
- }
- }
-
- if (var23 == 0 && var22 > 0 && var20 >= 0) {
- int var31 = var20;
- if (var20 == 0) {
- var31 = var20 + 1;
- }
-
- var24 = var22 - var31;
- var22 = var31 - 1;
- var23 = 1;
- }
-
- if ((var20 >= 0 || var24 <= 0) && (var20 < 0 || var20 >= var22 && var20 <= var22 + var23) && var25 != 0 && !var17) {
- if (var16 == 1) {
- this.posPrefixPattern = var18.toString();
- this.posSuffixPattern = var19.toString();
- this.negPrefixPattern = this.posPrefixPattern;
- this.negSuffixPattern = this.posSuffixPattern;
- int var32 = var22 + var23 + var24;
- int var33 = var20 >= 0 ? var20 : var32;
- this.setMinimumIntegerDigits(var33 - var22);
- this.setMaximumIntegerDigits(this.useExponentialNotation ? var22 + ((NumberFormat)this).getMinimumIntegerDigits() : 309);
- this.setMaximumFractionDigits(var20 >= 0 ? var32 - var20 : 0);
- this.setMinimumFractionDigits(var20 >= 0 ? var22 + var23 - var20 : 0);
- ((NumberFormat)this).setGroupingUsed(var25 > 0);
- this.groupingSize = var25 > 0 ? var25 : 0;
- this.multiplier = var21;
- this.setDecimalSeparatorAlwaysShown(var20 == 0 || var20 == var32);
- } else {
- this.negPrefixPattern = var18.toString();
- this.negSuffixPattern = var19.toString();
- var12 = true;
- }
-
- --var16;
- continue;
- }
-
- throw new IllegalArgumentException("Malformed pattern \"" + var1 + '"');
- }
-
- if (var1.length() == 0) {
- this.posPrefixPattern = this.posSuffixPattern = "";
- this.setMinimumIntegerDigits(0);
- this.setMaximumIntegerDigits(309);
- this.setMinimumFractionDigits(0);
- this.setMaximumFractionDigits(340);
- }
-
- if (!var12 || this.negPrefixPattern.equals(this.posPrefixPattern) && this.negSuffixPattern.equals(this.posSuffixPattern)) {
- this.negSuffixPattern = this.posSuffixPattern;
- this.negPrefixPattern = "'-" + this.posPrefixPattern;
- }
-
- this.expandAffixes();
- return;
- }
- }
-
- public void setMaximumIntegerDigits(int var1) {
- super.setMaximumIntegerDigits(Math.min(var1, 309));
- }
-
- public void setMinimumIntegerDigits(int var1) {
- super.setMinimumIntegerDigits(Math.min(var1, 309));
- }
-
- public void setMaximumFractionDigits(int var1) {
- super.setMaximumFractionDigits(Math.min(var1, 340));
- }
-
- public void setMinimumFractionDigits(int var1) {
- super.setMinimumFractionDigits(Math.min(var1, 340));
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- if (((NumberFormat)this).getMaximumIntegerDigits() <= 309 && ((NumberFormat)this).getMaximumFractionDigits() <= 340) {
- if (this.serialVersionOnStream < 1) {
- this.useExponentialNotation = false;
- }
-
- this.serialVersionOnStream = 2;
- this.digitList = new DigitList();
- } else {
- throw new InvalidObjectException("Digit count out of range");
- }
- }
- }
-