diff options
author | Nicholas Clark <nick@ccl4.org> | 2009-10-02 11:46:30 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2009-10-02 11:46:30 +0100 |
commit | bdf43ffe6776e4e4c0d514386228a7b1ee6604ce (patch) | |
tree | 80f432cc0c9114f5528d3b1a2ccaf690a9ba0e0f /cpan/Locale-Codes | |
parent | 55c474ba7687e845183c20351357b0cf4f16fdef (diff) | |
download | perl-bdf43ffe6776e4e4c0d514386228a7b1ee6604ce.tar.gz |
Move Locale::Codes from ext/ to cpan/
Diffstat (limited to 'cpan/Locale-Codes')
-rw-r--r-- | cpan/Locale-Codes/ChangeLog | 169 | ||||
-rw-r--r-- | cpan/Locale-Codes/Makefile.PL | 10 | ||||
-rw-r--r-- | cpan/Locale-Codes/README | 49 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Constants.pm | 31 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Constants.pod | 76 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Country.pm | 550 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Country.pod | 306 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Currency.pm | 356 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Currency.pod | 191 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Language.pm | 315 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Language.pod | 158 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Script.pm | 294 | ||||
-rw-r--r-- | cpan/Locale-Codes/lib/Locale/Script.pod | 253 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/all.t | 580 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/constants.t | 44 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/country.t | 153 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/currency.t | 80 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/language.t | 110 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/rename.t | 79 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/script.t | 106 | ||||
-rw-r--r-- | cpan/Locale-Codes/t/uk.t | 65 |
21 files changed, 3975 insertions, 0 deletions
diff --git a/cpan/Locale-Codes/ChangeLog b/cpan/Locale-Codes/ChangeLog new file mode 100644 index 0000000000..c724b38525 --- /dev/null +++ b/cpan/Locale-Codes/ChangeLog @@ -0,0 +1,169 @@ + + ChangeLog for Locale-Codes Distribution + +2.07 2004-06-10 neilb + * made $_ local in the initialisation code for each module + change back-propagated from Perl distribution + * removed two non ISO-8859-1 characters from language names + change back-propagated from Perl distribution + * added the following aliases, with a test case for each + - Burma added to Myanmar + - French Southern and Antarctic Lands to + French Southern Territories + patch from TJ Mather + * "Canadian Dollar" was mis-spelled as "Candian Dollar" + - noted by Nick Cabatoff, patch from Michael Hennecke + * Changes to Locale::Country reflecting changes in ISO 3166 + - added Aland Islands (ax, ala, 248) + - YUGOSLAVIA is now SERBIA AND MONTENEGRO + YU => CS + YUG => SCG + 891 => 891 (unchanged) + (YUGOSLAVIA retained as an alias) + - EAST TIMOR changed to TIMOR-LESTE + (old name retained as an alias) + - three letter code for Romania changed from ROM to ROU + * ZAIRE is now CONGO, THE DEMOCRATIC REPUBLIC OF THE + ZR => CD + ZAR => COD + 180 => 180 (unchanged) + (ZAIRE retained as alias) + +2.06 2002-07-15 neilb + + * The four modules which have data after __DATA__ weren't + closing the DATA filehandle after reading from it, + which they should. Bug and patch from Steve Hay. + +2.05 2002-07-08 neilb + + * Added three letter codes for the countries that were missing + them. Patch from TJ Mather. + * Documentation bug: one of the examples used => where the + lvalue was a constant, which isn't allowed, unless you + put the () with the constant to force the right interpretation. + Pointed out by TJ Mather and MYT. + * Updated the URL for the appendix in the CIA world factbook. + Patch from TJ Mather. + +2.04 2002-05-23 neilb + + * updated according to changes in ISO 3166-1 described + in ISO 3166-1 newsletters V-4 and V-5, dated 2002-05-20: + - Kazakstan is now "Kazakhstan" + - Macau is now "Macao" + The old names are retained as aliases. + + The alpha-2 and alpha-3 codes for East Timor have changed: + tp -> tl + tmp -> tls + the numeric code stays 626. If you want to support the old + codes, you can use the semi-private function alias_code(). + +2.03 2002-03-24 neilb + + * Fixed a typo in the alias for the Vatican, reported (with patch) + by Philip Newton. + * Added "Moldova" as an alias for "Moldova, Republic of" + * Updated Makefile.PL to include AUTHOR and ABSTRACT + +2.02 2002-03-09 neilb + + * added semi-private routine rename_country() to Locale::Country, + based on a patch from Iain Chalmers. + * added test rename.t for the above function. + * renamed _alias_code to be alias_code. Have retained the old + name for backwards compatibility. Will remove it when the + major version number next changes. + +2.01 2002-02-18 neilb + + * Split the documentation for all modules into separate pod files. + * Made sure all =over were =over 4; some were other values. + * The code2code() methods had one more shift than was needed. + +2.00 2002-02-17 neilb + + * Created Locale::Script which provides an interface to the + ISO codes for identification of scripts (writing scripts, + rather than perl style scripts). The codes are defined + by ISO 15924, which is currently in final draft. + Thanks to Jarkko for pointing out this new standard. + All three code sets are supported, and a test-suite added. + + * Added support for country name variants to Locale::Country, + so that + country2code('USA') + country2code('United States') + country2code('United States of America') + will all return 'us'. + This had been in the LIMITATIONS section since the first version. + Patch from TJ Mather <tjmather@tjmather.com> with additional + variants from me. Added test-cases for these. + + * Added VERSION to Locale::Constants. Thanks to Jarkko for + pointing that it was missing. + + * Should really have bumped major version with previous release, + since there was a change to the API. + +1.06 2001-03-04 neilb + + Added Locale::Constants, which defines three symbols + for identifying which codeset is being used: + + LOCALE_CODE_ALPHA_2 + LOCALE_CODE_ALPHA_3 + LOCALE_CODE_NUMERIC + + Updated Locale::Country to support all three code sets + defined by ISO 3166. This was requested by Keith Wall. + I haven't added multiple codeset support to the other + modules yet - I'll wait until someone asks for them. + +1.05 Feb 2001 + + Added Locale::Currency, contribution from Michael Hennecke. + Added testsuite for it (t/currency.t) and added testcases + to t/all.t for the all_* functions. + +1.04 Dec 2000 + + Fixed very minor typos from 1.03! + +1.03 Dec 2000 + + Updated Locale::Country: + - fixed spelling of a few countries + - added link to a relevant page from CIA world factbook + + Updated Locale::Language: + - fixed typo in the documentation (ISO 939 should be 639) + +1.02 May 2000 + + Updated Locale::Country and Locale::Language to reflect changes + in the relevant ISO standards. These mainly reflect languages + which are new to the relevant standard, and changes in the + spelling of some country names. + + Added official URLs for the standards to the SEE ALSO sections + of the doc for each module. + + Thanks to Jarkko Hietaniemi for pointing me at the pages + with latest versions of ISO 3166 and 639. + +1.00 March 1998 + + Added Locale::Country::_alias_code() so that 'uk' can be added + as the code for "United Kingdom", if you want it. + This was prompted by Ed Jordan <ed@chronos.net> + + Added a new testsuite for handling this case, and extended the + existing test-suite to include testing of the case where + 'uk' hasn't been defined as a valid code. + +0.003 May 1997 + + First public release to CPAN + diff --git a/cpan/Locale-Codes/Makefile.PL b/cpan/Locale-Codes/Makefile.PL new file mode 100644 index 0000000000..e1121eb1df --- /dev/null +++ b/cpan/Locale-Codes/Makefile.PL @@ -0,0 +1,10 @@ +use strict; +use ExtUtils::MakeMaker; + +WriteMakefile ( + NAME => 'Locale-Codes', + DISTNAME => 'Locale-Codes', + VERSION => '2.07', + AUTHOR => 'Neil Bowers <neil@bowers.com>', + ABSTRACT => 'modules for ISO codes identifying countries, languages, currencies, and scripts', +); diff --git a/cpan/Locale-Codes/README b/cpan/Locale-Codes/README new file mode 100644 index 0000000000..9920aba919 --- /dev/null +++ b/cpan/Locale-Codes/README @@ -0,0 +1,49 @@ + + Locale-Codes Distribution + v2.07 + +For changes in this release, please see the ChangeLog file. + +This distribution contains four Perl modules which can be used to process +ISO codes for identifying languages, countries, scripts, +and currencies & funds. + + Locale::Language + Two letter codes for language identification (ISO 639). + For example, 'en' is the code for 'English'. + + Locale::Country + Codes for country identification (ISO 3166). This module + supports the three different code sets defined by the + standard: alpha-2, alpha-3, and numeric codes. + For example, 'bo' is the code for 'Bolivia'. + + Locale::Currency + Three letter codes for currency and fund identification (ISO 4217). + For example, 'sek' is the code for 'Swedish Krona'. + + Locale::Script + Codes for script identification (ISO 15924). This module supports + the three different code sets defined by the standard: + alpha-2, alpha-3, and numeric codes. + +To install these modules, you should just have to run the following: + + % perl Makefile.PL + % make + % make test + % make install + +The modules are documented using pod. When you "make install", you +will get four man-pages: Locale::Language, Locale::Country, +Locale::Currency, Locale::Script. + +The first version of Locale::Currency was written by Michael Hennecke, +with modifications for inclusion by me. Kudos to Michael. + +Please let me know if you experience any problems with these modules, +or have any ideas for additions. + + +Neil Bowers +<neil@bowers.com> diff --git a/cpan/Locale-Codes/lib/Locale/Constants.pm b/cpan/Locale-Codes/lib/Locale/Constants.pm new file mode 100644 index 0000000000..d8ef8f7e21 --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Constants.pm @@ -0,0 +1,31 @@ +# +# Locale::Constants - defined constants for identifying codesets +# +# $Id: Constants.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ +# + +package Locale::Constants; +use strict; + +require Exporter; + +#----------------------------------------------------------------------- +# Public Global Variables +#----------------------------------------------------------------------- +use vars qw($VERSION @ISA @EXPORT); +$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); +@ISA = qw(Exporter); +@EXPORT = qw(LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC + LOCALE_CODE_DEFAULT); + +#----------------------------------------------------------------------- +# Constants +#----------------------------------------------------------------------- +use constant LOCALE_CODE_ALPHA_2 => 1; +use constant LOCALE_CODE_ALPHA_3 => 2; +use constant LOCALE_CODE_NUMERIC => 3; + +use constant LOCALE_CODE_DEFAULT => LOCALE_CODE_ALPHA_2; + +1; + diff --git a/cpan/Locale-Codes/lib/Locale/Constants.pod b/cpan/Locale-Codes/lib/Locale/Constants.pod new file mode 100644 index 0000000000..ae42abbec9 --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Constants.pod @@ -0,0 +1,76 @@ + +=head1 NAME + +Locale::Constants - constants for Locale codes + +=head1 SYNOPSIS + + use Locale::Constants; + + $codeset = LOCALE_CODE_ALPHA_2; + +=head1 DESCRIPTION + +B<Locale::Constants> defines symbols which are used in +the four modules from the Locale-Codes distribution: + + Locale::Language + Locale::Country + Locale::Currency + Locale::Script + +B<Note:> at the moment only Locale::Country and Locale::Script +support more than one code set. + +The symbols defined are used to specify which codes you +want to be used: + + LOCALE_CODE_ALPHA_2 + LOCALE_CODE_ALPHA_3 + LOCALE_CODE_NUMERIC + +You shouldn't have to C<use> this module directly yourself - +it is used by the three Locale modules, which in turn export +the symbols. + +=head1 KNOWN BUGS AND LIMITATIONS + +None at the moment. + +=head1 SEE ALSO + +=over 4 + +=item Locale::Language + +Codes for identification of languages. + +=item Locale::Country + +Codes for identification of countries. + +=item Locale::Script + +Codes for identification of scripts. + +=item Locale::Currency + +Codes for identification of currencies and funds. + +=back + +=head1 AUTHOR + +Neil Bowers E<lt>neil@bowers.comE<gt> + +=head1 COPYRIGHT + +Copyright (C) 2002-2004, Neil Bowers. + +Copyright (C) 2001, Canon Research Centre Europe (CRE). + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/cpan/Locale-Codes/lib/Locale/Country.pm b/cpan/Locale-Codes/lib/Locale/Country.pm new file mode 100644 index 0000000000..2ecd1305c0 --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Country.pm @@ -0,0 +1,550 @@ +# +# Locale::Country - ISO codes for country identification (ISO 3166) +# +# $Id: Country.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ +# + +package Locale::Country; +use strict; +require 5.002; + +require Exporter; +use Carp; +use Locale::Constants; + + +#----------------------------------------------------------------------- +# Public Global Variables +#----------------------------------------------------------------------- +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); +$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); +@ISA = qw(Exporter); +@EXPORT = qw(code2country country2code + all_country_codes all_country_names + country_code2code + LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC); + +#----------------------------------------------------------------------- +# Private Global Variables +#----------------------------------------------------------------------- +my $CODES = []; +my $COUNTRIES = []; + + +#======================================================================= +# +# code2country ( CODE [, CODESET ] ) +# +#======================================================================= +sub code2country +{ + my $code = shift; + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + + return undef unless defined $code; + + #------------------------------------------------------------------- + # Make sure the code is in the right form before we use it + # to look up the corresponding country. + # We have to sprintf because the codes are given as 3-digits, + # with leading 0's. Eg 052 for Barbados. + #------------------------------------------------------------------- + if ($codeset == LOCALE_CODE_NUMERIC) + { + return undef if ($code =~ /\D/); + $code = sprintf("%.3d", $code); + } + else + { + $code = lc($code); + } + + if (exists $CODES->[$codeset]->{$code}) + { + return $CODES->[$codeset]->{$code}; + } + else + { + #--------------------------------------------------------------- + # no such country code! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# country2code ( NAME [, CODESET ] ) +# +#======================================================================= +sub country2code +{ + my $country = shift; + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + + return undef unless defined $country; + $country = lc($country); + if (exists $COUNTRIES->[$codeset]->{$country}) + { + return $COUNTRIES->[$codeset]->{$country}; + } + else + { + #--------------------------------------------------------------- + # no such country! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# country_code2code ( NAME [, CODESET ] ) +# +#======================================================================= +sub country_code2code +{ + (@_ == 3) or croak "country_code2code() takes 3 arguments!"; + + my $code = shift; + my $inset = shift; + my $outset = shift; + my $outcode; + my $country; + + + return undef if $inset == $outset; + $country = code2country($code, $inset); + return undef if not defined $country; + $outcode = country2code($country, $outset); + return $outcode; +} + + +#======================================================================= +# +# all_country_codes ( [ CODESET ] ) +# +#======================================================================= +sub all_country_codes +{ + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + return keys %{ $CODES->[$codeset] }; +} + + +#======================================================================= +# +# all_country_names ( [ CODESET ] ) +# +#======================================================================= +sub all_country_names +{ + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + return values %{ $CODES->[$codeset] }; +} + + +#======================================================================= +# +# alias_code ( ALIAS => CODE [ , CODESET ] ) +# +# Add an alias for an existing code. If the CODESET isn't specified, +# then we use the default (currently the alpha-2 codeset). +# +# Locale::Country::alias_code('uk' => 'gb'); +# +#======================================================================= +sub alias_code +{ + my $alias = shift; + my $real = shift; + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + my $country; + + + if (not exists $CODES->[$codeset]->{$real}) + { + carp "attempt to alias \"$alias\" to unknown country code \"$real\"\n"; + return undef; + } + $country = $CODES->[$codeset]->{$real}; + $CODES->[$codeset]->{$alias} = $country; + $COUNTRIES->[$codeset]->{"\L$country"} = $alias; + + return $alias; +} + +# old name of function for backwards compatibility +*_alias_code = *alias_code; + + +#======================================================================= +# +# rename_country +# +# change the official name for a country, eg: +# gb => 'Great Britain' +# rather than the standard 'United Kingdom'. The original is retained +# as an alias, but the new name will be returned if you lookup the +# name from code. +# +#======================================================================= +sub rename_country +{ + my $code = shift; + my $new_name = shift; + my $codeset = @_ > 0 ? shift : _code2codeset($code); + my $country; + my $c; + + + if (not defined $codeset) + { + carp "rename_country(): unknown country code \"$code\"\n"; + return 0; + } + + $country = $CODES->[$codeset]->{$code}; + + foreach my $cset (LOCALE_CODE_ALPHA_2, + LOCALE_CODE_ALPHA_3, + LOCALE_CODE_NUMERIC) + { + if ($cset == $codeset) + { + $c = $code; + } + else + { + $c = country_code2code($code, $codeset, $cset); + } + + $CODES->[$cset]->{$c} = $new_name; + $COUNTRIES->[$cset]->{"\L$new_name"} = $c; + } + + return 1; +} + + +#======================================================================= +# +# _code2codeset +# +# given a country code in an unknown codeset, return the codeset +# it is from, or undef. +# +#======================================================================= +sub _code2codeset +{ + my $code = shift; + + + foreach my $codeset (LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3, + LOCALE_CODE_NUMERIC) + { + return $codeset if (exists $CODES->[$codeset]->{$code}) + } + + return undef; +} + + +#======================================================================= +# +# initialisation code - stuff the DATA into the ALPHA2 hash +# +#======================================================================= +{ + my ($alpha2, $alpha3, $numeric); + my ($country, @countries); + local $_; + + + while (<DATA>) + { + next unless /\S/; + chop; + ($alpha2, $alpha3, $numeric, @countries) = split(/:/, $_); + + $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $countries[0]; + foreach $country (@countries) + { + $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2; + } + + if ($alpha3) + { + $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $countries[0]; + foreach $country (@countries) + { + $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3; + } + } + + if ($numeric) + { + $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $countries[0]; + foreach $country (@countries) + { + $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric; + } + } + + } + + close(DATA); +} + +1; + +__DATA__ +ad:and:020:Andorra +ae:are:784:United Arab Emirates +af:afg:004:Afghanistan +ag:atg:028:Antigua and Barbuda +ai:aia:660:Anguilla +al:alb:008:Albania +am:arm:051:Armenia +an:ant:530:Netherlands Antilles +ao:ago:024:Angola +aq:ata:010:Antarctica +ar:arg:032:Argentina +as:asm:016:American Samoa +at:aut:040:Austria +au:aus:036:Australia +aw:abw:533:Aruba +ax:ala:248:Aland Islands +az:aze:031:Azerbaijan +ba:bih:070:Bosnia and Herzegovina +bb:brb:052:Barbados +bd:bgd:050:Bangladesh +be:bel:056:Belgium +bf:bfa:854:Burkina Faso +bg:bgr:100:Bulgaria +bh:bhr:048:Bahrain +bi:bdi:108:Burundi +bj:ben:204:Benin +bm:bmu:060:Bermuda +bn:brn:096:Brunei Darussalam +bo:bol:068:Bolivia +br:bra:076:Brazil +bs:bhs:044:Bahamas +bt:btn:064:Bhutan +bv:bvt:074:Bouvet Island +bw:bwa:072:Botswana +by:blr:112:Belarus +bz:blz:084:Belize +ca:can:124:Canada +cc:cck:166:Cocos (Keeling) Islands +cd:cod:180:Congo, The Democratic Republic of the:Zaire:Congo, Democratic Republic of the +cf:caf:140:Central African Republic +cg:cog:178:Congo:Congo, Republic of the +ch:che:756:Switzerland +ci:civ:384:Cote D'Ivoire +ck:cok:184:Cook Islands +cl:chl:152:Chile +cm:cmr:120:Cameroon +cn:chn:156:China +co:col:170:Colombia +cr:cri:188:Costa Rica +cs:scg:891:Serbia and Montenegro:Yugoslavia +cu:cub:192:Cuba +cv:cpv:132:Cape Verde +cx:cxr:162:Christmas Island +cy:cyp:196:Cyprus +cz:cze:203:Czech Republic +de:deu:276:Germany +dj:dji:262:Djibouti +dk:dnk:208:Denmark +dm:dma:212:Dominica +do:dom:214:Dominican Republic +dz:dza:012:Algeria +ec:ecu:218:Ecuador +ee:est:233:Estonia +eg:egy:818:Egypt +eh:esh:732:Western Sahara +er:eri:232:Eritrea +es:esp:724:Spain +et:eth:231:Ethiopia +fi:fin:246:Finland +fj:fji:242:Fiji +fk:flk:238:Falkland Islands (Malvinas):Falkland Islands (Islas Malvinas) +fm:fsm:583:Micronesia, Federated States of +fo:fro:234:Faroe Islands +fr:fra:250:France +fx:fxx:249:France, Metropolitan +ga:gab:266:Gabon +gb:gbr:826:United Kingdom:Great Britain +gd:grd:308:Grenada +ge:geo:268:Georgia +gf:guf:254:French Guiana +gh:gha:288:Ghana +gi:gib:292:Gibraltar +gl:grl:304:Greenland +gm:gmb:270:Gambia +gn:gin:324:Guinea +gp:glp:312:Guadeloupe +gq:gnq:226:Equatorial Guinea +gr:grc:300:Greece +gs:sgs:239:South Georgia and the South Sandwich Islands +gt:gtm:320:Guatemala +gu:gum:316:Guam +gw:gnb:624:Guinea-Bissau +gy:guy:328:Guyana +hk:hkg:344:Hong Kong +hm:hmd:334:Heard Island and McDonald Islands +hn:hnd:340:Honduras +hr:hrv:191:Croatia +ht:hti:332:Haiti +hu:hun:348:Hungary +id:idn:360:Indonesia +ie:irl:372:Ireland +il:isr:376:Israel +in:ind:356:India +io:iot:086:British Indian Ocean Territory +iq:irq:368:Iraq +ir:irn:364:Iran, Islamic Republic of:Iran +is:isl:352:Iceland +it:ita:380:Italy +jm:jam:388:Jamaica +jo:jor:400:Jordan +jp:jpn:392:Japan +ke:ken:404:Kenya +kg:kgz:417:Kyrgyzstan +kh:khm:116:Cambodia +ki:kir:296:Kiribati +km:com:174:Comoros +kn:kna:659:Saint Kitts and Nevis +kp:prk:408:Korea, Democratic People's Republic of:Korea, North:North Korea +kr:kor:410:Korea, Republic of:Korea, South:South Korea +kw:kwt:414:Kuwait +ky:cym:136:Cayman Islands +kz:kaz:398:Kazakhstan:Kazakstan +la:lao:418:Lao People's Democratic Republic +lb:lbn:422:Lebanon +lc:lca:662:Saint Lucia +li:lie:438:Liechtenstein +lk:lka:144:Sri Lanka +lr:lbr:430:Liberia +ls:lso:426:Lesotho +lt:ltu:440:Lithuania +lu:lux:442:Luxembourg +lv:lva:428:Latvia +ly:lby:434:Libyan Arab Jamahiriya:Libya +ma:mar:504:Morocco +mc:mco:492:Monaco +md:mda:498:Moldova, Republic of:Moldova +mg:mdg:450:Madagascar +mh:mhl:584:Marshall Islands +mk:mkd:807:Macedonia, the Former Yugoslav Republic of:Macedonia, Former Yugoslav Republic of:Macedonia +ml:mli:466:Mali +mm:mmr:104:Myanmar:Burma +mn:mng:496:Mongolia +mo:mac:446:Macao:Macau +mp:mnp:580:Northern Mariana Islands +mq:mtq:474:Martinique +mr:mrt:478:Mauritania +ms:msr:500:Montserrat +mt:mlt:470:Malta +mu:mus:480:Mauritius +mv:mdv:462:Maldives +mw:mwi:454:Malawi +mx:mex:484:Mexico +my:mys:458:Malaysia +mz:moz:508:Mozambique +na:nam:516:Namibia +nc:ncl:540:New Caledonia +ne:ner:562:Niger +nf:nfk:574:Norfolk Island +ng:nga:566:Nigeria +ni:nic:558:Nicaragua +nl:nld:528:Netherlands +no:nor:578:Norway +np:npl:524:Nepal +nr:nru:520:Nauru +nu:niu:570:Niue +nz:nzl:554:New Zealand +om:omn:512:Oman +pa:pan:591:Panama +pe:per:604:Peru +pf:pyf:258:French Polynesia +pg:png:598:Papua New Guinea +ph:phl:608:Philippines +pk:pak:586:Pakistan +pl:pol:616:Poland +pm:spm:666:Saint Pierre and Miquelon +pn:pcn:612:Pitcairn:Pitcairn Island +pr:pri:630:Puerto Rico +ps:pse:275:Palestinian Territory, Occupied +pt:prt:620:Portugal +pw:plw:585:Palau +py:pry:600:Paraguay +qa:qat:634:Qatar +re:reu:638:Reunion +ro:rou:642:Romania +ru:rus:643:Russian Federation:Russia +rw:rwa:646:Rwanda +sa:sau:682:Saudi Arabia +sb:slb:090:Solomon Islands +sc:syc:690:Seychelles +sd:sdn:736:Sudan +se:swe:752:Sweden +sg:sgp:702:Singapore +sh:shn:654:Saint Helena +si:svn:705:Slovenia +sj:sjm:744:Svalbard and Jan Mayen:Jan Mayen:Svalbard +sk:svk:703:Slovakia +sl:sle:694:Sierra Leone +sm:smr:674:San Marino +sn:sen:686:Senegal +so:som:706:Somalia +sr:sur:740:Suriname +st:stp:678:Sao Tome and Principe +sv:slv:222:El Salvador +sy:syr:760:Syrian Arab Republic:Syria +sz:swz:748:Swaziland +tc:tca:796:Turks and Caicos Islands +td:tcd:148:Chad +tf:atf:260:French Southern Territories:French Southern and Antarctic Lands +tg:tgo:768:Togo +th:tha:764:Thailand +tj:tjk:762:Tajikistan +tk:tkl:772:Tokelau +tm:tkm:795:Turkmenistan +tn:tun:788:Tunisia +to:ton:776:Tonga +tl:tls:626:Timor-Leste:East Timor +tr:tur:792:Turkey +tt:tto:780:Trinidad and Tobago +tv:tuv:798:Tuvalu +tw:twn:158:Taiwan, Province of China:Taiwan +tz:tza:834:Tanzania, United Republic of:Tanzania +ua:ukr:804:Ukraine +ug:uga:800:Uganda +um:umi:581:United States Minor Outlying Islands +us:usa:840:United States:USA:United States of America +uy:ury:858:Uruguay +uz:uzb:860:Uzbekistan +va:vat:336:Holy See (Vatican City State):Holy See (Vatican City) +vc:vct:670:Saint Vincent and the Grenadines +ve:ven:862:Venezuela +vg:vgb:092:Virgin Islands, British:British Virgin Islands +vi:vir:850:Virgin Islands, U.S. +vn:vnm:704:Vietnam +vu:vut:548:Vanuatu +wf:wlf:876:Wallis and Futuna +ws:wsm:882:Samoa +ye:yem:887:Yemen +yt:myt:175:Mayotte +za:zaf:710:South Africa +zm:zmb:894:Zambia +zw:zwe:716:Zimbabwe diff --git a/cpan/Locale-Codes/lib/Locale/Country.pod b/cpan/Locale-Codes/lib/Locale/Country.pod new file mode 100644 index 0000000000..b13cd22a4a --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Country.pod @@ -0,0 +1,306 @@ + +=head1 NAME + +Locale::Country - ISO codes for country identification (ISO 3166) + +=head1 SYNOPSIS + + use Locale::Country; + + $country = code2country('jp'); # $country gets 'Japan' + $code = country2code('Norway'); # $code gets 'no' + + @codes = all_country_codes(); + @names = all_country_names(); + + # semi-private routines + Locale::Country::alias_code('uk' => 'gb'); + Locale::Country::rename_country('gb' => 'Great Britain'); + + +=head1 DESCRIPTION + +The C<Locale::Country> module provides access to the ISO +codes for identifying countries, as defined in ISO 3166-1. +You can either access the codes via the L<conversion routines> +(described below), or with the two functions which return lists +of all country codes or all country names. + +There are three different code sets you can use for identifying +countries: + +=over 4 + +=item B<alpha-2> + +Two letter codes, such as 'tv' for Tuvalu. +This code set is identified with the symbol C<LOCALE_CODE_ALPHA_2>. + +=item B<alpha-3> + +Three letter codes, such as 'brb' for Barbados. +This code set is identified with the symbol C<LOCALE_CODE_ALPHA_3>. + +=item B<numeric> + +Numeric codes, such as 064 for Bhutan. +This code set is identified with the symbol C<LOCALE_CODE_NUMERIC>. + +=back + +All of the routines take an optional additional argument +which specifies the code set to use. +If not specified, it defaults to the two-letter codes. +This is partly for backwards compatibility (previous versions +of this module only supported the alpha-2 codes), and +partly because they are the most widely used codes. + +The alpha-2 and alpha-3 codes are not case-dependent, +so you can use 'BO', 'Bo', 'bO' or 'bo' for Bolivia. +When a code is returned by one of the functions in +this module, it will always be lower-case. + +As of version 2.00, Locale::Country supports variant +names for countries. So, for example, the country code for "United States" +is "us", so country2code('United States') returns 'us'. +Now the following will also return 'us': + + country2code('United States of America') + country2code('USA') + + +=head1 CONVERSION ROUTINES + +There are three conversion routines: C<code2country()>, C<country2code()>, +and C<country_code2code()>. + +=over 4 + +=item code2country( CODE, [ CODESET ] ) + +This function takes a country code and returns a string +which contains the name of the country identified. +If the code is not a valid country code, as defined by ISO 3166, +then C<undef> will be returned: + + $country = code2country('fi'); + +=item country2code( STRING, [ CODESET ] ) + +This function takes a country name and returns the corresponding +country code, if such exists. +If the argument could not be identified as a country name, +then C<undef> will be returned: + + $code = country2code('Norway', LOCALE_CODE_ALPHA_3); + # $code will now be 'nor' + +The case of the country name is not important. +See the section L<KNOWN BUGS AND LIMITATIONS> below. + +=item country_code2code( CODE, CODESET, CODESET ) + +This function takes a country code from one code set, +and returns the corresponding code from another code set. + + $alpha2 = country_code2code('fin', + LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_2); + # $alpha2 will now be 'fi' + +If the code passed is not a valid country code in +the first code set, or if there isn't a code for the +corresponding country in the second code set, +then C<undef> will be returned. + +=back + + +=head1 QUERY ROUTINES + +There are two function which can be used to obtain a list of all codes, +or all country names: + +=over 4 + +=item C<all_country_codes( [ CODESET ] )> + +Returns a list of all two-letter country codes. +The codes are guaranteed to be all lower-case, +and not in any particular order. + +=item C<all_country_names( [ CODESET ] )> + +Returns a list of all country names for which there is a corresponding +country code in the specified code set. +The names are capitalised, and not returned in any particular order. + +Not all countries have alpha-3 and numeric codes - +some just have an alpha-2 code, +so you'll get a different number of countries +depending on which code set you specify. + +=back + + +=head1 SEMI-PRIVATE ROUTINES + +Locale::Country provides two semi-private routines for modifying +the internal data. +Given their status, they aren't exported by default, +and so need to be called by prefixing the function name with the +package name. + +=head2 alias_code + +Define a new code as an alias for an existing code: + + Locale::Country::alias_code( ALIAS => CODE [, CODESET ] ) + +This feature was added as a mechanism for handling +a "uk" code. The ISO standard says that the two-letter code for +"United Kingdom" is "gb", whereas domain names are all .uk. + +By default the module does not understand "uk", since it is implementing +an ISO standard. If you would like 'uk' to work as the two-letter +code for United Kingdom, use the following: + + Locale::Country::alias_code('uk' => 'gb'); + +With this code, both "uk" and "gb" are valid codes for United Kingdom, +with the reverse lookup returning "uk" rather than the usual "gb". + +B<Note:> this function was previously called _alias_code, +but the leading underscore has been dropped. +The old name will be supported for all 2.X releases for +backwards compatibility. + +=head2 rename_country + +If the official country name just isn't good enough for you, +you can rename a country. For example, the official country +name for code 'gb' is 'United Kingdom'. +If you want to change that, you might call: + + Locale::Country::rename_country('gb' => 'Great Britain'); + +This means that calling code2country('gb') will now return +'Great Britain' instead of 'United Kingdom'. +The original country name is retained as an alias, +so for the above example, country2code('United Kingdom') +will still return 'gb'. + + +=head1 EXAMPLES + +The following example illustrates use of the C<code2country()> function. +The user is prompted for a country code, and then told the corresponding +country name: + + $| = 1; # turn off buffering + + print "Enter country code: "; + chop($code = <STDIN>); + $country = code2country($code, LOCALE_CODE_ALPHA_2); + if (defined $country) + { + print "$code = $country\n"; + } + else + { + print "'$code' is not a valid country code!\n"; + } + +=head1 DOMAIN NAMES + +Most top-level domain names are based on these codes, +but there are certain codes which aren't. +If you are using this module to identify country from hostname, +your best bet is to preprocess the country code. + +For example, B<edu>, B<com>, B<gov> and friends would map to B<us>; +B<uk> would map to B<gb>. Any others? + +=head1 KNOWN BUGS AND LIMITATIONS + +=over 4 + +=item * + +When using C<country2code()>, the country name must currently appear +exactly as it does in the source of the module. The module now supports +a small number of variants. + +Possible extensions to this are: an interface for getting at the +list of variant names, and regular expression matches. + +=item * + +In the current implementation, all data is read in when the +module is loaded, and then held in memory. +A lazy implementation would be more memory friendly. + +=item * + +Support for country names in different languages. + +=back + +=head1 SEE ALSO + +=over 4 + +=item Locale::Language + +ISO two letter codes for identification of language (ISO 639). + +=item Locale::Script + +ISO codes for identification of scripts (ISO 15924). + +=item Locale::Currency + +ISO three letter codes for identification of currencies +and funds (ISO 4217). + +=item Locale::SubCountry + +ISO codes for country sub-divisions (states, counties, provinces, etc), +as defined in ISO 3166-2. +This module is not part of the Locale-Codes distribution, +but is available from CPAN in CPAN/modules/by-module/Locale/ + +=item ISO 3166-1 + +The ISO standard which defines these codes. + +=item http://www.iso.org/iso/en/prods-services/iso3166ma/index.html + +Official home page for the ISO 3166 maintenance agency. + +=item http://www.egt.ie/standards/iso3166/iso3166-1-en.html + +Another useful, but not official, home page. + +=item http://www.cia.gov/cia/publications/factbook/docs/app-d-1.html + +An appendix in the CIA world fact book which lists country codes +as defined by ISO 3166, FIPS 10-4, and internet domain names. + +=back + + +=head1 AUTHOR + +Neil Bowers E<lt>neil@bowers.comE<gt> + +=head1 COPYRIGHT + +Copyright (C) 2002-2004, Neil Bowers. + +Copyright (c) 1997-2001 Canon Research Centre Europe (CRE). + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/cpan/Locale-Codes/lib/Locale/Currency.pm b/cpan/Locale-Codes/lib/Locale/Currency.pm new file mode 100644 index 0000000000..13cd0482ba --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Currency.pm @@ -0,0 +1,356 @@ +# +# Locale::Currency - ISO three letter codes for currency identification +# (ISO 4217) +# +# $Id: Currency.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ +# + +package Locale::Currency; +use strict; +require 5.002; + +require Exporter; + +#----------------------------------------------------------------------- +# Public Global Variables +#----------------------------------------------------------------------- +use vars qw($VERSION @ISA @EXPORT); +$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); +@ISA = qw(Exporter); +@EXPORT = qw(&code2currency ¤cy2code + &all_currency_codes &all_currency_names ); + +#----------------------------------------------------------------------- +# Private Global Variables +#----------------------------------------------------------------------- +my %CODES = (); +my %CURRENCIES = (); + + +#======================================================================= +# +# code2currency( CODE ) +# +#======================================================================= +sub code2currency +{ + my $code = shift; + + + return undef unless defined $code; + $code = lc($code); + if (exists $CODES{$code}) + { + return $CODES{$code}; + } + else + { + #--------------------------------------------------------------- + # no such currency code! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# currency2code ( CURRENCY ) +# +#======================================================================= +sub currency2code +{ + my $curr = shift; + + + return undef unless defined $curr; + $curr = lc($curr); + if (exists $CURRENCIES{$curr}) + { + return $CURRENCIES{$curr}; + } + else + { + #--------------------------------------------------------------- + # no such currency! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# all_currency_codes() +# +#======================================================================= +sub all_currency_codes +{ + return keys %CODES; +} + + +#======================================================================= +# +# all_currency_names() +# +#======================================================================= +sub all_currency_names +{ + return values %CODES; +} + + +#======================================================================= +# initialisation code - stuff the DATA into the CODES hash +#======================================================================= +{ + my $code; + my $currency; + local $_; + + + while (<DATA>) + { + next unless /\S/; + chop; + ($code, $currency) = split(/:/, $_, 2); + $CODES{$code} = $currency; + $CURRENCIES{"\L$currency"} = $code; + } + + close(DATA); +} + +1; + +__DATA__ +adp:Andorran Peseta +aed:UAE Dirham +afa:Afghani +all:Lek +amd:Armenian Dram +ang:Netherlands Antillean Guilder +aoa:Kwanza +aon:New Kwanza +aor:Kwanza Reajustado +ars:Argentine Peso +ats:Schilling +aud:Australian Dollar +awg:Aruban Guilder +azm:Azerbaijanian Manat + +bam:Convertible Marks +bbd:Barbados Dollar +bdt:Taka +bef:Belgian Franc +bgl:Lev +bgn:Bulgarian Lev +bhd:Bahraini Dinar +bhd:Dinar +bif:Burundi Franc +bmd:Bermudian Dollar +bnd:Brunei Dollar +bob:Boliviano +bov:MVDol +brl:Brazilian Real +bsd:Bahamian Dollar +btn:Ngultrum +bwp:Pula +byb:Belarussian Ruble +byr:Belarussian Ruble +bzd:Belize Dollar + +cad:Canadian Dollar +cdf:Franc Congolais +chf:Swiss Franc +clf:Unidades de Formento +clp:Chilean Peso +cny:Yuan Renminbi +cop:Colombian Peso +crc:Costa Rican Colon +cup:Cuban Peso +cve:Cape Verde Escudo +cyp:Cyprus Pound +czk:Czech Koruna + +dem:German Mark +djf:Djibouti Franc +dkk:Danish Krone +dop:Dominican Peso +dzd:Algerian Dinar + +ecs:Sucre +ecv:Unidad de Valor Constante (UVC) +eek:Kroon +egp:Egyptian Pound +ern:Nakfa +esp:Spanish Peseta +etb:Ethiopian Birr +eur:Euro + +fim:Markka +fjd:Fiji Dollar +fkp:Falkland Islands Pound +frf:French Franc + +gbp:Pound Sterling +gel:Lari +ghc:Cedi +gip:Gibraltar Pound +gmd:Dalasi +gnf:Guinea Franc +grd:Drachma +gtq:Quetzal +gwp:Guinea-Bissau Peso +gyd:Guyana Dollar + +hkd:Hong Kong Dollar +hnl:Lempira +hrk:Kuna +htg:Gourde +huf:Forint + +idr:Rupiah +iep:Irish Pound +ils:Shekel +inr:Indian Rupee +iqd:Iraqi Dinar +irr:Iranian Rial +isk:Iceland Krona +itl:Italian Lira + +jmd:Jamaican Dollar +jod:Jordanian Dinar +jpy:Yen + +kes:Kenyan Shilling +kgs:Som +khr:Riel +kmf:Comoro Franc +kpw:North Korean Won +krw:Won +kwd:Kuwaiti Dinar +kyd:Cayman Islands Dollar +kzt:Tenge + +lak:Kip +lbp:Lebanese Pound +lkr:Sri Lanka Rupee +lrd:Liberian Dollar +lsl:Loti +ltl:Lithuanian Litas +luf:Luxembourg Franc +lvl:Latvian Lats +lyd:Libyan Dinar + +mad:Moroccan Dirham +mdl:Moldovan Leu +mgf:Malagasy Franc +mkd:Denar +mmk:Kyat +mnt:Tugrik +mop:Pataca +mro:Ouguiya +mtl:Maltese Lira +mur:Mauritius Rupee +mvr:Rufiyaa +mwk:Kwacha +mxn:Mexican Nuevo Peso +myr:Malaysian Ringgit +mzm:Metical + +nad:Namibia Dollar +ngn:Naira +nio:Cordoba Oro +nlg:Netherlands Guilder +nok:Norwegian Krone +npr:Nepalese Rupee +nzd:New Zealand Dollar + +omr:Rial Omani + +pab:Balboa +pen:Nuevo Sol +pgk:Kina +php:Philippine Peso +pkr:Pakistan Rupee +pln:Zloty +pte:Portuguese Escudo +pyg:Guarani + +qar:Qatari Rial + +rol:Leu +rub:Russian Ruble +rur:Russian Ruble +rwf:Rwanda Franc + +sar:Saudi Riyal +sbd:Solomon Islands Dollar +scr:Seychelles Rupee +sdd:Sudanese Dinar +sek:Swedish Krona +sgd:Singapore Dollar +shp:St. Helena Pound +sit:Tolar +skk:Slovak Koruna +sll:Leone +sos:Somali Shilling +srg:Surinam Guilder +std:Dobra +svc:El Salvador Colon +syp:Syrian Pound +szl:Lilangeni + +thb:Baht +tjr:Tajik Ruble +tmm:Manat +tnd:Tunisian Dollar +top:Pa'anga +tpe:Timor Escudo +trl:Turkish Lira +ttd:Trinidad and Tobago Dollar +twd:New Taiwan Dollar +tzs:Tanzanian Shilling + +uah:Hryvnia +uak:Karbovanets +ugx:Uganda Shilling +usd:US Dollar +usn:US Dollar (Next day) +uss:US Dollar (Same day) +uyu:Peso Uruguayo +uzs:Uzbekistan Sum + +veb:Bolivar +vnd:Dong +vuv:Vatu + +wst:Tala + +xaf:CFA Franc BEAC +xag:Silver +xau:Gold +xba:European Composite Unit +xbb:European Monetary Unit +xbc:European Unit of Account 9 +xb5:European Unit of Account 17 +xcd:East Caribbean Dollar +xdr:SDR +xeu:ECU (until 1998-12-31) +xfu:UIC-Franc +xfo:Gold-Franc +xof:CFA Franc BCEAO +xpd:Palladium +xpf:CFP Franc +xpt:Platinum + +yer:Yemeni Rial +yum:New Dinar + +zal:Financial Rand +zar:Rand +zmk:Kwacha +zrn:New Zaire +zwd:Zimbabwe Dollar diff --git a/cpan/Locale-Codes/lib/Locale/Currency.pod b/cpan/Locale-Codes/lib/Locale/Currency.pod new file mode 100644 index 0000000000..dce3261294 --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Currency.pod @@ -0,0 +1,191 @@ + +=head1 NAME + +Locale::Currency - ISO three letter codes for currency identification (ISO 4217) + +=head1 SYNOPSIS + + use Locale::Currency; + + $curr = code2currency('usd'); # $curr gets 'US Dollar' + $code = currency2code('Euro'); # $code gets 'eur' + + @codes = all_currency_codes(); + @names = all_currency_names(); + + +=head1 DESCRIPTION + +The C<Locale::Currency> module provides access to the ISO three-letter +codes for identifying currencies and funds, as defined in ISO 4217. +You can either access the codes via the L<conversion routines> +(described below), +or with the two functions which return lists of all currency codes or +all currency names. + +There are two special codes defined by the standard which aren't +understood by this module: + +=over 4 + +=item XTS + +Specifically reserved for testing purposes. + +=item XXX + +For transactions where no currency is involved. + +=back + + +=head1 CONVERSION ROUTINES + +There are two conversion routines: C<code2currency()> and C<currency2code()>. + +=over 4 + +=item code2currency() + +This function takes a three letter currency code and returns a string +which contains the name of the currency identified. If the code is +not a valid currency code, as defined by ISO 4217, then C<undef> +will be returned. + + $curr = code2currency($code); + +=item currency2code() + +This function takes a currency name and returns the corresponding +three letter currency code, if such exists. +If the argument could not be identified as a currency name, +then C<undef> will be returned. + + $code = currency2code('French Franc'); + +The case of the currency name is not important. +See the section L<KNOWN BUGS AND LIMITATIONS> below. + +=back + + +=head1 QUERY ROUTINES + +There are two function which can be used to obtain a list of all +currency codes, or all currency names: + +=over 4 + +=item C<all_currency_codes()> + +Returns a list of all three-letter currency codes. +The codes are guaranteed to be all lower-case, +and not in any particular order. + +=item C<all_currency_names()> + +Returns a list of all currency names for which there is a corresponding +three-letter currency code. The names are capitalised, and not returned +in any particular order. + +=back + + +=head1 EXAMPLES + +The following example illustrates use of the C<code2currency()> function. +The user is prompted for a currency code, and then told the corresponding +currency name: + + $| = 1; # turn off buffering + + print "Enter currency code: "; + chop($code = <STDIN>); + $curr = code2currency($code); + if (defined $curr) + { + print "$code = $curr\n"; + } + else + { + print "'$code' is not a valid currency code!\n"; + } + +=head1 KNOWN BUGS AND LIMITATIONS + +=over 4 + +=item * + +In the current implementation, all data is read in when the +module is loaded, and then held in memory. +A lazy implementation would be more memory friendly. + +=item * + +This module also includes the special codes which are +not for a currency, such as Gold, Platinum, etc. +This might cause a problem if you're using this module +to display a list of currencies. +Let Neil know if this does cause a problem, and we can +do something about it. + +=item * + +ISO 4217 also defines a numeric code for each currency. +Currency codes are not currently supported by this module, +in the same way Locale::Country supports multiple codesets. + +=item * + +There are three cases where there is more than one +code for the same currency name. +Kwacha has two codes: mwk for Malawi, and zmk for Zambia. +The Russian Ruble has two codes: rub and rur. +The Belarussian Ruble has two codes: byr and byb. +The currency2code() function only returns one code, so +you might not get back the code you expected. + +=back + +=head1 SEE ALSO + +=over 4 + +=item Locale::Country + +ISO codes for identification of country (ISO 3166). + +=item Locale::Script + +ISO codes for identification of written scripts (ISO 15924). + +=item ISO 4217:1995 + +Code for the representation of currencies and funds. + +=item http://www.bsi-global.com/iso4217currency + +Official web page for the ISO 4217 maintenance agency. +This has the latest list of codes, in MS Word format. Boo. + +=back + +=head1 AUTHOR + +Michael Hennecke E<lt>hennecke@rz.uni-karlsruhe.deE<gt> +and +Neil Bowers E<lt>neil@bowers.comE<gt> + +=head1 COPYRIGHT + +Copyright (C) 2002-2004, Neil Bowers. + +Copyright (c) 2001 Michael Hennecke and +Canon Research Centre Europe (CRE). + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/cpan/Locale-Codes/lib/Locale/Language.pm b/cpan/Locale-Codes/lib/Locale/Language.pm new file mode 100644 index 0000000000..e8454c39b4 --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Language.pm @@ -0,0 +1,315 @@ +# +# Locale::Language - ISO two letter codes for language identification (ISO 639) +# +# $Id: Language.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ +# + +package Locale::Language; +use strict; +require 5.002; + +require Exporter; + +#----------------------------------------------------------------------- +# Public Global Variables +#----------------------------------------------------------------------- +use vars qw($VERSION @ISA @EXPORT); +$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); +@ISA = qw(Exporter); +@EXPORT = qw(&code2language &language2code + &all_language_codes &all_language_names ); + +#----------------------------------------------------------------------- +# Private Global Variables +#----------------------------------------------------------------------- +my %CODES = (); +my %LANGUAGES = (); + + +#======================================================================= +# +# code2language ( CODE ) +# +#======================================================================= +sub code2language +{ + my $code = shift; + + + return undef unless defined $code; + $code = lc($code); + if (exists $CODES{$code}) + { + return $CODES{$code}; + } + else + { + #--------------------------------------------------------------- + # no such language code! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# language2code ( LANGUAGE ) +# +#======================================================================= +sub language2code +{ + my $lang = shift; + + + return undef unless defined $lang; + $lang = lc($lang); + if (exists $LANGUAGES{$lang}) + { + return $LANGUAGES{$lang}; + } + else + { + #--------------------------------------------------------------- + # no such language! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# all_language_codes() +# +#======================================================================= +sub all_language_codes +{ + return keys %CODES; +} + + +#======================================================================= +# +# all_language_names() +# +#======================================================================= +sub all_language_names +{ + return values %CODES; +} + + +#======================================================================= +# initialisation code - stuff the DATA into the CODES hash +#======================================================================= +{ + my $code; + my $language; + local $_; + + + while (<DATA>) + { + next unless /\S/; + chop; + ($code, $language) = split(/:/, $_, 2); + $CODES{$code} = $language; + $LANGUAGES{"\L$language"} = $code; + } + + close(DATA); +} + +1; + +__DATA__ +aa:Afar +ab:Abkhazian +ae:Avestan +af:Afrikaans +am:Amharic +ar:Arabic +as:Assamese +ay:Aymara +az:Azerbaijani + +ba:Bashkir +be:Belarusian +bg:Bulgarian +bh:Bihari +bi:Bislama +bn:Bengali +bo:Tibetan +br:Breton +bs:Bosnian + +ca:Catalan +ce:Chechen +ch:Chamorro +co:Corsican +cs:Czech +cu:Church Slavic +cv:Chuvash +cy:Welsh + +da:Danish +de:German +dz:Dzongkha + +el:Greek +en:English +eo:Esperanto +es:Spanish +et:Estonian +eu:Basque + +fa:Persian +fi:Finnish +fj:Fijian +fo:Faeroese +fr:French +fy:Frisian + +ga:Irish +gd:Gaelic (Scots) +gl:Gallegan +gn:Guarani +gu:Gujarati +gv:Manx + +ha:Hausa +he:Hebrew +hi:Hindi +ho:Hiri Motu +hr:Croatian +hu:Hungarian +hy:Armenian +hz:Herero + +ia:Interlingua +id:Indonesian +ie:Interlingue +ik:Inupiaq +is:Icelandic +it:Italian +iu:Inuktitut + +ja:Japanese +jw:Javanese + +ka:Georgian +ki:Kikuyu +kj:Kuanyama +kk:Kazakh +kl:Kalaallisut +km:Khmer +kn:Kannada +ko:Korean +ks:Kashmiri +ku:Kurdish +kv:Komi +kw:Cornish +ky:Kirghiz + +la:Latin +lb:Letzeburgesch +ln:Lingala +lo:Lao +lt:Lithuanian +lv:Latvian + +mg:Malagasy +mh:Marshall +mi:Maori +mk:Macedonian +ml:Malayalam +mn:Mongolian +mo:Moldavian +mr:Marathi +ms:Malay +mt:Maltese +my:Burmese + +na:Nauru +nb:Norwegian Bokmal +nd:Ndebele, North +ne:Nepali +ng:Ndonga +nl:Dutch +nn:Norwegian Nynorsk +no:Norwegian +nr:Ndebele, South +nv:Navajo +ny:Chichewa; Nyanja + +oc:Occitan (post 1500) +om:Oromo +or:Oriya +os:Ossetian; Ossetic + +pa:Panjabi +pi:Pali +pl:Polish +ps:Pushto +pt:Portuguese + +qu:Quechua + +rm:Rhaeto-Romance +rn:Rundi +ro:Romanian +ru:Russian +rw:Kinyarwanda + +sa:Sanskrit +sc:Sardinian +sd:Sindhi +se:Sami +sg:Sango +si:Sinhalese +sk:Slovak +sl:Slovenian +sm:Samoan +sn:Shona +so:Somali +sq:Albanian +sr:Serbian +ss:Swati +st:Sotho +su:Sundanese +sv:Swedish +sw:Swahili + +ta:Tamil +te:Telugu +tg:Tajik +th:Thai +ti:Tigrinya +tk:Turkmen +tl:Tagalog +tn:Tswana +to:Tonga +tr:Turkish +ts:Tsonga +tt:Tatar +tw:Twi + +ug:Uighur +uk:Ukrainian +ur:Urdu +uz:Uzbek + +vi:Vietnamese +vo:Volapuk + +wo:Wolof + +xh:Xhosa + +yi:Yiddish +yo:Yoruba + +za:Zhuang +zh:Chinese +zu:Zulu diff --git a/cpan/Locale-Codes/lib/Locale/Language.pod b/cpan/Locale-Codes/lib/Locale/Language.pod new file mode 100644 index 0000000000..ce7b378e5d --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Language.pod @@ -0,0 +1,158 @@ + +=head1 NAME + +Locale::Language - ISO two letter codes for language identification (ISO 639) + +=head1 SYNOPSIS + + use Locale::Language; + + $lang = code2language('en'); # $lang gets 'English' + $code = language2code('French'); # $code gets 'fr' + + @codes = all_language_codes(); + @names = all_language_names(); + + +=head1 DESCRIPTION + +The C<Locale::Language> module provides access to the ISO two-letter +codes for identifying languages, as defined in ISO 639. You can either +access the codes via the L<conversion routines> (described below), +or via the two functions which return lists of all language codes or +all language names. + + +=head1 CONVERSION ROUTINES + +There are two conversion routines: C<code2language()> and C<language2code()>. + +=over 4 + +=item code2language() + +This function takes a two letter language code and returns a string +which contains the name of the language identified. If the code is +not a valid language code, as defined by ISO 639, then C<undef> +will be returned. + + $lang = code2language($code); + +=item language2code() + +This function takes a language name and returns the corresponding +two letter language code, if such exists. +If the argument could not be identified as a language name, +then C<undef> will be returned. + + $code = language2code('French'); + +The case of the language name is not important. +See the section L<KNOWN BUGS AND LIMITATIONS> below. + +=back + + +=head1 QUERY ROUTINES + +There are two function which can be used to obtain a list of all +language codes, or all language names: + +=over 4 + +=item C<all_language_codes()> + +Returns a list of all two-letter language codes. +The codes are guaranteed to be all lower-case, +and not in any particular order. + +=item C<all_language_names()> + +Returns a list of all language names for which there is a corresponding +two-letter language code. The names are capitalised, and not returned +in any particular order. + +=back + + +=head1 EXAMPLES + +The following example illustrates use of the C<code2language()> function. +The user is prompted for a language code, and then told the corresponding +language name: + + $| = 1; # turn off buffering + + print "Enter language code: "; + chop($code = <STDIN>); + $lang = code2language($code); + if (defined $lang) + { + print "$code = $lang\n"; + } + else + { + print "'$code' is not a valid language code!\n"; + } + +=head1 KNOWN BUGS AND LIMITATIONS + +=over 4 + +=item * + +In the current implementation, all data is read in when the +module is loaded, and then held in memory. +A lazy implementation would be more memory friendly. + +=item * + +Currently just supports the two letter language codes - +there are also three-letter codes, and numbers. +Would these be of any use to anyone? + +=back + +=head1 SEE ALSO + +=over 4 + +=item Locale::Country + +ISO codes for identification of country (ISO 3166). +Supports 2-letter, 3-letter, and numeric country codes. + +=item Locale::Script + +ISO codes for identification of written scripts (ISO 15924). + +=item Locale::Currency + +ISO three letter codes for identification of currencies and funds (ISO 4217). + +=item ISO 639:1988 (E/F) + +Code for the representation of names of languages. + +=item http://lcweb.loc.gov/standards/iso639-2/langhome.html + +Home page for ISO 639-2. + +=back + + +=head1 AUTHOR + +Neil Bowers E<lt>neil@bowers.comE<gt> + +=head1 COPYRIGHT + +Copyright (C) 2002-2004, Neil Bowers. + +Copyright (c) 1997-2001 Canon Research Centre Europe (CRE). + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/cpan/Locale-Codes/lib/Locale/Script.pm b/cpan/Locale-Codes/lib/Locale/Script.pm new file mode 100644 index 0000000000..f5fdbab05c --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Script.pm @@ -0,0 +1,294 @@ +# +# Locale::Script - ISO codes for script identification (ISO 15924) +# +# $Id: Script.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ +# + +package Locale::Script; +use strict; +require 5.002; + +require Exporter; +use Carp; +use Locale::Constants; + + +#----------------------------------------------------------------------- +# Public Global Variables +#----------------------------------------------------------------------- +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); +$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); +@ISA = qw(Exporter); +@EXPORT = qw(code2script script2code + all_script_codes all_script_names + script_code2code + LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC); + +#----------------------------------------------------------------------- +# Private Global Variables +#----------------------------------------------------------------------- +my $CODES = []; +my $COUNTRIES = []; + + +#======================================================================= +# +# code2script ( CODE [, CODESET ] ) +# +#======================================================================= +sub code2script +{ + my $code = shift; + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + + return undef unless defined $code; + + #------------------------------------------------------------------- + # Make sure the code is in the right form before we use it + # to look up the corresponding script. + # We have to sprintf because the codes are given as 3-digits, + # with leading 0's. Eg 070 for Egyptian demotic. + #------------------------------------------------------------------- + if ($codeset == LOCALE_CODE_NUMERIC) + { + return undef if ($code =~ /\D/); + $code = sprintf("%.3d", $code); + } + else + { + $code = lc($code); + } + + if (exists $CODES->[$codeset]->{$code}) + { + return $CODES->[$codeset]->{$code}; + } + else + { + #--------------------------------------------------------------- + # no such script code! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# script2code ( SCRIPT [, CODESET ] ) +# +#======================================================================= +sub script2code +{ + my $script = shift; + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + + return undef unless defined $script; + $script = lc($script); + if (exists $COUNTRIES->[$codeset]->{$script}) + { + return $COUNTRIES->[$codeset]->{$script}; + } + else + { + #--------------------------------------------------------------- + # no such script! + #--------------------------------------------------------------- + return undef; + } +} + + +#======================================================================= +# +# script_code2code ( CODE, IN-CODESET, OUT-CODESET ) +# +#======================================================================= +sub script_code2code +{ + (@_ == 3) or croak "script_code2code() takes 3 arguments!"; + + my $code = shift; + my $inset = shift; + my $outset = shift; + my $outcode; + my $script; + + + return undef if $inset == $outset; + $script = code2script($code, $inset); + return undef if not defined $script; + $outcode = script2code($script, $outset); + return $outcode; +} + + +#======================================================================= +# +# all_script_codes() +# +#======================================================================= +sub all_script_codes +{ + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + return keys %{ $CODES->[$codeset] }; +} + + +#======================================================================= +# +# all_script_names() +# +#======================================================================= +sub all_script_names +{ + my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; + + return values %{ $CODES->[$codeset] }; +} + + +#======================================================================= +# +# initialisation code - stuff the DATA into the ALPHA2 hash +# +#======================================================================= +{ + my ($alpha2, $alpha3, $numeric); + my $script; + local $_; + + + while (<DATA>) + { + next unless /\S/; + chop; + ($alpha2, $alpha3, $numeric, $script) = split(/:/, $_, 4); + + $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $script; + $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$script"} = $alpha2; + + if ($alpha3) + { + $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $script; + $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$script"} = $alpha3; + } + + if ($numeric) + { + $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $script; + $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$script"} = $numeric; + } + + } + + close(DATA); +} + +1; + +__DATA__ +am:ama:130:Aramaic +ar:ara:160:Arabic +av:ave:151:Avestan +bh:bhm:300:Brahmi (Ashoka) +bi:bid:372:Buhid +bn:ben:325:Bengali +bo:bod:330:Tibetan +bp:bpm:285:Bopomofo +br:brl:570:Braille +bt:btk:365:Batak +bu:bug:367:Buginese (Makassar) +by:bys:550:Blissymbols +ca:cam:358:Cham +ch:chu:221:Old Church Slavonic +ci:cir:291:Cirth +cm:cmn:402:Cypro-Minoan +co:cop:205:Coptic +cp:cpr:403:Cypriote syllabary +cy:cyr:220:Cyrillic +ds:dsr:250:Deserel (Mormon) +dv:dvn:315:Devanagari (Nagari) +ed:egd:070:Egyptian demotic +eg:egy:050:Egyptian hieroglyphs +eh:egh:060:Egyptian hieratic +el:ell:200:Greek +eo:eos:210:Etruscan and Oscan +et:eth:430:Ethiopic +gl:glg:225:Glagolitic +gm:gmu:310:Gurmukhi +gt:gth:206:Gothic +gu:guj:320:Gujarati +ha:han:500:Han ideographs +he:heb:125:Hebrew +hg:hgl:420:Hangul +hm:hmo:450:Pahawh Hmong +ho:hoo:371:Hanunoo +hr:hrg:410:Hiragana +hu:hun:176:Old Hungarian runic +hv:hvn:175:Kok Turki runic +hy:hye:230:Armenian +iv:ivl:610:Indus Valley +ja:jap:930:(alias for Han + Hiragana + Katakana) +jl:jlg:445:Cherokee syllabary +jw:jwi:360:Javanese +ka:kam:241:Georgian (Mxedruli) +kh:khn:931:(alias for Hangul + Han) +kk:kkn:411:Katakana +km:khm:354:Khmer +kn:kan:345:Kannada +kr:krn:357:Karenni (Kayah Li) +ks:kst:305:Kharoshthi +kx:kax:240:Georgian (Xucuri) +la:lat:217:Latin +lf:laf:215:Latin (Fraktur variant) +lg:lag:216:Latin (Gaelic variant) +lo:lao:356:Lao +lp:lpc:335:Lepcha (Rong) +md:mda:140:Mandaean +me:mer:100:Meroitic +mh:may:090:Mayan hieroglyphs +ml:mlm:347:Malayalam +mn:mon:145:Mongolian +my:mya:350:Burmese +na:naa:400:Linear A +nb:nbb:401:Linear B +og:ogm:212:Ogham +or:ory:327:Oriya +os:osm:260:Osmanya +ph:phx:115:Phoenician +ph:pah:150:Pahlavi +pl:pld:282:Pollard Phonetic +pq:pqd:295:Klingon plQaD +pr:prm:227:Old Permic +ps:pst:600:Phaistos Disk +rn:rnr:211:Runic (Germanic) +rr:rro:620:Rongo-rongo +sa:sar:110:South Arabian +si:sin:348:Sinhala +sj:syj:137:Syriac (Jacobite variant) +sl:slb:440:Unified Canadian Aboriginal Syllabics +sn:syn:136:Syriac (Nestorian variant) +sw:sww:281:Shavian (Shaw) +sy:syr:135:Syriac (Estrangelo) +ta:tam:346:Tamil +tb:tbw:373:Tagbanwa +te:tel:340:Telugu +tf:tfn:120:Tifnagh +tg:tag:370:Tagalog +th:tha:352:Thai +tn:tna:170:Thaana +tw:twr:290:Tengwar +va:vai:470:Vai +vs:vsp:280:Visible Speech +xa:xas:000:Cuneiform, Sumero-Akkadian +xf:xfa:105:Cuneiform, Old Persian +xk:xkn:412:(alias for Hiragana + Katakana) +xu:xug:106:Cuneiform, Ugaritic +yi:yii:460:Yi +zx:zxx:997:Unwritten language +zy:zyy:998:Undetermined script +zz:zzz:999:Uncoded script diff --git a/cpan/Locale-Codes/lib/Locale/Script.pod b/cpan/Locale-Codes/lib/Locale/Script.pod new file mode 100644 index 0000000000..93ff88245e --- /dev/null +++ b/cpan/Locale-Codes/lib/Locale/Script.pod @@ -0,0 +1,253 @@ + +=head1 NAME + +Locale::Script - ISO codes for script identification (ISO 15924) + +=head1 SYNOPSIS + + use Locale::Script; + use Locale::Constants; + + $script = code2script('ph'); # 'Phoenician' + $code = script2code('Tibetan'); # 'bo' + $code3 = script2code('Tibetan', + LOCALE_CODE_ALPHA_3); # 'bod' + $codeN = script2code('Tibetan', + LOCALE_CODE_ALPHA_NUMERIC); # 330 + + @codes = all_script_codes(); + @scripts = all_script_names(); + + +=head1 DESCRIPTION + +The C<Locale::Script> module provides access to the ISO +codes for identifying scripts, as defined in ISO 15924. +For example, Egyptian hieroglyphs are denoted by the two-letter +code 'eg', the three-letter code 'egy', and the numeric code 050. + +You can either access the codes via the conversion routines +(described below), or with the two functions which return lists +of all script codes or all script names. + +There are three different code sets you can use for identifying +scripts: + +=over 4 + +=item B<alpha-2> + +Two letter codes, such as 'bo' for Tibetan. +This code set is identified with the symbol C<LOCALE_CODE_ALPHA_2>. + +=item B<alpha-3> + +Three letter codes, such as 'ell' for Greek. +This code set is identified with the symbol C<LOCALE_CODE_ALPHA_3>. + +=item B<numeric> + +Numeric codes, such as 410 for Hiragana. +This code set is identified with the symbol C<LOCALE_CODE_NUMERIC>. + +=back + +All of the routines take an optional additional argument +which specifies the code set to use. +If not specified, it defaults to the two-letter codes. +This is partly for backwards compatibility (previous versions +of Locale modules only supported the alpha-2 codes), and +partly because they are the most widely used codes. + +The alpha-2 and alpha-3 codes are not case-dependent, +so you can use 'BO', 'Bo', 'bO' or 'bo' for Tibetan. +When a code is returned by one of the functions in +this module, it will always be lower-case. + +=head2 SPECIAL CODES + +The standard defines various special codes. + +=over 4 + +=item * + +The standard reserves codes in the ranges B<qa> - B<qt>, +B<qaa> - B<qat>, and B<900> - B<919>, for private use. + +=item * + +B<zx>, B<zxx>, and B<997>, are the codes for unwritten languages. + +=item * + +B<zy>, B<zyy>, and B<998>, are the codes for an undetermined script. + +=item * + +B<zz>, B<zzz>, and B<999>, are the codes for an uncoded script. + +=back + +The private codes are not recognised by Locale::Script, +but the others are. + + +=head1 CONVERSION ROUTINES + +There are three conversion routines: C<code2script()>, C<script2code()>, +and C<script_code2code()>. + +=over 4 + +=item code2script( CODE, [ CODESET ] ) + +This function takes a script code and returns a string +which contains the name of the script identified. +If the code is not a valid script code, as defined by ISO 15924, +then C<undef> will be returned: + + $script = code2script('cy'); # Cyrillic + +=item script2code( STRING, [ CODESET ] ) + +This function takes a script name and returns the corresponding +script code, if such exists. +If the argument could not be identified as a script name, +then C<undef> will be returned: + + $code = script2code('Gothic', LOCALE_CODE_ALPHA_3); + # $code will now be 'gth' + +The case of the script name is not important. +See the section L<KNOWN BUGS AND LIMITATIONS> below. + +=item script_code2code( CODE, CODESET, CODESET ) + +This function takes a script code from one code set, +and returns the corresponding code from another code set. + + $alpha2 = script_code2code('jwi', + LOCALE_CODE_ALPHA_3 => LOCALE_CODE_ALPHA_2); + # $alpha2 will now be 'jw' (Javanese) + +If the code passed is not a valid script code in +the first code set, or if there isn't a code for the +corresponding script in the second code set, +then C<undef> will be returned. + +=back + + +=head1 QUERY ROUTINES + +There are two function which can be used to obtain a list of all codes, +or all script names: + +=over 4 + +=item C<all_script_codes ( [ CODESET ] )> + +Returns a list of all two-letter script codes. +The codes are guaranteed to be all lower-case, +and not in any particular order. + +=item C<all_script_names ( [ CODESET ] )> + +Returns a list of all script names for which there is a corresponding +script code in the specified code set. +The names are capitalised, and not returned in any particular order. + +=back + + +=head1 EXAMPLES + +The following example illustrates use of the C<code2script()> function. +The user is prompted for a script code, and then told the corresponding +script name: + + $| = 1; # turn off buffering + + print "Enter script code: "; + chop($code = <STDIN>); + $script = code2script($code, LOCALE_CODE_ALPHA_2); + if (defined $script) + { + print "$code = $script\n"; + } + else + { + print "'$code' is not a valid script code!\n"; + } + + +=head1 KNOWN BUGS AND LIMITATIONS + +=over 4 + +=item * + +When using C<script2code()>, the script name must currently appear +exactly as it does in the source of the module. For example, + + script2code('Egyptian hieroglyphs') + +will return B<eg>, as expected. But the following will all return C<undef>: + + script2code('hieroglyphs') + script2code('Egyptian Hieroglypics') + +If there's need for it, a future version could have variants +for script names. + +=item * + +In the current implementation, all data is read in when the +module is loaded, and then held in memory. +A lazy implementation would be more memory friendly. + +=back + +=head1 SEE ALSO + +=over 4 + +=item Locale::Language + +ISO two letter codes for identification of language (ISO 639). + +=item Locale::Currency + +ISO three letter codes for identification of currencies +and funds (ISO 4217). + +=item Locale::Country + +ISO three letter codes for identification of countries (ISO 3166) + +=item ISO 15924 + +The ISO standard which defines these codes. + +=item http://www.evertype.com/standards/iso15924/ + +Home page for ISO 15924. + + +=back + + +=head1 AUTHOR + +Neil Bowers E<lt>neil@bowers.comE<gt> + +=head1 COPYRIGHT + +Copyright (c) 2002-2004 Neil Bowers. + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/cpan/Locale-Codes/t/all.t b/cpan/Locale-Codes/t/all.t new file mode 100644 index 0000000000..f70727c1c5 --- /dev/null +++ b/cpan/Locale-Codes/t/all.t @@ -0,0 +1,580 @@ +#!./perl +# +# all.t - tests for all_* routines in +# Locale::Country +# Locale::Language +# Locale::Currency +# Locale::Script +# +# There are four tests. We get a list of all codes, convert to +# language/country/currency, # convert back to code, +# and check that they're the same. Then we do the same, +# starting with list of languages/countries/currencies. +# + +use Locale::Country; +use Locale::Language; +use Locale::Currency; +use Locale::Script; + +print "1..20\n"; + +my $code; +my $language; +my $country; +my $ok; +my $reverse; +my $currency; +my $script; + + +#----------------------------------------------------------------------- +# Old API - without codeset specified, default to ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_country_codes()) +{ + $country = code2country($code); + if (!defined $country) + { + $ok = 0; + last; + } + $reverse = country2code($country); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 1\n" : "not ok 1\n"); + +#----------------------------------------------------------------------- +# code to country, back to code, for ALPHA2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_country_codes(LOCALE_CODE_ALPHA_2)) +{ + $country = code2country($code, LOCALE_CODE_ALPHA_2); + if (!defined $country) + { + $ok = 0; + last; + } + $reverse = country2code($country, LOCALE_CODE_ALPHA_2); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 2\n" : "not ok 2\n"); + +#----------------------------------------------------------------------- +# code to country, back to code, for ALPHA3 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_country_codes(LOCALE_CODE_ALPHA_3)) +{ + $country = code2country($code, LOCALE_CODE_ALPHA_3); + if (!defined $country) + { + $ok = 0; + last; + } + $reverse = country2code($country, LOCALE_CODE_ALPHA_3); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 3\n" : "not ok 3\n"); + +#----------------------------------------------------------------------- +# code to country, back to code, for NUMERIC +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_country_codes(LOCALE_CODE_NUMERIC)) +{ + $country = code2country($code, LOCALE_CODE_NUMERIC); + if (!defined $country) + { + $ok = 0; + last; + } + $reverse = country2code($country, LOCALE_CODE_NUMERIC); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 4\n" : "not ok 4\n"); + + +#----------------------------------------------------------------------- +# Old API - country to code, back to country, using default of ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $country (all_country_names()) +{ + $code = country2code($country); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2country($code); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $country) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 5\n" : "not ok 5\n"); + +#----------------------------------------------------------------------- +# country to code, back to country, using LOCALE_CODE_ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $country (all_country_names()) +{ + $code = country2code($country, LOCALE_CODE_ALPHA_2); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2country($code, LOCALE_CODE_ALPHA_2); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $country) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 6\n" : "not ok 6\n"); + +#----------------------------------------------------------------------- +# country to code, back to country, using LOCALE_CODE_ALPHA_3 +#----------------------------------------------------------------------- +$ok = 1; +foreach $country (all_country_names()) +{ + $code = country2code($country, LOCALE_CODE_ALPHA_3); + if (!defined $code) + { + next if ($country eq 'Antarctica' + || $country eq 'Bouvet Island' + || $country eq 'Cocos (Keeling) Islands' + || $country eq 'Christmas Island' + || $country eq 'France, Metropolitan' + || $country eq 'South Georgia and the South Sandwich Islands' + || $country eq 'Heard Island and McDonald Islands' + || $country eq 'British Indian Ocean Territory' + || $country eq 'French Southern Territories' + || $country eq 'United States Minor Outlying Islands' + || $country eq 'Mayotte' + || $country eq 'Zaire'); + $ok = 0; + last; + } + $reverse = code2country($code, LOCALE_CODE_ALPHA_3); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $country) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 7\n" : "not ok 7\n"); + +#----------------------------------------------------------------------- +# country to code, back to country, using LOCALE_CODE_NUMERIC +#----------------------------------------------------------------------- +$ok = 1; +foreach $country (all_country_names()) +{ + $code = country2code($country, LOCALE_CODE_NUMERIC); + if (!defined $code) + { + next if ($country eq 'Antarctica' + || $country eq 'Bouvet Island' + || $country eq 'Cocos (Keeling) Islands' + || $country eq 'Christmas Island' + || $country eq 'France, Metropolitan' + || $country eq 'South Georgia and the South Sandwich Islands' + || $country eq 'Heard Island and McDonald Islands' + || $country eq 'British Indian Ocean Territory' + || $country eq 'French Southern Territories' + || $country eq 'United States Minor Outlying Islands' + || $country eq 'Mayotte' + || $country eq 'Zaire'); + $ok = 0; + last; + } + $reverse = code2country($code, LOCALE_CODE_NUMERIC); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $country) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 8\n" : "not ok 8\n"); + + +$ok = 1; +foreach $code (all_language_codes()) +{ + $language = code2language($code); + if (!defined $language) + { + $ok = 0; + last; + } + $reverse = language2code($language); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 9\n" : "not ok 9\n"); + + +$ok = 1; +foreach $language (all_language_names()) +{ + $code = language2code($language); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2language($code); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $language) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 10\n" : "not ok 10\n"); + +$ok = 1; +foreach $code (all_currency_codes()) +{ + $currency = code2currency($code); + if (!defined $currency) + { + $ok = 0; + last; + } + $reverse = currency2code($currency); + if (!defined $reverse) + { + $ok = 0; + last; + } + # + # three special cases: + # The Kwacha has two codes - used in Zambia and Malawi + # The Russian Ruble has two codes - rub and rur + # The Belarussian Ruble has two codes - byb and byr + if ($reverse ne $code + && $code ne 'mwk' && $code ne 'zmk' + && $code ne 'byr' && $code ne 'byb' + && $code ne 'rub' && $code ne 'rur') + { + $ok = 0; + last; + } +} +print ($ok ? "ok 11\n" : "not ok 11\n"); + +$ok = 1; +foreach $currency (all_currency_names()) +{ + $code = currency2code($currency); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2currency($code); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $currency) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 12\n" : "not ok 12\n"); + +#======================================================================= +# +# Locale::Script tests +# +#======================================================================= + +#----------------------------------------------------------------------- +# Old API - without codeset specified, default to ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_script_codes()) +{ + $script = code2script($code); + if (!defined $script) + { + $ok = 0; + last; + } + $reverse = script2code($script); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 13\n" : "not ok 13\n"); + +#----------------------------------------------------------------------- +# code to script, back to code, for ALPHA2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_script_codes(LOCALE_CODE_ALPHA_2)) +{ + $script = code2script($code, LOCALE_CODE_ALPHA_2); + if (!defined $script) + { + $ok = 0; + last; + } + $reverse = script2code($script, LOCALE_CODE_ALPHA_2); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 14\n" : "not ok 14\n"); + +#----------------------------------------------------------------------- +# code to script, back to code, for ALPHA3 +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_script_codes(LOCALE_CODE_ALPHA_3)) +{ + $script = code2script($code, LOCALE_CODE_ALPHA_3); + if (!defined $script) + { + $ok = 0; + last; + } + $reverse = script2code($script, LOCALE_CODE_ALPHA_3); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 15\n" : "not ok 15\n"); + +#----------------------------------------------------------------------- +# code to script, back to code, for NUMERIC +#----------------------------------------------------------------------- +$ok = 1; +foreach $code (all_script_codes(LOCALE_CODE_NUMERIC)) +{ + $script = code2script($code, LOCALE_CODE_NUMERIC); + if (!defined $script) + { + $ok = 0; + last; + } + $reverse = script2code($script, LOCALE_CODE_NUMERIC); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $code) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 16\n" : "not ok 16\n"); + + +#----------------------------------------------------------------------- +# Old API - script to code, back to script, using default of ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $script (all_script_names()) +{ + $code = script2code($script); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2script($code); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $script) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 17\n" : "not ok 17\n"); + +#----------------------------------------------------------------------- +# script to code, back to script, using LOCALE_CODE_ALPHA_2 +#----------------------------------------------------------------------- +$ok = 1; +foreach $script (all_script_names()) +{ + $code = script2code($script, LOCALE_CODE_ALPHA_2); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2script($code, LOCALE_CODE_ALPHA_2); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $script) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 18\n" : "not ok 18\n"); + +#----------------------------------------------------------------------- +# script to code, back to script, using LOCALE_CODE_ALPHA_3 +#----------------------------------------------------------------------- +$ok = 1; +foreach $script (all_script_names()) +{ + $code = script2code($script, LOCALE_CODE_ALPHA_3); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2script($code, LOCALE_CODE_ALPHA_3); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $script) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 19\n" : "not ok 19\n"); + +#----------------------------------------------------------------------- +# script to code, back to script, using LOCALE_CODE_NUMERIC +#----------------------------------------------------------------------- +$ok = 1; +foreach $script (all_script_names()) +{ + $code = script2code($script, LOCALE_CODE_NUMERIC); + if (!defined $code) + { + $ok = 0; + last; + } + $reverse = code2script($code, LOCALE_CODE_NUMERIC); + if (!defined $reverse) + { + $ok = 0; + last; + } + if ($reverse ne $script) + { + $ok = 0; + last; + } +} +print ($ok ? "ok 20\n" : "not ok 20\n"); + diff --git a/cpan/Locale-Codes/t/constants.t b/cpan/Locale-Codes/t/constants.t new file mode 100644 index 0000000000..e71103d0f0 --- /dev/null +++ b/cpan/Locale-Codes/t/constants.t @@ -0,0 +1,44 @@ +#!./perl +# +# constants.t - tests for Locale::Constants +# + +use Locale::Constants; + +print "1..3\n"; + +if (defined LOCALE_CODE_ALPHA_2 + && defined LOCALE_CODE_ALPHA_3 + && defined LOCALE_CODE_NUMERIC) +{ + print "ok 1\n"; +} +else +{ + print "not ok 1\n"; +} + +if (LOCALE_CODE_ALPHA_2 != LOCALE_CODE_ALPHA_3 + && LOCALE_CODE_ALPHA_2 != LOCALE_CODE_NUMERIC + && LOCALE_CODE_ALPHA_3 != LOCALE_CODE_NUMERIC) +{ + print "ok 2\n"; +} +else +{ + print "not ok 2\n"; +} + +if (defined LOCALE_CODE_DEFAULT + && (LOCALE_CODE_DEFAULT == LOCALE_CODE_ALPHA_2 + || LOCALE_CODE_DEFAULT == LOCALE_CODE_ALPHA_3 + || LOCALE_CODE_DEFAULT == LOCALE_CODE_NUMERIC)) +{ + print "ok 3\n"; +} +else +{ + print "not ok 3\n"; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/country.t b/cpan/Locale-Codes/t/country.t new file mode 100644 index 0000000000..0c9fda83f7 --- /dev/null +++ b/cpan/Locale-Codes/t/country.t @@ -0,0 +1,153 @@ +#!./perl +# +# country.t - tests for Locale::Country +# + +use Locale::Country; + +#----------------------------------------------------------------------- +# This is an array of tests specs. Each spec is [TEST, OK_TO_DIE] +# Each TEST is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". If the eval dies, then the OK_TO_DIE flag is checked. +# If it is true (1), the test is treated as passing, otherwise it failed. +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2country + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined code2country()', 0], # no argument + ['!defined code2country(undef)', 0], # undef argument + ['!defined code2country("zz")', 0], # illegal code + ['!defined code2country("zz", LOCALE_CODE_ALPHA_2)', 0], # illegal code + ['!defined code2country("zz", LOCALE_CODE_ALPHA_3)', 0], # illegal code + ['!defined code2country("zz", LOCALE_CODE_NUMERIC)', 0], # illegal code + ['!defined code2country("ja")', 0], # should be jp for country + ['!defined code2country("uk")', 0], # should be jp for country + + #---- some successful examples ----------------------------------------- + ['code2country("BO") eq "Bolivia"', 0], + ['code2country("BO", LOCALE_CODE_ALPHA_2) eq "Bolivia"', 0], + ['code2country("bol", LOCALE_CODE_ALPHA_3) eq "Bolivia"', 0], + ['code2country("pk") eq "Pakistan"', 0], + ['code2country("sn") eq "Senegal"', 0], + ['code2country("us") eq "United States"', 0], + ['code2country("ad") eq "Andorra"', 0], # first in DATA segment + ['code2country("ad", LOCALE_CODE_ALPHA_2) eq "Andorra"', 0], + ['code2country("and", LOCALE_CODE_ALPHA_3) eq "Andorra"', 0], + ['code2country("020", LOCALE_CODE_NUMERIC) eq "Andorra"', 0], + ['code2country(48, LOCALE_CODE_NUMERIC) eq "Bahrain"', 0], + ['code2country("zw") eq "Zimbabwe"', 0], # last in DATA segment + ['code2country("gb") eq "United Kingdom"', 0], # United Kingdom is "gb", not "uk" + + #-- tests added after changes in the standard 2002-05-20 ------ + ['code2country("kz") eq "Kazakhstan"', 0], + ['country2code("kazakhstan") eq "kz"', 0], + ['country2code("kazakstan") eq "kz"', 0], + + ['code2country("mo") eq "Macao"', 0], + ['country2code("macao") eq "mo"', 0], + ['country2code("macau") eq "mo"', 0], + + ['code2country("tl", LOCALE_CODE_ALPHA_2) eq "Timor-Leste"', 0], + ['code2country("tls", LOCALE_CODE_ALPHA_3) eq "Timor-Leste"', 0], + ['code2country("626", LOCALE_CODE_NUMERIC) eq "Timor-Leste"', 0], + + #================================================ + # TESTS FOR country2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined code2country("BO", LOCALE_CODE_ALPHA_3)', 0], + ['!defined code2country("BO", LOCALE_CODE_NUMERIC)', 0], + ['!defined country2code()', 0], # no argument + ['!defined country2code(undef)', 0], # undef argument + ['!defined country2code("Banana")', 0], # illegal country name + + #---- some successful examples ----------------------------------------- + ['country2code("japan") eq "jp"', 0], + ['country2code("japan") ne "ja"', 0], + ['country2code("Japan") eq "jp"', 0], + ['country2code("United States") eq "us"', 0], + ['country2code("United Kingdom") eq "gb"', 0], + ['country2code("Andorra") eq "ad"', 0], # first in DATA + ['country2code("Zimbabwe") eq "zw"', 0], # last in DATA + ['country2code("Iran") eq "ir"', 0], # alias + ['country2code("North Korea") eq "kp"', 0], # alias + ['country2code("South Korea") eq "kr"', 0], # alias + ['country2code("Libya") eq "ly"', 0], # alias + ['country2code("Syria") eq "sy"', 0], # alias + ['country2code("Svalbard") eq "sj"', 0], # alias + ['country2code("Jan Mayen") eq "sj"', 0], # alias + ['country2code("USA") eq "us"', 0], # alias + ['country2code("United States of America") eq "us"', 0], # alias + ['country2code("Great Britain") eq "gb"', 0], # alias + + #================================================ + # TESTS FOR country_code2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined country_code2code("bo", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_3)', 0], + ['!defined country_code2code("zz", LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3)', 0], + ['!defined country_code2code("zz", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_3)', 0], + ['!defined country_code2code("zz", LOCALE_CODE_ALPHA_2)', 1], + ['!defined country_code2code("bo", LOCALE_CODE_ALPHA_2)', 1], + ['!defined country_code2code()', 1], # no argument + ['!defined country_code2code(undef)', 1], # undef argument + + #---- some successful examples ----------------------------------------- + ['country_code2code("BO", LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3) eq "bol"', 0], + ['country_code2code("bol", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_2) eq "bo"', 0], + ['country_code2code("zwe", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_2) eq "zw"', 0], + ['country_code2code("858", LOCALE_CODE_NUMERIC, LOCALE_CODE_ALPHA_3) eq "ury"', 0], + ['country_code2code(858, LOCALE_CODE_NUMERIC, LOCALE_CODE_ALPHA_3) eq "ury"', 0], + ['country_code2code("tr", LOCALE_CODE_ALPHA_2, LOCALE_CODE_NUMERIC) eq "792"', 0], + + #-- tests added for 2.07 release + ['country2code("Burma") eq "mm"', 0], # alias + ['country2code("French Southern and Antarctic Lands") eq "tf"', 0], # alias + ['code2country("ax") eq "Aland Islands"', 0], + ['country2code("Aland Islands") eq "ax"', 0], + ['code2country("ala", LOCALE_CODE_ALPHA_3) eq "Aland Islands"', 0], + ['code2country("248", LOCALE_CODE_NUMERIC) eq "Aland Islands"', 0], + + ['country2code("Yugoslavia") eq "cs"', 0], # alias (old name) + ['country2code("Serbia and Montenegro") eq "cs"', 0], # new name + ['code2country("scg", LOCALE_CODE_ALPHA_3) eq "Serbia and Montenegro"', 0], + ['code2country("891", LOCALE_CODE_NUMERIC) eq "Serbia and Montenegro"', 0], + + ['country2code("East Timor") eq "tl"', 0], # alias (provisional name) + ['code2country("rou", LOCALE_CODE_ALPHA_3) eq "Romania"', 0], + + ['country2code("Zaire") eq "cd"', 0], # alias (old name) + ['country2code("Congo, The Democratic Republic of the") eq "cd"', 0], # new name + ['country2code("Congo, The Democratic Republic of the", LOCALE_CODE_ALPHA_3) eq "cod"', 0], # new name + ['country2code("Congo, The Democratic Republic of the", LOCALE_CODE_NUMERIC) eq "180"', 0], # new name + +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test->[0]) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + if ($@) + { + if (!$test->[1]) + { + print "not ok $testid\n"; + } + else + { + print "ok $testid\n"; + } + } + ++$testid; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/currency.t b/cpan/Locale-Codes/t/currency.t new file mode 100644 index 0000000000..adb844e4d4 --- /dev/null +++ b/cpan/Locale-Codes/t/currency.t @@ -0,0 +1,80 @@ +#!./perl +# +# currency.t - tests for Locale::Currency +# +use Locale::Currency; + +#----------------------------------------------------------------------- +# This is an array of tests. Each test is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2currency + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined code2currency()', # no argument => undef returned + '!defined code2currency(undef)', # undef arg => undef returned + '!defined code2currency("zz")', # illegal code => undef + '!defined code2currency("zzzz")', # illegal code => undef + '!defined code2currency("zzz")', # illegal code => undef + '!defined code2currency("ukp")', # gbp for sterling, not ukp + + #---- misc tests ------------------------------------------------------- + 'code2currency("all") eq "Lek"', + 'code2currency("ats") eq "Schilling"', + 'code2currency("bob") eq "Boliviano"', + 'code2currency("bnd") eq "Brunei Dollar"', + 'code2currency("cop") eq "Colombian Peso"', + 'code2currency("dkk") eq "Danish Krone"', + 'code2currency("fjd") eq "Fiji Dollar"', + 'code2currency("idr") eq "Rupiah"', + 'code2currency("chf") eq "Swiss Franc"', + 'code2currency("mvr") eq "Rufiyaa"', + 'code2currency("mmk") eq "Kyat"', + 'code2currency("mwk") eq "Kwacha"', # two different codes for Kwacha + 'code2currency("zmk") eq "Kwacha"', # used in Zambia and Malawi + 'code2currency("byr") eq "Belarussian Ruble"', # 2 codes for belarussian ruble + 'code2currency("byb") eq "Belarussian Ruble"', # + 'code2currency("rub") eq "Russian Ruble"', # 2 codes for russian ruble + 'code2currency("rur") eq "Russian Ruble"', # + + #---- some successful examples ----------------------------------------- + 'code2currency("BOB") eq "Boliviano"', + 'code2currency("adp") eq "Andorran Peseta"', # first in DATA segment + 'code2currency("zwd") eq "Zimbabwe Dollar"', # last in DATA segment + + #================================================ + # TESTS FOR currency2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined currency2code()', # no argument => undef returned + '!defined currency2code(undef)', # undef arg => undef returned + '!defined currency2code("")', # empty string => undef returned + '!defined currency2code("Banana")', # illegal curr name => undef + + #---- some successful examples ----------------------------------------- + 'currency2code("Kroon") eq "eek"', + 'currency2code("Markka") eq "fim"', + 'currency2code("Riel") eq "khr"', + 'currency2code("PULA") eq "bwp"', + 'currency2code("Andorran Peseta") eq "adp"', # first in DATA segment + 'currency2code("Zimbabwe Dollar") eq "zwd"', # last in DATA segment + 'currency2code("Canadian Dollar") eq "cad"', # last in DATA segment +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + print "not ok $testid\n" if $@; + ++$testid; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/language.t b/cpan/Locale-Codes/t/language.t new file mode 100644 index 0000000000..88edcee816 --- /dev/null +++ b/cpan/Locale-Codes/t/language.t @@ -0,0 +1,110 @@ +#!./perl +# +# language.t - tests for Locale::Language +# + +BEGIN { + chdir 't' if -d 't'; + #@INC = '../lib'; +} + +use Locale::Language; + +no utf8; # we contain Latin-1 + +#----------------------------------------------------------------------- +# This is an array of tests. Each test is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2language + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined code2language()', # no argument => undef returned + '!defined code2language(undef)', # undef arg => undef returned + '!defined code2language("zz")', # illegal code => undef + '!defined code2language("jp")', # ja for lang, jp for country + + #---- test recent changes ---------------------------------------------- + 'code2language("ae") eq "Avestan"', + 'code2language("bs") eq "Bosnian"', + 'code2language("ch") eq "Chamorro"', + 'code2language("ce") eq "Chechen"', + 'code2language("cu") eq "Church Slavic"', + 'code2language("cv") eq "Chuvash"', + 'code2language("hz") eq "Herero"', + 'code2language("ho") eq "Hiri Motu"', + 'code2language("ki") eq "Kikuyu"', + 'code2language("kj") eq "Kuanyama"', + 'code2language("kv") eq "Komi"', + 'code2language("mh") eq "Marshall"', + 'code2language("nv") eq "Navajo"', + 'code2language("nr") eq "Ndebele, South"', + 'code2language("nd") eq "Ndebele, North"', + 'code2language("ng") eq "Ndonga"', + 'code2language("nn") eq "Norwegian Nynorsk"', + 'code2language("nb") eq "Norwegian Bokmal"', + 'code2language("ny") eq "Chichewa; Nyanja"', + 'code2language("oc") eq "Occitan (post 1500)"', + 'code2language("os") eq "Ossetian; Ossetic"', + 'code2language("pi") eq "Pali"', + '!defined code2language("sh")', # Serbo-Croatian withdrawn + 'code2language("se") eq "Sami"', + 'code2language("sc") eq "Sardinian"', + 'code2language("kw") eq "Cornish"', + 'code2language("gv") eq "Manx"', + 'code2language("lb") eq "Letzeburgesch"', + 'code2language("he") eq "Hebrew"', + '!defined code2language("iw")', # Hebrew withdrawn + 'code2language("id") eq "Indonesian"', + '!defined code2language("in")', # Indonesian withdrawn + 'code2language("iu") eq "Inuktitut"', + 'code2language("ug") eq "Uighur"', + '!defined code2language("ji")', # Yiddish withdrawn + 'code2language("yi") eq "Yiddish"', + 'code2language("za") eq "Zhuang"', + + #---- some successful examples ----------------------------------------- + 'code2language("DA") eq "Danish"', + 'code2language("eo") eq "Esperanto"', + 'code2language("fi") eq "Finnish"', + 'code2language("en") eq "English"', + 'code2language("aa") eq "Afar"', # first in DATA segment + 'code2language("zu") eq "Zulu"', # last in DATA segment + + #================================================ + # TESTS FOR language2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined language2code()', # no argument => undef returned + '!defined language2code(undef)', # undef arg => undef returned + '!defined language2code("Banana")', # illegal lang name => undef + + #---- some successful examples ----------------------------------------- + 'language2code("Japanese") eq "ja"', + 'language2code("japanese") eq "ja"', + 'language2code("japanese") ne "jp"', + 'language2code("French") eq "fr"', + 'language2code("Greek") eq "el"', + 'language2code("english") eq "en"', + 'language2code("ESTONIAN") eq "et"', + 'language2code("Afar") eq "aa"', # first in DATA segment + 'language2code("Zulu") eq "zu"', # last in DATA segment +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + print "not ok $testid\n" if $@; + ++$testid; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/rename.t b/cpan/Locale-Codes/t/rename.t new file mode 100644 index 0000000000..27f506c84b --- /dev/null +++ b/cpan/Locale-Codes/t/rename.t @@ -0,0 +1,79 @@ +#!./perl +# +# rename.t - tests for Locale::Country with "uk" aliases to "gb" +# + +use Locale::Country; + +local $SIG{__WARN__} = sub { }; # muffle warnings from carp + +Locale::Country::rename_country('gb' => 'Great Britain'); + +#----------------------------------------------------------------------- +# This is an array of tests. Each test is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2country + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined code2country()', # no argument + '!defined code2country(undef)', # undef argument + '!defined code2country("zz")', # illegal code + '!defined code2country("ja")', # should be jp for country + '!defined code2country("uk")', # code for United Kingdom is 'gb' + + #---- this call should return 0, since code doesn't exist -------------- + '!Locale::Country::rename_country("ukz", "United Karz")', + + #---- some successful examples ----------------------------------------- + 'code2country("BO") eq "Bolivia"', + 'code2country("pk") eq "Pakistan"', + 'code2country("sn") eq "Senegal"', + 'code2country("us") eq "United States"', + 'code2country("ad") eq "Andorra"', # first in DATA segment + 'code2country("zw") eq "Zimbabwe"', # last in DATA segment + 'code2country("gb") eq "Great Britain"', # normally "United Kingdom" + + #================================================ + # TESTS FOR country2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined country2code()', # no argument + '!defined country2code(undef)', # undef argument + '!defined country2code("Banana")', # illegal country name + + #---- some successful examples ----------------------------------------- + 'country2code("japan") eq "jp"', + 'country2code("japan") ne "ja"', + 'country2code("Japan") eq "jp"', + 'country2code("United States") eq "us"', + + 'country2code("Great Britain") eq "gb"', + 'country2code("Great Britain", LOCALE_CODE_ALPHA_3) eq "gbr"', + 'country2code("Great Britain", LOCALE_CODE_NUMERIC) eq "826"', + + 'country2code("United Kingdom") eq "gb"', + 'country2code("United Kingdom", LOCALE_CODE_ALPHA_3) eq "gbr"', + 'country2code("United Kingdom", LOCALE_CODE_NUMERIC) eq "826"', + + 'country2code("Andorra") eq "ad"', # first in DATA segment + 'country2code("Zimbabwe") eq "zw"', # last in DATA segment +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + print "not ok $testid\n" if $@; + ++$testid; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/script.t b/cpan/Locale-Codes/t/script.t new file mode 100644 index 0000000000..989b778f82 --- /dev/null +++ b/cpan/Locale-Codes/t/script.t @@ -0,0 +1,106 @@ +#!./perl +# +# script.t - tests for Locale::Script +# + +use Locale::Script; + +#----------------------------------------------------------------------- +# This is an array of tests specs. Each spec is [TEST, OK_TO_DIE] +# Each TEST is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". If the eval dies, then the OK_TO_DIE flag is checked. +# If it is true (1), the test is treated as passing, otherwise it failed. +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2script + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined code2script()', 0], # no argument + ['!defined code2script(undef)', 0], # undef argument + ['!defined code2script("aa")', 0], # illegal code + ['!defined code2script("aa", LOCALE_CODE_ALPHA_2)', 0], # illegal code + ['!defined code2script("aa", LOCALE_CODE_ALPHA_3)', 0], # illegal code + ['!defined code2script("aa", LOCALE_CODE_NUMERIC)', 0], # illegal code + + #---- some successful examples ----------------------------------------- + ['code2script("BO") eq "Tibetan"', 0], + ['code2script("Bo") eq "Tibetan"', 0], + ['code2script("bo") eq "Tibetan"', 0], + ['code2script("bo", LOCALE_CODE_ALPHA_2) eq "Tibetan"', 0], + ['code2script("bod", LOCALE_CODE_ALPHA_3) eq "Tibetan"', 0], + ['code2script("330", LOCALE_CODE_NUMERIC) eq "Tibetan"', 0], + + ['code2script("yi", LOCALE_CODE_ALPHA_2) eq "Yi"', 0], # last in DATA + ['code2script("Yii", LOCALE_CODE_ALPHA_3) eq "Yi"', 0], + ['code2script("460", LOCALE_CODE_NUMERIC) eq "Yi"', 0], + + ['code2script("am") eq "Aramaic"', 0], # first in DATA segment + + + #================================================ + # TESTS FOR script2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined code2script("BO", LOCALE_CODE_ALPHA_3)', 0], + ['!defined code2script("BO", LOCALE_CODE_NUMERIC)', 0], + ['!defined script2code()', 0], # no argument + ['!defined script2code(undef)', 0], # undef argument + ['!defined script2code("Banana")', 0], # illegal script name + + #---- some successful examples ----------------------------------------- + ['script2code("meroitic") eq "me"', 0], + ['script2code("burmese") eq "my"', 0], + ['script2code("Pahlavi") eq "ph"', 0], + ['script2code("Vai", LOCALE_CODE_ALPHA_3) eq "vai"', 0], + ['script2code("Tamil", LOCALE_CODE_NUMERIC) eq "346"', 0], + ['script2code("Latin") eq "la"', 0], + ['script2code("Latin", LOCALE_CODE_ALPHA_3) eq "lat"', 0], + + #================================================ + # TESTS FOR script_code2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + ['!defined script_code2code("bo", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_3)', 0], + ['!defined script_code2code("aa", LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3)', 0], + ['!defined script_code2code("aa", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_3)', 0], + ['!defined script_code2code("aa", LOCALE_CODE_ALPHA_2)', 1], + ['!defined script_code2code()', 1], # no argument + ['!defined script_code2code(undef)', 1], # undef argument + + #---- some successful examples ----------------------------------------- + ['script_code2code("BO", LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3) eq "bod"', 0], + ['script_code2code("bod", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_2) eq "bo"', 0], + ['script_code2code("Phx", LOCALE_CODE_ALPHA_3, LOCALE_CODE_ALPHA_2) eq "ph"', 0], + ['script_code2code("295", LOCALE_CODE_NUMERIC, LOCALE_CODE_ALPHA_3) eq "pqd"', 0], + ['script_code2code(170, LOCALE_CODE_NUMERIC, LOCALE_CODE_ALPHA_3) eq "tna"', 0], + ['script_code2code("rr", LOCALE_CODE_ALPHA_2, LOCALE_CODE_NUMERIC) eq "620"', 0], + +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test->[0]) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + if ($@) + { + if (!$test->[1]) + { + print "not ok $testid\n"; + } + else + { + print "ok $testid\n"; + } + } + ++$testid; +} + +exit 0; diff --git a/cpan/Locale-Codes/t/uk.t b/cpan/Locale-Codes/t/uk.t new file mode 100644 index 0000000000..95c2118fe9 --- /dev/null +++ b/cpan/Locale-Codes/t/uk.t @@ -0,0 +1,65 @@ +#!./perl +# +# uk.t - tests for Locale::Country with "uk" aliases to "gb" +# + +use Locale::Country; + +Locale::Country::alias_code('uk' => 'gb'); + +#----------------------------------------------------------------------- +# This is an array of tests. Each test is eval'd as an expression. +# If it evaluates to FALSE, then "not ok N" is printed for the test, +# otherwise "ok N". +#----------------------------------------------------------------------- +@TESTS = +( + #================================================ + # TESTS FOR code2country + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined code2country()', # no argument + '!defined code2country(undef)', # undef argument + '!defined code2country("zz")', # illegal code + '!defined code2country("ja")', # should be jp for country + + #---- some successful examples ----------------------------------------- + 'code2country("BO") eq "Bolivia"', + 'code2country("pk") eq "Pakistan"', + 'code2country("sn") eq "Senegal"', + 'code2country("us") eq "United States"', + 'code2country("ad") eq "Andorra"', # first in DATA segment + 'code2country("zw") eq "Zimbabwe"', # last in DATA segment + 'code2country("uk") eq "United Kingdom"', # normally "gb" + + #================================================ + # TESTS FOR country2code + #================================================ + + #---- selection of examples which should all result in undef ----------- + '!defined country2code()', # no argument + '!defined country2code(undef)', # undef argument + '!defined country2code("Banana")', # illegal country name + + #---- some successful examples ----------------------------------------- + 'country2code("japan") eq "jp"', + 'country2code("japan") ne "ja"', + 'country2code("Japan") eq "jp"', + 'country2code("United States") eq "us"', + 'country2code("United Kingdom") eq "uk"', + 'country2code("Andorra") eq "ad"', # first in DATA segment + 'country2code("Zimbabwe") eq "zw"', # last in DATA segment +); + +print "1..", int(@TESTS), "\n"; + +$testid = 1; +foreach $test (@TESTS) +{ + eval "print (($test) ? \"ok $testid\\n\" : \"not ok $testid\\n\" )"; + print "not ok $testid\n" if $@; + ++$testid; +} + +exit 0; |