use
vars
qw(@ISA %fields)
;
@ISA
=
qw(Font::TTF::Table)
;
sub
init
{
my
(
$k
,
$v
,
$c
);
while
(<Font::TTF::Maxp::DATA>)
{
(
$k
,
$v
,
$c
) = TTF_Init_Fields(
$_
,
$c
);
next
unless
defined
$k
&&
$k
ne
""
;
$fields
{
$k
} =
$v
;
}
}
sub
read
{
my
(
$self
) =
@_
;
my
(
$dat
);
$self
->SUPER::
read
or
return
$self
;
init
unless
defined
$fields
{
'numGlyphs'
};
$self
->{
' INFILE'
}->
read
(
$dat
, 4);
$self
->{
'version'
} = TTF_Unpack(
"f"
,
$dat
);
if
(
$self
->{
'version'
} == 0.5)
{
$self
->{
' INFILE'
}->
read
(
$dat
, 2);
$self
->{
'numGlyphs'
} =
unpack
(
"n"
,
$dat
);
}
else
{
$self
->{
' INFILE'
}->
read
(
$dat
, 28);
TTF_Read_Fields(
$self
,
$dat
, \
%fields
);
}
$self
;
}
sub
out
{
my
(
$self
,
$fh
) =
@_
;
return
$self
->SUPER::out(
$fh
)
unless
$self
->{
' read'
};
$fh
->
print
(TTF_Pack(
"f"
,
$self
->{
'version'
}));
if
(
$self
->{
'version'
} == 0.5)
{
$fh
->
print
(
pack
(
"n"
,
$self
->{
'numGlyphs'
})); }
else
{
$fh
->
print
(TTF_Out_Fields(
$self
, \
%fields
, 28)); }
$self
;
}
sub
update
{
my
(
$self
) =
@_
;
my
(
$i
,
$num
,
@n
,
@m
,
$j
);
my
(
@name
) =
qw(maxPoints maxContours maxCompositePoints maxCompositeContours
maxSizeOfInstructions maxComponentElements maxComponentDepth)
;
return
undef
if
(
$self
->{
'version'
} == 0.5);
return
undef
unless
(
defined
$self
->{
' PARENT'
}{
'loca'
} &&
$self
->{
' PARENT'
}{
'loca'
}{
' isDirty'
});
$num
=
$self
->{
'numGlyphs'
};
for
(
$i
= 0;
$i
<
$num
;
$i
++)
{
my
(
$g
) =
$self
->{
' PARENT'
}{
'loca'
}{
'glyphs'
}[
$i
] ||
next
;
@n
=
$g
->maxInfo(
$self
->{
' PARENT'
}{
'loca'
}{
'glyphs'
});
for
(
$j
= 0;
$j
<=
$#n
;
$j
++)
{
$m
[
$j
] =
$n
[
$j
]
if
$n
[
$j
] >
$m
[
$j
]; }
}
foreach
(
'prep'
,
'fpgm'
)
{
$m
[4] =
length
(
$self
->{
' PARENT'
}{
$_
}{
' dat'
})
if
(
length
(
$self
->{
' PARENT'
}{
$_
}{
' dat'
}) >
$m
[4]);
}
for
(
$j
= 0;
$j
<=
$#name
;
$j
++)
{
$self
->{
$name
[
$j
]} =
$m
[
$j
]; }
$self
->{
' isDirty'
} = 1;
$self
;
}
1;