diff options
Diffstat (limited to 'libjava/java/text/DecimalFormatSymbols.java')
-rw-r--r-- | libjava/java/text/DecimalFormatSymbols.java | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/libjava/java/text/DecimalFormatSymbols.java b/libjava/java/text/DecimalFormatSymbols.java new file mode 100644 index 00000000000..783cb6f7f50 --- /dev/null +++ b/libjava/java/text/DecimalFormatSymbols.java @@ -0,0 +1,293 @@ +// 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; +} |