4 title => 'character support sheet',
7 unicode font glyph char character support overview cover coverage
8 script block symbol sign mark reference table
10 stylesheet => [qw( light dark mono circus red )],
11 data => [qw( unicode-cover.inc.pl )],
15 <h1>Font coverage</h1>
18 Character support of Unicode
19 <a href="/charset">blocks</a> and <a href="/unicode">presets</a>.
26 use Shiar_Sheet::FormatChar;
27 my $glyphs = Shiar_Sheet::FormatChar->new;
30 win95 => [qw( arial ariuni verdana times courier )], # microsoft
31 mac10 => [qw( lucida garamond )], # apple
32 android => [qw( roboto noto )], # google
33 oss => [qw( dvsans c2k unifont )],
35 my @ossel = qw( win95 mac10 oss android );
36 my @fontlist = map { @{ $oslist{$_} } } @ossel;
38 my $cover = do 'unicode-cover.inc.pl' or die $@ || $!;
41 'block/Latin-1 Supplement',
42 'block/Latin Extended-A',
43 'block/Latin Extended Additional',
44 'block/Latin Extended-B',
60 'table/arrows/single',
66 for my $group ($ENV{PATH_INFO} || ()) {
68 my $grouprows = $cover->{$group}
69 or die "Unknown character category $_\n";
70 @rows = map { "$group/$_" } sort keys %{$grouprows};
73 # output character list
75 print '<table class=mapped>';
77 print "<colgroup span=$_>" for map { scalar @{$oslist{$_}} } @ossel;
80 print '<th colspan=2>';
81 printf '<th colspan=%d>%s fonts', scalar @{ $oslist{$_} }, $_ for @ossel;
84 print '<th colspan=2>';
85 printf '<td>%s', $_ for @fontlist;
89 my ($group, $name) = split m{/}, $_, 2;
90 my $row = $cover->{$group}->{$name};
93 $name = sprintf '<a href="%s">%s</a>', EncodeURI("/chars/$group/$name"), EscapeHTML($name)
94 if $row->{-count} and $row->{-count} < 1280;
96 print '<td class=right>', $row->{-count};
98 my $count = $row->{$_};
99 if (not defined $count) {
100 print '<td class="l0">?';
104 print '<td class="l1">✘';
107 if ($count == $row->{-count}) {
108 print '<td class="l5">✔';
112 my $rel = $count / $row->{-count};
113 my $class = $rel < .5 ? 2 : $rel < .9 ? 3 : 4;
114 printf '<td class="%s">%d%%', "l$class", $rel*100;