# This property file contains dependencies of classes, methods, and
# field on other methods or classes.
#
# Syntax: 
#
#   <used>: <needed 1> [... <needed N>]
#
# means that when <used> is included, <needed 1> (... <needed N>) must
# be included as well.
#
# <needed X> and <used> are of the form
#
#   <class.methodOrField(signature)>
#
# or just
#
#   <class>
#
# Within dependencies, variables can be used. A variable is defined as 
# follows: 
#
#   {variable}: value1 value2 ... value<n>
#
# variables can be used on the right side of dependencies as follows: 
#
#    <used>: com.bla.blu.{variable}.Class.m()V
#
# The use of the variable will expand to <n> dependencies of the form
#
#    <used>: com.bla.blu.value1.Class.m()V
#    <used>: com.bla.blu.value2.Class.m()V
#    ...
#    <used>: com.bla.blu.value<n>.Class.m()V
#
# Variables can be redefined when building a system to select the 
# required support for features like encodings, protocols, etc. 
#
# Hints:
#
#  - For methods and fields, the signature is mandatory. For
#    specification, please see the Java Virtual Machine Specification by
#    SUN. Unlike in the spec, field signatures (types) are in brackets.
#
#  - Package names must be separated by '/' (and not '.'). E.g.,
#    java/lang/Class (this is necessary, because the '.' is used to
#    separate method or field names from classes)
#
#  - In case <needed> refers to a class, only the class itself will be
#    included in the resulting binary, NOT necessarily all its methods
#    and fields. If you want to refer to all methods and fields, you can
#    write class.* as an abbreviation.
#
# -  Abbreviations for packages are also possible: my/package/* means all
#    methods and fields of all classes in my/package.
#
# -  A line with a trailing '\' continues in the next line.

# end of file

# All locales supported are loaded via classes from java.text (see below)
# from class gnu/java/locale/LocaleInformation_<locale_id>
#
# This introduces a dependency for all locales. To allow an easy selection
# and addition of locales, the library variable {text_locales} can be set to 
# the set of supported locales.
#

{text_locales}: \
	af_ZA \
	ar_AE \
	ar_BH \
	ar_DZ \
	ar_EG \
	ar_IN \
	ar_IQ \
	ar_JO \
	ar_KW \
	ar_LB \
	ar_LY \
	ar_MA \
	ar_OM \
	ar_QA \
	ar_SD \
	ar_SY \
	ar_TN \
	ar_YE \
	be_BY \
	bn_IN \
	br_FR \
	bs_BA \
	ca_ES \
	cs_CZ \
	cy_GB \
	da_DK \
	de \
	de_AT \
	de_BE \
	de_CH \
	de_DE \
	de_LU \
	el_GR \
	en \
	en_AU \
	en_BW \
	en_CA \
	en_DK \
	en_GB \
	en_HK \
	en_IE \
	en_IN \
	en_NZ \
	en_PH \
	en_SG \
	en_US \
	en_ZA \
	en_ZW \
	es_AR \
	es_BO \
	es_CL \
	es_CO \
	es_CR \
	es_DO \
	es_EC \
	es_ES \
	es_GT \
	es_HN \
	es_MX \
	es_NI \
	es_PA \
	es_PE \
	es_PR \
	es_PY \
	es_SV \
	es_US \
	es_UY \
	es_VE \
	et_EE \
	eu_ES \
	fa_IR \
	fi_FI \
	fo_FO \
	fr_BE \
	fr_CA \
	fr_CH \
	fr_FR \
	fr_LU \
	ga_IE \
	gd_GB \
	gl_ES \
	gv_GB \
	he_IL \
	hi_IN \
	hr_HR \
	hu_HU \
	id_ID \
	it_CH \
	it_IT \
	iw_IL \
	ja_JP \
	ka_GE \
	kl_GL \
	ko_KR \
	kw_GB \
	lt_LT \
	lv_LV \
	mi_NZ \
	mk_MK \
	mr_IN \
	mt_MT \
	nl \
	nl_BE \
	nl_NL \
	nn_NO \
	no_NO \
	oc_FR \
	pl_PL \
	pt_BR \
	pt_PT \
	ro_RO \
	ru_RU \
	ru_UA \
	se_NO \
	sk_SK \
	sl_SI \
	sq_AL \
	sr_YU \
	sv_FI \
	sv_SE \
	ta_IN \
	te_IN \
	tg_TJ \
	tl_PH \
	tr_TR \
	uk_UA \
	ur_PK \
	uz_UZ \
	vi_VN \
	yi_US \
	zh_CN \
	zh_HK \
	zh_SG \
	zh_TW 

java/text/Collator.getInstance(Ljava/util/Locale;)Ljava/text/Collator;: \
	gnu/java/locale/LocaleInformation_{text_locales}.*

java/text/DateFormatSymbols.<init>(Ljava/util/Locale;)V: \
	gnu/java/locale/LocaleInformation_{text_locales}.*

java/text/DecimalFormatSymbols.<init>(Ljava/util/Locale;)V: \
	gnu/java/locale/LocaleInformation_{text_locales}.*

java/text/BreakIterator.getInstance(Ljava/lang/String;Ljava/util/Locale;)Ljava/text/BreakIterator;: \
	gnu/java/locale/LocaleInformation_{text_locales}.*

java/text/NumberFormat.computeInstance(Ljava/util/Locale;Ljava/lang/String;Ljava/lang/String;)Ljava/text/NumberFormat;: \
	gnu/java/locale/LocaleInformation_{text_locales}.*

java/text/DateFormat.computeInstance(IILjava/util/Locale;ZZ)Ljava/text/DateFormat;: \
	gnu/java/locale/LocaleInformation_{text_locales}.*
