4 title => 'country code cheat sheet',
7 "Table of ISO-3166-1 country codes with the names of reserved territories.",
8 keywords => [qw'country code cc tld cctld continent territory land table'],
9 stylesheet => [qw'light dark circus mono red'],
10 data => ['data/countries.inc.pl'],
14 <h1>ISO-3166-1α2 Country codes</h1>
17 my $cc = Data('data/countries');
20 printf '<table class="ccmap">';
21 print '<col><colgroup span="26">';
22 for my $section (qw{thead}) {
23 print "<$section><tr><th>↳";
24 print '<th>', $_ for 'a' .. 'z';
28 for my $row ('a' .. 'z') {
29 print '<tr><th>', $row;
30 for my $col ('a' .. 'z') {
31 my $code = $row . $col;
32 my $country = $cc->{$code} or do {
33 print $code =~ /^x|^q[m-z]|^aa|^zz/ ? '<td class="X Co">' : '<td>';
36 my ($name, $class, $short, $ref) = @$country;
37 $name .= " → $ref" if $ref;
40 if (exists $get{show}) {
43 my $img = "data/flag/$cc.png";
45 sprintf '<img src="/%s" alt="%s">', $img, $cc;
48 $cell = showflag($code) // join(' ',
49 map { showflag($_) || $_ } split(/ /, $ref)
53 $cell = EscapeHTML($short || $name);
55 printf "\n".'<td class="%s" title="%s">%s',
56 $cell ? 'X '.$class : '', EscapeHTML("$code: $name"), $cell;
67 <table class="glyphs"><tr>
68 <td class="X c-af">africa
69 <td class="X c-eu">europe
70 <td class="X c-as">asia
71 <td class="X c-an">antarctica
72 <td class="X c-oc">oceania
73 <td class="X c-sa">south america
74 <td class="X c-na">north america
75 <td class="X Xr">reserved
78 <td class="X Co">user-assigned
82 <ul class="legend legend-set">
83 <li><strong>show</strong>
84 <em><:= exists $get{show} ? 'flag images' : 'english names' :></em><:=
85 !exists $get{show} && ' by default' :>
86 <li>default <strong>style</strong> is
87 <:= defined $get{style} && 'set to ' :><em><:= $style :></em>
92 <: exit unless exists $get{v}; :>
93 <script type="text/javascript"><!--
94 const table = document.querySelector('.ccmap');
95 const label = Array.prototype.map.call(table.tHead.rows[0].children, i => i.textContent);
96 const flagchr = 0x1F1E5; // regional indicator symbol letter base
98 for (let row = 0; row < label.length; row++) {
99 for (let col = 0; col < label.length; col++) {
100 let cell = table.rows[row].cells[col];
101 if (!cell.className) continue;
102 let flag = String.fromCodePoint(flagchr + row) + String.fromCodePoint(flagchr + col);
103 cell.innerHTML = `<big>${flag}</big> ` + cell.innerHTML;
104 if (nowidth === undefined) {
105 // assume AA is invalid, compare its size to validate following glyphs
106 nowidth = cell.firstChild.offsetWidth;
108 if (cell.firstChild.offsetWidth == nowidth) {
109 cell.firstChild.remove();