charset: encode wingdings font
[sheet.git] / unicode.plp
index c7b85c27bfb531a4ada779523a23dc310800a3a2..0ec6374da5a9474b24f714ad1a8ab90b05fa60fa 100644 (file)
-<:
-use utf8;
-use strict;
-use warnings;
-use open IO => ':utf8';
-
-our $VERSION = '1.0';
-
-$header{content_type} = 'text/html; charset=utf-8';
-
-:><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-
-<head>
-<title>digraph cheat sheet</title>
-<meta http-equiv="content-type" content="utf-8">
-<!-- link rel="stylesheet" type="text/css" media="all" href="unicode.css" -->
-<style>
-table {
-       border-collapse: collapse;
-       margin: 1ex;
-}
-tbody td, th {
-       border: 1px solid #888;
-}
-td {
-       text-align: center;
-       vertical-align: top;
-       margin: 0;
-       padding: 0;
-}
-small {
-       font-size: 50%;
-       display: block;
-       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>
+<(common.inc.plp)><:
+
+Html({
+       title => 'unicode glyph cheat sheet',
+       version => '1.1',
+       description => [
+               "Common Unicode characters with digraph or code point, layed out for quick location.",
+               "Includes general symbols, arrows, drawing characters, and IPA letters.",
+       ],
+       keywords => [qw'
+               unicode glyph char character reference common ipa symbol sign mark table digraph
+       '],
+       stylesheet => [qw'light dark mono circus red'],
+       data => [qw'unicode-table.inc.pl unicode-char.inc.pl'],
+});
 
-<body>
-<h1>Common Digraphs</h1>
+:>
+<h1>Common Unicode</h1>
 
-<p>i^k in <a href="/">Vim</a>.
-Also see the <a href="/digraphs">complete digraphs table</a>.</p>
+<p>
+Glyphs are followed by
+<a href="/digraphs">digraph</a> or <a href="/charset">code point</a>,
+i^k or i^vu respectively in <a href="/vi">Vim</a>.
+</p>
 
-<:
-my $diinfo = do 'digraphs.inc.pl';
-my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} }
-       keys %$diinfo;
-
-sub quote {
-       local $_ = shift;
-       s/"/&quot;/g;
-       s/</&lt;/g;
-       s/>/&gt;/g;
-       return $_;
-}
-
-sub table {
-       my ($width, $digraphs, $rowheads, $colheads) = @_;
-
-       my @cells;
-       push @cells, sprintf '<td title="%s"%s>%s%s',
-               $di{ord $_} && $diinfo->{$di{ord $_}}->[1],
-               $_ 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++;
-       }
+<div class="diinfo">
 
-       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;
-       }
+<:
+use Shiar_Sheet::FormatChar;
+my $glyphs = Shiar_Sheet::FormatChar->new;
 
-       return sprintf "<table>%s</table>\n", join '', @rows;
+if (exists $get{di}) {
+       $glyphs->{anno} = [ (!defined $get{di} || $get{di}) && 'di', 'hex' ];
+}
+if (exists $get{q}) {
+       $glyphs->{anno} = [];
+}
+if (exists $get{html}) {
+       $glyphs->{anno} = ['html', 'xml'];
+       $glyphs->{style} = 'html';
 }
 
-print "<h2>Arrows</h2>\n\n";
-print table(@$_) for (
-       [ 4 => [qw{↖ ↑ ↗ ↔  ← - → ↕  ↙ ↓ ↘ -}]],
-       [ 4 => [qw{⇖ ⇑ ⇗ ⇔  ⇐ - ⇒ ⇕  ⇘ ⇓ ⇙ -}]],
-       [ 3 => [qw{◤ ▲ ◥  ◀ ◆ ▶  ◣ ▼ ◢}]],
-       [ 3 => [qw{◸ △ ◹  ◁ ◇ ▷  ◺ ▽ ◿}]],
+our $verbose = exists $get{v};
+
+my @config = qw(
+       Popular
+               punctuation/quoting
+                       common=-5?common
+               symbols/binary?symbols/binary=-5
+               latin/sample=-1
+                       ?sample=2-
+                       ?uncommon
+               punctuation/version
+               punctuation/marks
+                       spacing
+       Symbols
+               symbols/currency
+                       cards=-3?cards
+                       ?chess
+                       harvey
+                       signs1
+                       communic=0?communic
+                       trinity=0?trinity
+                       signs2
+       Signs
+                       solar
+                       zodiac=0-1=3?zodiac
+       Key_commands
+               keys/spacing
+                       editing
+                       modifier
+                       control
+                       command
+                       android=0
+                       ps
+                       ?player
+       Mathematics
+               math/size
+                       equal
+                       set
+                       logic
+       Arrows
+               arrows/single
+                       double
+                       white
+                       black
+                       block
+                       blacktri
+                       whitetri
+                       ?-large
+                       ?-heavy
+       Line_drawing
+               lines/double
+                       doubleh
+                       doublev
+                       single
+                       heavy
+                       heavyh
+                       heavyv
+                       straight
+                       curved
+                       diagonal
+       Blocks
+               block/square
+                       shades
+                       fill4
+                       fill4i
+                       fill8
+       IPA
+               ipa/cons
+                       consco
+                       vowels
+       ?Japanese
+               ?japanese/hira
+                       ?hiraderiv
+                       ?kata
+                       ?kataderiv
 );
 
-print "<h2>Line drawing</h2>\n\n";
-print table(@$_) for (
-       [ 4 => [qw{┌ ┬ ┐ ─  ├ ┼ ┤ │  └ ┴ ┘ -}]],
-       [ 4 => [qw{┏ ┳ ┓ ━  ┣ ╋ ┫ ┃  ┗ ┻ ┛ -}]],
-       [ 3 => [qw{┍ ┯ ┑  ┝ ┿ ┥  ┕ ┷ ┙}]],
-       [ 3 => [qw{┎ ┰ ┒  ┠ ╂ ┨  ┖ ┸ ┚}]],
-#      [ 4 => [qw{╔ ╦ ╗ ═  ╠ ╬ ╣ ║  ╚ ╩ ╝ -}]],
-#      [ 3 => [qw{╒ ╤ ╕  ╞ ╪ ╡  ╘ ╧ ╛}]],
-#      [ 3 => [qw{╓ ╥ ╖  ╟ ╫ ╢  ╙ ╨ ╜}]],
-);
+splice @config, 4, 2, qw(
+               latin/vowels=-5?latin/vowels
+                        westeuro
+                       ?easteuro
+) if exists $get{html};
 
-print "<h2>Signs</h2>\n\n";
-print table(@$_) for (
-       [ 3 => [qw{▘ ▀ ▝  ▌ █ ▐  ▖ ▄ ▗  ░ ▒ ▓}]],
-       [ 3 => [qw{□ ▣ ■  ▤ ▦ ▥  ▧ ▩ ▨}]],
-       [ 4 => [qw{♠ ♡ ♢ ♣  ♤ ♥ ♦ ♧}]],
-       [10 => [qw{☼ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇}]],  # solar
-#      [12 => [qw{♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓}]],  # zodiac
-       [ 8 => [qw{¤ ¢ ₥ € £ ₨ $ ¥  ₫ ₭ ₦ ₱ ₧ ₮ ₩ ₪}]],
-);
+$_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $Request, $get{q};
 
-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 - ɭ ʎ ʟ - = = =
-                       ʘ - ǀ ǁ ǃ - ǂ - - = = =
-                       ɓ - ɗ - - - ʄ ɠ ʛ - - -
-               }],
-               [
-                       '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}]
-       ],
-);
+my $tables = do 'unicode-table.inc.pl' or die $@ || $!;
+
+$glyphs->print(map {
+       my $_ = /(.*)\?(.*)/ ? ($verbose ? $2 : $1) : $_;
+       if (!$_) {
+               ();
+       }
+       elsif (/[A-Z]/) {
+               tr/_/ /;
+               $_;
+       }
+       else {
+               state $group;
+               $group = $1 if s{^([^/]+)/}{};
+               my @select = s/=(.*)// ? split(/=/, $1) : ();
+               my $table = $tables->{$group}->{$_}
+                       or die "Unknown table specified: $group/$_";
+
+               if (@select) {
+                       my $rowlen;
+                       for ($rowlen = 1; $rowlen++; $rowlen <= $#$table) {
+                               last if $table->[$rowlen] =~ /\./;
+                       }
+                       my @cells = map {
+                               my $end = (s/-(.+)?// ? ($1 // @$table / $rowlen - 1) : $_) + 1;
+                               $_ * $rowlen .. $end * $rowlen - 1;
+                       } @select;
+                       $table = [ @$table[@cells] ];
+               }
+               $table;
+       }
+} @config);
+
+:></div>
+
+<div class="legend">
+       <table class="glyphs"><tr>
+       <td class="X l5">ascii
+       <td class="X l4"><:= $glyphs->{style} eq 'di' ? 'digraph' : 'latin1' :>
+       <td class="X l3"><:= $glyphs->{style} eq 'di' ? 'proposed' : 'HTML4' :>
+       <td class="X l2">unicode ≤6.0
+       <td class="X l1">other unicode
+       <td class="X ex">discouraged
+       </table>
+</div>
+
+<script type="text/javascript" src="/clipboard.js"></script>