From 4e71d82512759ed7da92d213ac66d006dae456a1 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Sun, 24 Apr 2011 17:44:04 +0200 Subject: [PATCH] font: file ids and os grouping --- font.plp | 52 ++++++++++++++++++++++++++++++++++---------- tools/convert-ttf.pl | 21 ++++++++++++++---- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/font.plp b/font.plp index 9faa9c1..1e1732b 100644 --- a/font.plp +++ b/font.plp @@ -25,15 +25,29 @@ use 5.010; use Shiar_Sheet::FormatChar; my $glyphs = Shiar_Sheet::FormatChar->new; +my %oslist = ( + win95 => [qw/arial ariuni verdana times/], + mac10 => [qw//], + oss => ['dv ss', qw/droid c2k guf/], + + android => ['droid'], +); +my @ossel = qw(win95 oss); + my $tables = do 'unicode-table.inc.pl' or die $@ || $!; my (%font, @fontlist); -for my $fontid (qw(d tnr a dv dvs c2k u)) { - my ($fontmeta, @fontrange) = do "ttfsupport/$fontid.inc.pl"; - push @fontlist, $fontid; - $font{$fontid} = { - -name => $fontmeta->{name}, - map { (chr $_ => 1) } @fontrange - }; +for my $os (@ossel) { + my $osfonts = $oslist{$os}; + for my $fontid (@{$osfonts}) { + push @fontlist, $fontid; + my ($fontmeta, @fontrange) = do "ttfsupport/$fontid.inc.pl"; + $fontmeta or next; + $font{$fontid} = { + -id => $fontmeta->{id} || $fontid, + -name => $fontmeta->{name}, + map { (chr $_ => 1) } @fontrange + }; + } } my @config = qw( @@ -47,9 +61,23 @@ $_ and m{/*+(.+)} and @config = split /[ ]/, $1 for $ENV{PATH_INFO}, $get{q}; for (@config) { my ($tablegroup, $tablename) = split m{/}, $_, 2; - print ''; + print '
'; printf '', "$tablegroup: $tablename"; say ''; + print '' x 3; + print "" for 2, map { scalar @{$oslist{$_}} } @ossel; + print ''; + print ''; my $table = $tables->{$tablegroup}->{$tablename}; for my $chr (@$table) { @@ -71,12 +99,14 @@ for (@config) { print "
%s
char'; + print 'name'; + print 'dihtml'; + printf('%s', + (map { + scalar @{$_}, + join(', ', map { $_->{-name} } @font{ @{$_} }), + } $oslist{$_}), + $_, + ) for @ossel; + say '
$chr\n"; my $info = $glyphs->glyph_info($codepoint); my ($class, $name, $mnem, $html, $string) = @$info; - print "$_" for $codepoint, EscapeHTML($name); + print "$_" for sprintf('%X', $codepoint), EscapeHTML($name); printf '%s', @$_ for ( [$ascii ? 'l0' : defined $mnem ? 'l4' : 'l1', $mnem // ''], [$ascii ? 'l0' : defined $html ? 'l4' : 'l1', $html // ''], - (map { $font{$_}->{$chr} ? [l4 => $font{$_}->{-name}] : [l1 => ''] } - @fontlist), + (map { + !$font{$_}->{-id} ? [l0 => "$_?"] : + $font{$_}->{$chr} ? [l4 => $font{$_}->{-id}] : [l1 => ''] + } @fontlist), ); } say "
\n"; diff --git a/tools/convert-ttf.pl b/tools/convert-ttf.pl index 3a7cc0e..95b26a0 100755 --- a/tools/convert-ttf.pl +++ b/tools/convert-ttf.pl @@ -6,7 +6,8 @@ use warnings; use Data::Dump 'pp'; use Font::TTF::Font; -my ($ttfname, $outfile) = @ARGV; +my ($ttfuri, $outfile) = @ARGV; +$ttfuri or die "usage error\n"; for ($outfile || ()) { !-e $_ or die "Output file $outfile already exists\n"; @@ -14,12 +15,23 @@ for ($outfile || ()) { select $output; } +my %FONTID = ( + 'Times New Roman' => 'times', + 'DejaVu Sans' => 'dv ss', + 'DejaVu Serif' => 'dv serif', + 'Code2000' => 'c2k', + 'GNU Unifont' => 'guf', + 'Droid Sans' => 'droid', + 'Droid Serif' => 'droid serif', +); + { - my $ttf = Font::TTF::Font->open($ttfname) - or die "Cannot open truetype in $ttfname: $!"; + my $ttf = Font::TTF::Font->open($ttfuri) + or die "Cannot open truetype in $ttfuri: $!"; + my $ttfname = ($ttfuri =~ m{([^/.]+) (?:[.]ttf)? \z}msx)[0]; my %meta = ( - filename => $ttfname, + source => $ttfuri, name => $ttf->{name}->read->find_name(4) || $ttfname, version => $ttf->{head}->{fontRevision}, date => (map { @@ -29,6 +41,7 @@ for ($outfile || ()) { } } $ttf->{head}->getdate), ); + $meta{id} = $FONTID{ $meta{name} } // lc $ttfname; say pp(\%meta), ','; my $support = $ttf->{cmap}->find_ms->{val}; -- 2.30.0