package Font::TTF::Kern::ClassArray; =head1 NAME Font::TTF::Kern::ClassArray - ClassArray Kern Subtable for AAT =head1 METHODS =cut use strict; use vars qw(@ISA); use Font::TTF::Utils; use Font::TTF::AATutils; use IO::File; @ISA = qw(Font::TTF::Kern::Subtable); sub new { my ($class) = @_; my ($self) = {}; $class = ref($class) || $class; bless $self, $class; } =head2 $t->read Reads the table into memory =cut sub read { my ($self, $fh) = @_; my $subtableStart = $fh->tell() - 8; my $dat; $fh->read($dat, 8); my ($rowWidth, $leftClassTable, $rightClassTable, $array) = unpack("nnnn", $dat); $fh->seek($subtableStart + $leftClassTable, IO::File::SEEK_SET); $fh->read($dat, 4); my ($firstGlyph, $nGlyphs) = unpack("nn", $dat); $fh->read($dat, $nGlyphs * 2); my $leftClasses = []; foreach (TTF_Unpack("S*", $dat)) { push @{$leftClasses->[($_ - $array) / $rowWidth]}, $firstGlyph++; } $fh->seek($subtableStart + $rightClassTable, IO::File::SEEK_SET); $fh->read($dat, 4); ($firstGlyph, $nGlyphs) = unpack("nn", $dat); $fh->read($dat, $nGlyphs * 2); my $rightClasses = []; foreach (TTF_Unpack("S*", $dat)) { push @{$rightClasses->[$_ / 2]}, $firstGlyph++; } $fh->seek($subtableStart + $array, IO::File::SEEK_SET); $fh->read($dat, $self->{'length'} - $array); my $offset = 0; my $kernArray = []; while ($offset < length($dat)) { push @$kernArray, [ TTF_Unpack("s*", substr($dat, $offset, $rowWidth)) ]; $offset += $rowWidth; } $self->{'leftClasses'} = $leftClasses; $self->{'rightClasses'} = $rightClasses; $self->{'kernArray'} = $kernArray; $fh->seek($subtableStart + $self->{'length'}, IO::File::SEEK_SET); $self; } =head2 $t->out_sub($fh) Writes the table to a file =cut sub out_sub { } =head2 $t->print($fh) Prints a human-readable representation of the table =cut sub print { my ($self, $fh) = @_; my $post = $self->post(); $fh = 'STDOUT' unless defined $fh; } sub dumpXML { my ($self, $fh) = @_; my $post = $self->post(); $fh = 'STDOUT' unless defined $fh; $fh->printf("\n"); $self->dumpClasses($self->{'leftClasses'}, $fh); $fh->printf("\n"); $fh->printf("\n"); $self->dumpClasses($self->{'rightClasses'}, $fh); $fh->printf("\n"); $fh->printf("\n"); my $kernArray = $self->{'kernArray'}; foreach (0 .. $#$kernArray) { $fh->printf("\n", $_); my $row = $kernArray->[$_]; foreach (0 .. $#$row) { $fh->printf("\n", $_, $row->[$_]); } $fh->printf("\n"); } $fh->printf("\n"); } sub type { return 'kernClassArray'; } 1; =head1 BUGS None known =head1 AUTHOR Jonathan Kew L. See L for copyright and licensing. =cut