style/circus: browser column hover
[sheet.git] / font.plp
1 <(common.inc.plp)><:
2
3 Html({
4         title => 'character support sheet',
5         version => 'v1.0',
6         keywords => [qw'
7                 unicode glyph char character reference common ipa symbol sign mark table digraph
8         '],
9         stylesheet => [qw'light dark mono circus red'],
10         data => [qw'unicode-table.inc.pl unicode-char.inc.pl'],
11 });
12
13 :>
14 <h1>Character support</h1>
15
16 <p>
17 Selected characters from Unicode <a href="/unicode">preset</a>
18 or <a href="/charset">range</a>.
19 </p>
20
21 <div>
22
23 <:
24 use 5.010;
25 use Shiar_Sheet::FormatChar;
26 my $glyphs = Shiar_Sheet::FormatChar->new;
27
28 my %oslist = (
29         win95 => [qw/arial ariuni verdana times/],
30         mac10 => [qw//],
31         oss   => ['dv ss', qw/droid c2k guf/],
32
33         android => ['droid'],
34 );
35 my @ossel = qw(win95 oss);
36
37 my $tables = do 'unicode-table.inc.pl' or die $@ || $!;
38 my (%font, @fontlist);
39 for my $os (@ossel) {
40         my $osfonts = $oslist{$os};
41         for my $fontid (@{$osfonts}) {
42                 push @fontlist, $fontid;
43                 my ($fontmeta, @fontrange) = do "ttfsupport/$fontid.inc.pl";
44                 $fontmeta or next;
45                 $font{$fontid} = {
46                         -id   => $fontmeta->{id} || $fontid,
47                         -name => $fontmeta->{name},
48                         map { (chr $_ => 1) } @fontrange
49                 };
50         }
51 }
52
53 my @config = qw(
54         punctuation/common punctuation/marks
55         latin/sample
56         symbols/signs1
57 );
58 $_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $ENV{PATH_INFO}, $get{q};
59 @config = qw(ipa/cons ipa/vowels) if 0;
60
61 for (@config) {
62         my ($tablegroup, $tablename) = split m{/}, $_, 2;
63
64         print '<table class=mapped>';
65         printf '<caption>%s</caption>', "$tablegroup: $tablename";
66         say '';
67         print '<col>' x 3;
68         print "<colgroup span=$_>" for 2, map { scalar @{$oslist{$_}} } @ossel;
69         print '<thead><tr>';
70         print '<td colspan=2>char';
71         print '<td>name';
72         print '<td>di<td>html';
73         printf('<td colspan=%d title="%s">%s',
74                 (map {
75                         scalar @{$_},
76                         join(', ', map { $_->{-name} } @font{ @{$_} }),
77                 } $oslist{$_}),
78                 $_,
79         ) for @ossel;
80         say '</thead>';
81         my $table = $tables->{$tablegroup}->{$tablename};
82
83         for my $chr (@$table) {
84                 $chr =~ m/^\./ .. 1 or next;
85                 given ($chr) {
86                         when (/^[.]/) {
87                                 print "<tbody style=\"border-bottom:3px double #AAA\">\n";
88                                 next;
89                         }
90                         when ([qw(> - =)]) {
91                                 next;
92                         }
93                 }
94
95                 my $ex = s/^-//;
96                 my $codepoint = ord $chr;
97                 my $ascii = $codepoint <= 127;
98
99                 print "<tr><th>$chr\n";
100                 my $info = $glyphs->glyph_info($codepoint);
101                 my ($class, $name, $mnem, $html, $string) = @$info;
102                 print "<td>$_" for sprintf('%X', $codepoint), EscapeHTML($name);
103                 printf '<td class="%s">%s', @$_ for (
104                         [$ascii ? 'l0' : defined $mnem ? 'l4' : 'l1', $mnem // ''],
105                         [$ascii ? 'l0' : defined $html ? 'l4' : 'l1', $html // ''],
106                         (map {
107                                 !$font{$_}->{-id} ? [l0 => "$_?"] :
108                                 $font{$_}->{$chr} ? [l4 => $font{$_}->{-id}] : [l1 => '']
109                         } @fontlist),
110                 );
111         }
112         say "</table>\n";
113 }
114 :></div>
115
116 <script type="text/javascript" src="/clipboard.js"></script>
117