X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/675221b52b08ff40fa91f38fe2eae05a4ef155bc..25a210c5de3a4e164a39839dedeb997d56f31faf:/font.plp
diff --git a/font.plp b/font.plp
index 1d6ee4f..8867921 100644
--- a/font.plp
+++ b/font.plp
@@ -1,4 +1,5 @@
<(common.inc.plp)><:
+use 5.014;
Html({
title => 'character support sheet',
@@ -11,6 +12,79 @@ Html({
data => [qw( unicode-cover.inc.pl )],
});
+if (my $font = $ENV{PATH_INFO} =~ s{^/}{}r) {
+ my ($fontmeta, @cover) = do "ttfsupport/$font.inc.pl";
+ $fontmeta or die "Unknown font $font\n";
+
+ require Unicode::UCD;
+
+ my $size = 0x200;
+ my $offset = eval {
+ local $_ = $get{q} || 0;
+ return $_ if /\A\d+\z/; # numeric
+ return hex $1 if /\A (?: 0?x | u\W* ) ([0-9a-f]+) \z/ix; # hexadecimal
+ return $_->[0]->[0] for Unicode::UCD::charblock(ucfirst) || (); # block
+ die "Unknown offset query '$_'\n";
+ };
+ die $@ if $@;
+
+ say "
Font coverage
";
+ say "$_
" for EscapeHTML($fontmeta->{name});
+ printf("Version %s released %s contains %d glyphs.
\n",
+ !!$_->[2] && qq( title="revision $_->[2]"),
+ $_->[1], $_->[0],
+ scalar @cover,
+ ) for [
+ grep { $_ }
+ ($fontmeta->{date} || '?') =~ s/T.*//r,
+ EscapeHTML($fontmeta->{version}),
+ $fontmeta->{revision},
+ ];
+ printf "%s
\n", join('
', map { $_ ? EscapeHTML($_) : () }
+ $fontmeta->{copyright}, $fontmeta->{license},
+ );
+
+ require Shiar_Sheet::FormatChar;
+ my $glyphs = Shiar_Sheet::FormatChar->new;
+
+ my %cover = map { ($_ => 1) } @cover; # lookup map
+
+ say <<"EOT";
+
+
+EOT
+ say '';
+ say "$_" for join(' ', grep {$_}
+ $offset > $size && sprintf('â', 0),
+ $offset > 0 && sprintf(
+ 'â
',
+ $offset - $size,
+ ),
+ sprintf('U+%04X', $offset), #TODO: block name
+ $offset + $size < 0x11_0000 && sprintf(
+ 'â»',
+ $offset + $size,
+ ),
+ );
+ for my $cp ($offset .. $offset+$size-1) {
+ my $info = $glyphs->glyph_info($cp);
+ my ($class, $name, $mnem, $html, $string) = @{$info};
+ my $np = $class =~ /\bC\S\b/; # noprint if control or invalid
+ say sprintf '%X', $cp if $cp % 32 == 0;
+ say sprintf ' | %s',
+ !$class ? ('l0', $cp, '', '') :
+ $cover{$cp} ? $np ? 'l2' : 'l5' : $np ? 'Xi' : 'l1',
+ $cp, !!$name && ": $name",
+ ($cover{$cp} || !$np) && EscapeHTML(chr $cp);
+ }
+ say ' |
---|
';
+
+ exit;
+}
+
:>
Font coverage
@@ -22,9 +96,6 @@ Character support of Unicode
<:
-use 5.010;
-use Shiar_Sheet::FormatChar;
-my $glyphs = Shiar_Sheet::FormatChar->new;
my $cover = do 'unicode-cover.inc.pl' or die $@ || $!;
@@ -60,8 +131,7 @@ my @rows = (
'table/html',
);
-if (my $group = $ENV{PATH_INFO}) {
- $group =~ s{^/}{};
+if (my $group = $get{q}) {
my $grouprows = $cover->{$group}
or die "Unknown character category $_\n";
@rows = map { "$group/$_" } sort keys %{$grouprows};
@@ -81,8 +151,9 @@ printf '
%s fonts', scalar @{ $cover->{os}->{$_} }, $_
print ' | ';
print '';
-printf(' | %s', map { EscapeHTML($_) }
+printf(' | %s', map { EscapeHTML($_) }
join("\n", $_->{name}, $_->{description}),
+ "/font/$_->{file}",
$_->{abbr},
) for @{ $cover->{fonts} }[@fontlist];
say '';
|