aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/text
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/text')
-rw-r--r--libjava/java/text/BreakIterator.java160
-rw-r--r--libjava/java/text/CharacterIterator.java36
-rw-r--r--libjava/java/text/ChoiceFormat.java310
-rw-r--r--libjava/java/text/CollationElementIterator.java79
-rw-r--r--libjava/java/text/CollationKey.java104
-rw-r--r--libjava/java/text/Collator.java135
-rw-r--r--libjava/java/text/DateFormat.java324
-rw-r--r--libjava/java/text/DateFormatSymbols.java283
-rw-r--r--libjava/java/text/DecimalFormat.java986
-rw-r--r--libjava/java/text/DecimalFormatSymbols.java293
-rw-r--r--libjava/java/text/FieldPosition.java65
-rw-r--r--libjava/java/text/Format.java56
-rw-r--r--libjava/java/text/MessageFormat.java544
-rw-r--r--libjava/java/text/NumberFormat.java261
-rw-r--r--libjava/java/text/ParseException.java34
-rw-r--r--libjava/java/text/ParsePosition.java59
-rw-r--r--libjava/java/text/RuleBasedCollator.java366
-rw-r--r--libjava/java/text/SimpleDateFormat.java528
-rw-r--r--libjava/java/text/StringCharacterIterator.java142
-rw-r--r--libjava/java/text/natCollator.cc74
20 files changed, 0 insertions, 4839 deletions
diff --git a/libjava/java/text/BreakIterator.java b/libjava/java/text/BreakIterator.java
deleted file mode 100644
index 5832695bb9d..00000000000
--- a/libjava/java/text/BreakIterator.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// BreakIterator.java - Iterate over logical breaks in text.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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 March 19, 1999
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct to 1.1.
- */
-
-public abstract class BreakIterator implements Cloneable, Serializable
-{
- // The value was discovered by writing a test program.
- public static final int DONE = -1;
-
- protected BreakIterator ()
- {
- }
-
- public abstract int current ();
- public abstract int first ();
- public abstract int following (int pos);
-
- public static synchronized Locale[] getAvailableLocales ()
- {
- // FIXME.
- return null;
- }
-
- private static BreakIterator getInstance (String type, Locale loc)
- {
- String className;
- try
- {
- ResourceBundle res
- = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
- className = res.getString(type);
- }
- catch (MissingResourceException x)
- {
- return null;
- }
- try
- {
- Class k = Class.forName(className);
- return (BreakIterator) k.newInstance();
- }
- catch (ClassNotFoundException x1)
- {
- return null;
- }
- catch (InstantiationException x2)
- {
- return null;
- }
- catch (IllegalAccessException x3)
- {
- return null;
- }
- }
-
- public static BreakIterator getCharacterInstance ()
- {
- return getCharacterInstance (Locale.getDefault());
- }
-
- public static BreakIterator getCharacterInstance (Locale loc)
- {
- BreakIterator r = getInstance ("CharacterIterator", loc);
- if (r == null)
- r = new gnu.gcj.text.CharacterBreakIterator ();
- return r;
- }
-
- public static BreakIterator getLineInstance ()
- {
- return getLineInstance (Locale.getDefault());
- }
-
- public static BreakIterator getLineInstance (Locale loc)
- {
- BreakIterator r = getInstance ("LineIterator", loc);
- if (r == null)
- r = new gnu.gcj.text.LineBreakIterator ();
- return r;
- }
-
- public static BreakIterator getSentenceInstance ()
- {
- return getSentenceInstance (Locale.getDefault());
- }
-
- public static BreakIterator getSentenceInstance (Locale loc)
- {
- BreakIterator r = getInstance ("SentenceIterator", loc);
- if (r == null)
- r = new gnu.gcj.text.SentenceBreakIterator ();
- return r;
- }
-
- public abstract CharacterIterator getText ();
-
- public static BreakIterator getWordInstance ()
- {
- return getWordInstance (Locale.getDefault());
- }
-
- public static BreakIterator getWordInstance (Locale loc)
- {
- BreakIterator r = getInstance ("WordIterator", loc);
- if (r == null)
- r = new gnu.gcj.text.WordBreakIterator ();
- return r;
- }
-
- public boolean isBoundary (int pos)
- {
- if (pos == 0)
- return true;
- return following (pos - 1) == pos;
- }
-
- public abstract int last ();
- public abstract int next ();
- public abstract int next (int n);
-
- public int preceding (int pos)
- {
- if (following (pos) == DONE)
- last ();
- while (previous () >= pos)
- ;
- return current ();
- }
-
- public abstract int previous ();
-
- public void setText (String newText)
- {
- setText (new StringCharacterIterator (newText));
- }
-
- public abstract void setText (CharacterIterator newText);
-}
diff --git a/libjava/java/text/CharacterIterator.java b/libjava/java/text/CharacterIterator.java
deleted file mode 100644
index a10ee4ad332..00000000000
--- a/libjava/java/text/CharacterIterator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// CharacterIterator.java - Protocol for iterating over Unicode characters.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date February 22, 1999
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct to 1.1.
- */
-
-public interface CharacterIterator extends Cloneable
-{
- public abstract Object clone ();
- public abstract char current ();
- public abstract char first ();
- public abstract int getBeginIndex ();
- public abstract int getEndIndex ();
- public abstract int getIndex ();
- public abstract char last ();
- public abstract char next ();
- public abstract char previous ();
- public abstract char setIndex (int idx);
-
- public static final char DONE = '\uffff';
-}
diff --git a/libjava/java/text/ChoiceFormat.java b/libjava/java/text/ChoiceFormat.java
deleted file mode 100644
index 92b697c273f..00000000000
--- a/libjava/java/text/ChoiceFormat.java
+++ /dev/null
@@ -1,310 +0,0 @@
-// ChoiceFormat.java - Formatter for `switch'-like string substitution.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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.util.Vector;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 9, 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.1.
- */
-
-public class ChoiceFormat extends NumberFormat
-{
- // Note: we assume the same kind of quoting rules apply here.
- // This isn't explicitly documented. But for instance we accept
- // '#' as a literal hash in a format string.
- public void applyPattern (String newPattern)
- {
- int index = 0, max = newPattern.length();
- Vector stringVec = new Vector ();
- Vector limitVec = new Vector ();
- StringBuffer buf = new StringBuffer ();
-
- while (true)
- {
- // Find end of double.
- int dstart = index;
- while (index < max)
- {
- char c = newPattern.charAt(index);
- if (c == '#' || c == '\u2064' || c == '<')
- break;
- ++index;
- }
-
- if (index == max)
- throw new IllegalArgumentException ("unexpected end of text");
- Double d = new Double (newPattern.substring(dstart, index));
-
- if (newPattern.charAt(index) == '<')
- d = new Double (nextDouble (d.doubleValue()));
-
- limitVec.addElement(d);
-
- // Scan text.
- ++index;
- buf.setLength(0);
- while (index < max)
- {
- char c = newPattern.charAt(index);
- if (c == '\'' && index < max + 1
- && newPattern.charAt(index + 1) == '\'')
- {
- buf.append(c);
- ++index;
- }
- else if (c == '\'' && index < max + 2)
- {
- buf.append(newPattern.charAt(index + 1));
- index += 2;
- }
- else if (c == '|')
- break;
- else
- buf.append(c);
- ++index;
- }
-
- stringVec.addElement(buf.toString());
- if (index == max)
- break;
- ++index;
- }
-
- strings = new String[stringVec.size()];
- stringVec.copyInto(strings);
-
- limits = new double[limitVec.size()];
- for (int i = 0; i < limits.length; ++i)
- {
- Double d = (Double) limitVec.elementAt(i);
- limits[i] = d.doubleValue();
- }
- }
-
- public ChoiceFormat (String newPattern)
- {
- super ();
- applyPattern (newPattern);
- }
-
- public ChoiceFormat (double[] limits, String[] strings)
- {
- super ();
- setChoices (limits, strings);
- }
-
- public Object clone ()
- {
- return new ChoiceFormat (limits, strings);
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof ChoiceFormat))
- return false;
- ChoiceFormat cf = (ChoiceFormat) obj;
- if (limits.length != cf.limits.length)
- return false;
- for (int i = limits.length - 1; i >= 0; --i)
- {
- if (limits[i] != cf.limits[i]
- || !strings[i].equals(cf.strings[i]))
- return false;
- }
- return true;
- }
-
- public StringBuffer format (long num, StringBuffer appendBuf,
- FieldPosition pos)
- {
- return format ((double) num, appendBuf, pos);
- }
-
- public StringBuffer format (double num, StringBuffer appendBuf,
- FieldPosition pos)
- {
- if (limits.length == 0)
- return appendBuf;
-
- int index = 0;
- if (! Double.isNaN(num) && num >= limits[0])
- {
- for (; index < limits.length - 1; ++index)
- {
- if (limits[index] <= num
- && index != limits.length - 2
- && num < limits[index + 1])
- break;
- }
- }
-
- return appendBuf.append(strings[index]);
- }
-
- public Object[] getFormats ()
- {
- return (Object[]) strings.clone();
- }
-
- public double[] getLimits ()
- {
- return (double[]) limits.clone();
- }
-
- public int hashCode ()
- {
- int hash = 0;
- for (int i = 0; i < limits.length; ++i)
- {
- long v = Double.doubleToLongBits(limits[i]);
- hash ^= (v ^ (v >>> 32));
- hash ^= strings[i].hashCode();
- }
- return hash;
- }
-
- public static final double nextDouble (double d)
- {
- return nextDouble (d, true);
- }
-
- public static double nextDouble (double d, boolean next)
- {
- if (Double.isInfinite(d) || Double.isNaN(d))
- return d;
-
- long bits = Double.doubleToLongBits(d);
-
- long mantMask = (1L << mantissaBits) - 1;
- long mantissa = bits & mantMask;
-
- long expMask = (1L << exponentBits) - 1;
- long exponent = (bits >>> mantissaBits) & expMask;
-
- if (next ^ (bits < 0)) // Increment magnitude
- {
- if (mantissa == (1L << mantissaBits) - 1)
- {
- mantissa = 0L;
- exponent++;
-
- // Check for absolute overflow.
- if (exponent >= (1L << mantissaBits))
- return (bits > 0) ? Double.POSITIVE_INFINITY
- : Double.NEGATIVE_INFINITY;
- }
- else
- mantissa++;
- }
- else // Decrement magnitude
- {
- if (exponent == 0L && mantissa == 0L)
- {
- // The only case where there is a change of sign
- return next ? Double.MIN_VALUE : -Double.MIN_VALUE;
- }
- else
- {
- if (mantissa == 0L)
- {
- mantissa = (1L << mantissaBits) - 1;
- exponent--;
- }
- else
- mantissa--;
- }
- }
-
- long result = bits < 0 ? 1 : 0;
- result = (result << exponentBits) | exponent;
- result = (result << mantissaBits) | mantissa;
- return Double.longBitsToDouble(result);
- }
-
- public Number parse (String sourceStr, ParsePosition pos)
- {
- int index = pos.getIndex();
- for (int i = 0; i < limits.length; ++i)
- {
- if (sourceStr.startsWith(strings[i], index))
- {
- pos.setIndex(index + strings[i].length());
- return new Double (limits[i]);
- }
- }
- pos.setErrorIndex(index);
- return new Double (Double.NaN);
- }
-
- public static final double previousDouble (double d)
- {
- return nextDouble (d, false);
- }
-
- public void setChoices (double[] limits, String[] strings)
- {
- if (limits == null || strings == null)
- throw new NullPointerException ();
- if (limits.length != strings.length)
- throw new IllegalArgumentException ();
- this.strings = (String[]) strings.clone();
- this.limits = (double[]) limits.clone();
- }
-
- private final void quoteString (StringBuffer dest, String text)
- {
- int max = text.length();
- for (int i = 0; i < max; ++i)
- {
- char c = text.charAt(i);
- if (c == '\'')
- {
- dest.append(c);
- dest.append(c);
- }
- else if (c == '#' || c == '|' || c == '\u2064' || c == '<')
- {
- dest.append('\'');
- dest.append(c);
- dest.append('\'');
- }
- else
- dest.append(c);
- }
- }
-
- public String toPattern ()
- {
- StringBuffer result = new StringBuffer ();
- for (int i = 0; i < limits.length; ++i)
- {
- result.append(limits[i]);
- result.append('#');
- quoteString (result, strings[i]);
- }
- return result.toString();
- }
-
- // Formats and limits.
- private String[] strings;
- private double[] limits;
-
- // Number of mantissa bits in double.
- private static final int mantissaBits = 52;
- // Number of exponent bits in a double.
- private static final int exponentBits = 11;
-}
diff --git a/libjava/java/text/CollationElementIterator.java b/libjava/java/text/CollationElementIterator.java
deleted file mode 100644
index 96732f7b2e3..00000000000
--- a/libjava/java/text/CollationElementIterator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// CollationElementIterator.java - Iterate over decomposed characters.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 25, 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 JDK 1.1.
- */
-
-public final class CollationElementIterator
-{
- public static final int NULLORDER = 0xffffffff;
-
- public int next ()
- {
- if (index == text.length())
- return NULLORDER;
- return collator.ceiNext(this);
- }
-
- // This one returns int while the others return short.
- public static final int primaryOrder (int order)
- {
- // From the JDK 1.2 spec.
- return order >>> 16;
- }
-
- public void reset ()
- {
- index = 0;
- }
-
- public static final short secondaryOrder (int order)
- {
- // From the JDK 1.2 spec.
- return (order >>> 8) & 255;
- }
-
- public static final short tertiaryOrder (int order)
- {
- // From the JDK 1.2 spec.
- return order & 255;
- }
-
- // Non-public constructor.
- CollationElementIterator (String text, RuleBasedCollator collator)
- {
- this.text = text;
- this.index = 0;
- this.lookahead_set = false;
- this.lookahead = 0;
- this.collator = collator;
- }
-
- // Text over which we iterate.
- String text;
-
- // Index of next character to examine in TEXT.
- int index;
-
- // A piece of lookahead.
- boolean lookahead_set;
- int lookahead;
-
- // The RuleBasedCollator which created this object.
- RuleBasedCollator collator;
-}
diff --git a/libjava/java/text/CollationKey.java b/libjava/java/text/CollationKey.java
deleted file mode 100644
index 725b66a8138..00000000000
--- a/libjava/java/text/CollationKey.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// CollationKey.java - Sort key for locale-sensitive String.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 25, 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.
- */
-
-public final class CollationKey
-{
- public int compareTo (CollationKey target)
- {
- int max = Math.min(key.length, target.key.length);
-
- for (int i = 0; i < max; ++i)
- {
- if (key[i] != target.key[i])
- return key[i] - target.key[i];
- }
-
- return key.length - target.key.length;
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof CollationKey))
- return false;
-
- CollationKey ck = (CollationKey) obj;
-
- if (key.length != ck.key.length)
- return false;
-
- for (int i = 0; i < key.length; ++i)
- if (key[i] != ck.key[i])
- return false;
-
- return true;
- }
-
- public String getSourceString ()
- {
- return originalText;
- }
-
- public int hashCode ()
- {
- // We just follow BitSet instead of thinking up something new.
- long h = originalText.hashCode();
- for (int i = key.length - 1; i >= 0; --i)
- h ^= key[i] * (i + 1);
- return (int) ((h >> 32) ^ h);
- }
-
- public byte[] toByteArray ()
- {
- byte[] r = new byte[4 * key.length];
- int off = 0;
- for (int i = 0; i < key.length; ++i)
- {
- r[off++] = (byte) ((key[i] >>> 24) & 255);
- r[off++] = (byte) ((key[i] >>> 16) & 255);
- r[off++] = (byte) ((key[i] >>> 8) & 255);
- r[off++] = (byte) ((key[i] ) & 255);
- }
- return r;
- }
-
- CollationKey (CollationElementIterator iter, String originalText,
- int strength)
- {
- this.originalText = originalText;
-
- // Compute size of required array.
- int size = 0;
- while (RuleBasedCollator.next(iter, strength)
- != CollationElementIterator.NULLORDER)
- ++size;
-
- iter.reset();
- key = new int[size];
- for (int i = 0; i < size; i++)
- key[i] = RuleBasedCollator.next(iter, strength);
- }
-
- // Original string.
- private String originalText;
-
- // Collation key.
- private int[] key;
-}
diff --git a/libjava/java/text/Collator.java b/libjava/java/text/Collator.java
deleted file mode 100644
index 30b746ef599..00000000000
--- a/libjava/java/text/Collator.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// Collator.java - Locale-sensitive string comparison.
-
-/* Copyright (C) 1999, 2000 Free Software Foundation
-
- 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 March 18, 1999
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 from http://www.javasoft.com.
- * Status: Mostly complete, but parts stubbed out. Look for FIXME.
- */
-
-public abstract class Collator implements Cloneable, Serializable
-{
- public static final int NO_DECOMPOSITION = 0;
- public static final int CANONICAL_DECOMPOSITION = 1;
- public static final int FULL_DECOMPOSITION = 2;
-
- public static final int PRIMARY = 0;
- public static final int SECONDARY = 1;
- public static final int TERTIARY = 2;
- public static final int IDENTICAL = 3;
-
- protected Collator ()
- {
- strength = TERTIARY;
- decmp = CANONICAL_DECOMPOSITION;
- }
-
- public abstract int compare (String source, String target);
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof Collator))
- return false;
- Collator c = (Collator) obj;
- return decmp == c.decmp && strength == c.strength;
- }
-
- public boolean equals (String source, String target)
- {
- return compare (source, target) == 0;
- }
-
- public Object clone ()
- {
- return super.clone ();
- }
-
- public static synchronized Locale[] getAvailableLocales ()
- {
- // FIXME.
- return null;
- }
-
- public abstract CollationKey getCollationKey (String source);
-
- public synchronized int getDecomposition ()
- {
- return decmp;
- }
-
- public static Collator getInstance ()
- {
- return getInstance (Locale.getDefault());
- }
-
- public static Collator getInstance (Locale loc)
- {
- ResourceBundle res;
- String pattern;
- try
- {
- res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
- pattern = res.getString("collatorRule");
- }
- catch (MissingResourceException x)
- {
- return null;
- }
- try
- {
- return new RuleBasedCollator (pattern);
- }
- catch (ParseException x)
- {
- return null;
- }
- }
-
- public synchronized int getStrength ()
- {
- return strength;
- }
-
- public abstract int hashCode ();
-
- public synchronized void setDecomposition (int mode)
- {
- if (mode != NO_DECOMPOSITION
- && mode != CANONICAL_DECOMPOSITION
- && mode != FULL_DECOMPOSITION)
- throw new IllegalArgumentException ();
- decmp = mode;
- }
-
- public synchronized void setStrength (int strength)
- {
- if (strength != PRIMARY && strength != SECONDARY
- && strength != TERTIARY && strength != IDENTICAL)
- throw new IllegalArgumentException ();
- this.strength = strength;
- }
-
- // Decompose a single character and append results to the buffer.
- protected native final void decomposeCharacter (char c, StringBuffer buf);
-
- // These names are fixed by the serialization spec.
- protected int decmp;
- protected int strength;
-}
diff --git a/libjava/java/text/DateFormat.java b/libjava/java/text/DateFormat.java
deleted file mode 100644
index ee2178cd68f..00000000000
--- a/libjava/java/text/DateFormat.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- 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.util.*;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Mostly complete; search for FIXME to see omissions.
- */
-
-public abstract class DateFormat extends Format implements Cloneable
-{
- protected Calendar calendar;
- protected NumberFormat numberFormat;
-
- // (Values determined using a test program.)
- public final static int FULL = 0;
- public final static int LONG = 1;
- public final static int MEDIUM = 2;
- public final static int SHORT = 3;
- public final static int DEFAULT = MEDIUM;
-
- public final static int ERA_FIELD = 0;
- public final static int YEAR_FIELD = 1;
- public final static int MONTH_FIELD = 2;
- public final static int DATE_FIELD = 3;
- public final static int HOUR_OF_DAY1_FIELD = 4;
- public final static int HOUR_OF_DAY0_FIELD = 5;
- public final static int MINUTE_FIELD = 6;
- public final static int SECOND_FIELD = 7;
- public final static int MILLISECOND_FIELD = 8;
- public final static int DAY_OF_WEEK_FIELD = 9;
- public final static int DAY_OF_YEAR_FIELD = 10;
- public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
- public final static int WEEK_OF_YEAR_FIELD = 12;
- public final static int WEEK_OF_MONTH_FIELD = 13;
- public final static int AM_PM_FIELD = 14;
- public final static int HOUR1_FIELD = 15;
- public final static int HOUR0_FIELD = 16;
- public final static int TIMEZONE_FIELD = 17;
-
- protected DateFormat ()
- {
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof DateFormat))
- return false;
- DateFormat d = (DateFormat) obj;
- return calendar.equals(d.calendar) && numberFormat.equals(d.numberFormat);
- }
-
- public Object clone ()
- {
- // We know the superclass just call's Object's generic cloner.
- return super.clone ();
- }
-
- public final StringBuffer format (Object obj,
- StringBuffer buf, FieldPosition pos)
- {
- if (obj instanceof Number)
- return format (new Date(((Number) obj).longValue()), buf, pos);
- return format ((Date) obj, buf, pos);
- }
-
- public final String format (Date date)
- {
- StringBuffer sb = new StringBuffer ();
- format (date, sb, new FieldPosition (MONTH_FIELD));
- return sb.toString();
- }
-
- public abstract StringBuffer format (Date date,
- StringBuffer buf, FieldPosition pos);
-
- public static Locale[] getAvailableLocales ()
- {
- return null; // FIXME
- }
-
- public Calendar getCalendar ()
- {
- return calendar;
- }
-
- private static final DateFormat computeInstance (int style, Locale loc,
- boolean use_date,
- boolean use_time)
- {
- return computeInstance (style, style, loc, use_date, use_time);
- }
-
- private static final DateFormat computeInstance (int dateStyle,
- int timeStyle,
- Locale loc,
- boolean use_date,
- boolean use_time)
- {
- ResourceBundle res;
- try
- {
- res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
- }
- catch (MissingResourceException x)
- {
- res = null;
- }
-
- String pattern = null;
- if (use_date)
- {
- String name, def;
- switch (dateStyle)
- {
- case FULL:
- name = "fullDateFormat";
- def = "EEEE MMMM d, yyyy G";
- break;
- case LONG:
- name = "longDateFormat";
- def = "MMMM d, yyyy";
- break;
- case MEDIUM:
- name = "mediumDateFormat";
- def = "d-MMM-yy";
- break;
- case SHORT:
- name = "shortDateFormat";
- def = "M/d/yy";
- break;
- default:
- throw new IllegalArgumentException ();
- }
- try
- {
- pattern = res == null ? def : res.getString(name);
- }
- catch (MissingResourceException x)
- {
- pattern = def;
- }
- }
-
- if (use_time)
- {
- if (pattern == null)
- pattern = "";
- else
- pattern += " ";
-
- String name, def;
- switch (timeStyle)
- {
- case FULL:
- name = "fullTimeFormat";
- def = "h:mm:ss;S 'o''clock' a z";
- break;
- case LONG:
- name = "longTimeFormat";
- def = "h:mm:ss a z";
- break;
- case MEDIUM:
- name = "mediumTimeFormat";
- def = "h:mm:ss a";
- break;
- case SHORT:
- name = "shortTimeFormat";
- def = "h:mm a";
- break;
- default:
- throw new IllegalArgumentException ();
- }
-
- String s;
- try
- {
- s = res == null ? def : res.getString(name);
- }
- catch (MissingResourceException x)
- {
- s = def;
- }
- pattern += s;
- }
-
- return new SimpleDateFormat (pattern, loc);
- }
-
- public static final DateFormat getDateInstance ()
- {
- return getDateInstance (DEFAULT, Locale.getDefault());
- }
-
- public static final DateFormat getDateInstance (int style)
- {
- return getDateInstance (style, Locale.getDefault());
- }
-
- public static final DateFormat getDateInstance (int style, Locale loc)
- {
- return computeInstance (style, loc, true, false);
- }
-
- public static final DateFormat getDateTimeInstance ()
- {
- return getDateTimeInstance (DEFAULT, DEFAULT, Locale.getDefault());
- }
-
- public static final DateFormat getDateTimeInstance (int style)
- {
- return getDateTimeInstance (style, style, Locale.getDefault());
- }
-
- public static final DateFormat getDateTimeInstance (int dateStyle,
- int timeStyle)
- {
- return getDateTimeInstance (dateStyle, timeStyle, Locale.getDefault());
- }
-
- public static final DateFormat getDateTimeInstance (int dateStyle,
- int timeStyle,
- Locale loc)
- {
- return computeInstance (dateStyle, timeStyle, loc, true, true);
- }
-
- public static final DateFormat getInstance ()
- {
- // JCL book says SHORT.
- return getDateTimeInstance (SHORT, SHORT, Locale.getDefault());
- }
-
- public NumberFormat getNumberFormat ()
- {
- return numberFormat;
- }
-
- public static final DateFormat getTimeInstance ()
- {
- return getTimeInstance (DEFAULT, Locale.getDefault());
- }
-
- public static final DateFormat getTimeInstance (int style)
- {
- return getTimeInstance (style, Locale.getDefault());
- }
-
- public static final DateFormat getTimeInstance (int style, Locale loc)
- {
- return computeInstance (style, loc, false, true);
- }
-
- public TimeZone getTimeZone ()
- {
- return calendar.getTimeZone();
- }
-
- public int hashCode ()
- {
- int hash = calendar.hashCode();
- if (numberFormat != null)
- hash ^= numberFormat.hashCode();
- return hash;
- }
-
- public boolean isLenient ()
- {
- return calendar.isLenient();
- }
-
- public Date parse (String source) throws ParseException
- {
- ParsePosition pos = new ParsePosition(0);
- Date result = parse (source, pos);
- if (result == null)
- {
- int index = pos.getErrorIndex();
- if (index < 0)
- index = pos.getIndex();
- throw new ParseException("invalid Date syntax", index);
- }
- return result;
- }
-
- public abstract Date parse (String source, ParsePosition pos);
-
- public Object parseObject (String source, ParsePosition pos)
- {
- return parse(source, pos);
- }
-
- public void setCalendar (Calendar calendar)
- {
- this.calendar = calendar;
- }
-
- public void setLenient (boolean lenient)
- {
- calendar.setLenient(lenient);
- }
-
- public void setNumberFormat (NumberFormat numberFormat)
- {
- this.numberFormat = numberFormat;
- }
-
- public void setTimeZone (TimeZone timeZone)
- {
- calendar.setTimeZone(timeZone);
- }
-}
diff --git a/libjava/java/text/DateFormatSymbols.java b/libjava/java/text/DateFormatSymbols.java
deleted file mode 100644
index 91b1292ef27..00000000000
--- a/libjava/java/text/DateFormatSymbols.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- 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.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 24, 1998.
- */
-
-/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3.
- * Status: Believed complete and correct.
- */
-
-public class DateFormatSymbols extends Object
- implements java.io.Serializable, Cloneable
-{
- private String[] ampms;
- private String[] eras;
- private String localPatternChars;
- private String[] months;
- private String[] shortMonths;
- private String[] shortWeekdays;
- private String[] weekdays;
- private String[][] zoneStrings;
-
- private static final String[] ampmsDefault = {"AM", "PM" };
- private static final String[] erasDefault = {"BC", "AD" };
- // localPatternCharsDefault is used by SimpleDateFormat.
- protected static final String localPatternCharsDefault
- = "GyMdkHmsSEDFwWahKz";
- private static final String[] monthsDefault = {
- "January", "February", "March", "April", "May", "June",
- "July", "August", "September", "October", "November", "December", ""
- };
- private static final String[] shortMonthsDefault = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""
- };
- private static final String[] shortWeekdaysDefault = {
- "", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- };
- private static final String[] weekdaysDefault = {
- "", "Sunday", "Monday", "Tuesday",
- "Wednesday", "Thursday", "Friday", "Saturday"
- };
-
- private static String[][] zoneStringsDefault = {
- { "PST", "Pacific Standard Time", "PST",
- /**/ "Pacific Daylight Time", "PDT", "San Francisco" },
- { "MST", "Mountain Standard Time", "MST",
- /**/ "Mountain Daylight Time", "MDT", "Denver" },
- { "PNT", "Mountain Standard Time", "MST",
- /**/ "Mountain Standard Time", "MST", "Phoenix" },
- { "CST", "Central Standard Time", "CST",
- /**/ "Central Daylight Time", "CDT", "Chicago" },
- { "EST", "Eastern Standard Time", "EST",
- /**/ "Eastern Daylight Time", "EDT", "Boston" },
- { "IET", "Eastern Standard Time", "EST",
- /**/ "Eastern Standard Time", "EST", "Indianapolis" },
- { "PRT", "Atlantic Standard Time", "AST",
- /**/ "Atlantic Daylight Time", "ADT", "Halifax" },
- { "HST", "Hawaii Standard Time", "HST",
- /**/ "Hawaii Daylight Time", "HDT", "Honolulu" },
- { "AST", "Alaska Standard Time", "AST",
- /**/ "Alaska Daylight Time", "ADT", "Anchorage" }
- };
-
- private final Object safeGetResource (ResourceBundle res,
- String key, Object def)
- {
- if (res != null)
- {
- try
- {
- return res.getObject(key);
- }
- catch (MissingResourceException x)
- {
- }
- }
- return def;
- }
-
- public DateFormatSymbols (Locale locale)
- {
- ResourceBundle res;
- try
- {
- res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", locale);
- }
- catch (MissingResourceException x)
- {
- res = null;
- }
- ampms = (String[]) safeGetResource (res, "ampm", ampmsDefault);
- eras = (String[]) safeGetResource (res, "eras", erasDefault);
- localPatternChars = (String) safeGetResource (res, "datePatternChars",
- localPatternCharsDefault);
- months = (String[]) safeGetResource (res, "months", monthsDefault);
- shortMonths = (String[]) safeGetResource (res, "shortMonths",
- shortMonthsDefault);
- shortWeekdays = (String[]) safeGetResource (res, "shortWeekdays",
- shortWeekdaysDefault);
- weekdays = (String[]) safeGetResource (res, "weekdays", weekdaysDefault);
- zoneStrings = (String[][]) safeGetResource (res, "zoneStrings",
- zoneStringsDefault);
- }
-
- public DateFormatSymbols ()
- {
- this (Locale.getDefault());
- }
-
- // Copy constructor.
- private DateFormatSymbols (DateFormatSymbols old)
- {
- ampms = old.ampms;
- eras = old.eras;
- localPatternChars = old.localPatternChars;
- months = old.months;
- shortMonths = old.shortMonths;
- shortWeekdays = old.shortWeekdays;
- weekdays = old.weekdays;
- zoneStrings = old.zoneStrings;
- }
-
- public String[] getAmPmStrings()
- {
- return ampms;
- }
-
- public String[] getEras()
- {
- return eras;
- }
-
-
- public String getLocalPatternChars()
- {
- return localPatternChars;
- }
-
- public String[] getMonths ()
- {
- return months;
- }
-
- public String[] getShortMonths ()
- {
- return shortMonths;
- }
-
- public String[] getShortWeekdays ()
- {
- return shortWeekdays;
- }
-
- public String[] getWeekdays ()
- {
- return weekdays;
- }
-
- public String[] [] getZoneStrings ()
- {
- return zoneStrings;
- }
-
- public void setAmPmStrings (String[] value)
- {
- ampms = value;
- }
-
- public void setEras (String[] value)
- {
- eras = value;
- }
-
- public void setLocalPatternChars (String value)
- {
- localPatternChars = value;
- }
-
- public void setMonths (String[] value)
- {
- months = value;
- }
-
- public void setShortMonths (String[] value)
- {
- shortMonths = value;
- }
-
- public void setShortWeekdays (String[] value)
- {
- shortWeekdays = value;
- }
-
- public void setWeekdays (String[] value)
- {
- weekdays = value;
- }
-
- public void setZoneStrings (String[][] value)
- {
- zoneStrings = value;
- }
-
- /* Does a "deep" equality test - recurses into arrays. */
- protected static boolean equals (Object x, Object y)
- {
- if (x == y)
- return true;
- if (x == null || y == null)
- return false;
- if (! (x instanceof Object[]) || ! (y instanceof Object[]))
- return x.equals(y);
- Object[] xa = (Object[]) x;
- Object[] ya = (Object[]) y;
- if (xa.length != ya.length)
- return false;
- for (int i = xa.length; --i >= 0; )
- {
- if (! equals(xa[i], ya[i]))
- return false;
- }
- return true;
- }
-
- private static int hashCode (Object x)
- {
- if (x == null)
- return 0;
- if (! (x instanceof Object[]))
- return x.hashCode();
- Object[] xa = (Object[]) x;
- int hash = 0;
- for (int i = 0; i < xa.length; i++)
- hash = 37 * hashCode(xa[i]);
- return hash;
- }
-
- public boolean equals (Object obj)
- {
- if (obj == null || ! (obj instanceof DateFormatSymbols))
- return false;
- DateFormatSymbols other = (DateFormatSymbols) obj;
- return (equals(ampms, other.ampms)
- && equals(eras, other.eras)
- && equals(localPatternChars, other.localPatternChars)
- && equals(months, other.months)
- && equals(shortMonths, other.shortMonths)
- && equals(shortWeekdays, other.shortWeekdays)
- && equals(weekdays, other.weekdays)
- && equals(zoneStrings, other.zoneStrings));
- }
-
- public Object clone ()
- {
- return new DateFormatSymbols (this);
- }
-
- public int hashCode ()
- {
- return (hashCode(ampms)
- ^ hashCode(eras)
- ^ hashCode(localPatternChars)
- ^ hashCode(months)
- ^ hashCode(shortMonths)
- ^ hashCode(shortWeekdays)
- ^ hashCode(weekdays)
- ^ hashCode(zoneStrings));
- }
-}
diff --git a/libjava/java/text/DecimalFormat.java b/libjava/java/text/DecimalFormat.java
deleted file mode 100644
index 9e7513eebaa..00000000000
--- a/libjava/java/text/DecimalFormat.java
+++ /dev/null
@@ -1,986 +0,0 @@
-// DecimalFormat.java - Localized number formatting.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 4, 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.
- * Note however that the docs are very unclear about how format parsing
- * should work. No doubt there are problems here.
- */
-
-public class DecimalFormat extends NumberFormat
-{
- // This is a helper for applyPatternWithSymbols. It reads a prefix
- // or a suffix. It can cause some side-effects.
- private final int scanFix (String pattern, int index, StringBuffer buf,
- String patChars, DecimalFormatSymbols syms,
- boolean is_suffix)
- {
- int len = pattern.length();
- buf.setLength(0);
- boolean multiplierSet = false;
- while (index < len)
- {
- char c = pattern.charAt(index);
- if (c == '\'' && index + 1 < len
- && pattern.charAt(index + 1) == '\'')
- {
- buf.append(c);
- ++index;
- }
- else if (c == '\'' && index + 2 < len
- && pattern.charAt(index + 2) == '\'')
- {
- buf.append(pattern.charAt(index + 1));
- index += 2;
- }
- else if (c == '\u00a4')
- {
- if (index + 1 < len && pattern.charAt(index + 1) == '\u00a4')
- {
- buf.append(syms.getInternationalCurrencySymbol());
- ++index;
- }
- else
- buf.append(syms.getCurrencySymbol());
- }
- else if (is_suffix && c == syms.getPercent())
- {
- if (multiplierSet)
- throw new IllegalArgumentException ("multiplier already set " +
- "- index: " + index);
- multiplierSet = true;
- multiplier = 100;
- buf.append(c);
- }
- else if (is_suffix && c == syms.getPerMill())
- {
- if (multiplierSet)
- throw new IllegalArgumentException ("multiplier already set " +
- "- index: " + index);
- multiplierSet = true;
- multiplier = 1000;
- buf.append(c);
- }
- else if (patChars.indexOf(c) != -1)
- {
- // This is a pattern character.
- break;
- }
- else
- buf.append(c);
- ++index;
- }
-
- return index;
- }
-
- // A helper which reads a number format.
- private final int scanFormat (String pattern, int index,
- String patChars, DecimalFormatSymbols syms,
- boolean is_positive)
- {
- int max = pattern.length();
-
- int countSinceGroup = 0;
- int zeroCount = 0;
- boolean saw_group = false;
-
- //
- // Scan integer part.
- //
- while (index < max)
- {
- char c = pattern.charAt(index);
-
- if (c == syms.getDigit())
- {
- if (zeroCount > 0)
- throw new IllegalArgumentException ("digit mark following " +
- "zero - index: " + index);
- ++countSinceGroup;
- }
- else if (c == syms.getZeroDigit())
- {
- ++zeroCount;
- ++countSinceGroup;
- }
- else if (c == syms.getGroupingSeparator())
- {
- countSinceGroup = 0;
- saw_group = true;
- }
- else
- break;
-
- ++index;
- }
-
- // We can only side-effect when parsing the positive format.
- if (is_positive)
- {
- groupingUsed = saw_group;
- groupingSize = (byte) countSinceGroup;
- minimumIntegerDigits = zeroCount;
- }
-
- // Early termination.
- if (index == max || pattern.charAt(index) == syms.getGroupingSeparator())
- {
- if (is_positive)
- decimalSeparatorAlwaysShown = false;
- return index;
- }
-
- if (pattern.charAt(index) == syms.getDecimalSeparator())
- {
- ++index;
-
- //
- // Scan fractional part.
- //
- int hashCount = 0;
- zeroCount = 0;
- while (index < max)
- {
- char c = pattern.charAt(index);
- if (c == syms.getZeroDigit())
- {
- if (hashCount > 0)
- throw new IllegalArgumentException ("zero mark " +
- "following digit - index: " + index);
- ++zeroCount;
- }
- else if (c == syms.getDigit())
- {
- ++hashCount;
- }
- else if (c != syms.getExponential()
- && c != syms.getPatternSeparator()
- && patChars.indexOf(c) != -1)
- throw new IllegalArgumentException ("unexpected special " +
- "character - index: " + index);
- else
- break;
-
- ++index;
- }
-
- if (is_positive)
- {
- maximumFractionDigits = hashCount + zeroCount;
- minimumFractionDigits = zeroCount;
- }
-
- if (index == max)
- return index;
- }
-
- if (pattern.charAt(index) == syms.getExponential())
- {
- //
- // Scan exponential format.
- //
- zeroCount = 0;
- ++index;
- while (index < max)
- {
- char c = pattern.charAt(index);
- if (c == syms.getZeroDigit())
- ++zeroCount;
- else if (c == syms.getDigit())
- {
- if (zeroCount > 0)
- throw new
- IllegalArgumentException ("digit mark following zero " +
- "in exponent - index: " +
- index);
- }
- else if (patChars.indexOf(c) != -1)
- throw new IllegalArgumentException ("unexpected special " +
- "character - index: " +
- index);
- else
- break;
-
- ++index;
- }
-
- if (is_positive)
- {
- useExponentialNotation = true;
- minExponentDigits = (byte) zeroCount;
- }
- }
-
- return index;
- }
-
- // This helper function creates a string consisting of all the
- // characters which can appear in a pattern and must be quoted.
- private final String patternChars (DecimalFormatSymbols syms)
- {
- StringBuffer buf = new StringBuffer ();
- buf.append(syms.getDecimalSeparator());
- buf.append(syms.getDigit());
- buf.append(syms.getExponential());
- buf.append(syms.getGroupingSeparator());
- // Adding this one causes pattern application to fail.
- // Of course, omitting is causes toPattern to fail.
- // ... but we already have bugs there. FIXME.
- // buf.append(syms.getMinusSign());
- buf.append(syms.getPatternSeparator());
- buf.append(syms.getPercent());
- buf.append(syms.getPerMill());
- buf.append(syms.getZeroDigit());
- buf.append('\u00a4');
- return buf.toString();
- }
-
- private final void applyPatternWithSymbols (String pattern,
- DecimalFormatSymbols syms)
- {
- // Initialize to the state the parser expects.
- negativePrefix = "";
- negativeSuffix = "";
- positivePrefix = "";
- positiveSuffix = "";
- decimalSeparatorAlwaysShown = false;
- groupingSize = 0;
- minExponentDigits = 0;
- multiplier = 1;
- useExponentialNotation = false;
- groupingUsed = false;
- maximumFractionDigits = 0;
- maximumIntegerDigits = 309;
- minimumFractionDigits = 0;
- minimumIntegerDigits = 1;
-
- StringBuffer buf = new StringBuffer ();
- String patChars = patternChars (syms);
-
- int max = pattern.length();
- int index = scanFix (pattern, 0, buf, patChars, syms, false);
- positivePrefix = buf.toString();
-
- index = scanFormat (pattern, index, patChars, syms, true);
-
- index = scanFix (pattern, index, buf, patChars, syms, true);
- positiveSuffix = buf.toString();
-
- if (index == pattern.length())
- {
- // No negative info.
- negativePrefix = null;
- negativeSuffix = null;
- }
- else
- {
- if (pattern.charAt(index) != syms.getPatternSeparator())
- throw new IllegalArgumentException ("separator character " +
- "expected - index: " + index);
-
- index = scanFix (pattern, index + 1, buf, patChars, syms, false);
- negativePrefix = buf.toString();
-
- // We parse the negative format for errors but we don't let
- // it side-effect this object.
- index = scanFormat (pattern, index, patChars, syms, false);
-
- index = scanFix (pattern, index, buf, patChars, syms, true);
- negativeSuffix = buf.toString();
-
- if (index != pattern.length())
- throw new IllegalArgumentException ("end of pattern expected " +
- "- index: " + index);
- }
- }
-
- public void applyLocalizedPattern (String pattern)
- {
- // JCL p. 638 claims this throws a ParseException but p. 629
- // contradicts this. Empirical tests with patterns of "0,###.0"
- // and "#.#.#" corroborate the p. 629 statement that an
- // IllegalArgumentException is thrown.
- applyPatternWithSymbols (pattern, symbols);
- }
-
- public void applyPattern (String pattern)
- {
- // JCL p. 638 claims this throws a ParseException but p. 629
- // contradicts this. Empirical tests with patterns of "0,###.0"
- // and "#.#.#" corroborate the p. 629 statement that an
- // IllegalArgumentException is thrown.
- applyPatternWithSymbols (pattern, nonLocalizedSymbols);
- }
-
- public Object clone ()
- {
- return new DecimalFormat (this);
- }
-
- private DecimalFormat (DecimalFormat dup)
- {
- decimalSeparatorAlwaysShown = dup.decimalSeparatorAlwaysShown;
- groupingSize = dup.groupingSize;
- minExponentDigits = dup.minExponentDigits;
- multiplier = dup.multiplier;
- negativePrefix = dup.negativePrefix;
- negativeSuffix = dup.negativeSuffix;
- positivePrefix = dup.positivePrefix;
- positiveSuffix = dup.positiveSuffix;
- symbols = (DecimalFormatSymbols) dup.symbols.clone();
- useExponentialNotation = dup.useExponentialNotation;
- }
-
- public DecimalFormat ()
- {
- this ("#,##0.###");
- }
-
- public DecimalFormat (String pattern)
- {
- this (pattern, new DecimalFormatSymbols ());
- }
-
- public DecimalFormat (String pattern, DecimalFormatSymbols symbols)
- {
- this.symbols = symbols;
- applyPattern (pattern);
- }
-
- private final boolean equals (String s1, String s2)
- {
- if (s1 == null || s2 == null)
- return s1 == s2;
- return s1.equals(s2);
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof DecimalFormat))
- return false;
- DecimalFormat dup = (DecimalFormat) obj;
- return (decimalSeparatorAlwaysShown == dup.decimalSeparatorAlwaysShown
- && groupingSize == dup.groupingSize
- && minExponentDigits == dup.minExponentDigits
- && multiplier == dup.multiplier
- && equals(negativePrefix, dup.negativePrefix)
- && equals(negativeSuffix, dup.negativeSuffix)
- && equals(positivePrefix, dup.positivePrefix)
- && equals(positiveSuffix, dup.positiveSuffix)
- && symbols.equals(dup.symbols)
- && useExponentialNotation == dup.useExponentialNotation);
- }
-
- public StringBuffer format (double number, StringBuffer dest,
- FieldPosition fieldPos)
- {
- // A very special case.
- if (Double.isNaN(number))
- {
- dest.append(symbols.getNaN());
- if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
- {
- int index = dest.length();
- fieldPos.setBeginIndex(index - symbols.getNaN().length());
- fieldPos.setEndIndex(index);
- }
- return dest;
- }
-
- boolean is_neg = number < 0;
- if (is_neg)
- {
- if (negativePrefix != null)
- dest.append(negativePrefix);
- else
- {
- dest.append(symbols.getMinusSign());
- dest.append(positivePrefix);
- }
- number = - number;
- }
- else
- dest.append(positivePrefix);
-
- int integerBeginIndex = dest.length();
- int integerEndIndex = 0;
- if (Double.isInfinite (number))
- {
- dest.append(symbols.getInfinity());
- integerEndIndex = dest.length();
- }
- else
- {
- number *= multiplier;
-
- // Compute exponent.
- long exponent = 0;
- double baseNumber;
- if (useExponentialNotation)
- {
- exponent = (long) (Math.log(number) / Math.log(10));
- if (minimumIntegerDigits > 0)
- exponent -= minimumIntegerDigits - 1;
- baseNumber = (long) (number / Math.pow(10.0, exponent));
- }
- else
- baseNumber = number;
-
- // Round to the correct number of digits.
- baseNumber += 5 * Math.pow(10.0, - maximumFractionDigits - 1);
-
- int index = dest.length();
- double intPart = Math.floor(baseNumber);
- int count = 0;
- while (count < maximumIntegerDigits
- && (intPart > 0 || count < minimumIntegerDigits))
- {
- long dig = (long) (intPart % 10);
- intPart = Math.floor(intPart / 10);
-
- // Append group separator if required.
- if (groupingUsed && count > 0 && count % groupingSize == 0)
- dest.insert(index, symbols.getGroupingSeparator());
-
- dest.insert(index, (char) (symbols.getZeroDigit() + dig));
-
- ++count;
- }
-
- integerEndIndex = dest.length();
-
- int decimal_index = integerEndIndex;
- int consecutive_zeros = 0;
- int total_digits = 0;
-
- // Strip integer part from NUMBER.
- double fracPart = baseNumber - Math.floor(baseNumber);
- for (count = 0;
- count < maximumFractionDigits
- && (fracPart != 0 || count < minimumFractionDigits);
- ++count)
- {
- ++total_digits;
- fracPart *= 10;
- long dig = (long) fracPart;
- if (dig == 0)
- ++consecutive_zeros;
- else
- consecutive_zeros = 0;
- dest.append((char) (symbols.getZeroDigit() + dig));
-
- // Strip integer part from FRACPART.
- fracPart = fracPart - Math.floor (fracPart);
- }
-
- // Strip extraneous trailing `0's. We can't always detect
- // these in the loop.
- int extra_zeros = Math.min (consecutive_zeros,
- total_digits - minimumFractionDigits);
- if (extra_zeros > 0)
- {
- dest.setLength(dest.length() - extra_zeros);
- total_digits -= extra_zeros;
- }
-
- // If required, add the decimal symbol.
- if (decimalSeparatorAlwaysShown
- || total_digits > 0)
- {
- dest.insert(decimal_index, symbols.getDecimalSeparator());
- if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
- {
- fieldPos.setBeginIndex(decimal_index + 1);
- fieldPos.setEndIndex(dest.length());
- }
- }
-
- // Finally, print the exponent.
- if (useExponentialNotation)
- {
- dest.append(symbols.getExponential());
- dest.append(exponent < 0 ? '-' : '+');
- index = dest.length();
- for (count = 0;
- exponent > 0 || count < minExponentDigits;
- ++count)
- {
- long dig = exponent % 10;
- exponent /= 10;
- dest.insert(index, (char) (symbols.getZeroDigit() + dig));
- }
- }
- }
-
- if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
- {
- fieldPos.setBeginIndex(integerBeginIndex);
- fieldPos.setEndIndex(integerEndIndex);
- }
-
- dest.append((is_neg && negativeSuffix != null)
- ? negativeSuffix
- : positiveSuffix);
- return dest;
- }
-
- public StringBuffer format (long number, StringBuffer dest,
- FieldPosition fieldPos)
- {
- // If using exponential notation, we just format as a double.
- if (useExponentialNotation)
- return format ((double) number, dest, fieldPos);
-
- boolean is_neg = number < 0;
- if (is_neg)
- {
- if (negativePrefix != null)
- dest.append(negativePrefix);
- else
- {
- dest.append(symbols.getMinusSign());
- dest.append(positivePrefix);
- }
- number = - number;
- }
- else
- dest.append(positivePrefix);
-
- int integerBeginIndex = dest.length();
- int index = dest.length();
- int count = 0;
- while (count < maximumIntegerDigits
- && (number > 0 || count < minimumIntegerDigits))
- {
- long dig = number % 10;
- number /= 10;
- // NUMBER and DIG will be less than 0 if the original number
- // was the most negative long.
- if (dig < 0)
- {
- dig = - dig;
- number = - number;
- }
-
- // Append group separator if required.
- if (groupingUsed && count > 0 && count % groupingSize == 0)
- dest.insert(index, symbols.getGroupingSeparator());
-
- dest.insert(index, (char) (symbols.getZeroDigit() + dig));
-
- ++count;
- }
-
- if (fieldPos != null && fieldPos.getField() == INTEGER_FIELD)
- {
- fieldPos.setBeginIndex(integerBeginIndex);
- fieldPos.setEndIndex(dest.length());
- }
-
- if (decimalSeparatorAlwaysShown || minimumFractionDigits > 0)
- {
- dest.append(symbols.getDecimalSeparator());
- if (fieldPos != null && fieldPos.getField() == FRACTION_FIELD)
- {
- fieldPos.setBeginIndex(dest.length());
- fieldPos.setEndIndex(dest.length() + minimumFractionDigits);
- }
- }
-
- for (count = 0; count < minimumFractionDigits; ++count)
- dest.append(symbols.getZeroDigit());
-
- dest.append((is_neg && negativeSuffix != null)
- ? negativeSuffix
- : positiveSuffix);
- return dest;
- }
-
- public DecimalFormatSymbols getDecimalFormatSymbols ()
- {
- return symbols;
- }
-
- public int getGroupingSize ()
- {
- return groupingSize;
- }
-
- public int getMultiplier ()
- {
- return multiplier;
- }
-
- public String getNegativePrefix ()
- {
- return negativePrefix;
- }
-
- public String getNegativeSuffix ()
- {
- return negativeSuffix;
- }
-
- public String getPositivePrefix ()
- {
- return positivePrefix;
- }
-
- public String getPositiveSuffix ()
- {
- return positiveSuffix;
- }
-
- public int hashCode ()
- {
- int hash = (negativeSuffix.hashCode() ^ negativePrefix.hashCode()
- ^positivePrefix.hashCode() ^ positiveSuffix.hashCode());
- // FIXME.
- return hash;
- }
-
- public boolean isDecimalSeparatorAlwaysShown ()
- {
- return decimalSeparatorAlwaysShown;
- }
-
- public Number parse (String str, ParsePosition pos)
- {
- // Our strategy is simple: copy the text into a buffer,
- // translating or omitting locale-specific information. Then
- // let Double or Long convert the number for us.
-
- boolean is_neg = false;
- int index = pos.getIndex();
- StringBuffer buf = new StringBuffer ();
-
- // We have to check both prefixes, because one might be empty.
- // We want to pick the longest prefix that matches.
- boolean got_pos = str.startsWith(positivePrefix, index);
- String np = (negativePrefix != null
- ? negativePrefix
- : positivePrefix + symbols.getMinusSign());
- boolean got_neg = str.startsWith(np, index);
-
- if (got_pos && got_neg)
- {
- // By checking this way, we preserve ambiguity in the case
- // where the negative format differs only in suffix. We
- // check this again later.
- if (np.length() > positivePrefix.length())
- {
- is_neg = true;
- index += np.length();
- }
- else
- index += positivePrefix.length();
- }
- else if (got_neg)
- {
- is_neg = true;
- index += np.length();
- }
- else if (got_pos)
- index += positivePrefix.length();
- else
- {
- pos.setErrorIndex (index);
- return null;
- }
-
- // FIXME: handle Inf and NaN.
-
- // FIXME: do we have to respect minimum/maxmimum digit stuff?
- // What about leading zeros? What about multiplier?
-
- int start_index = index;
- int max = str.length();
- char zero = symbols.getZeroDigit();
- int last_group = -1;
- boolean int_part = true;
- boolean exp_part = false;
- for (; index < max; ++index)
- {
- char c = str.charAt(index);
-
- // FIXME: what about grouping size?
- if (groupingUsed && c == symbols.getGroupingSeparator())
- {
- if (last_group != -1
- && (index - last_group) % groupingSize != 0)
- {
- pos.setErrorIndex(index);
- return null;
- }
- last_group = index;
- }
- else if (c >= zero && c <= zero + 9)
- {
- buf.append((char) (c - zero + '0'));
- exp_part = false;
- }
- else if (parseIntegerOnly)
- break;
- else if (c == symbols.getDecimalSeparator())
- {
- if (last_group != -1
- && (index - last_group) % groupingSize != 0)
- {
- pos.setErrorIndex(index);
- return null;
- }
- buf.append('.');
- int_part = false;
- }
- else if (c == symbols.getExponential())
- {
- buf.append('E');
- int_part = false;
- exp_part = true;
- }
- else if (exp_part
- && (c == '+' || c == '-' || c == symbols.getMinusSign()))
- {
- // For exponential notation.
- buf.append(c);
- }
- else
- break;
- }
-
- if (index == start_index)
- {
- // Didn't see any digits.
- pos.setErrorIndex(index);
- return null;
- }
-
- // Check the suffix. We must do this before converting the
- // buffer to a number to handle the case of a number which is
- // the most negative Long.
- boolean got_pos_suf = str.startsWith(positiveSuffix, index);
- String ns = (negativePrefix == null ? positiveSuffix : negativeSuffix);
- boolean got_neg_suf = str.startsWith(ns, index);
- if (is_neg)
- {
- if (! got_neg_suf)
- {
- pos.setErrorIndex(index);
- return null;
- }
- }
- else if (got_pos && got_neg && got_neg_suf)
- {
- is_neg = true;
- }
- else if (got_pos != got_pos_suf && got_neg != got_neg_suf)
- {
- pos.setErrorIndex(index);
- return null;
- }
-
- String suffix = is_neg ? ns : positiveSuffix;
- if (is_neg)
- buf.insert(0, '-');
-
- String t = buf.toString();
- Number result = null;
- try
- {
- result = new Long (t);
- }
- catch (NumberFormatException x1)
- {
- try
- {
- result = new Double (t);
- }
- catch (NumberFormatException x2)
- {
- }
- }
- if (result == null)
- {
- pos.setErrorIndex(index);
- return null;
- }
-
- pos.setIndex(index + suffix.length());
-
- return result;
- }
-
- public void setDecimalFormatSymbols (DecimalFormatSymbols newSymbols)
- {
- symbols = newSymbols;
- }
-
- public void setDecimalSeparatorAlwaysShown (boolean newValue)
- {
- decimalSeparatorAlwaysShown = newValue;
- }
-
- public void setGroupingSize (int groupSize)
- {
- groupingSize = (byte) groupSize;
- }
-
- public void setMaximumFractionDigits (int newValue)
- {
- maximumFractionDigits = Math.min(newValue, 340);
- }
-
- public void setMaximumIntegerDigits (int newValue)
- {
- maximumIntegerDigits = Math.min(newValue, 309);
- }
-
- public void setMinimumFractionDigits (int newValue)
- {
- minimumFractionDigits = Math.min(newValue, 340);
- }
-
- public void setMinimumIntegerDigits (int newValue)
- {
- minimumIntegerDigits = Math.min(newValue, 309);
- }
-
- public void setMultiplier (int newValue)
- {
- multiplier = newValue;
- }
-
- public void setNegativePrefix (String newValue)
- {
- negativePrefix = newValue;
- }
-
- public void setNegativeSuffix (String newValue)
- {
- negativeSuffix = newValue;
- }
-
- public void setPositivePrefix (String newValue)
- {
- positivePrefix = newValue;
- }
-
- public void setPositiveSuffix (String newValue)
- {
- positiveSuffix = newValue;
- }
-
- private final void quoteFix (StringBuffer buf, String text, String patChars)
- {
- int len = text.length();
- for (int index = 0; index < len; ++index)
- {
- char c = text.charAt(index);
- if (patChars.indexOf(c) != -1)
- {
- buf.append('\'');
- buf.append(c);
- buf.append('\'');
- }
- else
- buf.append(c);
- }
- }
-
- private final String computePattern (DecimalFormatSymbols syms)
- {
- StringBuffer mainPattern = new StringBuffer ();
- // We have to at least emit a zero for the minimum number of
- // digits. Past that we need hash marks up to the grouping
- // separator (and one beyond).
- int total_digits = Math.max(minimumIntegerDigits,
- groupingUsed ? groupingSize + 1: 0);
- for (int i = 0; i < total_digits - minimumIntegerDigits; ++i)
- mainPattern.append(syms.getDigit());
- for (int i = total_digits - minimumIntegerDigits; i < total_digits; ++i)
- mainPattern.append(syms.getZeroDigit());
- // Inserting the gropuing operator afterwards is easier.
- if (groupingUsed)
- mainPattern.insert(mainPattern.length() - groupingSize,
- syms.getGroupingSeparator());
- // See if we need decimal info.
- if (minimumFractionDigits > 0 || maximumFractionDigits > 0
- || decimalSeparatorAlwaysShown)
- mainPattern.append(syms.getDecimalSeparator());
- for (int i = 0; i < minimumFractionDigits; ++i)
- mainPattern.append(syms.getZeroDigit());
- for (int i = minimumFractionDigits; i < maximumFractionDigits; ++i)
- mainPattern.append(syms.getDigit());
- if (useExponentialNotation)
- {
- mainPattern.append(syms.getExponential());
- for (int i = 0; i < minExponentDigits; ++i)
- mainPattern.append(syms.getZeroDigit());
- if (minExponentDigits == 0)
- mainPattern.append(syms.getDigit());
- }
-
- String main = mainPattern.toString();
- String patChars = patternChars (syms);
- mainPattern.setLength(0);
-
- quoteFix (mainPattern, positivePrefix, patChars);
- mainPattern.append(main);
- quoteFix (mainPattern, positiveSuffix, patChars);
-
- if (negativePrefix != null)
- {
- quoteFix (mainPattern, negativePrefix, patChars);
- mainPattern.append(main);
- quoteFix (mainPattern, negativeSuffix, patChars);
- }
-
- return mainPattern.toString();
- }
-
- public String toLocalizedPattern ()
- {
- return computePattern (symbols);
- }
-
- public String toPattern ()
- {
- return computePattern (nonLocalizedSymbols);
- }
-
- // These names are fixed by the serialization spec.
- private boolean decimalSeparatorAlwaysShown;
- private byte groupingSize;
- private byte minExponentDigits;
- private int multiplier;
- private String negativePrefix;
- private String negativeSuffix;
- private String positivePrefix;
- private String positiveSuffix;
- private DecimalFormatSymbols symbols;
- private boolean useExponentialNotation;
-
- // The locale-independent pattern symbols happen to be the same as
- // the US symbols.
- private static final DecimalFormatSymbols nonLocalizedSymbols
- = new DecimalFormatSymbols (Locale.US);
-}
diff --git a/libjava/java/text/DecimalFormatSymbols.java b/libjava/java/text/DecimalFormatSymbols.java
deleted file mode 100644
index 1d51fbdb42f..00000000000
--- a/libjava/java/text/DecimalFormatSymbols.java
+++ /dev/null
@@ -1,293 +0,0 @@
-// DecimalFormatSymbols.java - Symbols used to format numbers.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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;
-}
diff --git a/libjava/java/text/FieldPosition.java b/libjava/java/text/FieldPosition.java
deleted file mode 100644
index c149e0eabb6..00000000000
--- a/libjava/java/text/FieldPosition.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (C) 1998, 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct.
- * Includes JDK 1.2 methods.
- */
-
-public class FieldPosition
-{
- int field;
- int beginIndex;
- int endIndex;
-
- public FieldPosition (int field)
- {
- this.field = field;
- }
-
- public int getField ()
- {
- return field;
- }
-
- public int getBeginIndex ()
- {
- return beginIndex;
- }
-
- public int getEndIndex ()
- {
- return endIndex;
- }
-
- public void setBeginIndex (int index)
- {
- beginIndex = index;
- }
-
- public void setEndIndex (int index)
- {
- endIndex = index;
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof FieldPosition))
- return false;
- FieldPosition other = (FieldPosition) obj;
- return (field == other.field
- && beginIndex == other.beginIndex && endIndex == other.endIndex);
- }
-}
diff --git a/libjava/java/text/Format.java b/libjava/java/text/Format.java
deleted file mode 100644
index 8360415729b..00000000000
--- a/libjava/java/text/Format.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- 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;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct.
- */
-
-public abstract class Format implements java.io.Serializable, Cloneable
-{
- public Format ()
- {
- }
-
- public abstract StringBuffer format (Object obj,
- StringBuffer sbuf, FieldPosition pos);
-
- public final String format (Object obj)
- {
- StringBuffer sbuf = new StringBuffer();
- format(obj, sbuf, new FieldPosition(0));
- return sbuf.toString();
- }
-
- public abstract Object parseObject (String source, ParsePosition pos);
-
- public Object parseObject (String source) throws ParseException
- {
- ParsePosition pos = new ParsePosition(0);
- Object result = parseObject (source, pos);
- if (result == null)
- {
- int index = pos.getErrorIndex();
- if (index < 0)
- index = pos.getIndex();
- throw new ParseException("parseObject failed", index);
- }
- return result;
- }
-
- public Object clone ()
- {
- return super.clone ();
- }
-}
diff --git a/libjava/java/text/MessageFormat.java b/libjava/java/text/MessageFormat.java
deleted file mode 100644
index 7109fcf7d04..00000000000
--- a/libjava/java/text/MessageFormat.java
+++ /dev/null
@@ -1,544 +0,0 @@
-// MessageFormat.java - Localized message formatting.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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.util.Date;
-import java.util.Locale;
-import java.util.Vector;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 3, 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.
- * and parsing.
- */
-
-final class MessageFormatElement
-{
- // Argument number.
- int argNumber;
- // Formatter to be used. This is the format set by setFormat.
- Format setFormat;
- // Formatter to be used based on the type.
- Format format;
-
- // Argument will be checked to make sure it is an instance of this
- // class.
- Class formatClass;
-
- // Formatter type.
- String type;
- // Formatter style.
- String style;
-
- // Text to follow this element.
- String trailer;
-
- // FIXME: shouldn't need this.
- Class forName (String name)
- {
- try
- {
- return Class.forName (name);
- }
- catch (ClassNotFoundException x)
- {
- }
- return null;
- }
-
- // Recompute the locale-based formatter.
- void setLocale (Locale loc)
- {
- if (type == null)
- ;
- else if (type.equals("number"))
- {
- // FIXME: named class literal.
- // formatClass = Number.class;
- formatClass = forName ("java.lang.Number");
-
- if (style == null)
- format = NumberFormat.getInstance(loc);
- else if (style.equals("currency"))
- format = NumberFormat.getCurrencyInstance(loc);
- else if (style.equals("percent"))
- format = NumberFormat.getPercentInstance(loc);
- else if (style.equals("integer"))
- {
- NumberFormat nf = NumberFormat.getNumberInstance(loc);
- nf.setMaximumFractionDigits(0);
- nf.setGroupingUsed(false);
- format = nf;
- }
- else
- {
- format = NumberFormat.getNumberInstance(loc);
- DecimalFormat df = (DecimalFormat) format;
- try
- {
- df.applyPattern(style);
- }
- catch (ParseException x)
- {
- throw new IllegalArgumentException (x.getMessage());
- }
- }
- }
- else if (type.equals("time") || type.equals("date"))
- {
- // FIXME: named class literal.
- // formatClass = Date.class;
- formatClass = forName ("java.util.Date");
-
- int val = DateFormat.DEFAULT;
- if (style == null)
- ;
- if (style.equals("short"))
- val = DateFormat.SHORT;
- else if (style.equals("medium"))
- val = DateFormat.MEDIUM;
- else if (style.equals("long"))
- val = DateFormat.LONG;
- else if (style.equals("full"))
- val = DateFormat.FULL;
-
- if (type.equals("time"))
- format = DateFormat.getTimeInstance(val, loc);
- else
- format = DateFormat.getDateInstance(val, loc);
-
- if (style != null && val == DateFormat.DEFAULT)
- {
- SimpleDateFormat sdf = (SimpleDateFormat) format;
- sdf.applyPattern(style);
- }
- }
- else if (type.equals("choice"))
- {
- // FIXME: named class literal.
- // formatClass = Number.class;
- formatClass = forName ("java.lang.Number");
-
- if (style == null)
- throw new
- IllegalArgumentException ("style required for choice format");
- format = new ChoiceFormat (style);
- }
- }
-}
-
-public class MessageFormat extends Format
-{
- // Helper that returns the text up to the next format opener. The
- // text is put into BUFFER. Returns index of character after end of
- // string. Throws IllegalArgumentException on error.
- private static final int scanString (String pat, int index,
- StringBuffer buffer)
- {
- int max = pat.length();
- buffer.setLength(0);
- for (; index < max; ++index)
- {
- char c = pat.charAt(index);
- if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
- {
- buffer.append(pat.charAt(index + 1));
- index += 2;
- }
- else if (c == '\'' && index + 1 < max
- && pat.charAt(index + 1) == '\'')
- {
- buffer.append(c);
- ++index;
- }
- else if (c == '{')
- break;
- else if (c == '}')
- throw new IllegalArgumentException ();
- else
- buffer.append(c);
- }
- return index;
- }
-
- // This helper retrieves a single part of a format element. Returns
- // the index of the terminating character.
- private static final int scanFormatElement (String pat, int index,
- StringBuffer buffer,
- char term)
- {
- int max = pat.length();
- buffer.setLength(0);
- int brace_depth = 1;
-
- for (; index < max; ++index)
- {
- char c = pat.charAt(index);
- if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
- {
- buffer.append(c);
- buffer.append(pat.charAt(index + 1));
- buffer.append(c);
- index += 2;
- }
- else if (c == '\'' && index + 1 < max
- && pat.charAt(index + 1) == '\'')
- {
- buffer.append(c);
- ++index;
- }
- else if (c == '{')
- {
- buffer.append(c);
- ++brace_depth;
- }
- else if (c == '}')
- {
- if (--brace_depth == 0)
- break;
- buffer.append(c);
- }
- // Check for TERM after braces, because TERM might be `}'.
- else if (c == term)
- break;
- else
- buffer.append(c);
- }
- return index;
- }
-
- // This is used to parse a format element and whatever non-format
- // text might trail it.
- private static final int scanFormat (String pat, int index,
- StringBuffer buffer, Vector elts,
- Locale locale)
- {
- MessageFormatElement mfe = new MessageFormatElement ();
- elts.addElement(mfe);
-
- int max = pat.length();
-
- // Skip the opening `{'.
- ++index;
-
- // Fetch the argument number.
- index = scanFormatElement (pat, index, buffer, ',');
- try
- {
- mfe.argNumber = Integer.parseInt(buffer.toString());
- }
- catch (NumberFormatException nfx)
- {
- throw new IllegalArgumentException ();
- }
-
- // Extract the element format.
- if (index < max && pat.charAt(index) == ',')
- {
- index = scanFormatElement (pat, index + 1, buffer, ',');
- mfe.type = buffer.toString();
-
- // Extract the style.
- if (index < max && pat.charAt(index) == ',')
- {
- index = scanFormatElement (pat, index + 1, buffer, '}');
- mfe.style = buffer.toString ();
- }
- }
-
- // Advance past the last terminator.
- if (index >= max || pat.charAt(index) != '}')
- throw new IllegalArgumentException ();
- ++index;
-
- // Now fetch trailing string.
- index = scanString (pat, index, buffer);
- mfe.trailer = buffer.toString ();
-
- mfe.setLocale(locale);
-
- return index;
- }
-
- public void applyPattern (String newPattern)
- {
- pattern = newPattern;
-
- StringBuffer tempBuffer = new StringBuffer ();
-
- int index = scanString (newPattern, 0, tempBuffer);
- leader = tempBuffer.toString();
-
- Vector elts = new Vector ();
- while (index < newPattern.length())
- index = scanFormat (newPattern, index, tempBuffer, elts, locale);
-
- elements = new MessageFormatElement[elts.size()];
- elts.copyInto(elements);
- }
-
- public Object clone ()
- {
- MessageFormat c = new MessageFormat ();
- c.setLocale(locale);
- c.applyPattern(pattern);
- return (Object) c;
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof MessageFormat))
- return false;
- MessageFormat mf = (MessageFormat) obj;
- return (pattern.equals(mf.pattern)
- && locale.equals(mf.locale));
- }
-
- public static String format (String pattern, Object arguments[])
- {
- MessageFormat mf = new MessageFormat (pattern);
- StringBuffer sb = new StringBuffer ();
- FieldPosition fp = new FieldPosition (NumberFormat.INTEGER_FIELD);
- return mf.format(arguments, sb, fp).toString();
- }
-
- public final StringBuffer format (Object arguments[], StringBuffer appendBuf,
- FieldPosition ignore)
- {
- appendBuf.append(leader);
-
- for (int i = 0; i < elements.length; ++i)
- {
- if (elements[i].argNumber >= arguments.length)
- throw new IllegalArgumentException ();
- Object thisArg = arguments[elements[i].argNumber];
-
- Format formatter = null;
- if (elements[i].setFormat != null)
- formatter = elements[i].setFormat;
- else if (elements[i].format != null)
- {
- if (elements[i].formatClass != null
- && ! elements[i].formatClass.isInstance(thisArg))
- throw new IllegalArgumentException ();
- formatter = elements[i].format;
- }
- else if (thisArg instanceof Number)
- formatter = NumberFormat.getInstance(locale);
- else if (thisArg instanceof Date)
- formatter = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
- else
- appendBuf.append(thisArg);
-
- if (formatter != null)
- {
- // Special-case ChoiceFormat.
- if (formatter instanceof ChoiceFormat)
- {
- StringBuffer buf = new StringBuffer ();
- // FIXME: don't actually know what is correct here.
- // Can a sub-format refer to any argument, or just
- // the single argument passed to it? Must test
- // against JDK.
- formatter.format(thisArg, buf, ignore);
- MessageFormat mf = new MessageFormat ();
- mf.setLocale(locale);
- mf.applyPattern(buf.toString());
- formatter = mf;
- }
- formatter.format(thisArg, appendBuf, ignore);
- }
-
- appendBuf.append(elements[i].trailer);
- }
-
- return appendBuf;
- }
-
- public final StringBuffer format (Object singleArg, StringBuffer appendBuf,
- FieldPosition ignore)
- {
- Object[] args = new Object[1];
- args[0] = singleArg;
- return format (args, appendBuf, ignore);
- }
-
- public Format[] getFormats ()
- {
- Format[] f = new Format[elements.length];
- for (int i = elements.length - 1; i >= 0; --i)
- f[i] = elements[i].setFormat;
- return f;
- }
-
- public Locale getLocale ()
- {
- return locale;
- }
-
- public int hashCode ()
- {
- // FIXME: not a very good hash.
- return pattern.hashCode() + locale.hashCode();
- }
-
- private MessageFormat ()
- {
- }
-
- public MessageFormat (String pattern)
- {
- locale = Locale.getDefault();
- applyPattern (pattern);
- }
-
- public Object[] parse (String sourceStr, ParsePosition pos)
- {
- // Check initial text.
- int index = pos.getIndex();
- if (! sourceStr.startsWith(leader, index))
- {
- pos.setErrorIndex(index);
- return null;
- }
- index += leader.length();
-
- Vector results = new Vector (elements.length, 1);
- // Now check each format.
- for (int i = 0; i < elements.length; ++i)
- {
- Format formatter = null;
- if (elements[i].setFormat != null)
- formatter = elements[i].setFormat;
- else if (elements[i].format != null)
- formatter = elements[i].format;
-
- Object value = null;
- if (formatter instanceof ChoiceFormat)
- {
- // We must special-case a ChoiceFormat because it might
- // have recursive formatting.
- ChoiceFormat cf = (ChoiceFormat) formatter;
- String[] formats = (String[]) cf.getFormats();
- double[] limits = (double[]) cf.getLimits();
- MessageFormat subfmt = new MessageFormat ();
- subfmt.setLocale(locale);
- ParsePosition subpos = new ParsePosition (index);
-
- int j;
- for (j = 0; value == null && j < limits.length; ++j)
- {
- subfmt.applyPattern(formats[j]);
- subpos.setIndex(index);
- value = subfmt.parse(sourceStr, subpos);
- }
- if (value != null)
- {
- index = subpos.getIndex();
- value = new Double (limits[j]);
- }
- }
- else if (formatter != null)
- {
- pos.setIndex(index);
- value = formatter.parseObject(sourceStr, pos);
- if (value != null)
- index = pos.getIndex();
- }
- else
- {
- // We have a String format. This can lose in a number
- // of ways, but we give it a shot.
- int next_index = sourceStr.indexOf(elements[i].trailer, index);
- if (next_index == -1)
- {
- pos.setErrorIndex(index);
- return null;
- }
- value = sourceStr.substring(index, next_index);
- index = next_index;
- }
-
- if (value == null
- || ! sourceStr.startsWith(elements[i].trailer, index))
- {
- pos.setErrorIndex(index);
- return null;
- }
-
- if (elements[i].argNumber >= results.size())
- results.setSize(elements[i].argNumber + 1);
- results.setElementAt(value, elements[i].argNumber);
-
- index += elements[i].trailer.length();
- }
-
- Object[] r = new Object[results.size()];
- results.copyInto(r);
- return r;
- }
-
- public Object[] parse (String sourceStr) throws ParseException
- {
- ParsePosition pp = new ParsePosition (0);
- Object[] r = parse (sourceStr, pp);
- if (r == null)
- throw new ParseException ("couldn't parse string", pp.getErrorIndex());
- return r;
- }
-
- public Object parseObject (String sourceStr, ParsePosition pos)
- {
- return parse (sourceStr, pos);
- }
-
- public void setFormat (int variableNum, Format newFormat)
- {
- elements[variableNum].setFormat = newFormat;
- }
-
- public void setFormats (Format[] newFormats)
- {
- if (newFormats.length < elements.length)
- throw new IllegalArgumentException ();
- int len = Math.min(newFormats.length, elements.length);
- for (int i = 0; i < len; ++i)
- elements[i].setFormat = newFormats[i];
- }
-
- public void setLocale (Locale loc)
- {
- locale = loc;
- if (elements != null)
- {
- for (int i = 0; i < elements.length; ++i)
- elements[i].setLocale(loc);
- }
- }
-
- public String toPattern ()
- {
- return pattern;
- }
-
- // The pattern string.
- private String pattern;
- // The locale.
- private Locale locale;
- // Variables.
- private MessageFormatElement[] elements;
- // Leader text.
- private String leader;
-}
diff --git a/libjava/java/text/NumberFormat.java b/libjava/java/text/NumberFormat.java
deleted file mode 100644
index 3a30010b073..00000000000
--- a/libjava/java/text/NumberFormat.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- 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.util.Locale;
-import java.util.ResourceBundle;
-import java.util.MissingResourceException;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 4, 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
- * and getAvailableLocales.
- */
-
-public abstract class NumberFormat extends Format implements Cloneable
-{
- public static final int INTEGER_FIELD = 0;
- public static final int FRACTION_FIELD = 1;
-
- public final String format (long number)
- {
- StringBuffer sbuf = new StringBuffer(50);
- format (number, sbuf, null);
- return sbuf.toString();
- }
-
- public final StringBuffer format (Object obj, StringBuffer sbuf,
- FieldPosition pos)
- {
- if (obj instanceof Number)
- return format(((Number) obj).doubleValue(), sbuf, pos);
- else
- throw new IllegalArgumentException
- ("Cannot format given Object as a Number");
- }
-
- public abstract StringBuffer format (double number,
- StringBuffer sbuf, FieldPosition pos);
-
- public abstract StringBuffer format (long number,
- StringBuffer sbuf, FieldPosition pos);
-
- public Object clone ()
- {
- // We know the superclass just uses Object's generic cloner.
- // Why not just inherit? Because the online docs specify that
- // this method exists for this class.
- return super.clone ();
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof NumberFormat))
- return false;
- NumberFormat nf = (NumberFormat) obj;
- return (groupingUsed == nf.groupingUsed
- && maximumFractionDigits == nf.maximumFractionDigits
- && maximumIntegerDigits == nf.maximumIntegerDigits
- && minimumFractionDigits == nf.minimumFractionDigits
- && minimumIntegerDigits == nf.minimumIntegerDigits
- && parseIntegerOnly == nf.parseIntegerOnly);
- }
-
- public static Locale[] getAvailableLocales ()
- {
- // FIXME.
- return null;
- }
-
- private static final NumberFormat computeInstance (Locale loc,
- String resource,
- String def)
- {
- ResourceBundle res;
- try
- {
- res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
- }
- catch (MissingResourceException x)
- {
- res = null;
- }
- String fmt;
- try
- {
- fmt = res == null ? def : res.getString(resource);
- }
- catch (MissingResourceException x)
- {
- fmt = def;
- }
- DecimalFormatSymbols dfs = new DecimalFormatSymbols (loc);
- return new DecimalFormat (fmt, dfs);
- }
-
- public static final NumberFormat getCurrencyInstance ()
- {
- return getCurrencyInstance (Locale.getDefault());
- }
-
- public static NumberFormat getCurrencyInstance (Locale loc)
- {
- return computeInstance (loc, "currencyFormat", "$#,##0.00;($#,##0.00)");
- }
-
- public static final NumberFormat getInstance ()
- {
- return getInstance (Locale.getDefault());
- }
-
- public static NumberFormat getInstance (Locale loc)
- {
- // For now always return a number instance.
- return getNumberInstance (loc);
- }
-
- public int getMaximumFractionDigits ()
- {
- return maximumFractionDigits;
- }
-
- public int getMaximumIntegerDigits ()
- {
- return maximumIntegerDigits;
- }
-
- public int getMinimumFractionDigits ()
- {
- return minimumFractionDigits;
- }
-
- public int getMinimumIntegerDigits ()
- {
- return minimumIntegerDigits;
- }
-
- public static final NumberFormat getNumberInstance ()
- {
- return getNumberInstance (Locale.getDefault());
- }
-
- public static NumberFormat getNumberInstance (Locale loc)
- {
- return computeInstance (loc, "numberFormat", "#,##0.###");
- }
-
- public static final NumberFormat getPercentInstance ()
- {
- return getPercentInstance (Locale.getDefault());
- }
-
- public static NumberFormat getPercentInstance (Locale loc)
- {
- return computeInstance (loc, "percentFormat", "#,##0%");
- }
-
- public int hashCode ()
- {
- int hash = super.hashCode();
- hash ^= (maximumFractionDigits + maximumIntegerDigits
- + minimumFractionDigits + minimumIntegerDigits);
- if (groupingUsed)
- hash ^= 0xf0f0;
- if (parseIntegerOnly)
- hash ^= 0x0f0f;
- return hash;
- }
-
- public boolean isGroupingUsed ()
- {
- return groupingUsed;
- }
-
- public boolean isParseIntegerOnly ()
- {
- return parseIntegerOnly;
- }
-
- public NumberFormat ()
- {
- }
-
- public abstract Number parse (String sourceStr, ParsePosition pos);
-
- public Number parse (String sourceStr) throws ParseException
- {
- ParsePosition pp = new ParsePosition (0);
- Number r = parse (sourceStr, pp);
- if (r == null)
- {
- int index = pp.getErrorIndex();
- if (index < 0)
- index = pp.getIndex();
- throw new ParseException ("couldn't parse number", index);
- }
- return r;
- }
-
- public final Object parseObject (String sourceStr, ParsePosition pos)
- {
- return parse (sourceStr, pos);
- }
-
- public void setGroupingUsed (boolean newValue)
- {
- groupingUsed = newValue;
- }
-
- public void setMaximumFractionDigits (int newValue)
- {
- maximumFractionDigits = newValue;
- }
-
- public void setMaximumIntegerDigits (int newValue)
- {
- maximumIntegerDigits = newValue;
- }
-
- public void setMinimumFractionDigits (int newValue)
- {
- minimumFractionDigits = newValue;
- }
-
- public void setMinimumIntegerDigits (int newValue)
- {
- minimumIntegerDigits = newValue;
- }
-
- public void setParseIntegerOnly (boolean value)
- {
- parseIntegerOnly = value;
- }
-
- public final String format (double number)
- {
- StringBuffer sbuf = new StringBuffer(50);
- format (number, sbuf, null);
- return sbuf.toString();
- }
-
- // These field names are fixed by the serialization spec.
- // FIXME: serialization spec also mentions `byte' versions of the
- // min/max fields. We have no use for those, so for now they are
- // omitted.
- protected boolean groupingUsed;
- protected int maximumFractionDigits;
- protected int maximumIntegerDigits;
- protected int minimumFractionDigits;
- protected int minimumIntegerDigits;
- protected boolean parseIntegerOnly;
-}
diff --git a/libjava/java/text/ParseException.java b/libjava/java/text/ParseException.java
deleted file mode 100644
index 7a654393aec..00000000000
--- a/libjava/java/text/ParseException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1998, 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct.
- */
-
-public class ParseException extends Exception
-{
- private int errorOffset;
-
- public ParseException (String msg, int errorOffset)
- {
- super(msg);
- this.errorOffset = errorOffset;
- }
-
- public int getErrorOffset ()
- {
- return errorOffset;
- }
-}
diff --git a/libjava/java/text/ParsePosition.java b/libjava/java/text/ParsePosition.java
deleted file mode 100644
index 55f7f8bb123..00000000000
--- a/libjava/java/text/ParsePosition.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 1998, 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct.
- * Includes JDK 1.2 methods.
- */
-
-public class ParsePosition
-{
- int index;
- int errorIndex;
-
- public ParsePosition (int index)
- {
- this.index = index;
- errorIndex = -1;
- }
-
- public int getIndex ()
- {
- return index;
- }
-
- public void setIndex (int index)
- {
- this.index = index;
- }
-
- public int getErrorIndex ()
- {
- return errorIndex;
- }
-
- public void setErrorIndex (int ei)
- {
- errorIndex = ei;
- }
-
- public boolean equals (Object obj)
- {
- if (obj != null || ! (obj instanceof ParsePosition))
- return false;
- ParsePosition other = (ParsePosition) obj;
- return index == other.index && errorIndex == other.errorIndex;
- }
-}
diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java
deleted file mode 100644
index c70dbcefe44..00000000000
--- a/libjava/java/text/RuleBasedCollator.java
+++ /dev/null
@@ -1,366 +0,0 @@
-// RuleBasedCollator.java - Concrete class for locale-based string compare.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date March 25, 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
- */
-
-class RBCElement
-{
- String key;
- char relation;
-
- RBCElement (String key, char relation)
- {
- this.key = key;
- this.relation = relation;
- }
-}
-
-public class RuleBasedCollator extends Collator
-{
- public Object clone ()
- {
- return new RuleBasedCollator (this);
- }
-
- // A helper for CollationElementIterator.next().
- int ceiNext (CollationElementIterator cei)
- {
- if (cei.lookahead_set)
- {
- cei.lookahead_set = false;
- return cei.lookahead;
- }
-
- int save = cei.index;
- int max = cei.text.length();
- String s = null;
-
- // It is possible to have a case where `abc' has a mapping, but
- // neither `ab' nor `abd' do. In this case we must treat `abd' as
- // nothing special.
- boolean found = false;
-
- int i;
- for (i = save + 1; i <= max; ++i)
- {
- s = cei.text.substring(save, i);
- if (prefixes.get(s) == null)
- break;
- found = true;
- }
- // Assume s != null.
-
- Object obj = map.get(s);
- // The special case.
- while (found && obj == null && s.length() > 1)
- {
- --i;
- s = cei.text.substring(save, i);
- obj = map.get(s);
- }
-
- // Update state.
- cei.index = i;
-
- if (obj == null)
- {
- // This idea, and the values, come from JDK.
- // assert (s.length() == 1)
- cei.lookahead_set = true;
- cei.lookahead = s.charAt(0) << 8;
- return 0x7fff << 16;
- }
-
- return ((Integer) obj).intValue();
- }
-
- // A helper for compareTo() that returns the next character that has
- // a nonzero ordering at the indicated strength. This is also used
- // in CollationKey.
- static final int next (CollationElementIterator iter, int strength)
- {
- while (true)
- {
- int os = iter.next();
- if (os == CollationElementIterator.NULLORDER)
- return os;
- int c = 0;
- switch (strength)
- {
- case PRIMARY:
- c = os & ~0xffff;
- break;
- case SECONDARY:
- c = os & ~0x00ff;
- break;
- case TERTIARY:
- case IDENTICAL:
- c = os;
- break;
- }
- if (c != 0)
- return c;
- }
- }
-
- public int compare (String source, String target)
- {
- CollationElementIterator cs, ct;
-
- cs = new CollationElementIterator (source, this);
- ct = new CollationElementIterator (target, this);
-
- while (true)
- {
- int os = next (cs, strength);
- int ot = next (ct, strength);
-
- if (os == CollationElementIterator.NULLORDER
- && ot == CollationElementIterator.NULLORDER)
- break;
- else if (os == CollationElementIterator.NULLORDER)
- {
- // Source string is shorter, so return "less than".
- return -1;
- }
- else if (ot == CollationElementIterator.NULLORDER)
- {
- // Target string is shorter, so return "greater than".
- return 1;
- }
-
- if (os != ot)
- return os - ot;
- }
-
- return 0;
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof RuleBasedCollator) || ! super.equals(obj))
- return false;
- RuleBasedCollator rbc = (RuleBasedCollator) obj;
- // FIXME: this is probably wrong. Instead we should compare maps
- // directly.
- return (frenchAccents == rbc.frenchAccents
- && rules.equals(rbc.rules));
- }
-
- public CollationElementIterator getCollationElementIterator (String source)
- {
- StringBuffer expand = new StringBuffer (source.length());
- int max = source.length();
- for (int i = 0; i < max; ++i)
- decomposeCharacter (source.charAt(i), expand);
- return new CollationElementIterator (expand.toString(), this);
- }
-
- public CollationKey getCollationKey (String source)
- {
- return new CollationKey (getCollationElementIterator (source), source,
- strength);
- }
-
- public String getRules ()
- {
- return rules;
- }
-
- public int hashCode ()
- {
- return (frenchAccents ? 1231 : 1237
- ^ rules.hashCode()
- ^ map.hashCode()
- ^ prefixes.hashCode());
- }
-
- private final boolean is_special (char c)
- {
- // Rules from JCL book.
- return ((c >= 0x0009 && c <= 0x000d)
- || (c >= 0x0020 && c <= 0x002f)
- || (c >= 0x003a && c <= 0x0040)
- || (c >= 0x005b && c <= 0x0060)
- || (c >= 0x007b && c <= 0x007e));
- }
-
- private final int text_argument (String rules, int index,
- StringBuffer result)
- {
- result.setLength(0);
- int len = rules.length();
- while (index < len)
- {
- char c = rules.charAt(index);
- if (c == '\'' && index + 2 < len
- && rules.charAt(index + 2) == '\''
- && is_special (rules.charAt(index + 1)))
- index += 2;
- else if (is_special (c) || Character.isWhitespace(c))
- return index;
- result.append(c);
- ++index;
- }
- return index;
- }
-
- public RuleBasedCollator (String rules) throws ParseException
- {
- this.rules = rules;
- this.frenchAccents = false;
-
- // We keep each rule in order in a vector. At the end we traverse
- // the vector and compute collation values from it.
- int insertion_index = 0;
- Vector vec = new Vector ();
-
- StringBuffer argument = new StringBuffer ();
-
- int len = rules.length();
- for (int index = 0; index < len; ++index)
- {
- char c = rules.charAt(index);
-
- // Just skip whitespace.
- if (Character.isWhitespace(c))
- continue;
-
- // Modifier.
- if (c == '@')
- {
- frenchAccents = true;
- continue;
- }
-
- // Check for relation or reset operator.
- if (! (c == '<' || c == ';' || c == ',' || c == '=' || c == '&'))
- throw new ParseException ("invalid character", index);
-
- ++index;
- while (index < len)
- {
- if (! Character.isWhitespace(rules.charAt(index)))
- break;
- ++index;
- }
- if (index == len)
- throw new ParseException ("missing argument", index);
-
- int save = index;
- index = text_argument (rules, index, argument);
- if (argument.length() == 0)
- throw new ParseException ("invalid character", save);
- String arg = argument.toString();
- int item_index = vec.indexOf(arg);
- if (c != '&')
- {
- // If the argument already appears in the vector, then we
- // must remove it in order to re-order.
- if (item_index != -1)
- {
- vec.removeElementAt(item_index);
- if (insertion_index >= item_index)
- --insertion_index;
- }
- RBCElement r = new RBCElement (arg, c);
- vec.insertElementAt(r, insertion_index);
- ++insertion_index;
- }
- else
- {
- // Reset.
- if (item_index == -1)
- throw
- new ParseException ("argument to reset not previously seen",
- save);
- insertion_index = item_index + 1;
- }
-
- // Ugly: in this case the resulting INDEX comes from
- // text_argument, which returns the index of the next
- // character we should examine.
- --index;
- }
-
- // Now construct a hash table that maps strings onto their
- // collation values.
- int primary = 0;
- int secondary = 0;
- int tertiary = 0;
- this.map = new Hashtable ();
- this.prefixes = new Hashtable ();
- Enumeration e = vec.elements();
- while (e.hasMoreElements())
- {
- RBCElement r = (RBCElement) e.nextElement();
- switch (r.relation)
- {
- case '<':
- ++primary;
- secondary = 0;
- tertiary = 0;
- break;
- case ';':
- ++secondary;
- tertiary = 0;
- break;
- case ',':
- ++tertiary;
- break;
- case '=':
- break;
- }
- // This must match CollationElementIterator.
- map.put(r.key, new Integer (primary << 16
- | secondary << 8 | tertiary));
-
- // Make a map of all lookaheads we might need.
- for (int i = r.key.length() - 1; i >= 1; --i)
- prefixes.put(r.key.substring(0, i), Boolean.TRUE);
- }
- }
-
- // This is a helper for clone.
- private RuleBasedCollator (RuleBasedCollator other)
- {
- frenchAccents = other.frenchAccents;
- rules = other.rules;
- decmp = other.decmp;
- strength = other.strength;
- map = other.map;
- prefixes = other.prefixes;
- }
-
- // True if we are using French-style accent ordering.
- private boolean frenchAccents;
-
- // It's easier to just save the rules than to try to recreate them.
- private String rules;
-
- // This maps strings onto collation values.
- private Hashtable map;
- // An entry in this hash means that more lookahead is required for
- // the prefix string.
- private Hashtable prefixes;
-}
diff --git a/libjava/java/text/SimpleDateFormat.java b/libjava/java/text/SimpleDateFormat.java
deleted file mode 100644
index 08ed3175c56..00000000000
--- a/libjava/java/text/SimpleDateFormat.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
-
- 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.util.*;
-
-/**
- * @author Per Bothner <bothner@cygnus.com>
- * @date October 25, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: parse is not implemented.
- */
-
-public class SimpleDateFormat extends DateFormat
-{
- private Date defaultCenturyStart;
- private DateFormatSymbols formatData;
- private String pattern;
-
- public SimpleDateFormat ()
- {
- this("dd/MM/yy HH:mm", Locale.getDefault());
- }
-
- public SimpleDateFormat (String pattern)
- {
- this(pattern, Locale.getDefault());
- }
-
- public SimpleDateFormat (String pattern, Locale locale)
- {
- this.pattern = pattern;
- this.calendar = Calendar.getInstance(locale);
- this.numberFormat = NumberFormat.getInstance(locale);
- numberFormat.setGroupingUsed(false);
- this.formatData = new DateFormatSymbols (locale);
- }
-
- public SimpleDateFormat (String pattern, DateFormatSymbols formatData)
- {
- this.pattern = pattern;
- this.formatData = formatData;
- this.calendar = Calendar.getInstance();
- this.numberFormat = NumberFormat.getInstance();
- numberFormat.setGroupingUsed(false);
- }
-
- public Date get2DigitYearStart()
- {
- return defaultCenturyStart;
- }
-
- public void set2DigitYearStart(Date startDate)
- {
- defaultCenturyStart = startDate;
- }
-
- public DateFormatSymbols getDateFormatSymbols ()
- {
- return formatData;
- }
-
- public void setDateFormatSymbols (DateFormatSymbols value)
- {
- formatData = value;
- }
-
- public String toPattern ()
- {
- return pattern;
- }
-
- public void applyPattern (String pattern)
- {
- this.pattern = pattern;
- }
-
- private String applyLocalizedPattern (String pattern,
- String oldChars, String newChars)
- {
- int len = pattern.length();
- StringBuffer buf = new StringBuffer(len);
- boolean quoted = false;
- for (int i = 0; i < len; i++)
- {
- char ch = pattern.charAt(i);
- if (ch == '\'')
- quoted = ! quoted;
- if (! quoted)
- {
- int j = oldChars.indexOf(ch);
- if (j >= 0)
- ch = newChars.charAt(j);
- }
- buf.append(ch);
- }
- return buf.toString();
- }
-
- public void applyLocalizedPattern (String pattern)
- {
- String localChars = formatData.getLocalPatternChars();
- String standardChars = DateFormatSymbols.localPatternCharsDefault;
- pattern = applyLocalizedPattern (pattern, localChars, standardChars);
- applyPattern(pattern);
- }
-
- public String toLocalizedPattern ()
- {
- String localChars = formatData.getLocalPatternChars();
- String standardChars = DateFormatSymbols.localPatternCharsDefault;
- return applyLocalizedPattern (pattern, standardChars, localChars);
- }
-
- private final void append (StringBuffer buf, int value, int numDigits)
- {
- numberFormat.setMinimumIntegerDigits(numDigits);
- numberFormat.format(value, buf, null);
- }
-
- public StringBuffer format (Date date, StringBuffer buf, FieldPosition pos)
- {
- Calendar calendar = (Calendar) this.calendar.clone();
- calendar.setTime(date);
- int len = pattern.length();
- int quoteStart = -1;
- for (int i = 0; i < len; i++)
- {
- char ch = pattern.charAt(i);
- if (ch == '\'')
- {
- // We must do a little lookahead to see if we have two
- // single quotes embedded in quoted text.
- if (i < len - 1 && pattern.charAt(i + 1) == '\'')
- {
- ++i;
- buf.append(ch);
- }
- else
- quoteStart = quoteStart < 0 ? i : -1;
- }
- // From JCL: any characters in the pattern that are not in
- // the ranges of [a..z] and [A..Z] are treated as quoted
- // text.
- else if (quoteStart != -1
- || ((ch < 'a' || ch > 'z')
- && (ch < 'A' || ch > 'Z')))
- buf.append(ch);
- else
- {
- int first = i;
- int value;
- while (++i < len && pattern.charAt(i) == ch) ;
- int count = i - first; // Number of repetions of ch in pattern.
- int beginIndex = buf.length();
- int field;
- i--; // Skip all but last instance of ch in pattern.
- switch (ch)
- {
- case 'd':
- append(buf, calendar.get(Calendar.DATE), count);
- field = DateFormat.DATE_FIELD;
- break;
- case 'D':
- append(buf, calendar.get(Calendar.DAY_OF_YEAR), count);
- field = DateFormat.DAY_OF_YEAR_FIELD;
- break;
- case 'F':
- append(buf, calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH),count);
- field = DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD;
- break;
- case 'E':
- value = calendar.get(calendar.DAY_OF_WEEK);
- buf.append(count <= 3 ? formatData.getShortWeekdays()[value]
- : formatData.getWeekdays()[value]);
- field = DateFormat.DAY_OF_WEEK_FIELD;
- break;
- case 'w':
- append(buf, calendar.get(Calendar.WEEK_OF_YEAR), count);
- field = DateFormat.WEEK_OF_YEAR_FIELD;
- break;
- case 'W':
- append(buf, calendar.get(Calendar.WEEK_OF_MONTH), count);
- field = DateFormat.WEEK_OF_MONTH_FIELD;
- break;
- case 'M':
- value = calendar.get(Calendar.MONTH);
- if (count <= 2)
- append(buf, value + 1, count);
- else
- buf.append(count <= 3 ? formatData.getShortMonths()[value]
- : formatData.getMonths()[value]);
- field = DateFormat.MONTH_FIELD;
- break;
- case 'y':
- value = calendar.get(Calendar.YEAR);
- append(buf, count <= 2 ? value % 100 : value, count);
- field = DateFormat.YEAR_FIELD;
- break;
- case 'K':
- append(buf, calendar.get(Calendar.HOUR), count);
- field = DateFormat.HOUR0_FIELD;
- break;
- case 'h':
- value = ((calendar.get(Calendar.HOUR) + 11) % 12) + 1;
- append(buf, value, count);
- field = DateFormat.HOUR1_FIELD;
- break;
- case 'H':
- append(buf, calendar.get(Calendar.HOUR_OF_DAY), count);
- field = DateFormat.HOUR_OF_DAY0_FIELD;
- break;
- case 'k':
- value = ((calendar.get(Calendar.HOUR_OF_DAY) + 23) % 24) + 1;
- append(buf, value, count);
- field = DateFormat.HOUR_OF_DAY1_FIELD;
- break;
- case 'm':
- append(buf, calendar.get(Calendar.MINUTE), count);
- field = DateFormat.MINUTE_FIELD;
- break;
- case 's':
- append(buf, calendar.get(Calendar.SECOND), count);
- field = DateFormat.SECOND_FIELD;
- break;
- case 'S':
- append(buf, calendar.get(Calendar.MILLISECOND), count);
- field = DateFormat.MILLISECOND_FIELD;
- break;
- case 'a':
- value = calendar.get(calendar.AM_PM);
- buf.append(formatData.getAmPmStrings()[value]);
- field = DateFormat.AM_PM_FIELD;
- break;
- case 'z':
- String zoneID = calendar.getTimeZone().getID();
- String[][] zoneStrings = formatData.getZoneStrings();
- int zoneCount = zoneStrings.length;
- for (int j = 0; j < zoneCount; j++)
- {
- String[] strings = zoneStrings[j];
- if (zoneID.equals(strings[0]))
- {
- j = count > 3 ? 2 : 1;
- if (calendar.get(Calendar.DST_OFFSET) != 0)
- j+=2;
- zoneID = strings[j];
- break;
- }
- }
- buf.append(zoneID);
- field = DateFormat.TIMEZONE_FIELD;
- break;
- default:
- // Note that the JCL is actually somewhat
- // contradictory here. It defines the pattern letters
- // to be a particular list, but also says that a
- // pattern containing an invalid pattern letter must
- // throw an exception. It doesn't describe what an
- // invalid pattern letter might be, so we just assume
- // it is any letter in [a-zA-Z] not explicitly covered
- // above.
- throw new RuntimeException("bad format string");
- }
- if (pos != null && field == pos.getField())
- {
- pos.setBeginIndex(beginIndex);
- pos.setEndIndex(buf.length());
- }
- }
- }
- return buf;
- }
-
- private final boolean expect (String source, ParsePosition pos,
- char ch)
- {
- int x = pos.getIndex();
- boolean r = x < source.length() && source.charAt(x) == ch;
- if (r)
- pos.setIndex(x + 1);
- else
- pos.setErrorIndex(x);
- return r;
- }
-
- public Date parse (String source, ParsePosition pos)
- {
- int fmt_index = 0;
- int fmt_max = pattern.length();
-
- calendar.clear();
- int quote_start = -1;
- for (; fmt_index < fmt_max; ++fmt_index)
- {
- char ch = pattern.charAt(fmt_index);
- if (ch == '\'')
- {
- int index = pos.getIndex();
- if (fmt_index < fmt_max - 1
- && pattern.charAt(fmt_index + 1) == '\'')
- {
- if (! expect (source, pos, ch))
- return null;
- ++fmt_index;
- }
- else
- quote_start = quote_start < 0 ? fmt_index : -1;
- continue;
- }
-
- if (quote_start != -1
- || ((ch < 'a' || ch > 'z')
- && (ch < 'A' || ch > 'Z')))
- {
- if (! expect (source, pos, ch))
- return null;
- continue;
- }
-
- // We've arrived at a potential pattern character in the
- // pattern.
- int first = fmt_index;
- while (++fmt_index < fmt_max && pattern.charAt(fmt_index) == ch)
- ;
- int count = fmt_index - first;
- --fmt_index;
-
- // We can handle most fields automatically: most either are
- // numeric or are looked up in a string vector. In some cases
- // we need an offset. When numeric, `offset' is added to the
- // resulting value. When doing a string lookup, offset is the
- // initial index into the string array.
- int calendar_field;
- boolean is_numeric = true;
- String[] match = null;
- int offset = 0;
- int zone_number = 0;
- switch (ch)
- {
- case 'd':
- calendar_field = Calendar.DATE;
- break;
- case 'D':
- calendar_field = Calendar.DAY_OF_YEAR;
- break;
- case 'F':
- calendar_field = Calendar.DAY_OF_WEEK_IN_MONTH;
- break;
- case 'E':
- is_numeric = false;
- offset = 1;
- calendar_field = Calendar.DAY_OF_WEEK;
- match = (count <= 3
- ? formatData.getShortWeekdays()
- : formatData.getWeekdays());
- break;
- case 'w':
- calendar_field = Calendar.WEEK_OF_YEAR;
- break;
- case 'W':
- calendar_field = Calendar.WEEK_OF_MONTH;
- break;
- case 'M':
- calendar_field = Calendar.MONTH;
- if (count <= 2)
- ;
- else
- {
- is_numeric = false;
- match = (count <= 3
- ? formatData.getShortMonths()
- : formatData.getMonths());
- }
- break;
- case 'y':
- calendar_field = Calendar.YEAR;
- if (count <= 2)
- offset = 1900;
- break;
- case 'K':
- calendar_field = Calendar.HOUR;
- break;
- case 'h':
- calendar_field = Calendar.HOUR;
- offset = -1;
- break;
- case 'H':
- calendar_field = Calendar.HOUR_OF_DAY;
- break;
- case 'k':
- calendar_field = Calendar.HOUR_OF_DAY;
- offset = -1;
- break;
- case 'm':
- calendar_field = Calendar.MINUTE;
- break;
- case 's':
- calendar_field = Calendar.SECOND;
- break;
- case 'S':
- calendar_field = Calendar.MILLISECOND;
- break;
- case 'a':
- is_numeric = false;
- calendar_field = Calendar.AM_PM;
- match = formatData.getAmPmStrings();
- break;
- case 'z':
- // We need a special case for the timezone, because it
- // uses a different data structure than the other cases.
- is_numeric = false;
- calendar_field = Calendar.DST_OFFSET;
- String[][] zoneStrings = formatData.getZoneStrings();
- int zoneCount = zoneStrings.length;
- int index = pos.getIndex();
- boolean found_zone = false;
- for (int j = 0; j < zoneCount; j++)
- {
- String[] strings = zoneStrings[j];
- int k;
- for (k = 1; k < strings.length; ++k)
- {
- if (source.startsWith(strings[k], index))
- break;
- }
- if (k != strings.length)
- {
- if (k > 2)
- ; // FIXME: dst.
- zone_number = 0; // FIXME: dst.
- // FIXME: raw offset to SimpleTimeZone const.
- calendar.setTimeZone(new SimpleTimeZone (1, strings[0]));
- pos.setIndex(index + strings[k].length());
- break;
- }
- }
- if (! found_zone)
- {
- pos.setErrorIndex(pos.getIndex());
- return null;
- }
- break;
- default:
- pos.setErrorIndex(pos.getIndex());
- return null;
- }
-
- // Compute the value we should assign to the field.
- int value;
- if (is_numeric)
- {
- numberFormat.setMinimumIntegerDigits(count);
- Number n = numberFormat.parse(source, pos);
- if (pos == null || ! (n instanceof Long))
- return null;
- value = n.intValue() + offset;
- }
- else if (match != null)
- {
- int index = pos.getIndex();
- int i;
- for (i = offset; i < match.length; ++i)
- {
- if (source.startsWith(match[i], index))
- break;
- }
- if (i == match.length)
- {
- pos.setErrorIndex(index);
- return null;
- }
- pos.setIndex(index + match[i].length());
- value = i;
- }
- else
- value = zone_number;
-
- // Assign the value and move on.
- try
- {
- calendar.set(calendar_field, value);
- }
- // FIXME: what exception is thrown on an invalid
- // non-lenient set?
- catch (IllegalArgumentException x)
- {
- pos.setErrorIndex(pos.getIndex());
- return null;
- }
- }
-
- return calendar.getTime();
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof SimpleDateFormat) || ! super.equals(obj) )
- return false;
- SimpleDateFormat other = (SimpleDateFormat) obj;
- return (DateFormatSymbols.equals(pattern, other.pattern)
- && DateFormatSymbols.equals(formatData, other.formatData)
- && DateFormatSymbols.equals(defaultCenturyStart,
- other.defaultCenturyStart));
- }
-
- public Object clone ()
- {
- // We know the superclass just call's Object's generic cloner.
- return super.clone ();
- }
-
- public int hashCode ()
- {
- int hash = super.hashCode();
- if (pattern != null)
- hash ^= pattern.hashCode();
- return hash;
- }
-}
diff --git a/libjava/java/text/StringCharacterIterator.java b/libjava/java/text/StringCharacterIterator.java
deleted file mode 100644
index c41ce4100fd..00000000000
--- a/libjava/java/text/StringCharacterIterator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-// StringCharacterIterator.java - Iterate over string of Unicode characters.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date February 22, 1999
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct to 1.1.
- */
-
-public final class StringCharacterIterator implements CharacterIterator
-{
- public Object clone ()
- {
- return (Object) new StringCharacterIterator (text, begin, end, pos);
- }
-
- public char current ()
- {
- // This follows JDK 1.2 semantics and not 1.1 semantics.
- // In 1.1 we would throw an exception if begin==end.
- return (pos < end) ? text.charAt(pos) : CharacterIterator.DONE;
- }
-
- public boolean equals (Object obj)
- {
- if (! (obj instanceof StringCharacterIterator))
- return false;
- StringCharacterIterator sci = (StringCharacterIterator) obj;
- // The spec says "the same text". We take this to mean equals,
- // not ==.
- return (pos == sci.pos
- && begin == sci.begin
- && end == sci.end
- && text.equals(sci.text));
- }
-
- public char first ()
- {
- pos = begin;
- return current ();
- }
-
- public int getBeginIndex ()
- {
- return begin;
- }
-
- public int getEndIndex ()
- {
- return end;
- }
-
- public int getIndex ()
- {
- return pos;
- }
-
- public int hashCode ()
- {
- // FIXME: this is a terrible hash code. Find a better one.
- return text.hashCode() + pos + begin + end;
- }
-
- public char last ()
- {
- pos = end;
- return current ();
- }
-
- public char next ()
- {
- if (pos == end)
- return CharacterIterator.DONE;
- ++pos;
- return current ();
- }
-
- public char previous ()
- {
- if (pos == begin)
- return CharacterIterator.DONE;
- --pos;
- return current ();
- }
-
- public char setIndex (int idx)
- {
- // In 1.1 we would throw an error if `idx == end'.
- if (idx < begin || idx > end)
- throw new IllegalArgumentException ();
- pos = idx;
- return current ();
- }
-
- public StringCharacterIterator (String text)
- {
- // FIXME: remove check for null once we have compiler/runtime
- // support for NullPointerException.
- this (text, 0, text == null ? 0 : text.length(), 0);
- }
- public StringCharacterIterator (String text, int pos)
- {
- // FIXME: remove check for null once we have compiler/runtime
- // support for NullPointerException.
- this (text, 0, text == null ? 0 : text.length(), pos);
- }
- public StringCharacterIterator (String text, int begin, int end, int pos)
- {
- if (text == null)
- throw new NullPointerException ();
- if (begin < 0 || begin > end || end > text.length()
- // In 1.1 we would also throw if `pos == end'.
- || pos < begin || pos > end)
- throw new IllegalArgumentException ();
-
- this.text = text;
- this.begin = begin;
- this.end = end;
- this.pos = pos;
- }
-
- // String to iterate over.
- private String text;
- // Current position.
- private int pos;
- // Start position in string.
- private int begin;
- // End position in string.
- private int end;
-}
diff --git a/libjava/java/text/natCollator.cc b/libjava/java/text/natCollator.cc
deleted file mode 100644
index 676a4a41a23..00000000000
--- a/libjava/java/text/natCollator.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// natCollator.cc - Native code for collation.
-
-/* Copyright (C) 1999 Free Software Foundation
-
- 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. */
-
-// Written by Tom Tromey <tromey@cygnus.com>.
-
-#include <config.h>
-
-#include <gcj/cni.h>
-#include <jvm.h>
-
-#include <java/text/Collator.h>
-#include <java/lang/StringBuffer.h>
-
-#include <java-chardecomp.h>
-
-void
-java::text::Collator::decomposeCharacter (jchar c,
- java::lang::StringBuffer *buf)
-{
- if (decmp == NO_DECOMPOSITION)
- {
- buf->append(c);
- return;
- }
-
- const struct decomp_entry *base;
- int high;
-
- if (decmp == FULL_DECOMPOSITION)
- {
- base = full_decomposition;
- high = sizeof (full_decomposition) / sizeof (struct decomp_entry);
- }
- else
- {
- base = canonical_decomposition;
- high = sizeof (canonical_decomposition) / sizeof (struct decomp_entry);
- }
-
- // FIXME: this is probably a bit slow for the task at hand.
- int i = high / 2;
- int low = 0;
- while (true)
- {
- if (c < base[i].key)
- high = i;
- else if (c > base[i].key)
- low = i;
- else
- break;
-
- int old = i;
- i = (high + low) / 2;
- if (i == old)
- {
- // Not in table, so it expands to itself.
- buf->append(c);
- return;
- }
- }
-
- for (int j = 0; base[i].value[j] != '\0'; j += 2)
- {
- jchar x = (base[i].value[j] << 8) | (base[i].value[j + 1]);
- buf->append (x);
- }
-}