countries: fix antarctica continent class
[sheet.git] / tools / mkcountries-geonames
index 0eaf88006fff31cac9cebf5805419d317a288af9..99201b840c76347f865292610272b446a7ff011c 100755 (executable)
@@ -3,14 +3,69 @@ use 5.012;
 use warnings;
 
 my %cc;  # map of country code to info array
+%cc = (
+       # exceptional reservations
+       ac => ["Ascension Island", "c-oc Xr", undef, 'sh'],
+       cp => ["Clipperton Island", "c-na Xr"],
+       dg => ["Diego Garcia", "c-as Xr", undef, 'io'],
+       ea => ["Ceuta and Melilla", "c-af Xr"],
+       eu => ["European Union", "c-eu Xr"],
+       fx => ["Metropolitan France", "c-eu Xr", undef, 'fr'],
+       ic => ["Canary Islands", "c-af Xr"],
+       su => ["former USSR", "c-eu Xr"],
+       ta => ["Tristan da Cunha", "c-oc Xr", undef, 'sh'],
+       uk => ["(United Kingdom)", "c-eu Xr", undef, 'gb'],
+
+       # indeterminate reservations
+       dy => ["(Benin)", "c-af Xr", undef, 'bj'],
+       ew => ["(Estonia)", "c-eu Xr", undef, 'ee'],
+       fl => ["(Liechtenstein)", "c-eu Xr", undef, 'li'],
+       ja => ["(Jamaica)", "c-na Xr", undef, 'jm'],
+       lf => ["Libya Fezzan", "c-af Xr", "Fezzan", 'ly'],
+       pi => ["(Philippines)", "c-as Xr", undef, 'ph'],
+       ra => ["(Argentina)", "c-sa Xr", undef, 'ar'],
+       rb => ["Bolivia/Botswana", "c-xx Xr"],
+       rc => ["(RoC)", "c-as Xr", undef, 'tw'],
+       rh => ["(Haiti)", "c-na Xr",undef, 'ht'],
+       ri => ["(Indonesia)", "c-as Xr", undef, 'id'],
+       rl => ["(Lebanon)", "c-as Xr", undef, 'lb'],
+       rm => ["(Madagascar)", "c-af Xr", undef, 'mg'],
+       rn => ["(Niger)", "c-af Xr",undef, 'ne'],
+       rp => ["(Philippines)", "c-as Xr", undef, 'ph'],
+       wg => ["(Grenada)", "c-na Xr", undef, 'gd'],
+       wl => ["(Saint Lucia)", "c-na Xr", "(Saint Luc.)", 'lc'],
+       wv => ["(Saint Vincent)", "c-na Xr", "(Saint Vin.)", 'vc'],
+       yv => ["(Venezuela)", "c-sa Xr", undef, 've'],
+);
 
 while (<>) {
        /^#/ and next;  # skip comments
        my ($iso, $name, $cont) = (split /\t/)[0, 4, 8];
+       $cont =~ s/\AAN\z/aa/;  # different antarctica abbreviation
        my $class = "c-\L$cont";
        $cc{ lc $iso } = [ $name, $class ];
 }
 
+$cc{io}->[2] = "Chagos Islands";
+$cc{um}->[2] = "U.S. isl.";
+
+for (values %cc) {
+       for ($_->[2] //= $_->[0]) {
+               s/,.*//;
+               s/(?<=.)\(.*\)\s*//;
+               s/ republic\b//gi;
+               s/ islands?\b//gi;
+               s/\bthe //g;
+               s/ and / & /g and s/(?<=.)[a-z ]+//g;
+               s/\bsaint /st /gi;
+               s/South(?:ern)? /S-/g;
+               s/North(?:ern)? /N-/g;
+               s/New /n./g;
+               s/(\S)(\S+)-/$1-/g;  # strip most chars preceding dash
+               s/(\S{4}[b-df-hj-np-tv-xz])((?<!Austr)(?!land)\w{2,})/$1./g;  # abbreviate (at consonant)
+       }
+}
+
 say "# automatically generated by $0";
 use Data::Dump 'dd';
 $Data::Dump::INDENT = '';