unicode: representations of common android control keys
[sheet.git] / unicode.plp
1 <(common.inc.plp)><:
2
3 Html({
4         title => 'unicode glyph cheat sheet',
5         version => 'v1.0',
6         description => [
7                 "Common Unicode characters with digraph or code point, layed out for quick location.",
8                 "Includes general symbols, arrows, drawing characters, and IPA letters.",
9         ],
10         keywords => [qw'
11                 unicode glyph char character reference common ipa symbol sign mark table digraph
12         '],
13         stylesheet => [qw'light dark mono circus red'],
14         data => [qw'unicode-table.inc.pl unicode-char.inc.pl'],
15 });
16
17 :>
18 <h1>Common Unicode</h1>
19
20 <p>
21 Glyphs are followed by
22 <a href="/digraphs">digraph</a> or <a href="/charset">code point</a>,
23 i^k or i^vu respectively in <a href="/vi">Vim</a>.
24 </p>
25
26 <div class="diinfo">
27
28 <:
29 use 5.010;
30 use Shiar_Sheet::FormatChar;
31 my $glyphs = Shiar_Sheet::FormatChar->new;
32
33 if (exists $get{di}) {
34         $glyphs->{anno} = [ (!defined $get{di} || $get{di}) && 'di', 'hex' ];
35 }
36 if (exists $get{q}) {
37         $glyphs->{anno} = [];
38 }
39 if (exists $get{html}) {
40         $glyphs->{anno} = ['html', 'xml'];
41         $glyphs->{style} = 'html';
42 }
43
44 our $verbose = exists $get{v};
45
46 my @config = qw(
47         Popular
48                 punctuation/quoting
49                         common
50                 symbols/binary?symbols/binary=-5
51                 latin/sample=-1
52                         sample=2-
53                         ?uncommon
54                 punctuation/version
55                 punctuation/marks
56                         spacing
57         Symbols
58                 symbols/currency
59                         cards
60                         ?chess
61                         signs1
62                         communic=0?communic
63                         trinity=0?trinity
64                         signs2
65         Signs
66                         solar
67                         zodiac=0?zodiac
68         Key_commands
69                 keys/spacing
70                         editing
71                         modifier
72                         control
73                         command
74                         android
75                         ?player
76         Mathematics
77                 math/size
78                         equal
79                         set
80                         logic
81         Arrows
82                 arrows/single
83                         double
84                         white
85                         black
86                         block
87                         blacktri
88                         whitetri
89                         ?-large
90                         ?-heavy
91         Line_drawing
92                 lines/double
93                         doubleh
94                         doublev
95                         single
96                         heavy
97                         heavyh
98                         heavyv
99                         straight
100                         curved
101                         diagonal
102         Blocks
103                 block/square
104                         shades
105                         fill4
106                         fill4i
107                         fill8
108         IPA
109                 ipa/cons
110                         consco
111                         vowels
112         ?Japanese
113                 ?japanese/hira
114                         ?hiraderiv
115                         ?kata
116                         ?kataderiv
117 );
118
119 $_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $ENV{PATH_INFO}, $get{q};
120
121 my $tables = do 'unicode-table.inc.pl' or die $@ || $!;
122
123 $glyphs->print(map {
124         my $_ = /(.*)\?(.*)/ ? ($verbose ? $2 : $1) : $_;
125         if (!$_) {
126                 ();
127         }
128         elsif (/[A-Z]/) {
129                 tr/_/ /;
130                 $_;
131         }
132         else {
133                 state $group;
134                 $group = $1 if s{^([^/]+)/}{};
135                 my @select = s/=(.*)// ? split(/=/, $1) : ();
136                 my $table = $tables->{$group}->{$_}
137                         or die "Unknown table specified: $group/$_";
138
139                 if (@select) {
140                         my $rowlen;
141                         for ($rowlen = 1; $rowlen++; $rowlen <= $#$table) {
142                                 last if $table->[$rowlen] =~ /\./;
143                         }
144                         my @cells = map {
145                                 my $end = (s/-(.+)?// ? ($1 // @$table / $rowlen - 1) : $_) + 1;
146                                 $_ * $rowlen .. $end * $rowlen - 1;
147                         } @select;
148                         $table = [ @$table[@cells] ];
149                 }
150                 $table;
151         }
152 } @config);
153
154 :></div>
155
156 <div class="legend">
157         <table class="glyphs"><tr>
158         <td class="X l4">ascii
159         <td class="X l3"><:= $glyphs->{style} eq 'di' ? 'digraph' : 'latin1' :>
160         <td class="X l2"><:= $glyphs->{style} eq 'di' ? 'proposed' : 'BMP' :>
161         <td class="X l1">other unicode
162         <td class="X ex">discouraged
163         </table>
164 </div>
165
166 <script type="text/javascript" src="/clipboard.js"></script>
167