-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{╔ ╦ ╗ ═ ╠ ╬ ╣ ║ ╚ ╩ ╝ -}]],
-# [ 3 => [qw{╒ ╤ ╕ ╞ ╪ ╡ ╘ ╧ ╛}]],
-# [ 3 => [qw{╓ ╥ ╖ ╟ ╫ ╢ ╙ ╨ ╜}]],
-);
-
-print "<h2>Signs</h2>\n\n";
-print table(@$_) for (
- [ 3 => [qw{▘ ▀ ▝ ▌ █ ▐ ▖ ▄ ▗}]],
- [ 3 => [qw{░ ▒ ▓ □ ▣ ■ ▤ ▦ ▥ ▧ ▩ ▨}]],
- [ 4 => [qw{♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧}]],
- [10 => [qw{☼ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇}]], # solar
-# [12 => [qw{♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓}]], # zodiac
- [ 8 => [qw{¤ ¢ ₥ € £ ₨ $ ¥ ₫ ₭ ₦ ₱ ₧ ₮ ₩ ₪}]],
-);
-
-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 ɶ - - ɑ ɒ
- }]],
-);
+our $verbose = exists $get{v};
+
+my $tables = do 'unicode.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;
+ }
+} qw{
+ Popular
+ punctuation/quoting
+ common
+ symbols/binary?symbols/binary=-5
+ latin/sample=-1
+ sample=2-3
+ ?uncommon
+ punctuation/version
+ punctuation/marks
+ Symbols
+ symbols/currency
+ cards
+ ?chess
+ signs1
+ communic=0?communic
+ trinity=0?trinity
+ signs2
+ Signs
+ solar
+ zodiac=0?zodiac
+ Key_commands
+ keys/spacing
+ editing
+ modifier
+ control
+ command
+ ?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
+});
+
+:></div>
+
+<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>
+
+<script type="text/javascript" src="/clipboard.js"></script>