| // DecimalFormatSymbols.java - Symbols used to format numbers. |
| |
| /* Copyright (C) 1999 Cygnus Solutions |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package java.text; |
| |
| import java.io.Serializable; |
| import java.util.Locale; |
| import java.util.MissingResourceException; |
| import java.util.ResourceBundle; |
| |
| /** |
| * @author Tom Tromey <tromey@cygnus.com> |
| * @date February 24, 1999 |
| */ |
| /* Written using "Java Class Libraries", 2nd edition, plus online |
| * API docs for JDK 1.2 from http://www.javasoft.com. |
| * Status: Believed complete and correct to 1.2, except serialization. |
| */ |
| |
| public final class DecimalFormatSymbols implements Cloneable, Serializable |
| { |
| public Object clone () |
| { |
| return new DecimalFormatSymbols (this); |
| } |
| |
| private DecimalFormatSymbols (DecimalFormatSymbols orig) |
| { |
| this.currencySymbol = orig.currencySymbol; |
| this.decimalSeparator = orig.decimalSeparator; |
| this.digit = orig.digit; |
| this.exponential = orig.exponential; |
| this.groupingSeparator = orig.groupingSeparator; |
| this.infinity = orig.infinity; |
| this.intlCurrencySymbol = orig.intlCurrencySymbol; |
| this.minusSign = orig.minusSign; |
| this.NaN = orig.NaN; |
| this.patternSeparator = orig.patternSeparator; |
| this.percent = orig.percent; |
| this.perMill = orig.perMill; |
| this.zeroDigit = orig.zeroDigit; |
| } |
| |
| public DecimalFormatSymbols () |
| { |
| this (Locale.getDefault()); |
| } |
| |
| private final String safeGetString (ResourceBundle bundle, |
| String name, String def) |
| { |
| if (bundle != null) |
| { |
| try |
| { |
| return bundle.getString(name); |
| } |
| catch (MissingResourceException x) |
| { |
| } |
| } |
| return def; |
| } |
| |
| public final char safeGetChar (ResourceBundle bundle, |
| String name, char def) |
| { |
| String r = null; |
| if (bundle != null) |
| { |
| try |
| { |
| r = bundle.getString(name); |
| } |
| catch (MissingResourceException x) |
| { |
| } |
| } |
| if (r == null || r.length() < 1) |
| return def; |
| return r.charAt(0); |
| } |
| |
| public DecimalFormatSymbols (Locale loc) |
| { |
| ResourceBundle res; |
| try |
| { |
| res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc); |
| } |
| catch (MissingResourceException x) |
| { |
| res = null; |
| } |
| currencySymbol = safeGetString (res, "currencySymbol", "$"); |
| decimalSeparator = safeGetChar (res, "decimalSeparator", '.'); |
| digit = safeGetChar (res, "digit", '#'); |
| exponential = safeGetChar (res, "exponential", 'E'); |
| groupingSeparator = safeGetChar (res, "groupingSeparator", ','); |
| infinity = safeGetString (res, "infinity", "\u221e"); |
| // FIXME: default? |
| intlCurrencySymbol = safeGetString (res, "intlCurrencySymbol", "$"); |
| minusSign = safeGetChar (res, "minusSign", '-'); |
| NaN = safeGetString (res, "NaN", "\ufffd"); |
| patternSeparator = safeGetChar (res, "patternSeparator", ';'); |
| percent = safeGetChar (res, "percent", '%'); |
| perMill = safeGetChar (res, "perMill", '\u2030'); |
| zeroDigit = safeGetChar (res, "zeroDigit", '0'); |
| } |
| |
| public boolean equals (Object obj) |
| { |
| if (! (obj instanceof DecimalFormatSymbols)) |
| return false; |
| DecimalFormatSymbols dfs = (DecimalFormatSymbols) obj; |
| return (currencySymbol.equals(dfs.currencySymbol) |
| && decimalSeparator == dfs.decimalSeparator |
| && digit == dfs.digit |
| && exponential == dfs.exponential |
| && groupingSeparator == dfs.groupingSeparator |
| && infinity.equals(dfs.infinity) |
| && intlCurrencySymbol.equals(dfs.intlCurrencySymbol) |
| && minusSign == dfs.minusSign |
| && NaN.equals(dfs.NaN) |
| && patternSeparator == dfs.patternSeparator |
| && percent == dfs.percent |
| && perMill == dfs.perMill |
| && zeroDigit == dfs.zeroDigit); |
| } |
| |
| public String getCurrencySymbol () |
| { |
| return currencySymbol; |
| } |
| |
| public char getDecimalSeparator () |
| { |
| return decimalSeparator; |
| } |
| |
| public char getDigit () |
| { |
| return digit; |
| } |
| |
| // This is our own extension. |
| char getExponential () |
| { |
| return exponential; |
| } |
| |
| public char getGroupingSeparator () |
| { |
| return groupingSeparator; |
| } |
| |
| public String getInfinity () |
| { |
| return infinity; |
| } |
| |
| public String getInternationalCurrencySymbol () |
| { |
| return intlCurrencySymbol; |
| } |
| |
| public char getMinusSign () |
| { |
| return minusSign; |
| } |
| |
| public String getNaN () |
| { |
| return NaN; |
| } |
| |
| public char getPatternSeparator () |
| { |
| return patternSeparator; |
| } |
| |
| public char getPercent () |
| { |
| return percent; |
| } |
| |
| public char getPerMill () |
| { |
| return perMill; |
| } |
| |
| public char getZeroDigit () |
| { |
| return zeroDigit; |
| } |
| |
| public int hashCode () |
| { |
| // Compute based on zero digit, grouping separator, and decimal |
| // separator -- JCL book. This probably isn't a very good hash |
| // code. |
| return zeroDigit << 16 + groupingSeparator << 8 + decimalSeparator; |
| } |
| |
| public void setCurrenySymbol (String currency) |
| { |
| currencySymbol = currency; |
| } |
| |
| public void setDecimalSeparator (char decimalSep) |
| { |
| decimalSeparator = decimalSep; |
| } |
| |
| public void setDigit (char digit) |
| { |
| this.digit = digit; |
| } |
| |
| // This is our own extension. |
| void setExponential (char exp) |
| { |
| exponential = exp; |
| } |
| |
| public void setGroupingSeparator (char groupSep) |
| { |
| groupingSeparator = groupSep; |
| } |
| |
| public void setInfinity (String infinity) |
| { |
| this.infinity = infinity; |
| } |
| |
| public void setInternationalCurrencySymbol (String currency) |
| { |
| intlCurrencySymbol = currency; |
| } |
| |
| public void setMinusSign (char minusSign) |
| { |
| this.minusSign = minusSign; |
| } |
| |
| public void setNaN (String nan) |
| { |
| NaN = nan; |
| } |
| |
| public void setPatternSeparator (char patternSep) |
| { |
| patternSeparator = patternSep; |
| } |
| |
| public void setPercent (char percent) |
| { |
| this.percent = percent; |
| } |
| |
| public void setPerMill (char perMill) |
| { |
| this.perMill = perMill; |
| } |
| |
| public void setZeroDigit (char zeroDigit) |
| { |
| this.zeroDigit = zeroDigit; |
| } |
| |
| // The names of the instance variables are fixed by the |
| // serialization spec. |
| private String currencySymbol; |
| private char decimalSeparator; |
| private char digit; |
| private char exponential; |
| private char groupingSeparator; |
| private String infinity; |
| private String intlCurrencySymbol; |
| private char minusSign; |
| private String NaN; |
| private char patternSeparator; |
| private char percent; |
| private char perMill; |
| private char zeroDigit; |
| } |