ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/Locale/Country.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:12 2005 UTC (21 years, 4 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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    
7     package Locale::Country;
8     use strict;
9     require 5.002;
10    
11     require Exporter;
12     use Carp;
13     use Locale::Constants;
14    
15    
16     #-----------------------------------------------------------------------
17     # Public Global Variables
18     #-----------------------------------------------------------------------
19     use 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     #-----------------------------------------------------------------------
30     my $CODES = [];
31     my $COUNTRIES = [];
32    
33    
34     #=======================================================================
35     #
36     # code2country ( CODE [, CODESET ] )
37     #
38     #=======================================================================
39     sub 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     #=======================================================================
82     sub 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     #=======================================================================
109     sub 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     #=======================================================================
133     sub 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     #=======================================================================
146     sub 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     #=======================================================================
164     sub 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     #=======================================================================
200     sub 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     #=======================================================================
246     sub _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    
307     1;
308    
309     __DATA__
310     ad:and:020:Andorra
311     ae:are:784:United Arab Emirates
312     af:afg:004:Afghanistan
313     ag:atg:028:Antigua and Barbuda
314     ai:aia:660:Anguilla
315     al:alb:008:Albania
316     am:arm:051:Armenia
317     an:ant:530:Netherlands Antilles
318     ao:ago:024:Angola
319     aq:ata:010:Antarctica
320     ar:arg:032:Argentina
321     as:asm:016:American Samoa
322     at:aut:040:Austria
323     au:aus:036:Australia
324     aw:abw:533:Aruba
325     ax:ala:248:Aland Islands
326     az:aze:031:Azerbaijan
327     ba:bih:070:Bosnia and Herzegovina
328     bb:brb:052:Barbados
329     bd:bgd:050:Bangladesh
330     be:bel:056:Belgium
331     bf:bfa:854:Burkina Faso
332     bg:bgr:100:Bulgaria
333     bh:bhr:048:Bahrain
334     bi:bdi:108:Burundi
335     bj:ben:204:Benin
336     bm:bmu:060:Bermuda
337     bn:brn:096:Brunei Darussalam
338     bo:bol:068:Bolivia
339     br:bra:076:Brazil
340     bs:bhs:044:Bahamas
341     bt:btn:064:Bhutan
342     bv:bvt:074:Bouvet Island
343     bw:bwa:072:Botswana
344     by:blr:112:Belarus
345     bz:blz:084:Belize
346     ca:can:124:Canada
347     cc:cck:166:Cocos (Keeling) Islands
348     cd:cod:180:Congo, The Democratic Republic of the:Zaire:Congo, Democratic Republic of the
349     cf:caf:140:Central African Republic
350     cg:cog:178:Congo:Congo, Republic of the
351     ch:che:756:Switzerland
352     ci:civ:384:Cote D'Ivoire
353     ck:cok:184:Cook Islands
354     cl:chl:152:Chile
355     cm:cmr:120:Cameroon
356     cn:chn:156:China
357     co:col:170:Colombia
358     cr:cri:188:Costa Rica
359     cs:scg:891:Serbia and Montenegro:Yugoslavia
360     cu:cub:192:Cuba
361     cv:cpv:132:Cape Verde
362     cx:cxr:162:Christmas Island
363     cy:cyp:196:Cyprus
364     cz:cze:203:Czech Republic
365     de:deu:276:Germany
366     dj:dji:262:Djibouti
367     dk:dnk:208:Denmark
368     dm:dma:212:Dominica
369     do:dom:214:Dominican Republic
370     dz:dza:012:Algeria
371     ec:ecu:218:Ecuador
372     ee:est:233:Estonia
373     eg:egy:818:Egypt
374     eh:esh:732:Western Sahara
375     er:eri:232:Eritrea
376     es:esp:724:Spain
377     et:eth:231:Ethiopia
378     fi:fin:246:Finland
379     fj:fji:242:Fiji
380     fk:flk:238:Falkland Islands (Malvinas):Falkland Islands (Islas Malvinas)
381     fm:fsm:583:Micronesia, Federated States of
382     fo:fro:234:Faroe Islands
383     fr:fra:250:France
384     fx:fxx:249:France, Metropolitan
385     ga:gab:266:Gabon
386     gb:gbr:826:United Kingdom:Great Britain
387     gd:grd:308:Grenada
388     ge:geo:268:Georgia
389     gf:guf:254:French Guiana
390     gh:gha:288:Ghana
391     gi:gib:292:Gibraltar
392     gl:grl:304:Greenland
393     gm:gmb:270:Gambia
394     gn:gin:324:Guinea
395     gp:glp:312:Guadeloupe
396     gq:gnq:226:Equatorial Guinea
397     gr:grc:300:Greece
398     gs:sgs:239:South Georgia and the South Sandwich Islands
399     gt:gtm:320:Guatemala
400     gu:gum:316:Guam
401     gw:gnb:624:Guinea-Bissau
402     gy:guy:328:Guyana
403     hk:hkg:344:Hong Kong
404     hm:hmd:334:Heard Island and McDonald Islands
405     hn:hnd:340:Honduras
406     hr:hrv:191:Croatia
407     ht:hti:332:Haiti
408     hu:hun:348:Hungary
409     id:idn:360:Indonesia
410     ie:irl:372:Ireland
411     il:isr:376:Israel
412     in:ind:356:India
413     io:iot:086:British Indian Ocean Territory
414     iq:irq:368:Iraq
415     ir:irn:364:Iran, Islamic Republic of:Iran
416     is:isl:352:Iceland
417     it:ita:380:Italy
418     jm:jam:388:Jamaica
419     jo:jor:400:Jordan
420     jp:jpn:392:Japan
421     ke:ken:404:Kenya
422     kg:kgz:417:Kyrgyzstan
423     kh:khm:116:Cambodia
424     ki:kir:296:Kiribati
425     km:com:174:Comoros
426     kn:kna:659:Saint Kitts and Nevis
427     kp:prk:408:Korea, Democratic People's Republic of:Korea, North:North Korea
428     kr:kor:410:Korea, Republic of:Korea, South:South Korea
429     kw:kwt:414:Kuwait
430     ky:cym:136:Cayman Islands
431     kz:kaz:398:Kazakhstan:Kazakstan
432     la:lao:418:Lao People's Democratic Republic
433     lb:lbn:422:Lebanon
434     lc:lca:662:Saint Lucia
435     li:lie:438:Liechtenstein
436     lk:lka:144:Sri Lanka
437     lr:lbr:430:Liberia
438     ls:lso:426:Lesotho
439     lt:ltu:440:Lithuania
440     lu:lux:442:Luxembourg
441     lv:lva:428:Latvia
442     ly:lby:434:Libyan Arab Jamahiriya:Libya
443     ma:mar:504:Morocco
444     mc:mco:492:Monaco
445     md:mda:498:Moldova, Republic of:Moldova
446     mg:mdg:450:Madagascar
447     mh:mhl:584:Marshall Islands
448     mk:mkd:807:Macedonia, the Former Yugoslav Republic of:Macedonia, Former Yugoslav Republic of:Macedonia
449     ml:mli:466:Mali
450     mm:mmr:104:Myanmar:Burma
451     mn:mng:496:Mongolia
452     mo:mac:446:Macao:Macau
453     mp:mnp:580:Northern Mariana Islands
454     mq:mtq:474:Martinique
455     mr:mrt:478:Mauritania
456     ms:msr:500:Montserrat
457     mt:mlt:470:Malta
458     mu:mus:480:Mauritius
459     mv:mdv:462:Maldives
460     mw:mwi:454:Malawi
461     mx:mex:484:Mexico
462     my:mys:458:Malaysia
463     mz:moz:508:Mozambique
464     na:nam:516:Namibia
465     nc:ncl:540:New Caledonia
466     ne:ner:562:Niger
467     nf:nfk:574:Norfolk Island
468     ng:nga:566:Nigeria
469     ni:nic:558:Nicaragua
470     nl:nld:528:Netherlands
471     no:nor:578:Norway
472     np:npl:524:Nepal
473     nr:nru:520:Nauru
474     nu:niu:570:Niue
475     nz:nzl:554:New Zealand
476     om:omn:512:Oman
477     pa:pan:591:Panama
478     pe:per:604:Peru
479     pf:pyf:258:French Polynesia
480     pg:png:598:Papua New Guinea
481     ph:phl:608:Philippines
482     pk:pak:586:Pakistan
483     pl:pol:616:Poland
484     pm:spm:666:Saint Pierre and Miquelon
485     pn:pcn:612:Pitcairn:Pitcairn Island
486     pr:pri:630:Puerto Rico
487     ps:pse:275:Palestinian Territory, Occupied
488     pt:prt:620:Portugal
489     pw:plw:585:Palau
490     py:pry:600:Paraguay
491     qa:qat:634:Qatar
492     re:reu:638:Reunion
493     ro:rou:642:Romania
494     ru:rus:643:Russian Federation:Russia
495     rw:rwa:646:Rwanda
496     sa:sau:682:Saudi Arabia
497     sb:slb:090:Solomon Islands
498     sc:syc:690:Seychelles
499     sd:sdn:736:Sudan
500     se:swe:752:Sweden
501     sg:sgp:702:Singapore
502     sh:shn:654:Saint Helena
503     si:svn:705:Slovenia
504     sj:sjm:744:Svalbard and Jan Mayen:Jan Mayen:Svalbard
505     sk:svk:703:Slovakia
506     sl:sle:694:Sierra Leone
507     sm:smr:674:San Marino
508     sn:sen:686:Senegal
509     so:som:706:Somalia
510     sr:sur:740:Suriname
511     st:stp:678:Sao Tome and Principe
512     sv:slv:222:El Salvador
513     sy:syr:760:Syrian Arab Republic:Syria
514     sz:swz:748:Swaziland
515     tc:tca:796:Turks and Caicos Islands
516     td:tcd:148:Chad
517     tf:atf:260:French Southern Territories:French Southern and Antarctic Lands
518     tg:tgo:768:Togo
519     th:tha:764:Thailand
520     tj:tjk:762:Tajikistan
521     tk:tkl:772:Tokelau
522     tm:tkm:795:Turkmenistan
523     tn:tun:788:Tunisia
524     to:ton:776:Tonga
525     tl:tls:626:Timor-Leste:East Timor
526     tr:tur:792:Turkey
527     tt:tto:780:Trinidad and Tobago
528     tv:tuv:798:Tuvalu
529     tw:twn:158:Taiwan, Province of China:Taiwan
530     tz:tza:834:Tanzania, United Republic of:Tanzania
531     ua:ukr:804:Ukraine
532     ug:uga:800:Uganda
533     um:umi:581:United States Minor Outlying Islands
534     us:usa:840:United States:USA:United States of America
535     uy:ury:858:Uruguay
536     uz:uzb:860:Uzbekistan
537     va:vat:336:Holy See (Vatican City State):Holy See (Vatican City)
538     vc:vct:670:Saint Vincent and the Grenadines
539     ve:ven:862:Venezuela
540     vg:vgb:092:Virgin Islands, British:British Virgin Islands
541     vi:vir:850:Virgin Islands, U.S.
542     vn:vnm:704:Vietnam
543     vu:vut:548:Vanuatu
544     wf:wlf:876:Wallis and Futuna
545     ws:wsm:882:Samoa
546     ye:yem:887:Yemen
547     yt:myt:175:Mayotte
548     za:zaf:710:South Africa
549     zm:zmb:894:Zambia
550     zw:zwe:716:Zimbabwe