The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl
# 1.1   RMH    06-Feb-00     Extract a raw TTF table to a file

use Font::TTF::Font;
require 'getopts.pl';
Getopts('at:');

unless (defined $ARGV[0])
{
    die <<'EOT';

    TTFExtractTable [-t table] [-a] infontfile [outdatafile]

Extracts the named table from a TrueType font file and writes the raw data
to a file. -t identifies which table to dump (default TSIV). -a specifies
to use "ascii" mode output (if needed on your platform) to convert line-endings
to PC-compatible crlf, etc. (do this only on "text" tables such as TSIV).

Example:  TTFExtractTable -tVTIS -a SomeFont.ttf out.txt

EOT
}

$opt_t = 'TSIV' unless defined $opt_t;

$f = Font::TTF::Font->open($ARGV[0]) or die "Could not open font '$ARGV[0]'\n";

exists $f->{$opt_t} or die "Cannot find table '$opt_t' in file '$ARGV[0]'. Available tables are: " . join(',', map {m/^ / ? () : $_} keys %$f) . ".\n";

$f->{$opt_t}->read_dat;

open(STDOUT, ">" . $ARGV[1]) or die "Couldn't open '$ARGV[1]' for writing" if defined $ARGV[1];

binmode(STDOUT) unless $opt_a;

print $f->{$opt_t}->{' dat'};

__END__
:endofperl