#! /usr/bin/perl use Font::TTF::Scripts::Volt; use Getopt::Std; use Pod::Usage; getopts('ht:'); unless (defined $ARGV[0] || defined $opt_h) { pod2usage(1); exit; } if ($opt_h) { pod2usage( -verbose => 2, -noperldoc => 1); exit; } $font = Font::TTF::Scripts::Volt->read_font($ARGV[0]) || die "Can't open font file $ARGV[0]"; if ($opt_t) { my ($inf) = IO::File->new("< $opt_t") || die "Can't open file $opt_t"; while (<$inf>) { $volt_text .= $_; } $inf->close; } elsif (defined $font->{'font'}{'TSIV'}) { $volt_text = $font->{'font'}{'TSIV'}->read->{' dat'}; } else { die "No VOLT table in the font, nothing to do"; } $name = $font->{'font'}{'name'}->read->find_name(4); $upem = $font->{'font'}{'head'}{'unitsPerEm'}; $font->{'font'}{'post'}->read; $res = $font->parse_volt($volt_text); print "\n\n\n"; for ($i = 0; $i < scalar @{$res->{'glyphs'}}; $i++) { $glyph = $res->{'glyphs'}[$i]; print " $b} @{$glyph->{'uni'}}; printf(" UID='%04X'", $unis[0]) if ($unis[0]); $psname = $font->{'font'}{'post'}{'VAL'}[$i]; print " PSName='$psname'" if ($psname); print " VoltId='$glyph->{name}'" if ($glyph->{'name'} && $glyph->{'name'} ne $psname); if ($glyph->{'points'} || $glyph->{'type'}) { print ">\n"; foreach $p (sort keys %{$glyph->{'anchors'}}) { $n = $p; $n =~ s/^MARK_/_/o; $numcomp = $#{$glyph->{'anchors'}{$p}}; for $c (0 .. $numcomp) { next unless defined $glyph->{'anchors'}{$p}[$c]; $n =~ s/(_\d+)?$/'_' . ($c+1)/e if $numcomp > 0; print " \n"; printf " \n", $glyph->{'anchors'}{$p}[$c]{'pos'}{'x'}[0], $glyph->{'anchors'}{$p}[$c]{'pos'}{'y'}[0]; print " \n"; } } print " \n" if ($glyph->{'type'}); print "\n"; } else { print "/>\n"; } } print "\n\n"; __END__ =head1 TITLE volt2ap - create attachment point database from VOLT source in a TrueType Font =head1 SYNOPSIS volt2ap [-t voltdat.txt] infile.ttf > outfile.xml =head1 OPTIONS -t file Volt source as text file to use instead of what is in the font -h Help =head1 DESCRIPTION volt2ap parses the volt source in a font to extract attachment point information which it prints to stdout in the form of an XML attachment point database. For more information on the file format see L =head1 SEE ALSO ttfbuilder, make_volt =cut