diff options
Diffstat (limited to 'libjava/java/text')
-rw-r--r-- | libjava/java/text/Collator.java | 51 | ||||
-rw-r--r-- | libjava/java/text/DateFormat.h | 1 | ||||
-rw-r--r-- | libjava/java/text/DateFormatSymbols.h | 3 | ||||
-rw-r--r-- | libjava/java/text/DateFormatSymbols.java | 103 | ||||
-rw-r--r-- | libjava/java/text/DecimalFormatSymbols.h | 4 | ||||
-rw-r--r-- | libjava/java/text/DecimalFormatSymbols.java | 75 | ||||
-rw-r--r-- | libjava/java/text/spi/BreakIteratorProvider.h | 38 | ||||
-rw-r--r-- | libjava/java/text/spi/CollatorProvider.h | 35 | ||||
-rw-r--r-- | libjava/java/text/spi/DateFormatProvider.h | 37 | ||||
-rw-r--r-- | libjava/java/text/spi/DateFormatSymbolsProvider.h | 35 | ||||
-rw-r--r-- | libjava/java/text/spi/DecimalFormatSymbolsProvider.h | 35 | ||||
-rw-r--r-- | libjava/java/text/spi/NumberFormatProvider.h | 38 |
12 files changed, 440 insertions, 15 deletions
diff --git a/libjava/java/text/Collator.java b/libjava/java/text/Collator.java index aa64316..3e64172 100644 --- a/libjava/java/text/Collator.java +++ b/libjava/java/text/Collator.java @@ -38,10 +38,13 @@ exception statement from your version. */ package java.text; +import java.text.spi.CollatorProvider; + import java.util.Comparator; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; +import java.util.ServiceLoader; /** * This class is the abstract superclass of classes which perform @@ -286,7 +289,8 @@ public abstract class Collator implements Comparator<Object>, Cloneable /** * This method returns an instance of <code>Collator</code> for the * specified locale. If no <code>Collator</code> exists for the desired - * locale, a <code>Collator</code> for the default locale will be returned. + * locale, the fallback procedure described in + * {@link java.util.spi.LocaleServiceProvider} is invoked. * * @param loc The desired locale to load a <code>Collator</code> for. * @@ -294,27 +298,52 @@ public abstract class Collator implements Comparator<Object>, Cloneable */ public static Collator getInstance (Locale loc) { - ResourceBundle res; String pattern; try { - res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", - loc, ClassLoader.getSystemClassLoader()); - pattern = res.getString("collation_rules"); + ResourceBundle res = + ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", + loc, ClassLoader.getSystemClassLoader()); + return new RuleBasedCollator(res.getString("collation_rules")); } catch (MissingResourceException x) { - pattern = "<0<1<2<3<4<5<6<7<8<9<A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<k,K" + - "<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y<z,Z"; - } - try - { - return new RuleBasedCollator (pattern); + /* This means runtime support for the locale + * is not available, so we check providers. */ } catch (ParseException x) { throw (InternalError)new InternalError().initCause(x); } + for (CollatorProvider p : ServiceLoader.load(CollatorProvider.class)) + { + for (Locale l : p.getAvailableLocales()) + { + if (l.equals(loc)) + { + Collator c = p.getInstance(loc); + if (c != null) + return c; + break; + } + } + } + if (loc.equals(Locale.ROOT)) + { + try + { + return new RuleBasedCollator("<0<1<2<3<4<5<6<7<8<9<A,a<b,B<c," + + "C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<k,K" + + "<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,"+ + "T<u,U<v,V<w,W<x,X<y,Y<z,Z"); + } + catch (ParseException x) + { + throw (InternalError)new InternalError().initCause(x); + } + } + // FIXME + return getInstance(Locale.US); } /** diff --git a/libjava/java/text/DateFormat.h b/libjava/java/text/DateFormat.h index 447fef3..7f82499 100644 --- a/libjava/java/text/DateFormat.h +++ b/libjava/java/text/DateFormat.h @@ -39,6 +39,7 @@ public: private: static ::java::text::DateFormat * computeInstance(jint, ::java::util::Locale *, jboolean, jboolean); static ::java::text::DateFormat * computeInstance(jint, jint, ::java::util::Locale *, jboolean, jboolean); + static ::java::text::DateFormat * computeDefault(jint, jint, jboolean, jboolean); public: static ::java::text::DateFormat * getDateInstance(); static ::java::text::DateFormat * getDateInstance(jint); diff --git a/libjava/java/text/DateFormatSymbols.h b/libjava/java/text/DateFormatSymbols.h index 1ef65b7..9836ea5 100644 --- a/libjava/java/text/DateFormatSymbols.h +++ b/libjava/java/text/DateFormatSymbols.h @@ -50,6 +50,8 @@ public: virtual jboolean equals(::java::lang::Object *); virtual ::java::lang::Object * clone(); virtual jint hashCode(); + static ::java::text::DateFormatSymbols * getInstance(); + static ::java::text::DateFormatSymbols * getInstance(::java::util::Locale *); public: // actually package-private JArray< ::java::lang::String * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) ampms; JArray< ::java::lang::String * > * eras; @@ -61,6 +63,7 @@ public: // actually package-private JArray< ::java::lang::String * > * shortWeekdays; JArray< ::java::lang::String * > * weekdays; private: + JArray< JArray< ::java::lang::String * > * > * runtimeZoneStrings; JArray< JArray< ::java::lang::String * > * > * zoneStrings; static const jlong serialVersionUID = -5987973545549424702LL; static JArray< ::java::lang::String * > * formatPrefixes; diff --git a/libjava/java/text/DateFormatSymbols.java b/libjava/java/text/DateFormatSymbols.java index 27a806d..2ca513e 100644 --- a/libjava/java/text/DateFormatSymbols.java +++ b/libjava/java/text/DateFormatSymbols.java @@ -1,5 +1,5 @@ /* DateFormatSymbols.java -- Format over a range of numbers - Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,14 +38,25 @@ exception statement from your version. */ package java.text; +import gnu.java.locale.LocaleHelper; + +import java.text.spi.DateFormatSymbolsProvider; + +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; +import java.util.ServiceLoader; +import java.util.TimeZone; + +import java.util.spi.TimeZoneNameProvider; /** * This class acts as container for locale specific date/time formatting * information such as the days of the week and the months of the year. * @author Per Bothner (bothner@cygnus.com) + * * @date October 24, 1998. */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3. @@ -60,6 +71,15 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable String[] shortMonths; String[] shortWeekdays; String[] weekdays; + + /** + * The timezone strings supplied by the runtime. + */ + private String[][] runtimeZoneStrings; + + /** + * Custom timezone strings supplied by {@link #setZoneStrings()}. + */ private String[][] zoneStrings; private static final long serialVersionUID = -5987973545549424702L; @@ -91,11 +111,18 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable /** * This method initializes a new instance of <code>DateFormatSymbols</code> * by loading the date format information for the specified locale. + * This constructor only obtains instances using the runtime's resources; + * to also include {@link java.text.spi.DateFormatSymbolsProvider} instances, + * call {@link #getInstance(java.util.Locale)} instead. * * @param locale The locale for which date formatting symbols should * be loaded. + * @throws MissingResourceException if the resources for the specified + * locale could not be found or loaded. + * @see #getInstance(java.util.Locale) */ - public DateFormatSymbols (Locale locale) throws MissingResourceException + public DateFormatSymbols (Locale locale) + throws MissingResourceException { ResourceBundle res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", locale, @@ -116,9 +143,16 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable /** * This method loads the format symbol information for the default - * locale. + * locale. This constructor only obtains instances using the runtime's resources; + * to also include {@link java.text.spi.DateFormatSymbolsProvider} instances, + * call {@link #getInstance()} instead. + * + * @throws MissingResourceException if the resources for the default + * locale could not be found or loaded. + * @see #getInstance() */ - public DateFormatSymbols () throws MissingResourceException + public DateFormatSymbols() + throws MissingResourceException { this (Locale.getDefault()); } @@ -499,4 +533,65 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable ^ hashCode(weekdays) ^ hashCode(zoneStrings)); } + + /** + * Returns a {@link DateFormatSymbols} instance for the + * default locale obtained from either the runtime itself + * or one of the installed + * {@link java.text.spi.DateFormatSymbolsProvider} instances. + * This is equivalent to calling + * <code>getInstance(Locale.getDefault())</code>. + * + * @return a {@link DateFormatSymbols} instance for the default + * locale. + * @since 1.6 + */ + public static final DateFormatSymbols getInstance() + { + return getInstance(Locale.getDefault()); + } + + /** + * Returns a {@link DateFormatSymbols} instance for the + * specified locale obtained from either the runtime itself + * or one of the installed + * {@link java.text.spi.DateFormatSymbolsProvider} instances. + * + * @param locale the locale for which an instance should be + * returned. + * @return a {@link DateFormatSymbols} instance for the specified + * locale. + * @throws NullPointerException if <code>locale</code> is + * <code>null</code>. + * @since 1.6 + */ + public static final DateFormatSymbols getInstance(Locale locale) + { + try + { + DateFormatSymbols syms = new DateFormatSymbols(locale); + return syms; + } + catch (MissingResourceException e) + { + /* This means runtime support for the locale + * is not available, so we check providers. */ + } + for (DateFormatSymbolsProvider p : + ServiceLoader.load(DateFormatSymbolsProvider.class)) + { + for (Locale loc : p.getAvailableLocales()) + { + if (loc.equals(locale)) + { + DateFormatSymbols syms = p.getInstance(locale); + if (syms != null) + return syms; + break; + } + } + } + return getInstance(LocaleHelper.getFallbackLocale(locale)); + } + } diff --git a/libjava/java/text/DecimalFormatSymbols.h b/libjava/java/text/DecimalFormatSymbols.h index b38140c..8967572 100644 --- a/libjava/java/text/DecimalFormatSymbols.h +++ b/libjava/java/text/DecimalFormatSymbols.h @@ -67,6 +67,10 @@ public: void setZeroDigit(jchar); private: void readObject(::java::io::ObjectInputStream *); +public: + static ::java::text::DecimalFormatSymbols * getInstance(); + static ::java::text::DecimalFormatSymbols * getInstance(::java::util::Locale *); +private: ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) currencySymbol; jchar decimalSeparator; jchar digit; diff --git a/libjava/java/text/DecimalFormatSymbols.java b/libjava/java/text/DecimalFormatSymbols.java index 110e45f..b72f144 100644 --- a/libjava/java/text/DecimalFormatSymbols.java +++ b/libjava/java/text/DecimalFormatSymbols.java @@ -38,13 +38,19 @@ exception statement from your version. */ package java.text; +import gnu.java.locale.LocaleHelper; + import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; + +import java.text.spi.DecimalFormatSymbolsProvider; + import java.util.Currency; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; +import java.util.ServiceLoader; /** * This class is a container for the symbols used by @@ -77,6 +83,11 @@ public final class DecimalFormatSymbols implements Cloneable, Serializable /** * This method initializes a new instance of * <code>DecimalFormatSymbols</code> for the default locale. + * This constructor only obtains instances using the runtime's resources; + * to also include {@link java.text.spi.DateFormatSymbolsProvider} instances, + * call {@link #getInstance()} instead. + * + * @see #getInstance() */ public DecimalFormatSymbols () { @@ -664,4 +675,68 @@ public final class DecimalFormatSymbols implements Cloneable, Serializable serialVersionOnStream = 2; } + + /** + * Returns a {@link DecimalFormatSymbols} instance for the + * default locale obtained from either the runtime itself + * or one of the installed + * {@link java.text.spi.DecimalFormatSymbolsProvider} instances. + * This is equivalent to calling + * <code>getInstance(Locale.getDefault())</code>. + * + * @return a {@link DecimalFormatSymbols} instance for the default + * locale. + * @since 1.6 + */ + public static final DecimalFormatSymbols getInstance() + { + return getInstance(Locale.getDefault()); + } + + /** + * Returns a {@link DecimalFormatSymbols} instance for the + * specified locale obtained from either the runtime itself + * or one of the installed + * {@link java.text.spi.DecimalFormatSymbolsProvider} instances. + * + * @param locale the locale for which an instance should be + * returned. + * @return a {@link DecimalFormatSymbols} instance for the specified + * locale. + * @throws NullPointerException if <code>locale</code> is + * <code>null</code>. + * @since 1.6 + */ + public static final DecimalFormatSymbols getInstance(Locale locale) + { + try + { + if (!locale.equals(Locale.ROOT)) + ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", + locale, + ClassLoader.getSystemClassLoader()); + return new DecimalFormatSymbols(locale); + } + catch (MissingResourceException x) + { + /* This means runtime support for the locale + * is not available, so we check providers. */ + } + for (DecimalFormatSymbolsProvider p : + ServiceLoader.load(DecimalFormatSymbolsProvider.class)) + { + for (Locale loc : p.getAvailableLocales()) + { + if (loc.equals(locale)) + { + DecimalFormatSymbols syms = p.getInstance(locale); + if (syms != null) + return syms; + break; + } + } + } + return getInstance(LocaleHelper.getFallbackLocale(locale)); + } + } diff --git a/libjava/java/text/spi/BreakIteratorProvider.h b/libjava/java/text/spi/BreakIteratorProvider.h new file mode 100644 index 0000000..663dff22 --- /dev/null +++ b/libjava/java/text/spi/BreakIteratorProvider.h @@ -0,0 +1,38 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_BreakIteratorProvider__ +#define __java_text_spi_BreakIteratorProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class BreakIterator; + namespace spi + { + class BreakIteratorProvider; + } + } + } +} + +class java::text::spi::BreakIteratorProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + BreakIteratorProvider(); +public: + virtual ::java::text::BreakIterator * getCharacterInstance(::java::util::Locale *) = 0; + virtual ::java::text::BreakIterator * getLineInstance(::java::util::Locale *) = 0; + virtual ::java::text::BreakIterator * getSentenceInstance(::java::util::Locale *) = 0; + virtual ::java::text::BreakIterator * getWordInstance(::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_BreakIteratorProvider__ diff --git a/libjava/java/text/spi/CollatorProvider.h b/libjava/java/text/spi/CollatorProvider.h new file mode 100644 index 0000000..bf07271 --- /dev/null +++ b/libjava/java/text/spi/CollatorProvider.h @@ -0,0 +1,35 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_CollatorProvider__ +#define __java_text_spi_CollatorProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class Collator; + namespace spi + { + class CollatorProvider; + } + } + } +} + +class java::text::spi::CollatorProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + CollatorProvider(); +public: + virtual ::java::text::Collator * getInstance(::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_CollatorProvider__ diff --git a/libjava/java/text/spi/DateFormatProvider.h b/libjava/java/text/spi/DateFormatProvider.h new file mode 100644 index 0000000..15f6e36 --- /dev/null +++ b/libjava/java/text/spi/DateFormatProvider.h @@ -0,0 +1,37 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_DateFormatProvider__ +#define __java_text_spi_DateFormatProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class DateFormat; + namespace spi + { + class DateFormatProvider; + } + } + } +} + +class java::text::spi::DateFormatProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + DateFormatProvider(); +public: + virtual ::java::text::DateFormat * getDateInstance(jint, ::java::util::Locale *) = 0; + virtual ::java::text::DateFormat * getDateTimeInstance(jint, jint, ::java::util::Locale *) = 0; + virtual ::java::text::DateFormat * getTimeInstance(jint, ::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_DateFormatProvider__ diff --git a/libjava/java/text/spi/DateFormatSymbolsProvider.h b/libjava/java/text/spi/DateFormatSymbolsProvider.h new file mode 100644 index 0000000..4a70129 --- /dev/null +++ b/libjava/java/text/spi/DateFormatSymbolsProvider.h @@ -0,0 +1,35 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_DateFormatSymbolsProvider__ +#define __java_text_spi_DateFormatSymbolsProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class DateFormatSymbols; + namespace spi + { + class DateFormatSymbolsProvider; + } + } + } +} + +class java::text::spi::DateFormatSymbolsProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + DateFormatSymbolsProvider(); +public: + virtual ::java::text::DateFormatSymbols * getInstance(::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_DateFormatSymbolsProvider__ diff --git a/libjava/java/text/spi/DecimalFormatSymbolsProvider.h b/libjava/java/text/spi/DecimalFormatSymbolsProvider.h new file mode 100644 index 0000000..ceead02 --- /dev/null +++ b/libjava/java/text/spi/DecimalFormatSymbolsProvider.h @@ -0,0 +1,35 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_DecimalFormatSymbolsProvider__ +#define __java_text_spi_DecimalFormatSymbolsProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class DecimalFormatSymbols; + namespace spi + { + class DecimalFormatSymbolsProvider; + } + } + } +} + +class java::text::spi::DecimalFormatSymbolsProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + DecimalFormatSymbolsProvider(); +public: + virtual ::java::text::DecimalFormatSymbols * getInstance(::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_DecimalFormatSymbolsProvider__ diff --git a/libjava/java/text/spi/NumberFormatProvider.h b/libjava/java/text/spi/NumberFormatProvider.h new file mode 100644 index 0000000..4224aea --- /dev/null +++ b/libjava/java/text/spi/NumberFormatProvider.h @@ -0,0 +1,38 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_text_spi_NumberFormatProvider__ +#define __java_text_spi_NumberFormatProvider__ + +#pragma interface + +#include <java/util/spi/LocaleServiceProvider.h> +extern "Java" +{ + namespace java + { + namespace text + { + class NumberFormat; + namespace spi + { + class NumberFormatProvider; + } + } + } +} + +class java::text::spi::NumberFormatProvider : public ::java::util::spi::LocaleServiceProvider +{ + +public: // actually protected + NumberFormatProvider(); +public: + virtual ::java::text::NumberFormat * getCurrencyInstance(::java::util::Locale *) = 0; + virtual ::java::text::NumberFormat * getIntegerInstance(::java::util::Locale *) = 0; + virtual ::java::text::NumberFormat * getNumberInstance(::java::util::Locale *) = 0; + virtual ::java::text::NumberFormat * getPercentInstance(::java::util::Locale *) = 0; + static ::java::lang::Class class$; +}; + +#endif // __java_text_spi_NumberFormatProvider__ |