diff options
author | Norbert Preining <preining@logic.at> | 2010-05-12 16:54:37 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2010-05-12 16:54:37 +0000 |
commit | 661c41a09e39a182865e0b51e34cc995a0dc96e8 (patch) | |
tree | 2f79bb1406e22fdcb2587be8ffda6c0c609d7932 /Master/tlpkg/tlperl/lib/Locale/Country.pm | |
parent | b645030efc22e13c2498a1522083634ab91b2de1 (diff) |
move tlperl.straw to tlperl
git-svn-id: svn://tug.org/texlive/trunk@18210 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Locale/Country.pm')
-rwxr-xr-x | Master/tlpkg/tlperl/lib/Locale/Country.pm | 550 |
1 files changed, 550 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Locale/Country.pm b/Master/tlpkg/tlperl/lib/Locale/Country.pm new file mode 100755 index 00000000000..2ecd1305c0d --- /dev/null +++ b/Master/tlpkg/tlperl/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 |