$c1";
- for my $c2 (@chars, '_') {
- my $mnem = $c1 . $c2;
- if (not defined $di->{$mnem}) {
- print ' | ';
- next;
- }
- my $chr = $di->{$mnem};
- my $glyph = chr $chr;
- utf8::upgrade($glyph); # prevent latin1 output
+my @chars = (
+ [qw{! " % ' ( ) * + , - . /}],
+ ['0'..'9'], [qw{: ; < = > ?}],
+ ['A'..'M'], ['N'..'Z'],
+ ['a'..'m'], ['n'..'z'],
+);
+my @chars2 = (['_'], @chars); # trailing character (extended set)
+
+print '';
+print qq'' for map {scalar @$_} @chars2;
+print "\n";
+for my $section (qw{thead tfoot}) {
+ print "<$section> ";
+ print ' | ', quote($_) for map {@$_} @chars2;
+ print " | \n";
+}
+for my $c1group (@chars) {
+ print ' | ';
+ for my $c1 (@$c1group) {
+ print '', quote($c1);
+ for my $c2 (map {@$_} @chars2) {
+ my $mnem = $c1 . $c2;
+ if (not defined $di->{$mnem}) {
+ print ' | ';
+ next;
+ }
+ if (ref $di->{$mnem} ne 'ARRAY') {
+ printf ' | ', quote($mnem);
+ next;
+ }
+ my ($codepoint, $name, $prop, $script, $string) = @{ $di->{$mnem} };
+
+ my $glyph = $string || chr $codepoint;
+ utf8::upgrade($glyph); # prevent latin1 output
+ my $desc = $mnem . ($name && " ($name)");
+ my @class = ('X', grep {$_} $prop, $script);
- my @class = 'any';
+ $glyph = quote($glyph);
+ $glyph = "$glyph" if $prop eq 'Zs';
- printf ' | %s',
- join(' ', @class), quote($mnem), quote($glyph);
+ printf "\n".' | %s',
+ join(' ', @class), quote($desc), $glyph;
+ }
+ print "\n | ", quote($c1), "\n";
}
- print "\n";
}
print " |
---|
\n";
+:>
+
+
+ control
+ | spacing
+ | modifier
+ | spacing modifier
+ | quote
+ | punctuation
+ | symbol
+ | math
+ | currency
+ | numeric
+ | greek
+ | cyrillic
+ | latin
+ | hebrew
+ | arabic
+ | korean
+ | japanese
+ | chinese
+ |
+
+
+ unicode
+ | latin1
+ | ascii
+ | proposed
+ |
+
+
+
+
|
---|