source: for-distributions/trunk/bin/windows/perl/lib/Locale/Country.pm@ 14489

Last change on this file since 14489 was 14489, checked in by oranfry, 17 years ago

upgrading to perl 5.8

File size: 13.2 KB
Line 
1#
2# Locale::Country - ISO codes for country identification (ISO 3166)
3#
4# $Id: Country.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $
5#
6
7package Locale::Country;
8use strict;
9require 5.002;
10
11require Exporter;
12use Carp;
13use Locale::Constants;
14
15
16#-----------------------------------------------------------------------
17# Public Global Variables
18#-----------------------------------------------------------------------
19use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
20$VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/);
21@ISA = qw(Exporter);
22@EXPORT = qw(code2country country2code
23 all_country_codes all_country_names
24 country_code2code
25 LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC);
26
27#-----------------------------------------------------------------------
28# Private Global Variables
29#-----------------------------------------------------------------------
30my $CODES = [];
31my $COUNTRIES = [];
32
33
34#=======================================================================
35#
36# code2country ( CODE [, CODESET ] )
37#
38#=======================================================================
39sub code2country
40{
41 my $code = shift;
42 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT;
43
44
45 return undef unless defined $code;
46
47 #-------------------------------------------------------------------
48 # Make sure the code is in the right form before we use it
49 # to look up the corresponding country.
50 # We have to sprintf because the codes are given as 3-digits,
51 # with leading 0's. Eg 052 for Barbados.
52 #-------------------------------------------------------------------
53 if ($codeset == LOCALE_CODE_NUMERIC)
54 {
55 return undef if ($code =~ /\D/);
56 $code = sprintf("%.3d", $code);
57 }
58 else
59 {
60 $code = lc($code);
61 }
62
63 if (exists $CODES->[$codeset]->{$code})
64 {
65 return $CODES->[$codeset]->{$code};
66 }
67 else
68 {
69 #---------------------------------------------------------------
70 # no such country code!
71 #---------------------------------------------------------------
72 return undef;
73 }
74}
75
76
77#=======================================================================
78#
79# country2code ( NAME [, CODESET ] )
80#
81#=======================================================================
82sub country2code
83{
84 my $country = shift;
85 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT;
86
87
88 return undef unless defined $country;
89 $country = lc($country);
90 if (exists $COUNTRIES->[$codeset]->{$country})
91 {
92 return $COUNTRIES->[$codeset]->{$country};
93 }
94 else
95 {
96 #---------------------------------------------------------------
97 # no such country!
98 #---------------------------------------------------------------
99 return undef;
100 }
101}
102
103
104#=======================================================================
105#
106# country_code2code ( NAME [, CODESET ] )
107#
108#=======================================================================
109sub country_code2code
110{
111 (@_ == 3) or croak "country_code2code() takes 3 arguments!";
112
113 my $code = shift;
114 my $inset = shift;
115 my $outset = shift;
116 my $outcode;
117 my $country;
118
119
120 return undef if $inset == $outset;
121 $country = code2country($code, $inset);
122 return undef if not defined $country;
123 $outcode = country2code($country, $outset);
124 return $outcode;
125}
126
127
128#=======================================================================
129#
130# all_country_codes ( [ CODESET ] )
131#
132#=======================================================================
133sub all_country_codes
134{
135 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT;
136
137 return keys %{ $CODES->[$codeset] };
138}
139
140
141#=======================================================================
142#
143# all_country_names ( [ CODESET ] )
144#
145#=======================================================================
146sub all_country_names
147{
148 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT;
149
150 return values %{ $CODES->[$codeset] };
151}
152
153
154#=======================================================================
155#
156# alias_code ( ALIAS => CODE [ , CODESET ] )
157#
158# Add an alias for an existing code. If the CODESET isn't specified,
159# then we use the default (currently the alpha-2 codeset).
160#
161# Locale::Country::alias_code('uk' => 'gb');
162#
163#=======================================================================
164sub alias_code
165{
166 my $alias = shift;
167 my $real = shift;
168 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT;
169
170 my $country;
171
172
173 if (not exists $CODES->[$codeset]->{$real})
174 {
175 carp "attempt to alias \"$alias\" to unknown country code \"$real\"\n";
176 return undef;
177 }
178 $country = $CODES->[$codeset]->{$real};
179 $CODES->[$codeset]->{$alias} = $country;
180 $COUNTRIES->[$codeset]->{"\L$country"} = $alias;
181
182 return $alias;
183}
184
185# old name of function for backwards compatibility
186*_alias_code = *alias_code;
187
188
189#=======================================================================
190#
191# rename_country
192#
193# change the official name for a country, eg:
194# gb => 'Great Britain'
195# rather than the standard 'United Kingdom'. The original is retained
196# as an alias, but the new name will be returned if you lookup the
197# name from code.
198#
199#=======================================================================
200sub rename_country
201{
202 my $code = shift;
203 my $new_name = shift;
204 my $codeset = @_ > 0 ? shift : _code2codeset($code);
205 my $country;
206 my $c;
207
208
209 if (not defined $codeset)
210 {
211 carp "rename_country(): unknown country code \"$code\"\n";
212 return 0;
213 }
214
215 $country = $CODES->[$codeset]->{$code};
216
217 foreach my $cset (LOCALE_CODE_ALPHA_2,
218 LOCALE_CODE_ALPHA_3,
219 LOCALE_CODE_NUMERIC)
220 {
221 if ($cset == $codeset)
222 {
223 $c = $code;
224 }
225 else
226 {
227 $c = country_code2code($code, $codeset, $cset);
228 }
229
230 $CODES->[$cset]->{$c} = $new_name;
231 $COUNTRIES->[$cset]->{"\L$new_name"} = $c;
232 }
233
234 return 1;
235}
236
237
238#=======================================================================
239#
240# _code2codeset
241#
242# given a country code in an unknown codeset, return the codeset
243# it is from, or undef.
244#
245#=======================================================================
246sub _code2codeset
247{
248 my $code = shift;
249
250
251 foreach my $codeset (LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3,
252 LOCALE_CODE_NUMERIC)
253 {
254 return $codeset if (exists $CODES->[$codeset]->{$code})
255 }
256
257 return undef;
258}
259
260
261#=======================================================================
262#
263# initialisation code - stuff the DATA into the ALPHA2 hash
264#
265#=======================================================================
266{
267 my ($alpha2, $alpha3, $numeric);
268 my ($country, @countries);
269 local $_;
270
271
272 while (<DATA>)
273 {
274 next unless /\S/;
275 chop;
276 ($alpha2, $alpha3, $numeric, @countries) = split(/:/, $_);
277
278 $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $countries[0];
279 foreach $country (@countries)
280 {
281 $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2;
282 }
283
284 if ($alpha3)
285 {
286 $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $countries[0];
287 foreach $country (@countries)
288 {
289 $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3;
290 }
291 }
292
293 if ($numeric)
294 {
295 $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $countries[0];
296 foreach $country (@countries)
297 {
298 $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric;
299 }
300 }
301
302 }
303
304 close(DATA);
305}
306
3071;
308
309__DATA__
310ad:and:020:Andorra
311ae:are:784:United Arab Emirates
312af:afg:004:Afghanistan
313ag:atg:028:Antigua and Barbuda
314ai:aia:660:Anguilla
315al:alb:008:Albania
316am:arm:051:Armenia
317an:ant:530:Netherlands Antilles
318ao:ago:024:Angola
319aq:ata:010:Antarctica
320ar:arg:032:Argentina
321as:asm:016:American Samoa
322at:aut:040:Austria
323au:aus:036:Australia
324aw:abw:533:Aruba
325ax:ala:248:Aland Islands
326az:aze:031:Azerbaijan
327ba:bih:070:Bosnia and Herzegovina
328bb:brb:052:Barbados
329bd:bgd:050:Bangladesh
330be:bel:056:Belgium
331bf:bfa:854:Burkina Faso
332bg:bgr:100:Bulgaria
333bh:bhr:048:Bahrain
334bi:bdi:108:Burundi
335bj:ben:204:Benin
336bm:bmu:060:Bermuda
337bn:brn:096:Brunei Darussalam
338bo:bol:068:Bolivia
339br:bra:076:Brazil
340bs:bhs:044:Bahamas
341bt:btn:064:Bhutan
342bv:bvt:074:Bouvet Island
343bw:bwa:072:Botswana
344by:blr:112:Belarus
345bz:blz:084:Belize
346ca:can:124:Canada
347cc:cck:166:Cocos (Keeling) Islands
348cd:cod:180:Congo, The Democratic Republic of the:Zaire:Congo, Democratic Republic of the
349cf:caf:140:Central African Republic
350cg:cog:178:Congo:Congo, Republic of the
351ch:che:756:Switzerland
352ci:civ:384:Cote D'Ivoire
353ck:cok:184:Cook Islands
354cl:chl:152:Chile
355cm:cmr:120:Cameroon
356cn:chn:156:China
357co:col:170:Colombia
358cr:cri:188:Costa Rica
359cs:scg:891:Serbia and Montenegro:Yugoslavia
360cu:cub:192:Cuba
361cv:cpv:132:Cape Verde
362cx:cxr:162:Christmas Island
363cy:cyp:196:Cyprus
364cz:cze:203:Czech Republic
365de:deu:276:Germany
366dj:dji:262:Djibouti
367dk:dnk:208:Denmark
368dm:dma:212:Dominica
369do:dom:214:Dominican Republic
370dz:dza:012:Algeria
371ec:ecu:218:Ecuador
372ee:est:233:Estonia
373eg:egy:818:Egypt
374eh:esh:732:Western Sahara
375er:eri:232:Eritrea
376es:esp:724:Spain
377et:eth:231:Ethiopia
378fi:fin:246:Finland
379fj:fji:242:Fiji
380fk:flk:238:Falkland Islands (Malvinas):Falkland Islands (Islas Malvinas)
381fm:fsm:583:Micronesia, Federated States of
382fo:fro:234:Faroe Islands
383fr:fra:250:France
384fx:fxx:249:France, Metropolitan
385ga:gab:266:Gabon
386gb:gbr:826:United Kingdom:Great Britain
387gd:grd:308:Grenada
388ge:geo:268:Georgia
389gf:guf:254:French Guiana
390gh:gha:288:Ghana
391gi:gib:292:Gibraltar
392gl:grl:304:Greenland
393gm:gmb:270:Gambia
394gn:gin:324:Guinea
395gp:glp:312:Guadeloupe
396gq:gnq:226:Equatorial Guinea
397gr:grc:300:Greece
398gs:sgs:239:South Georgia and the South Sandwich Islands
399gt:gtm:320:Guatemala
400gu:gum:316:Guam
401gw:gnb:624:Guinea-Bissau
402gy:guy:328:Guyana
403hk:hkg:344:Hong Kong
404hm:hmd:334:Heard Island and McDonald Islands
405hn:hnd:340:Honduras
406hr:hrv:191:Croatia
407ht:hti:332:Haiti
408hu:hun:348:Hungary
409id:idn:360:Indonesia
410ie:irl:372:Ireland
411il:isr:376:Israel
412in:ind:356:India
413io:iot:086:British Indian Ocean Territory
414iq:irq:368:Iraq
415ir:irn:364:Iran, Islamic Republic of:Iran
416is:isl:352:Iceland
417it:ita:380:Italy
418jm:jam:388:Jamaica
419jo:jor:400:Jordan
420jp:jpn:392:Japan
421ke:ken:404:Kenya
422kg:kgz:417:Kyrgyzstan
423kh:khm:116:Cambodia
424ki:kir:296:Kiribati
425km:com:174:Comoros
426kn:kna:659:Saint Kitts and Nevis
427kp:prk:408:Korea, Democratic People's Republic of:Korea, North:North Korea
428kr:kor:410:Korea, Republic of:Korea, South:South Korea
429kw:kwt:414:Kuwait
430ky:cym:136:Cayman Islands
431kz:kaz:398:Kazakhstan:Kazakstan
432la:lao:418:Lao People's Democratic Republic
433lb:lbn:422:Lebanon
434lc:lca:662:Saint Lucia
435li:lie:438:Liechtenstein
436lk:lka:144:Sri Lanka
437lr:lbr:430:Liberia
438ls:lso:426:Lesotho
439lt:ltu:440:Lithuania
440lu:lux:442:Luxembourg
441lv:lva:428:Latvia
442ly:lby:434:Libyan Arab Jamahiriya:Libya
443ma:mar:504:Morocco
444mc:mco:492:Monaco
445md:mda:498:Moldova, Republic of:Moldova
446mg:mdg:450:Madagascar
447mh:mhl:584:Marshall Islands
448mk:mkd:807:Macedonia, the Former Yugoslav Republic of:Macedonia, Former Yugoslav Republic of:Macedonia
449ml:mli:466:Mali
450mm:mmr:104:Myanmar:Burma
451mn:mng:496:Mongolia
452mo:mac:446:Macao:Macau
453mp:mnp:580:Northern Mariana Islands
454mq:mtq:474:Martinique
455mr:mrt:478:Mauritania
456ms:msr:500:Montserrat
457mt:mlt:470:Malta
458mu:mus:480:Mauritius
459mv:mdv:462:Maldives
460mw:mwi:454:Malawi
461mx:mex:484:Mexico
462my:mys:458:Malaysia
463mz:moz:508:Mozambique
464na:nam:516:Namibia
465nc:ncl:540:New Caledonia
466ne:ner:562:Niger
467nf:nfk:574:Norfolk Island
468ng:nga:566:Nigeria
469ni:nic:558:Nicaragua
470nl:nld:528:Netherlands
471no:nor:578:Norway
472np:npl:524:Nepal
473nr:nru:520:Nauru
474nu:niu:570:Niue
475nz:nzl:554:New Zealand
476om:omn:512:Oman
477pa:pan:591:Panama
478pe:per:604:Peru
479pf:pyf:258:French Polynesia
480pg:png:598:Papua New Guinea
481ph:phl:608:Philippines
482pk:pak:586:Pakistan
483pl:pol:616:Poland
484pm:spm:666:Saint Pierre and Miquelon
485pn:pcn:612:Pitcairn:Pitcairn Island
486pr:pri:630:Puerto Rico
487ps:pse:275:Palestinian Territory, Occupied
488pt:prt:620:Portugal
489pw:plw:585:Palau
490py:pry:600:Paraguay
491qa:qat:634:Qatar
492re:reu:638:Reunion
493ro:rou:642:Romania
494ru:rus:643:Russian Federation:Russia
495rw:rwa:646:Rwanda
496sa:sau:682:Saudi Arabia
497sb:slb:090:Solomon Islands
498sc:syc:690:Seychelles
499sd:sdn:736:Sudan
500se:swe:752:Sweden
501sg:sgp:702:Singapore
502sh:shn:654:Saint Helena
503si:svn:705:Slovenia
504sj:sjm:744:Svalbard and Jan Mayen:Jan Mayen:Svalbard
505sk:svk:703:Slovakia
506sl:sle:694:Sierra Leone
507sm:smr:674:San Marino
508sn:sen:686:Senegal
509so:som:706:Somalia
510sr:sur:740:Suriname
511st:stp:678:Sao Tome and Principe
512sv:slv:222:El Salvador
513sy:syr:760:Syrian Arab Republic:Syria
514sz:swz:748:Swaziland
515tc:tca:796:Turks and Caicos Islands
516td:tcd:148:Chad
517tf:atf:260:French Southern Territories:French Southern and Antarctic Lands
518tg:tgo:768:Togo
519th:tha:764:Thailand
520tj:tjk:762:Tajikistan
521tk:tkl:772:Tokelau
522tm:tkm:795:Turkmenistan
523tn:tun:788:Tunisia
524to:ton:776:Tonga
525tl:tls:626:Timor-Leste:East Timor
526tr:tur:792:Turkey
527tt:tto:780:Trinidad and Tobago
528tv:tuv:798:Tuvalu
529tw:twn:158:Taiwan, Province of China:Taiwan
530tz:tza:834:Tanzania, United Republic of:Tanzania
531ua:ukr:804:Ukraine
532ug:uga:800:Uganda
533um:umi:581:United States Minor Outlying Islands
534us:usa:840:United States:USA:United States of America
535uy:ury:858:Uruguay
536uz:uzb:860:Uzbekistan
537va:vat:336:Holy See (Vatican City State):Holy See (Vatican City)
538vc:vct:670:Saint Vincent and the Grenadines
539ve:ven:862:Venezuela
540vg:vgb:092:Virgin Islands, British:British Virgin Islands
541vi:vir:850:Virgin Islands, U.S.
542vn:vnm:704:Vietnam
543vu:vut:548:Vanuatu
544wf:wlf:876:Wallis and Futuna
545ws:wsm:882:Samoa
546ye:yem:887:Yemen
547yt:myt:175:Mayotte
548za:zaf:710:South Africa
549zm:zmb:894:Zambia
550zw:zwe:716:Zimbabwe
Note: See TracBrowser for help on using the repository browser.