font: conversion rules for common ttf files
authorMischa POSLAWSKY <perl@shiar.org>
Mon, 2 Apr 2012 17:18:58 +0000 (19:18 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 10 Apr 2012 01:03:24 +0000 (03:03 +0200)
.gitignore
font.plp
tools/convert-allfonts [new file with mode: 0755]
tools/convert-ttf.pl

index 6bdaa8b..b09855f 100644 (file)
@@ -1,2 +1,3 @@
 /rfc1345.txt
 /digraphs.inc.pl
+/ttfsupport/
index 95630b2..68f613f 100644 (file)
--- a/font.plp
+++ b/font.plp
@@ -26,9 +26,9 @@ 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/],
+       win95 => [qw( arial ariuni verdana times )],
+       mac10 => [qw( )],
+       oss   => [qw( dvsans droid c2k guf )],
 
        android => ['droid'],
 );
diff --git a/tools/convert-allfonts b/tools/convert-allfonts
new file mode 100755 (executable)
index 0000000..e7d1964
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+cd $(dirname $0)
+
+CONVBIN=./convert-ttf.pl
+OUTDIR=../ttfsupport
+TTFDIR=~/.fonts
+
+# microsoft
+
+TTFDIR_MS=/usr/share/fonts/truetype/msttcorefonts
+if [ -e $TTFDIR_MS ]; then
+$CONVBIN $TTFDIR_MS/Verdana.ttf $OUTDIR/verdana.inc.pl
+$CONVBIN $TTFDIR_MS/Times_New_Roman.ttf $OUTDIR/times.inc.pl
+$CONVBIN $TTFDIR_MS/Arial.ttf $OUTDIR/arial.inc.pl
+$CONVBIN $TTFDIR_MS/Courier_New.ttf $OUTDIR/courier.inc.pl
+$CONVBIN $TTFDIR_MS/Comic_Sans_MS.ttf $OUTDIR/comic.inc.pl
+$CONVBIN $TTFDIR_MS/Georgia.ttf $OUTDIR/georgia.inc.pl
+fi
+
+# bitstream
+
+TTFDIR_DV=/usr/share/fonts/truetype/ttf-dejavu
+if [ -e $TTFDIR_DV ]; then
+$CONVBIN $TTFDIR_DV/DejaVuSans.ttf $OUTDIR/dvsans.inc.pl
+$CONVBIN $TTFDIR_DV/DejaVuSerif.ttf $OUTDIR/dvserif.inc.pl
+$CONVBIN $TTFDIR_DV/DejaVuSansMono.ttf $OUTDIR/dvmono.inc.pl
+fi
+
+# google
+
+TTFDIR_GD=/usr/share/fonts/truetype/droid
+if [ -e $TTFDIR_GD ]; then
+$CONVBIN $TTFDIR_DV/DroidSans.ttf $OUTDIR/droidsans.inc.pl
+$CONVBIN $TTFDIR_DV/DroidSerif.ttf $OUTDIR/droidserif.inc.pl
+$CONVBIN $TTFDIR_DV/DroidSansMono.ttf $OUTDIR/droidmono.inc.pl
+fi
+
+# other
+
+find $TTFDIR -iname code2000.ttf -exec \
+       $CONVBIN "{}" $OUTDIR/c2k.inc.pl \;
+
+find $TTFDIR -iname arial\*uni\*.ttf -exec \
+       $CONVBIN "{}" $OUTDIR/ariuni.inc.pl \;
+
+TTFDIR_GU=/usr/share/fonts/truetype/unifont/
+if [ -e $TTFDIR_GU ]; then
+$CONVBIN $TTFDIR_GU/unifont.ttf $OUTDIR/unifont.inc.pl
+fi
+
index 95b26a0..97a2026 100755 (executable)
@@ -19,10 +19,12 @@ my %FONTID = (
        'Times New Roman' => 'times',
        'DejaVu Sans'     => 'dv ss',
        'DejaVu Serif'    => 'dv serif',
+       'DejaVu Sans Mono'=> 'dv mono',
        'Code2000'        => 'c2k',
        'GNU Unifont'     => 'guf',
        'Droid Sans'      => 'droid',
        'Droid Serif'     => 'droid serif',
+       'Droid Sans Mono' => 'droid mono',
 );
 
 {
@@ -30,10 +32,14 @@ my %FONTID = (
                or die "Cannot open truetype in $ttfuri: $!";
 
        my $ttfname = ($ttfuri =~ m{([^/.]+) (?:[.]ttf)? \z}msx)[0];
+       my $ttfmeta = $ttf->{name}->read;
        my %meta = (
-               source   => $ttfuri,
-               name     => $ttf->{name}->read->find_name(4) || $ttfname,
-               version  => $ttf->{head}->{fontRevision},
+               source   => $ttfuri =~ m{(^/usr/.+ | [^/]+) \z}msx,
+               name     => $ttfmeta->find_name(4) || $ttfname,
+               revision => $ttf->{head}->{fontRevision},
+               version  => scalar $ttfmeta->find_name(5),
+               copyright=> scalar $ttfmeta->find_name(0),
+               license  => $ttfmeta->find_name(14) || undef,
                date     => (map {
                        $_ && eval {
                                require Time::Piece;