1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
package Font::TTF::Features::Cvar;
=head1 NAME
Font::TTF::Features::Size - Class for Character Variants Feature Parameters
=head1 DESCRIPTION
Handles the Feature Parameters valus forCharacter Variants features
=head1 INSTANCE VARIABLES
=over 4
=item INFILE
The read file handle
=item OFFSET
Location of the file in the input file
=item Format
Table format - set to 0
=item UINameID
The 'name' table name ID that specifies a string (or strings, for multiple
languages) for a user-interface label for this feature
=item TooltipNameID
The 'name' table name ID for tooltip text for the feature
=item SampleTextNameID
The 'name' table name ID for sample text to illustrate the feature
=item NumNamedParms
The number of named parameters
=item FirstNamedParmID
The 'name' table name ID for the first named parameter
=item Characters
An array holding the unicode values of the characters for which the feature
provides glyph variants
=back
=head1 METHODS
=cut
use Font::TTF::Utils;
use strict;
=head2 $t->read
Reads the Feature Params
=cut
sub read
{
my ($self) = @_;
my ($fh) = $self->{' INFILE'};
my ($off) = $self->{' OFFSET'};
my ($dat, $i, $charcount);
$fh->seek($off, 0);
$fh->read($dat, 14);
( $self->{'Format'}
,$self->{'UINameID'}
,$self->{'TooltipNameID'}
,$self->{'SampleTextNameID'}
,$self->{'NumNamedParm'}
,$self->{'FirstNamedParmID'}
,$charcount ) = TTF_Unpack("S*", $dat);
# Now read the list of characters. Since these are 24bit insigned integers, need to
# read add a zero value byte to the front then treat as a 32bit integer
foreach $i (0 .. $charcount-1)
{
$fh->read($dat,3);
$dat = pack("C","0") . $dat;
$self->{'Characters'}->[$i] = TTF_Unpack("L",$dat);
}
return $self;
}
=head2 $t->out($fh)
Writes the FeatureParams table to the output
=cut
sub out
{
my ($self, $fh) = @_;
my $chars = $self->{'Characters'};
my $charcount = 0;
if ($chars) { $charcount = scalar @{$chars} }
my ($dat, $i);
$fh->print(TTF_Pack("S*"
,$self->{'Format'}
,$self->{'UINameID'}
,$self->{'TooltipNameID'}
,$self->{'SampleTextNameID'}
,$self->{'NumNamedParms'}
,$self->{'FirstNamedParmID'}
,$charcount ));
foreach $i ( 0 .. $charcount-1)
{
$dat = substr ( TTF_Pack("L",$chars->[$i]) ,1,3); # Pack as long then remove first byte to get UINT22
$fh->print($dat);
}
$self;
}
=head2 Font::TTF::Features::Sset->new()
Creates a new FeatureParams object.
Values for INFILE and OFFSET canbe passed as parameters
=cut
sub new
{
my ($class,%parms) = @_;
my ($self) = {};
my ($p);
foreach $p (keys %parms)
{ $self->{" $p"} = $parms{$p}; }
bless $self, $class;
}
1;
=head1 AUTHOR
David Raymond L<David_Raymond@sil.org>.
=head1 LICENSING
Copyright (c) 1998-2013, SIL International (http://www.sil.org)
This module is released under the terms of the Artistic License 2.0.
For details, see the full text of the license in the file LICENSE.
=cut
|