unicode: drop u- prefix from script classes
[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         'DejaVu Sans Mono'=> 'dv mono',
23         'Code2000'        => 'c2k',
24         'GNU Unifont'     => 'guf',
25         'Droid Sans'      => 'droid',
26         'Droid Serif'     => 'droid serif',
27         'Droid Sans Mono' => 'droid mono',
28 );
29
30 {
31         my $ttf = Font::TTF::Font->open($ttfuri)
32                 or die "Cannot open truetype in $ttfuri: $!";
33
34         my $ttfname = ($ttfuri =~ m{([^/.]+) (?:[.]ttf)? \z}msx)[0];
35         my $ttfmeta = $ttf->{name}->read;
36         my %meta = (
37                 source   => $ttfuri =~ m{(^/usr/.+ | [^/]+) \z}msx,
38                 name     => $ttfmeta->find_name(4) || $ttfname,
39                 revision => $ttf->{head}->{fontRevision},
40                 version  => scalar $ttfmeta->find_name(5),
41                 copyright=> scalar $ttfmeta->find_name(0),
42                 license  => $ttfmeta->find_name(14) || undef,
43                 date     => (map {
44                         $_ && eval {
45                                 require Time::Piece;
46                                 Time::Piece->new($_)->datetime;
47                         }
48                 } $ttf->{head}->getdate),
49         );
50         $meta{id} = $FONTID{ $meta{name} } // lc $ttfname;
51         say pp(\%meta), ',';
52
53         my $support = $ttf->{cmap}->find_ms->{val};
54         warn scalar keys %$support, " characters read from $ttfname\n";
55         say pp(sort { $a <=> $b } keys %$support);
56 }
57
58 __END__
59
60 =head1 NAME
61
62 convert-ttf.pl - Writes unicode characters present in TrueType font
63
64 =head1 SYNOPSIS
65
66     convert-ttf <font.ttf> [<output.inc.pl>]
67
68 =head1 AUTHOR
69
70 Mischa POSLAWSKY <perl@shiar.org>
71
72 =head1 LICENSE
73
74 Licensed under the GNU Affero General Public License version 3.
75