+++ /dev/null
-package Font::TTF::Ttc;
-
-=head1 NAME
-
-Font::TTF::Ttc - Truetype Collection class
-
-=head1 DESCRIPTION
-
-A TrueType collection is a collection of TrueType fonts in one file in which
-tables may be shared between different directories. In order to support this,
-the TTC introduces the concept of a table being shared by different TrueType
-fonts. This begs the question of what should happen to the ' PARENT' property
-of a particular table. It is made to point to the first directory object which
-refers to it. It is therefore up to the application to sort out any confusion.
-Confusion only occurs if shared tables require access to non-shared tables.
-This should not happen since the shared tables are dealing with glyph
-information only and the private tables are dealing with encoding and glyph
-identification. Thus the general direction is from identification to glyph and
-not the other way around (at least not without knowledge of the particular
-context).
-
-=head1 INSTANCE VARIABLES
-
-The following instance variables are preceded by a space
-
-=over 4
-
-=item fname (P)
-
-Filename for this TrueType Collection
-
-=item INFILE (P)
-
-The filehandle of this collection
-
-=back
-
-The following instance variable does not start with a space
-
-=over 4
-
-=item directs
-
-An array of directories (Font::TTF::Font objects) for each sub-font in the directory
-
-=back
-
-=head1 METHODS
-
-=cut
-
-use strict;
-use vars qw($VERSION);
-
-use IO::File;
-
-$VERSION = 0.0001;
-
-=head2 Font::TTF::Ttc->open($fname)
-
-Opens and reads the given filename as a TrueType Collection. Reading a collection
-involves reading each of the directories which go to make up the collection.
-
-=cut
-
-sub open
-{
- my ($class, $fname) = @_;
- my ($self) = {};
- my ($fh);
-
- unless (ref($fname))
- {
- $fh = IO::File->new($fname) or return undef;
- binmode $fh;
- } else
- { $fh = $fname; }
-
- bless $self, $class;
- $self->{' INFILE'} = $fh;
- $self->{' fname'} = $fname;
- $fh->seek(0, 0);
- $self->read;
-}
-
-
-=head2 $c->read
-
-Reads a Collection by reading all the directories in the collection
-
-=cut
-
-sub read
-{
- my ($self) = @_;
- my ($fh) = $self->{' INFILE'};
- my ($dat, $ttc, $ver, $num, $i, $loc);
-
- $fh->read($dat, 12);
- ($ttc, $ver, $num) = unpack("A4N2", $dat);
-
- return undef unless $ttc eq "ttcf";
- $fh->read($dat, $num << 2);
- for ($i = 0; $i < $num; $i++)
- {
- $loc = unpack("N", substr($dat, $i << 2, 4));
- $self->{'directs'}[$i] = Font::TTF::Font->new('INFILE' => $fh,
- 'PARENT' => $self,
- 'OFFSET' => $loc) || return undef;
- }
- for ($i = 0; $i < $num; $i++)
- { $self->{'directs'}[$i]->read; }
- $self;
-}
-
-
-=head2 $c->find($direct, $name, $check, $off, $len)
-
-Hunts around to see if a table with the given characteristics of name, checksum,
-offset and length has been associated with a directory earlier in the list.
-Actually on checks the offset since no two tables can share the same offset in
-a TrueType font, collection or otherwise.
-
-=cut
-
-sub find
-{
- my ($self, $direct, $name, $check, $off, $len) = @_;
- my ($d);
-
- foreach $d (@{$self->{'directs'}})
- {
- return undef if $d eq $direct;
- next unless defined $d->{$name};
- return $d->{$name} if ($d->{$name}{' OFFSET'} == $off);
- }
- undef; # wierd that the font passed is not in the list!
-}
-
-
-=head2 $c->DESTROY
-
-Closees any opened files by us
-
-=cut
-
-sub DESTROY
-{
- my ($self) = @_;
- close ($self->{' INFILE'});
- undef;
-}
-
-=head1 BUGS
-
-No known bugs, but then not ever executed!
-
-=head1 AUTHOR
-
-Martin Hosken Martin_Hosken@sil.org. See L<Font::TTF::Font> for copyright and
-licensing.
-
-=cut
-