font: generate data for apple fonts from OS X
[sheet.git] / unicode.plp
index 2d5b54c8a58812f010a9e30dca9fe820a47b9b11..1a0ad66f8c48d54b3ad697d2667a61f7705b032c 100644 (file)
-<:
-use utf8;
-use strict;
-use warnings;
-no  warnings 'qw';  # that's not a comment, it's a NUMBER SIGN
-use open IO => ':utf8';
-
-our $VERSION = '1.0';
-
-$header{content_type} = 'text/html; charset=utf-8';
+<(common.inc.plp)><:
+
+Html({
+       title => 'unicode glyph cheat sheet',
+       version => 'v1.0',
+       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'],
+});
 
-:><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
+:>
+<h1>Common Unicode</h1>
 
-<head>
-<title>digraph cheat sheet</title>
-<meta http-equiv="content-type" content="utf-8">
-<link rel="stylesheet" type="text/css" media="all" href="/digraphs.css">
-<style>
-table {
-       margin: 1ex 1ex 2ex;
-       float: left;
-       table-layout: auto;
-}
-thead td {
-       width: auto;
-}
-tbody {
-       border-width: 0;
-}
-h2, h3 {
-       clear: both;
-}
-h2 {
-       margin: 0 1ex;
-       font-size: 100%;
-}
+<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>
 
-th {
-       text-align: left;
-       font-size: 50%;
-       background: #888;
-       background: #778;
-       background: #889;
-       color: #FFF;
-       padding: 0 0.2em;
-}
-th, td {
-       border-color: #778;
-       border: 1px solid #888;
-}
-thead td {
-       border: 0;
-       background: transparent;
-}
-thead th {
-       text-align: center;
-}
+<div class="diinfo">
 
-td {
-       vertical-align: top;
-       margin: 0;
-       padding: 0;
-       width: 1.6em;
-}
-small {
-       font-size: 50%;
-       display: block;
-}
-small.digraph {
-       background: #888;
-       color: #FFF;
+<:
+use 5.010;
+use Shiar_Sheet::FormatChar;
+my $glyphs = Shiar_Sheet::FormatChar->new;
 
-       background: #000;
-       color: #FFF;
-       opacity: 0.3;
+if (exists $get{di}) {
+       $glyphs->{anno} = [ (!defined $get{di} || $get{di}) && 'di', 'hex' ];
 }
-small.value {
-       background: #CCC;
-       color: #666;
-
-       background: #800;
-       color: #FFF;
-       opacity: 0.3;
+if (exists $get{q}) {
+       $glyphs->{anno} = [];
 }
-</style>
-</head>
-
-<body>
-<h1>Common Digraphs</h1>
-
-<p>i^k in <a href="/">Vim</a>.
-Also see the <a href="/digraphs">complete digraphs table</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 $_;
+if (exists $get{html}) {
+       $glyphs->{anno} = ['html', 'xml'];
+       $glyphs->{style} = 'html';
 }
 
-sub table {
-       my ($width, $digraphs, $rowheads, $colheads) = @_;
-
-       my @rows;
-
-       my $colspan = 1;
-       for my $cell (@$digraphs) {
-               my $class;
-               if ($cell eq '.') {
-                       push @rows, '';
-                       $rows[-1] .= '<th>'.(shift @$rowheads || '&nbsp;') if $rowheads;
-                       next;
-               }
-               elsif ($cell eq '>') {
-                       $colspan++;
-                       next;
-               }
+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
+                       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
+);
 
-               my $code = join '', map { $di{ord $_} || '' } split //, $cell;
-               my $name = $diinfo->{$code}->[1];
+splice @config, 4, 2, qw(
+               latin/vowels=-5?latin/vowels
+                        westeuro
+                       ?easteuro
+) if exists $get{html};
 
-               if ($cell =~ s/^-//) {
-#                      $class = 'Empty';
-               }
-               elsif ($cell eq '=') {
-                       $class = 'Reserved';
-                       $cell = '';
-               }
-               elsif ($cell =~ /[ -~]/) {
-                       $class = 'Ascii';
-               }
-               elsif (not $code) {
-                       $class = 'DiNone';
-               }
-               elsif ($diinfo->{$code}->[2] =~ /\bXz\b/) {
-                       $class = 'DiProp';
-               }
-               else {
-                       $class = 'Di';
-               }
+$_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $ENV{PATH_INFO}, $get{q};
 
-               $rows[-1] .= sprintf('<td%s%s%s>%s%s',
-                       defined $name  ? qq{ title="$name"}  : '',
-                       defined $class ? qq{ class="$class"} : '',
-                       $colspan > 1 && qq{ colspan="$colspan"},
-                       $cell eq '' ? '&nbsp;' : quote($cell),
-                       $code ne '' ? sprintf(' <small class="digraph">%s</small>', quote($code))
-                               : length($cell) == 1 && $cell !~ /[a-z]/
-                                       ? sprintf(' <small class="%s">%04X</small>', 'value', ord $cell)
-                                       : '',
-               );
+my $tables = do 'unicode-table.inc.pl' or die $@ || $!;
 
-               $colspan = 1;
+$glyphs->print(map {
+       my $_ = /(.*)\?(.*)/ ? ($verbose ? $2 : $1) : $_;
+       if (!$_) {
+               ();
        }
-
-       if ($colheads) {
-               unshift @rows, sprintf '<thead><tr><td>%s<tbody>', join '',
-                       map { sprintf '<th title="%2$s">%s', split(/:/, $_, 2), '', '' }
-                       @$colheads
+       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);
 
-       return sprintf "<table>\n%s</table>\n", join '', map {"<tr>$_\n"} @rows;
-}
-
-print "<h2>Common</h2>\n\n";
-print table(@$_) for (
-       [ 3 => [qw{. « » . ‹ › . ‘ ’ . “ ” . „ ‚}]],
-       [ 3 => [qw{. † ‡ • . § ¶ # . © ® ™ . − × ÷ . ± ² √}]],
-       [ 3 => [qw{. å ä ö ü ß . Å æ ø ű ſ}]],
-       [ 3 => [qw{. ¿ ç ñ é ê è}]],
-);
-
-print "<h2>Arrows</h2>\n\n";
-print table(@$_) for (
-       [ 4 => [qw{. ↖ ↑ ↗ ↔ . ← - → ↕ . ↙ ↓ ↘ -}]],
-       [ 4 => [qw{. ⇖ ⇑ ⇗ ⇔ . ⇐ - ⇒ ⇕ . ⇙ ⇓ ⇘ -}]],
-       [ 3 => [qw{. ◤ ▲ ◥ . ◀ ◆ ▶ . ◣ ▼ ◢}]],
-       [ 3 => [qw{. ◸ △ ◹ . ◁ ◇ ▷ . ◺ ▽ ◿}]],
-);
-
-print "<h2>Line drawing</h2>\n\n";
-print table(@$_) for (
-       [ 4 => [qw{. ┌ ┬ ┐ . ├ ┼ ┤ . └ ┴ ┘}]],
-       [ 4 => [qw{. ┏ ┳ ┓ . ┣ ╋ ┫ . ┗ ┻ ┛}]],
-       [ 3 => [qw{. ┍ ┯ ┑ . ┝ ┿ ┥ . ┕ ┷ ┙}]],
-       [ 3 => [qw{. ┎ ┰ ┒ . ┠ ╂ ┨ . ┖ ┸ ┚}]],
-       [ 4 => [qw{
-               . ╴ ─ ╌ ┄ ┈ ╶ ╾
-               . ╸ ━ ╍ ┅ ┉ ╺ ╼
-               . ╵ │ ╎ ┆ ┊ ╷ ╿
-               . ╹ ┃ ╏ ┇ ┋ ╻ ╽
-       }]],
-       [ 1 => [qw{. ╱ ╳ ╲ }]],
-       [ 4 => [qw{. ╔ ╦ ╗ ═ . ╠ ╬ ╣ ║ . ╚ ╩ ╝ - }]],
-       [ 3 => [qw{. ╒ ╤ ╕ . ╞ ╪ ╡ . ╘ ╧ ╛ }]],
-       [ 3 => [qw{. ╓ ╥ ╖ . ╟ ╫ ╢ . ╙ ╨ ╜ }]],
-);
-
-print "<h2>Blocks</h2>\n\n";
-print table(@$_) for (
-       [ 3 => [qw{. ▘ ▀ ▝ . ▌ █ ▐ . ▖ ▄ ▗ }]],
-       [ 3 => [qw{. ░ . ▒ . ▓ }]],
-       [ 2 => [qw{. ▛ ▚ ▟ . ▙ ▞ ▜ }]],
-       [ 2 => [qw{. ▁ ▂ ▃ ▄ ▅ ▆ ▇ ▔ . ▏ ▎ ▍ ▌ ▋ ▊ ▉ ▕ }]],
-       [ 3 => [qw{. □ ▣ ■ . ▤ ▦ ▥ . ▧ ▩ ▨}]],
-);
+:></div>
 
-print "<h2>Signs</h2>\n\n";
-print table(@$_) for (
-       [ 8 => [qw{. ¤ ¢ ₥ € £ ₨ $ ¥ . ₫ ₭ ₦ ₱ ₧ ₮ ₩ ₪}]],
-       [ 4 => [qw{. ♠ ♡ ♢ ♣ . ♤ ♥ ♦ ♧}]],
-       [ 5 => [qw{. ☉ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇}]],  # solar
-       [12 => [qw{. ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓}]],  # zodiac
-);
+<div class="legend">
+       <table class="glyphs"><tr>
+       <td class="X l4">ascii
+       <td class="X l3"><:= $glyphs->{style} eq 'di' ? 'digraph' : 'latin1' :>
+       <td class="X l2"><:= $glyphs->{style} eq 'di' ? 'proposed' : 'BMP' :>
+       <td class="X l1">other unicode
+       <td class="X ex">discouraged
+       </table>
+</div>
 
-print "<h2>IPA</h2>\n\n";
-print table(@$_) for (
-       [
-               12 => [qw{
-                       . p  p̪  >  >  t  ʈ  c  k  q  =  ʡ  ʔ
-                       . b  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}]
-       ],
-);
+<script type="text/javascript" src="/clipboard.js"></script>
 
-print "<h2>Japanese</h2>\n\n";
-print table(@$_) for (
-       [
-               1 => [qw{
-                       . あ い う え お =
-                       . か き く け こ =
-                       . さ し す せ そ =
-                       . た ち つ て と =
-                       . な に ぬ ね の ん
-                       . は ひ ふ へ ほ =
-                       . ま み む め も =
-                       . や =  ゆ =  よ =
-                       . ら り る れ ろ =
-                       . わ ゐ =  ゑ を =
-               }],
-               ['', qw{K S T N H M Y R W}],
-               [qw{A I U E O}, ''],
-       ],
-       [
-               1 => [qw{
-                       . が ぎ ぐ げ ご
-                       . ざ じ ず ぜ ぞ
-                       . だ ぢ づ で ど
-                       . ば び ぶ べ ぼ
-                       . ぱ ぴ ぷ ぺ ぽ
-               }],
-               [qw{G Z D B P}],
-               [qw{A I U E O}],
-       ],
-       [
-               1 => [qw{
-                       . ア イ ウ エ オ ー
-                       . カ キ ク ケ コ =
-                       . サ シ ス セ ソ =
-                       . タ チ ツ テ ト =
-                       . ナ ニ ヌ ネ ノ ン
-                       . ハ ヒ フ ヘ ホ =
-                       . マ ミ ム メ モ =
-                       . ヤ -  ユ -  ヨ =
-                       . ラ リ ル レ ロ =
-                       . ワ ヰ -  ヱ ヲ =
-               }],
-               ['', qw{K S T N H M Y R W}],
-               [qw{A I U E O}, ''],
-       ],
-       [
-               1 => [qw{
-                       . ガ ギ グ ゲ ゴ
-                       . ザ ジ ズ ゼ ゾ
-                       . ダ ヂ ヅ デ ド
-                       . バ ビ ブ ベ ボ
-                       . パ ピ プ ペ ポ
-                       . ヷ ヸ ヴ ヹ ヺ
-               }],
-               [qw{G Z D B P V}],
-               [qw{A I U E O}],
-       ],
-);