unicode: distinguish empty and invalid ipa cells
[sheet.git] / unicode.plp
index cc45d666189d0b746b856f67e619e03bca29bdf5..c7b85c27bfb531a4ada779523a23dc310800a3a2 100644 (file)
@@ -21,8 +21,10 @@ table {
        border-collapse: collapse;
        margin: 1ex;
 }
-td {
+tbody td, th {
        border: 1px solid #888;
+}
+td {
        text-align: center;
        vertical-align: top;
        margin: 0;
@@ -31,9 +33,28 @@ td {
 small {
        font-size: 50%;
        display: block;
-       width: 3em;
+       width: 3.2em;
+       background: #888;
+       color: #FFF;
+}
+table {
+       float: left;
+}
+h2, h3 {
+       clear: both;
+}
+th {
+       text-align: left;
+       font-size: 50%;
        background: #888;
        color: #FFF;
+       padding: 0 0.5em;
+}
+td.empty {
+       background: #DDD;
+}
+td.reserved {
+       background: #BBB;
 }
 </style>
 </head>
@@ -58,19 +79,32 @@ sub quote {
 }
 
 sub table {
-       my ($width, $digraphs) = @_;
+       my ($width, $digraphs, $rowheads, $colheads) = @_;
 
        my @cells;
-       push @cells, sprintf '<td title="%s">%s%s',
+       push @cells, sprintf '<td title="%s"%s>%s%s',
                $di{ord $_} && $diinfo->{$di{ord $_}}->[1],
-               $_ eq '-' ? '&nbsp;' : quote($_),
+               $_ eq '-' ? ' class="empty"' : $_ eq '=' ? ' class="reserved"' : '',
+               $_ eq '-' || $_ eq '=' ? '&nbsp;' : quote($_),
                $di{ord $_} && sprintf(' <small>%s</small>', $di{ord $_})
                        for @$digraphs;
 
+       if ($rowheads) {
+               splice @cells, $_ * $width, 0, '<th>'.($rowheads->[$_] || '&nbsp;')
+                       for reverse 0 .. $#cells / $width;
+               $width++;
+       }
+
        my @rows;
        push @rows, sprintf '<tr>%s', join '', splice @cells, 0, $width, ()
                while @cells;
 
+       if ($colheads) {
+               unshift @rows, sprintf '<thead><tr><td>%s<tbody>', join '',
+                       map { sprintf '<th title="%2$s">%s', split(/:/, $colheads->[$_], 2) }
+                       0 .. $width-2;
+       }
+
        return sprintf "<table>%s</table>\n", join '', @rows;
 }
 
@@ -95,8 +129,8 @@ print table(@$_) for (
 
 print "<h2>Signs</h2>\n\n";
 print table(@$_) for (
-       [ 3 => [qw{▘ ▀ ▝  ▌ █ ▐  ▖ ▄ ▗}]],
-       [ 3 => [qw{�� ▒ ▓  �� ▣ ■  ▤ ▦ ▥  ▧ ▩ ▨}]],
+       [ 3 => [qw{▘ ▀ ▝  ▌ █ ▐  ▖ ▄ ▗  ░ ▒ ▓}]],
+       [ 3 => [qw{□ ▣ ■  ▤ ▦ ▥  ▧ ▩ ▨}]],
        [ 4 => [qw{♠ ♡ ♢ ♣  ♤ ♥ ♦ ♧}]],
        [10 => [qw{☼ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇}]],  # solar
 #      [12 => [qw{♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓}]],  # zodiac
@@ -105,29 +139,53 @@ print table(@$_) for (
 
 print "<h2>IPA</h2>\n\n";
 print table(@$_) for (
-       [12 => [qw{
-               p t - ʈ - c k q - ʔ - ʡ
-               b d - ɖ - ɟ ɡ ɢ - - - -
-               m ɱ - n - ɳ ɲ ŋ ɴ - - -
-               ʙ - - r - - - - - - - -
-               - ⱱ - ɾ - ɽ - - - - - -
-               ɸ f θ s ʃ ʂ ç x χ ħ h ʜ
-               β v ð z ʒ ʐ ʝ ɣ ʁ ʕ ɦ ʢ
-               - - - ɬ - - - - - - - -
-               - - - ɮ - - - - - - - -
-               - ʋ - ɹ - ɻ j ɰ - - - -
-               - - - l - ɭ ʎ ʟ - - - -
-               ʘ - ǀ ǁ ǃ - ǂ - - - - -
-               ɓ - ɗ - - - ʄ ɠ ʛ - - -
-       }]],
-       [6 => [qw{
-               i y  ɨ ʉ  ɯ u
-               - ɪ  ʏ -  ʊ -
-               e ø  ɘ ɵ  ɤ o
-               - -  ə -  - -
-               ɛ œ  ɜ ɞ  ʌ ɔ
-               æ -  ɐ -  - -
-               a ɶ  - -  ɑ ɒ
-       }]],
+       [
+               12 => [qw{
+                       p t - ʈ - c k q - = ʡ ʔ
+                       b d - ɖ - ɟ ɡ ɢ - = - =
+                       m ɱ - n - ɳ ɲ ŋ ɴ = = =
+                       ʙ - - r - - - = ʀ = я =
+                       - ⱱ - ɾ - ɽ - = ɢ̆ = - =
+                       ɸ f θ s ʃ ʂ ç x χ ħ ʜ h
+                       β v ð z ʒ ʐ ʝ ɣ ʁ ʕ ʢ ɦ
+                       = = - ɬ - - - - - = = =
+                       = = - ɮ - - - - - = = =
+                       - ʋ - ɹ - ɻ j ɰ - - - =
+                       = = - l - ɭ ʎ ʟ - = = =
+                       ʘ - ǀ ǁ ǃ - ǂ - - = = =
+                       ɓ - ɗ - - - ʄ ɠ ʛ - - -
+               }],
+               [
+                       'Plosive',
+                       'Voiced plosive',
+                       'Nasal',
+                       'Trill',
+                       'Tap/flap',
+                       'Fricative',
+                       'Voiced fricative',
+                       'Lateral fricative',
+                       'Voiced lateral fricative',
+                       'Approximant',
+                       'Lateral approximant',
+                       'Click',
+                       'Implosive',
+               ],
+               [
+                       qw'BiL:Bilabial LD:Labiodental D:Dental Alv:Alveolar PA:Postalveolar Rf:Retroflex Pal:Palatal Vel:Velar Uv:Uvular Ph:Pharyngeal EG:Epiglottal Gl:Glottal',
+               ],
+       ],
+       [
+               6 => [qw{
+                       i y  ɨ ʉ  ɯ u
+                       - ɪ  ʏ -  ʊ -
+                       e ø  ɘ ɵ  ɤ o
+                       - -  ə -  - -
+                       ɛ œ  ɜ ɞ  ʌ ɔ
+                       æ -  ɐ -  - -
+                       a ɶ  - -  ɑ ɒ
+               }],
+               [qw{Close Near-close Close-mid Mid Open-mid Near-open Open}],
+               [map {substr($_, 0, 1).':'.$_, substr($_, 0, 1)." r:$_ rounded"} qw{Front Central Back}]
+       ],
 );