termcol: 256-colour tables (like 88)
[sheet.git] / cc.plp
diff --git a/cc.plp b/cc.plp
index 48b9910d805f30d74be06bea80aed73e5af4200c..21626688ce0673c32135297ad68ffa578acce53a 100644 (file)
--- a/cc.plp
+++ b/cc.plp
@@ -13,9 +13,15 @@ $header{content_type} = 'text/html; charset=utf-8';
 <html>
 
 <head>
+<meta http-equiv="content-type" content="<:= $header{content_type} :>">
 <title>country code cheat sheet</title>
-<meta http-equiv="content-type" content="utf-8">
-<link rel="stylesheet" type="text/css" media="all" href="/base.css">
+<link rel="stylesheet" type="text/css" media="all" href="/base.css"><:
+       my %styles = map {$_ => $_} qw(dark mono red);
+       our $style = exists $get{style} && $styles{$get{style}} || 'light';
+       printf(qq{\n<link rel="%s" type="text/css" media="all" href="%s" title="%s">},
+               $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "/$_.css", $_
+       ) for keys %styles;
+:>
 </head>
 
 <body>
@@ -33,8 +39,8 @@ sub quote {
 }
 
 {
-       printf '<table class="glyphs">';
-       print '<col>';
+       printf '<table class="mcmap">';
+       print '<col><colgroup span="26">';
        for my $section (qw{thead}) {
                print "<$section><tr><th>↱";
                print '<th>', $_ for 'a' .. 'z';
@@ -49,10 +55,32 @@ sub quote {
                                print $code =~ /^x|^q[m-z]|^aa|^zz/ ? '<td class="X Co">' : '<td>';
                                next;
                        };
-                       my $img = sprintf '<img src="/flag/%s.png" alt="%s">', $code, $code
-                               if -e "flag/$code.png";
+                       my ($name, $class, $short, $ref) = @$country;
+                       $ref ||= $code;
+                       local $_ = $ref;
+                       if (exists $get{show}) {
+                               my $img = "flag/$ref.png";
+                               $_ = sprintf '<img src="/%s" alt="%s">', $img, $ref if -e $img;
+                       }
+                       else {
+                               $_ = $short || $name;
+                               s/,.*//;
+                               s/(?<=.)\(.*\)\s*//;
+                               s/ republic\b//gi;
+                               s/ islands?\b//gi;
+                               s/\bthe //g;
+                               s/ and / & /g;
+                               s/\bsaint /st /gi;
+                               s/South /S-/g;
+                               s/North /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])(\S{2,})/$1./g;  # abbreviate (at consonant)
+                               $_ = quote($_);
+                       }
+                       $name =~ s/([^,]*), (.*)/$2 $1/;
                        printf "\n".'<td class="%s" title="%s">%s',
-                               $img ? 'X '.$country->[1] : '', quote($country->[0]), $img;
+                               $_ ? 'X '.$class : '', quote("$code: $name"), $_;
                }
                print "\n";
        }
@@ -67,11 +95,11 @@ sub quote {
        <td class="X c-af">africa
        <td class="X c-eu">europe
        <td class="X c-as">asia
-       <td class="X c-oc">oceania
        <td class="X c-aa">antarctica
+       <td class="X c-oc">oceania
        <td class="X c-sa">south america
        <td class="X c-na">north america
-       <td class="X Xi">reserved
+       <td class="">reserved
        <td class="X Co">user-assigned
        </table>
 </div>