font: include math/logic by default
[sheet.git] / tools / convert-ttf.pl
1 #!/usr/bin/env perl
2 use 5.010;
3 use strict;
4 use warnings;
5
6 use Data::Dump 'pp';
7 use Font::TTF::Font;
8
9 my ($ttfuri, $outfile) = @ARGV;
10 $ttfuri or die "usage error\n";
11
12 for ($outfile || ()) {
13         !-e $_ or die "Output file $outfile already exists\n";
14         open my $output, '>', $_ or die "Cannot write to $outfile: $!\n";
15         select $output;
16 }
17
18 my %FONTID = (
19         'Times New Roman' => 'times',
20         'DejaVu Sans'     => 'dv ss',
21         'DejaVu Serif'    => 'dv serif',
22         'Code2000'        => 'c2k',
23         'GNU Unifont'     => 'guf',
24         'Droid Sans'      => 'droid',
25         'Droid Serif'     => 'droid serif',
26 );
27
28 {
29         my $ttf = Font::TTF::Font->open($ttfuri)
30                 or die "Cannot open truetype in $ttfuri: $!";
31
32         my $ttfname = ($ttfuri =~ m{([^/.]+) (?:[.]ttf)? \z}msx)[0];
33         my %meta = (
34                 source   => $ttfuri,
35                 name     => $ttf->{name}->read->find_name(4) || $ttfname,
36                 version  => $ttf->{head}->{fontRevision},
37                 date     => (map {
38                         $_ && eval {
39                                 require Time::Piece;
40                                 Time::Piece->new($_)->datetime;
41                         }
42                 } $ttf->{head}->getdate),
43         );
44         $meta{id} = $FONTID{ $meta{name} } // lc $ttfname;
45         say pp(\%meta), ',';
46
47         my $support = $ttf->{cmap}->find_ms->{val};
48         warn scalar keys %$support, " characters read from $ttfname\n";
49         say pp(sort { $a <=> $b } keys %$support);
50 }
51
52 __END__
53
54 =head1 NAME
55
56 convert-ttf.pl - Writes unicode characters present in TrueType font
57
58 =head1 SYNOPSIS
59
60     convert-ttf <font.ttf> [<output.inc.pl>]
61
62 =head1 AUTHOR
63
64 Mischa POSLAWSKY <perl@shiar.org>
65
66 =head1 LICENSE
67
68 Licensed under the GNU Affero General Public License version 3.
69