-
- 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{. ╔ ╦ ╗ ═ . ╠ ╬ ╣ ║ . ╚ ╩ ╝ -}]],
-# [ 3 => [qw{. ╒ ╤ ╕ . ╞ ╪ ╡ . ╘ ╧ ╛}]],
-# [ 3 => [qw{. ╓ ╥ ╖ . ╟ ╫ ╢ . ╙ ╨ ╜}]],
-);
-
-print "<h2>Signs</h2>\n\n";
-print table(@$_) for (
- [ 3 => [qw{. ▘ ▀ ▝ . ▌ █ ▐ . ▖ ▄ ▗ . ░ ▒ ▓}]],
- [ 3 => [qw{. □ ▣ ■ . ▤ ▦ ▥ . ▧ ▩ ▨}]],
- [ 4 => [qw{. ♠ ♡ ♢ ♣ . ♤ ♥ ♦ ♧}]],
- [ 5 => [qw{. ☼ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇}]], # solar
-# [12 => [qw{. ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓}]], # zodiac
- [ 8 => [qw{. ¤ ¢ ₥ € £ ₨ $ ¥ . ₫ ₭ ₦ ₱ ₧ ₮ ₩ ₪}]],
-);
-
-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}]
- ],
-);
+ 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>