@ISA
=
qw(PDF::API2::Basic::TTF::Kern::Subtable)
;
sub
new
{
my
(
$class
) =
@_
;
my
(
$self
) = {};
$class
=
ref
(
$class
) ||
$class
;
bless
$self
,
$class
;
}
sub
read
{
my
(
$self
,
$fh
) =
@_
;
my
(
$dat
);
my
$stTableStart
=
$fh
->
tell
();
my
(
$classes
,
$states
,
$entries
) = AAT_read_state_table(
$fh
, 0);
foreach
(
@$entries
) {
my
$flags
=
$_
->{
'flags'
};
delete
$_
->{
'flags'
};
$_
->{
'push'
} = 1
if
$flags
& 0x8000;
$_
->{
'noAdvance'
} = 1
if
$flags
& 0x4000;
$flags
&= ~0xC000;
if
(
$flags
!= 0) {
my
$kernList
= [];
$fh
->
seek
(
$stTableStart
+
$flags
, IO::File::SEEK_SET);
while
(1) {
$fh
->
read
(
$dat
, 2);
my
$k
= TTF_Unpack(
"s"
,
$dat
);
push
@$kernList
, (
$k
& ~1);
last
if
(
$k
& 1) != 0;
}
$_
->{
'kernList'
} =
$kernList
;
}
}
$self
->{
'classes'
} =
$classes
;
$self
->{
'states'
} =
$states
;
$self
->{
'entries'
} =
$entries
;
$fh
->
seek
(
$stTableStart
- 8 +
$self
->{
'length'
}, IO::File::SEEK_SET);
$self
;
}
sub
out_sub
{
}
sub
print
{
}
sub
dumpXML
{
my
(
$self
,
$fh
) =
@_
;
$fh
->
printf
(
"<classes>\n"
);
$self
->dumpClasses(
$self
->{
'classes'
},
$fh
);
$fh
->
printf
(
"</classes>\n"
);
$fh
->
printf
(
"<states>\n"
);
my
$states
=
$self
->{
'states'
};
foreach
(0 ..
$#$states
) {
$fh
->
printf
(
"<state index=\"%s\">\n"
,
$_
);
my
$members
=
$states
->[
$_
];
foreach
(0 ..
$#$members
) {
my
$m
=
$members
->[
$_
];
$fh
->
printf
(
"<m index=\"%s\" nextState=\"%s\""
,
$_
,
$m
->{
'nextState'
});
$fh
->
printf
(
" push=\"1\""
)
if
$m
->{
'push'
};
$fh
->
printf
(
" noAdvance=\"1\""
)
if
$m
->{
'noAdvance'
};
if
(
exists
$m
->{
'kernList'
}) {
$fh
->
printf
(
">"
);
foreach
(@{
$m
->{
'kernList'
}}) {
$fh
->
printf
(
"<kern v=\"%s\"/>"
,
$_
);
}
$fh
->
printf
(
"</m>\n"
);
}
else
{
$fh
->
printf
(
"/>\n"
);
}
}
$fh
->
printf
(
"</state>\n"
);
}
$fh
->
printf
(
"</states>\n"
);
}
sub
type
{
return
'kernStateTable'
;
}
1;