File: Cvar.pm

package info (click to toggle)
libfont-ttf-perl 1.04-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 1,128 kB
  • ctags: 486
  • sloc: perl: 17,382; makefile: 10
file content (164 lines) | stat: -rw-r--r-- 2,996 bytes parent folder | download
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