font: numbered fonts; os groups in include
[sheet.git] / tools / mkfontinfo
index deada09937691bd4e94aa7676e86ddb5b7a1153e..09cc4d24e1839139d5cb43e801143972c8bd0cdb 100755 (executable)
@@ -5,22 +5,21 @@ use warnings;
 use utf8;
 
 use open OUT => ':utf8', ':std';
-use List::Util 'reduce';
 use File::Basename 'basename';
 use Data::Dump 'pp';
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
 
-my %font;
+my @fontlist;
+
+my %cover;
 my $incsuffix = '.inc.pl';
 for my $fontfile (glob 'ttfsupport/*'.$incsuffix) {
        my ($fontid) = basename($fontfile, $incsuffix);
        my ($fontmeta, @fontrange) = do $fontfile or next;
-       $font{$fontid} = {
-               -id   => $fontmeta->{id} || $fontid,
-               -name => $fontmeta->{name},
-               map { (chr $_ => 1) } @fontrange
-       };
+       $fontmeta->{file} = $fontid;
+       push @fontlist, $fontmeta;
+       $cover{$fontid} = { map { (chr $_ => 1) } @fontrange };
 }
 
 my %charlist;
@@ -67,13 +66,14 @@ for my $code (0 .. 256**2) {
 
 for (values %charlist) {
 for my $chars (values %{$_}) {
-       my %row = map {
-               my $fontcover = $font{$_};
-               ($_ => scalar grep { $fontcover->{$_} } @{$chars});
-       } keys %font;
-       $row{-count} = scalar @{$chars};
-
-       $row{-query} = eval {
+       my %row;
+       $row{support} = [
+               map { scalar grep { defined } @{ $cover{$_->{file}} }{ @{$chars} } }
+               @fontlist
+       ];
+       $row{count} = scalar @{$chars};
+
+       $row{query} = eval {
                my @query = map { ord } sort @{$chars};
                my $i = 0;
                while ($i < @query) {
@@ -96,6 +96,20 @@ for my $chars (values %{$_}) {
 }
 }
 
+$charlist{fonts} = \@fontlist;
+
+my %osfonts = (
+       win95   => [qw( arial arialuni lucidau verdana times courier )],  # microsoft
+       mac10   => [qw( helvetica lucida times garamond palatino )],  # apple
+       android => [qw( roboto noto )],  # google
+       oss     => [qw( dvsans c2k unifont opensans )],
+);
+my %fontnum = map { ($fontlist[$_]->{file} => $_) } 0 .. $#fontlist;
+while (my ($os, $fontids) = each %osfonts) {
+       $charlist{os}->{$os} = [ map { $fontnum{$_} // () } @{$fontids} ];
+}
+$charlist{osdefault} = [qw( win95 mac10 oss android )];
+
 say "# automatically generated by $0";
 say 'use utf8;';
 say '+'.pp(\%charlist);