home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / java / text / DecimalFormat.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  14.3 KB  |  894 lines

  1. package java.text;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.util.Hashtable;
  6. import java.util.Locale;
  7. import java.util.ResourceBundle;
  8.  
  9. public class DecimalFormat extends NumberFormat {
  10.    private static final int STATUS_INFINITE = 0;
  11.    private static final int STATUS_POSITIVE = 1;
  12.    private static final int STATUS_LENGTH = 2;
  13.    private transient DigitList digitList = new DigitList();
  14.    private String positivePrefix = "";
  15.    private String positiveSuffix = "";
  16.    private String negativePrefix = "-";
  17.    private String negativeSuffix = "";
  18.    private int multiplier = 1;
  19.    private byte groupingSize = 3;
  20.    private boolean decimalSeparatorAlwaysShown = false;
  21.    private transient boolean isCurrencyFormat = false;
  22.    private DecimalFormatSymbols symbols;
  23.    private transient boolean useExponentialNotation;
  24.    private transient byte minExponentDigits;
  25.    private static final char PATTERN_ZERO_DIGIT = '0';
  26.    private static final char PATTERN_GROUPING_SEPARATOR = ',';
  27.    private static final char PATTERN_DECIMAL_SEPARATOR = '.';
  28.    private static final char PATTERN_PER_MILLE = 'ΓÇ░';
  29.    private static final char PATTERN_PERCENT = '%';
  30.    private static final char PATTERN_DIGIT = '#';
  31.    private static final char PATTERN_SEPARATOR = ';';
  32.    private static final char PATTERN_EXPONENT = 'E';
  33.    private static final char CURRENCY_SIGN = '┬ñ';
  34.    private static final char QUOTE = '\'';
  35.    static final long serialVersionUID = 864413376551465018L;
  36.    private static Hashtable cachedLocaleData = new Hashtable(3);
  37.  
  38.    public DecimalFormat() {
  39.       Locale var1 = Locale.getDefault();
  40.       String var2 = (String)cachedLocaleData.get(var1);
  41.       if (var2 == null) {
  42.          ResourceBundle var3 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var1);
  43.          String[] var4 = var3.getStringArray("NumberPatterns");
  44.          var2 = var4[0];
  45.          cachedLocaleData.put(var1, var2);
  46.       }
  47.  
  48.       this.symbols = new DecimalFormatSymbols(var1);
  49.       this.applyPattern(var2, false);
  50.    }
  51.  
  52.    public DecimalFormat(String var1) {
  53.       this.symbols = new DecimalFormatSymbols(Locale.getDefault());
  54.       this.applyPattern(var1, false);
  55.    }
  56.  
  57.    public DecimalFormat(String var1, DecimalFormatSymbols var2) {
  58.       this.symbols = (DecimalFormatSymbols)var2.clone();
  59.       this.applyPattern(var1, false);
  60.    }
  61.  
  62.    public StringBuffer format(double var1, StringBuffer var3, FieldPosition var4) {
  63.       var4.setBeginIndex(0);
  64.       var4.setEndIndex(0);
  65.       if (Double.isNaN(var1)) {
  66.          if (var4.getField() == 0) {
  67.             var4.setBeginIndex(var3.length());
  68.          }
  69.  
  70.          var3.append(this.symbols.getNaN());
  71.          if (var4.getField() == 0) {
  72.             var4.setEndIndex(var3.length());
  73.          }
  74.  
  75.          return var3;
  76.       } else {
  77.          boolean var5 = var1 < (double)0.0F;
  78.          if (var5) {
  79.             var1 = -var1;
  80.          }
  81.  
  82.          if (this.multiplier != 1) {
  83.             var1 *= (double)this.multiplier;
  84.          }
  85.  
  86.          if (Double.isInfinite(var1)) {
  87.             var3.append(var5 ? this.negativePrefix : this.positivePrefix);
  88.             if (var4.getField() == 0) {
  89.                var4.setBeginIndex(var3.length());
  90.             }
  91.  
  92.             var3.append(this.symbols.getInfinity());
  93.             if (var4.getField() == 0) {
  94.                var4.setEndIndex(var3.length());
  95.             }
  96.  
  97.             var3.append(var5 ? this.negativeSuffix : this.positiveSuffix);
  98.             return var3;
  99.          } else {
  100.             DigitList var7 = this.digitList;
  101.             synchronized(var7){}
  102.  
  103.             StringBuffer var6;
  104.             try {
  105.                this.digitList.set(var1, this.useExponentialNotation ? ((NumberFormat)this).getMaximumIntegerDigits() + ((NumberFormat)this).getMaximumFractionDigits() : ((NumberFormat)this).getMaximumFractionDigits(), !this.useExponentialNotation);
  106.                var6 = this.subformat(var3, var4, var5, false);
  107.             } catch (Throwable var10) {
  108.                throw var10;
  109.             }
  110.  
  111.             return var6;
  112.          }
  113.       }
  114.    }
  115.  
  116.    public StringBuffer format(long var1, StringBuffer var3, FieldPosition var4) {
  117.       var4.setBeginIndex(0);
  118.       var4.setEndIndex(0);
  119.       boolean var5 = var1 < 0L;
  120.       if (var5) {
  121.          var1 = -var1;
  122.       }
  123.  
  124.       if (this.multiplier != 1 && this.multiplier != 0) {
  125.          boolean var6 = false;
  126.          if (var1 < 0L) {
  127.             long var7 = Long.MIN_VALUE / (long)this.multiplier;
  128.             var6 = var1 < var7;
  129.          } else {
  130.             long var14 = Long.MAX_VALUE / (long)this.multiplier;
  131.             var6 = var1 > var14;
  132.          }
  133.  
  134.          if (var6) {
  135.             double var16 = (double)(var5 ? -var1 : var1);
  136.             return this.format(var16, var3, var4);
  137.          }
  138.       }
  139.  
  140.       var1 *= (long)this.multiplier;
  141.       DigitList var15 = this.digitList;
  142.       synchronized(var15){}
  143.  
  144.       StringBuffer var13;
  145.       try {
  146.          this.digitList.set(var1, this.useExponentialNotation ? ((NumberFormat)this).getMaximumIntegerDigits() + ((NumberFormat)this).getMaximumFractionDigits() : 0);
  147.          var13 = this.subformat(var3, var4, var5, true);
  148.       } catch (Throwable var10) {
  149.          throw var10;
  150.       }
  151.  
  152.       return var13;
  153.    }
  154.  
  155.    private StringBuffer subformat(StringBuffer var1, FieldPosition var2, boolean var3, boolean var4) {
  156.       char var5 = this.symbols.getZeroDigit();
  157.       int var6 = var5 - 48;
  158.       char var7 = this.symbols.getGroupingSeparator();
  159.       char var8 = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator() : this.symbols.getDecimalSeparator();
  160.       if (this.digitList.isZero()) {
  161.          var3 = false;
  162.          this.digitList.decimalAt = 0;
  163.       }
  164.  
  165.       var1.append(var3 ? this.negativePrefix : this.positivePrefix);
  166.       if (this.useExponentialNotation) {
  167.          if (var2.getField() == 0) {
  168.             var2.setBeginIndex(var1.length());
  169.             var2.setEndIndex(-1);
  170.          } else if (var2.getField() == 1) {
  171.             var2.setBeginIndex(-1);
  172.          }
  173.  
  174.          int var9 = this.digitList.decimalAt;
  175.          int var10 = ((NumberFormat)this).getMaximumIntegerDigits();
  176.          if (var10 > 1 && var10 != ((NumberFormat)this).getMinimumIntegerDigits()) {
  177.             var9 -= var9 < 0 ? var10 : 1;
  178.             var9 = var9 / var10 * var10;
  179.          } else {
  180.             var9 -= ((NumberFormat)this).getMinimumIntegerDigits();
  181.          }
  182.  
  183.          int var11 = ((NumberFormat)this).getMinimumIntegerDigits() + ((NumberFormat)this).getMinimumFractionDigits();
  184.          int var12 = this.digitList.isZero() ? ((NumberFormat)this).getMinimumIntegerDigits() : this.digitList.decimalAt - var9;
  185.          int var13 = this.digitList.count;
  186.          if (var11 > var13) {
  187.             var13 = var11;
  188.          }
  189.  
  190.          for(int var14 = 0; var14 < var13; ++var14) {
  191.             if (var14 == var12) {
  192.                if (var2.getField() == 0) {
  193.                   var2.setEndIndex(var1.length());
  194.                }
  195.  
  196.                var1.append(var8);
  197.                if (var2.getField() == 1) {
  198.                   var2.setBeginIndex(var1.length());
  199.                }
  200.             }
  201.  
  202.             var1.append(var14 < this.digitList.count ? (char)(this.digitList.digits[var14] + var6) : var5);
  203.          }
  204.  
  205.          if (var2.getField() == 0) {
  206.             if (var2.getEndIndex() < 0) {
  207.                var2.setEndIndex(var1.length());
  208.             }
  209.          } else if (var2.getField() == 1) {
  210.             if (var2.getBeginIndex() < 0) {
  211.                var2.setBeginIndex(var1.length());
  212.             }
  213.  
  214.             var2.setEndIndex(var1.length());
  215.          }
  216.  
  217.          var1.append(this.symbols.getExponentialSymbol());
  218.          if (this.digitList.isZero()) {
  219.             var9 = 0;
  220.          }
  221.  
  222.          boolean var15 = var9 < 0;
  223.          if (var15) {
  224.             var9 = -var9;
  225.          }
  226.  
  227.          var1.append(var15 ? this.negativePrefix : this.positivePrefix);
  228.          this.digitList.set((long)var9);
  229.  
  230.          for(int var16 = this.digitList.decimalAt; var16 < this.minExponentDigits; ++var16) {
  231.             var1.append(var5);
  232.          }
  233.  
  234.          for(int var17 = 0; var17 < this.digitList.decimalAt; ++var17) {
  235.             var1.append(var17 < this.digitList.count ? (char)(this.digitList.digits[var17] + var6) : var5);
  236.          }
  237.  
  238.          var1.append(var15 ? this.negativeSuffix : this.positiveSuffix);
  239.       } else {
  240.          if (var2.getField() == 0) {
  241.             var2.setBeginIndex(var1.length());
  242.          }
  243.  
  244.          int var20 = ((NumberFormat)this).getMinimumIntegerDigits();
  245.          int var21 = 0;
  246.          if (this.digitList.decimalAt > 0 && var20 < this.digitList.decimalAt) {
  247.             var20 = this.digitList.decimalAt;
  248.          }
  249.  
  250.          if (var20 > ((NumberFormat)this).getMaximumIntegerDigits()) {
  251.             var20 = ((NumberFormat)this).getMaximumIntegerDigits();
  252.             var21 = this.digitList.decimalAt - var20;
  253.          }
  254.  
  255.          int var22 = var1.length();
  256.  
  257.          for(int var23 = var20 - 1; var23 >= 0; --var23) {
  258.             if (var23 < this.digitList.decimalAt && var21 < this.digitList.count) {
  259.                var1.append((char)(this.digitList.digits[var21++] + var6));
  260.             } else {
  261.                var1.append(var5);
  262.             }
  263.  
  264.             if (((NumberFormat)this).isGroupingUsed() && var23 > 0 && this.groupingSize != 0 && var23 % this.groupingSize == 0) {
  265.                var1.append(var7);
  266.             }
  267.          }
  268.  
  269.          if (var2.getField() == 0) {
  270.             var2.setEndIndex(var1.length());
  271.          }
  272.  
  273.          boolean var24 = ((NumberFormat)this).getMinimumFractionDigits() > 0 || !var4 && var21 < this.digitList.count;
  274.          if (!var24 && var1.length() == var22) {
  275.             var1.append(var5);
  276.          }
  277.  
  278.          if (this.decimalSeparatorAlwaysShown || var24) {
  279.             var1.append(var8);
  280.          }
  281.  
  282.          if (var2.getField() == 1) {
  283.             var2.setBeginIndex(var1.length());
  284.          }
  285.  
  286.          for(int var25 = 0; var25 < ((NumberFormat)this).getMaximumFractionDigits() && (var25 < ((NumberFormat)this).getMinimumFractionDigits() || !var4 && var21 < this.digitList.count); ++var25) {
  287.             if (-1 - var25 > this.digitList.decimalAt - 1) {
  288.                var1.append(var5);
  289.             } else if (!var4 && var21 < this.digitList.count) {
  290.                var1.append((char)(this.digitList.digits[var21++] + var6));
  291.             } else {
  292.                var1.append(var5);
  293.             }
  294.          }
  295.  
  296.          if (var2.getField() == 1) {
  297.             var2.setEndIndex(var1.length());
  298.          }
  299.       }
  300.  
  301.       var1.append(var3 ? this.negativeSuffix : this.positiveSuffix);
  302.       return var1;
  303.    }
  304.  
  305.    public Number parse(String var1, ParsePosition var2) {
  306.       if (var1.regionMatches(var2.index, this.symbols.getNaN(), 0, this.symbols.getNaN().length())) {
  307.          var2.index += this.symbols.getNaN().length();
  308.          return new Double(Double.NaN);
  309.       } else {
  310.          boolean[] var3 = new boolean[2];
  311.          if (!this.subparse(var1, var2, this.digitList, false, var3)) {
  312.             return null;
  313.          } else {
  314.             double var4 = (double)0.0F;
  315.             long var6 = 0L;
  316.             boolean var8 = true;
  317.             if (var3[0]) {
  318.                var4 = Double.POSITIVE_INFINITY;
  319.             } else if (this.digitList.fitsIntoLong(var3[1])) {
  320.                var8 = false;
  321.                var6 = this.digitList.getLong();
  322.             } else {
  323.                var4 = this.digitList.getDouble();
  324.             }
  325.  
  326.             if (this.multiplier != 1) {
  327.                if (var8) {
  328.                   var4 /= (double)this.multiplier;
  329.                } else {
  330.                   var4 = (double)var6 / (double)this.multiplier;
  331.                   if (var4 < (double)0.0F) {
  332.                      var4 = -var4;
  333.                   }
  334.                }
  335.             }
  336.  
  337.             if (!var3[1]) {
  338.                var4 = -var4;
  339.                var6 = -var6;
  340.             }
  341.  
  342.             if (this.multiplier != 1) {
  343.                var6 = (long)var4;
  344.                var8 = var4 != (double)var6;
  345.             }
  346.  
  347.             return (Number)(var8 ? new Double(var4) : new Long(var6));
  348.          }
  349.       }
  350.    }
  351.  
  352.    private final boolean subparse(String var1, ParsePosition var2, DigitList var3, boolean var4, boolean[] var5) {
  353.       int var6 = var2.index;
  354.       boolean var8 = var1.regionMatches(var6, this.positivePrefix, 0, this.positivePrefix.length());
  355.       boolean var9 = var1.regionMatches(var6, this.negativePrefix, 0, this.negativePrefix.length());
  356.       if (var8 && var9) {
  357.          if (this.positivePrefix.length() > this.negativePrefix.length()) {
  358.             var9 = false;
  359.          } else if (this.positivePrefix.length() < this.negativePrefix.length()) {
  360.             var8 = false;
  361.          }
  362.       }
  363.  
  364.       if (var8) {
  365.          var6 += this.positivePrefix.length();
  366.       } else {
  367.          if (!var9) {
  368.             return false;
  369.          }
  370.  
  371.          var6 += this.negativePrefix.length();
  372.       }
  373.  
  374.       var5[0] = false;
  375.       if (!var4 && var1.regionMatches(var6, this.symbols.getInfinity(), 0, this.symbols.getInfinity().length())) {
  376.          var6 += this.symbols.getInfinity().length();
  377.          var5[0] = true;
  378.       } else {
  379.          var3.decimalAt = var3.count = 0;
  380.          char var10 = this.symbols.getZeroDigit();
  381.          char var11 = (char)(var10 + 9);
  382.          int var12 = 48 - var10;
  383.          char var13 = this.isCurrencyFormat ? this.symbols.getMonetaryDecimalSeparator() : this.symbols.getDecimalSeparator();
  384.          char var14 = this.symbols.getGroupingSeparator();
  385.          char var15 = this.symbols.getExponentialSymbol();
  386.          boolean var16 = false;
  387.          boolean var17 = false;
  388.          int var18 = 0;
  389.          int var19 = 0;
  390.  
  391.          int var7;
  392.          for(var7 = -1; var6 < var1.length(); ++var6) {
  393.             char var20 = var1.charAt(var6);
  394.             if (var20 == var10) {
  395.                var7 = -1;
  396.                if (var3.count == 0) {
  397.                   if (var16) {
  398.                      --var3.decimalAt;
  399.                   }
  400.                } else {
  401.                   ++var19;
  402.                   var3.append((char)(var20 + var12));
  403.                }
  404.             } else if (var20 > var10 && var20 <= var11) {
  405.                ++var19;
  406.                var3.append((char)(var20 + var12));
  407.                var7 = -1;
  408.             } else if (!var4 && var20 == var13) {
  409.                if (((NumberFormat)this).isParseIntegerOnly() || var16) {
  410.                   break;
  411.                }
  412.  
  413.                var3.decimalAt = var19;
  414.                var16 = true;
  415.             } else {
  416.                if (var4 || var20 != var14 || !((NumberFormat)this).isGroupingUsed()) {
  417.                   if (!var4 && var20 == var15 && !var17) {
  418.                      ParsePosition var21 = new ParsePosition(var6 + 1);
  419.                      boolean[] var22 = new boolean[2];
  420.                      DigitList var23 = new DigitList();
  421.                      if (this.subparse(var1, var21, var23, true, var22) && var23.fitsIntoLong(var22[1])) {
  422.                         var6 = var21.index;
  423.                         var18 = (int)var23.getLong();
  424.                         if (!var22[1]) {
  425.                            var18 = -var18;
  426.                         }
  427.  
  428.                         var17 = true;
  429.                      }
  430.                   }
  431.                   break;
  432.                }
  433.  
  434.                var7 = var6;
  435.             }
  436.          }
  437.  
  438.          if (var7 != -1) {
  439.             var6 = var7;
  440.          }
  441.  
  442.          if (!var16) {
  443.             var3.decimalAt = var19;
  444.          }
  445.  
  446.          var3.decimalAt += var18;
  447.       }
  448.  
  449.       if (var8) {
  450.          var8 = var1.regionMatches(var6, this.positiveSuffix, 0, this.positiveSuffix.length());
  451.       }
  452.  
  453.       if (var9) {
  454.          var9 = var1.regionMatches(var6, this.negativeSuffix, 0, this.negativeSuffix.length());
  455.       }
  456.  
  457.       if (var8 && var9) {
  458.          if (this.positiveSuffix.length() > this.negativeSuffix.length()) {
  459.             var9 = false;
  460.          } else if (this.positiveSuffix.length() < this.negativeSuffix.length()) {
  461.             var8 = false;
  462.          }
  463.       }
  464.  
  465.       if (var8 == var9) {
  466.          return false;
  467.       } else {
  468.          var2.index = var6 + (var8 ? this.positiveSuffix.length() : this.negativeSuffix.length());
  469.          var5[1] = var8;
  470.          return true;
  471.       }
  472.    }
  473.  
  474.    public DecimalFormatSymbols getDecimalFormatSymbols() {
  475.       try {
  476.          return (DecimalFormatSymbols)this.symbols.clone();
  477.       } catch (Exception var1) {
  478.          return null;
  479.       }
  480.    }
  481.  
  482.    public void setDecimalFormatSymbols(DecimalFormatSymbols var1) {
  483.       try {
  484.          this.symbols = (DecimalFormatSymbols)var1.clone();
  485.       } catch (Exception var2) {
  486.       }
  487.    }
  488.  
  489.    public String getPositivePrefix() {
  490.       return this.positivePrefix;
  491.    }
  492.  
  493.    public void setPositivePrefix(String var1) {
  494.       this.positivePrefix = var1;
  495.    }
  496.  
  497.    public String getNegativePrefix() {
  498.       return this.negativePrefix;
  499.    }
  500.  
  501.    public void setNegativePrefix(String var1) {
  502.       this.negativePrefix = var1;
  503.    }
  504.  
  505.    public String getPositiveSuffix() {
  506.       return this.positiveSuffix;
  507.    }
  508.  
  509.    public void setPositiveSuffix(String var1) {
  510.       this.positiveSuffix = var1;
  511.    }
  512.  
  513.    public String getNegativeSuffix() {
  514.       return this.negativeSuffix;
  515.    }
  516.  
  517.    public void setNegativeSuffix(String var1) {
  518.       this.negativeSuffix = var1;
  519.    }
  520.  
  521.    public int getMultiplier() {
  522.       return this.multiplier;
  523.    }
  524.  
  525.    public void setMultiplier(int var1) {
  526.       this.multiplier = var1;
  527.    }
  528.  
  529.    public int getGroupingSize() {
  530.       return this.groupingSize;
  531.    }
  532.  
  533.    public void setGroupingSize(int var1) {
  534.       this.groupingSize = (byte)var1;
  535.    }
  536.  
  537.    public boolean isDecimalSeparatorAlwaysShown() {
  538.       return this.decimalSeparatorAlwaysShown;
  539.    }
  540.  
  541.    public void setDecimalSeparatorAlwaysShown(boolean var1) {
  542.       this.decimalSeparatorAlwaysShown = var1;
  543.    }
  544.  
  545.    public Object clone() {
  546.       try {
  547.          DecimalFormat var1 = (DecimalFormat)super.clone();
  548.          var1.symbols = (DecimalFormatSymbols)this.symbols.clone();
  549.          return var1;
  550.       } catch (Exception var2) {
  551.          throw new InternalError();
  552.       }
  553.    }
  554.  
  555.    public boolean equals(Object var1) {
  556.       if (var1 == null) {
  557.          return false;
  558.       } else if (!super.equals(var1)) {
  559.          return false;
  560.       } else {
  561.          DecimalFormat var2 = (DecimalFormat)var1;
  562.          return this.positivePrefix.equals(var2.positivePrefix) && this.positiveSuffix.equals(var2.positiveSuffix) && this.negativePrefix.equals(var2.negativePrefix) && this.negativeSuffix.equals(var2.negativeSuffix) && 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);
  563.       }
  564.    }
  565.  
  566.    public int hashCode() {
  567.       return super.hashCode() * 37 + this.positivePrefix.hashCode();
  568.    }
  569.  
  570.    public String toPattern() {
  571.       return this.toPattern(false);
  572.    }
  573.  
  574.    public String toLocalizedPattern() {
  575.       return this.toPattern(true);
  576.    }
  577.  
  578.    private String toPattern(boolean var1) {
  579.       StringBuffer var2 = new StringBuffer();
  580.  
  581.       for(int var3 = 1; var3 >= 0; --var3) {
  582.          if (var3 == 1) {
  583.             var2.append(this.positivePrefix);
  584.          } else {
  585.             var2.append(this.negativePrefix);
  586.          }
  587.  
  588.          if (this.useExponentialNotation) {
  589.             for(int var4 = ((NumberFormat)this).getMaximumIntegerDigits(); var4 > 0; --var4) {
  590.                if (var4 == this.groupingSize) {
  591.                   var2.append(var1 ? this.symbols.getGroupingSeparator() : ',');
  592.                }
  593.  
  594.                if (var4 <= ((NumberFormat)this).getMinimumIntegerDigits()) {
  595.                   var2.append(var1 ? this.symbols.getZeroDigit() : '0');
  596.                } else {
  597.                   var2.append(var1 ? this.symbols.getDigit() : '#');
  598.                }
  599.             }
  600.          } else {
  601.             int var5 = Math.max(this.groupingSize, ((NumberFormat)this).getMinimumIntegerDigits()) + 1;
  602.  
  603.             for(int var6 = var5; var6 > 0; --var6) {
  604.                if (var6 == this.groupingSize) {
  605.                   var2.append(var1 ? this.symbols.getGroupingSeparator() : ',');
  606.                }
  607.  
  608.                if (var6 <= ((NumberFormat)this).getMinimumIntegerDigits()) {
  609.                   var2.append(var1 ? this.symbols.getZeroDigit() : '0');
  610.                } else {
  611.                   var2.append(var1 ? this.symbols.getDigit() : '#');
  612.                }
  613.             }
  614.          }
  615.  
  616.          if (((NumberFormat)this).getMaximumFractionDigits() > 0 || this.decimalSeparatorAlwaysShown) {
  617.             var2.append(var1 ? this.symbols.getDecimalSeparator() : '.');
  618.          }
  619.  
  620.          for(int var7 = 0; var7 < ((NumberFormat)this).getMaximumFractionDigits(); ++var7) {
  621.             if (var7 < ((NumberFormat)this).getMinimumFractionDigits()) {
  622.                var2.append(var1 ? this.symbols.getZeroDigit() : '0');
  623.             } else {
  624.                var2.append(var1 ? this.symbols.getDigit() : '#');
  625.             }
  626.          }
  627.  
  628.          if (this.useExponentialNotation) {
  629.             var2.append(var1 ? this.symbols.getExponentialSymbol() : 'E');
  630.  
  631.             for(int var8 = 0; var8 < this.minExponentDigits; ++var8) {
  632.                var2.append(var1 ? this.symbols.getZeroDigit() : '0');
  633.             }
  634.          }
  635.  
  636.          if (var3 == 1) {
  637.             var2.append(this.positiveSuffix);
  638.             if (this.negativeSuffix.equals(this.positiveSuffix) && this.negativePrefix.equals(this.symbols.getMinusSign() + this.positivePrefix)) {
  639.                break;
  640.             }
  641.  
  642.             var2.append(var1 ? this.symbols.getPatternSeparator() : ';');
  643.          } else {
  644.             var2.append(this.negativeSuffix);
  645.          }
  646.       }
  647.  
  648.       return var2.toString();
  649.    }
  650.  
  651.    public void applyPattern(String var1) {
  652.       this.applyPattern(var1, false);
  653.    }
  654.  
  655.    public void applyLocalizedPattern(String var1) {
  656.       this.applyPattern(var1, true);
  657.    }
  658.  
  659.    private void applyPattern(String var1, boolean var2) {
  660.       char var3 = '0';
  661.       char var4 = ',';
  662.       char var5 = '.';
  663.       char var6 = '%';
  664.       char var7 = 8240;
  665.       char var8 = '#';
  666.       char var9 = ';';
  667.       char var10 = 'E';
  668.       if (var2) {
  669.          var3 = this.symbols.getZeroDigit();
  670.          var4 = this.symbols.getGroupingSeparator();
  671.          var5 = this.symbols.getDecimalSeparator();
  672.          var6 = this.symbols.getPercent();
  673.          var7 = this.symbols.getPerMill();
  674.          var8 = this.symbols.getDigit();
  675.          var9 = this.symbols.getPatternSeparator();
  676.          var10 = this.symbols.getExponentialSymbol();
  677.       }
  678.  
  679.       boolean var11 = false;
  680.       this.decimalSeparatorAlwaysShown = false;
  681.       this.isCurrencyFormat = false;
  682.       this.useExponentialNotation = false;
  683.       boolean var12 = false;
  684.       int var13 = 0;
  685.       int var14 = 0;
  686.       int var15 = 1;
  687.  
  688.       while(true) {
  689.          if (var15 >= 0 && var14 < var1.length()) {
  690.             boolean var16 = false;
  691.             StringBuffer var17 = new StringBuffer();
  692.             StringBuffer var18 = new StringBuffer();
  693.             int var19 = -1;
  694.             short var20 = 1;
  695.             int var21 = 0;
  696.             int var22 = 0;
  697.             int var23 = 0;
  698.             byte var24 = -1;
  699.             byte var25 = 0;
  700.             StringBuffer var26 = var17;
  701.  
  702.             for(int var27 = var14; var27 < var1.length(); ++var27) {
  703.                char var28 = var1.charAt(var27);
  704.                switch (var25) {
  705.                   case 0:
  706.                   case 2:
  707.                      if (var16) {
  708.                         if (var28 == '\'') {
  709.                            if (var27 + 1 < var1.length() && var1.charAt(var27 + 1) == '\'') {
  710.                               ++var27;
  711.                               var26.append(var28);
  712.                            } else {
  713.                               var16 = false;
  714.                            }
  715.                            break;
  716.                         }
  717.                      } else {
  718.                         if (var28 == var8 || var28 == var3 || var28 == var4 || var28 == var5) {
  719.                            if (var25 == 2 && var26.length() > 0) {
  720.                               throw new IllegalArgumentException("Unquoted special character '" + var28 + "' in pattern \"" + var1 + '"');
  721.                            }
  722.  
  723.                            var25 = 1;
  724.                            if (var15 == 1) {
  725.                               ;
  726.                            }
  727.  
  728.                            --var27;
  729.                            break;
  730.                         }
  731.  
  732.                         if (var28 == 164) {
  733.                            boolean var29 = var27 + 1 < var1.length() && var1.charAt(var27 + 1) == 164;
  734.                            var26.append(var29 ? this.symbols.getInternationalCurrencySymbol() : this.symbols.getCurrencySymbol());
  735.                            if (var29) {
  736.                               ++var27;
  737.                            }
  738.  
  739.                            this.isCurrencyFormat = true;
  740.                            break;
  741.                         }
  742.  
  743.                         if (var28 == '\'') {
  744.                            if (var28 == '\'') {
  745.                               if (var27 + 1 < var1.length() && var1.charAt(var27 + 1) == '\'') {
  746.                                  ++var27;
  747.                                  var26.append(var28);
  748.                               } else {
  749.                                  var16 = true;
  750.                               }
  751.                               break;
  752.                            }
  753.                         } else {
  754.                            if (var28 == var9) {
  755.                               if (var25 == 0 || var15 == 0) {
  756.                                  throw new IllegalArgumentException("Unquoted special character '" + var28 + "' in pattern \"" + var1 + '"');
  757.                               }
  758.  
  759.                               var14 = var27 + 1;
  760.                               var27 = var1.length();
  761.                               break;
  762.                            }
  763.  
  764.                            if (var28 == var6) {
  765.                               if (var20 != 1) {
  766.                                  throw new IllegalArgumentException("Too many percent/permille characters in pattern \"" + var1 + '"');
  767.                               }
  768.  
  769.                               var20 = 100;
  770.                               var28 = this.symbols.getPercent();
  771.                            } else if (var28 == var7) {
  772.                               if (var20 != 1) {
  773.                                  throw new IllegalArgumentException("Too many percent/permille characters in pattern \"" + var1 + '"');
  774.                               }
  775.  
  776.                               var20 = 1000;
  777.                               var28 = this.symbols.getPerMill();
  778.                            }
  779.                         }
  780.                      }
  781.  
  782.                      var26.append(var28);
  783.                      break;
  784.                   case 1:
  785.                      if (var15 == 1) {
  786.                         ++var13;
  787.                         if (var28 == var8) {
  788.                            if (var22 > 0) {
  789.                               ++var23;
  790.                            } else {
  791.                               ++var21;
  792.                            }
  793.  
  794.                            if (var24 >= 0 && var19 < 0) {
  795.                               ++var24;
  796.                            }
  797.                         } else if (var28 == var3) {
  798.                            if (var23 > 0) {
  799.                               throw new IllegalArgumentException("Unexpected '0' in pattern \"" + var1 + '"');
  800.                            }
  801.  
  802.                            ++var22;
  803.                            if (var24 >= 0 && var19 < 0) {
  804.                               ++var24;
  805.                            }
  806.                         } else if (var28 == var4) {
  807.                            var24 = 0;
  808.                         } else if (var28 == var5) {
  809.                            if (var19 >= 0) {
  810.                               throw new IllegalArgumentException("Multiple decimal separators in pattern \"" + var1 + '"');
  811.                            }
  812.  
  813.                            var19 = var21 + var22 + var23;
  814.                         } else {
  815.                            var25 = 2;
  816.                            var26 = var18;
  817.                            --var27;
  818.                            --var13;
  819.                         }
  820.                      } else {
  821.                         --var13;
  822.                         if (var13 == 0) {
  823.                            var25 = 2;
  824.                            var26 = var18;
  825.                         }
  826.                      }
  827.                }
  828.             }
  829.  
  830.             if (var22 == 0 && var21 > 0) {
  831.                if (var19 >= 0) {
  832.                   int var31 = var19;
  833.                   if (var19 == 0) {
  834.                      var31 = var19 + 1;
  835.                   }
  836.  
  837.                   var23 = var21 - var31;
  838.                   var21 = var31 - 1;
  839.                } else {
  840.                   --var21;
  841.                }
  842.  
  843.                var22 = 1;
  844.             }
  845.  
  846.             if ((var19 >= 0 || var23 <= 0) && (var19 < 0 || var19 >= var21 && var19 <= var21 + var22) && var24 != 0 && !var16) {
  847.                if (var15 == 1) {
  848.                   this.positivePrefix = var17.toString();
  849.                   this.positiveSuffix = var18.toString();
  850.                   this.negativePrefix = this.positivePrefix;
  851.                   this.negativeSuffix = this.positiveSuffix;
  852.                   int var32 = var21 + var22 + var23;
  853.                   ((NumberFormat)this).setMinimumIntegerDigits(var19 >= 0 ? var19 - var21 : 0);
  854.                   if (var22 > 1 && var21 == 0 && var23 == 0) {
  855.                      ((NumberFormat)this).setMinimumIntegerDigits(var22);
  856.                   } else if (var22 > 0 && var21 > 0 && var22 != var21 && var32 == var21 + var22) {
  857.                      ((NumberFormat)this).setMinimumIntegerDigits(var22);
  858.                   }
  859.  
  860.                   ((NumberFormat)this).setMaximumIntegerDigits(this.useExponentialNotation ? var21 + ((NumberFormat)this).getMinimumIntegerDigits() : 127);
  861.                   ((NumberFormat)this).setMaximumFractionDigits(var19 >= 0 ? var32 - var19 : 0);
  862.                   ((NumberFormat)this).setMinimumFractionDigits(var19 >= 0 ? var21 + var22 - var19 : 0);
  863.                   ((NumberFormat)this).setGroupingUsed(var24 > 0);
  864.                   this.groupingSize = var24 > 0 ? var24 : 0;
  865.                   this.multiplier = var20;
  866.                   this.setDecimalSeparatorAlwaysShown(var19 == 0 || var19 == var32);
  867.                } else {
  868.                   this.negativePrefix = var17.toString();
  869.                   this.negativeSuffix = var18.toString();
  870.                   var11 = true;
  871.                }
  872.  
  873.                --var15;
  874.                continue;
  875.             }
  876.  
  877.             throw new IllegalArgumentException("Malformed pattern \"" + var1 + '"');
  878.          }
  879.  
  880.          if (!var11 || this.negativePrefix.equals(this.positivePrefix) && this.negativeSuffix.equals(this.positiveSuffix)) {
  881.             this.negativeSuffix = this.positiveSuffix;
  882.             this.negativePrefix = this.symbols.getMinusSign() + this.negativePrefix;
  883.          }
  884.  
  885.          return;
  886.       }
  887.    }
  888.  
  889.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  890.       var1.defaultReadObject();
  891.       this.digitList = new DigitList();
  892.    }
  893. }
  894.