Dancer-Plugin-FontSubset
view release on metacpan or search on metacpan
lib/Dancer/Plugin/FontSubset.pm view on Meta::CPAN
my (@nrule);
foreach $j (0 .. $#{$sub->{'RULES'}[$i]})
{
if (!defined $c2vals->[$j])
{ delete $sub->{'RULES'}[$i][$j]; }
else
{ $nrule[$c2vals->[$j]] = $sub->{'RULES'}[$i][$j]; }
}
if (@nrule)
{ $nrules->[$c1vals->[$i]] = [grep {$_} @nrule]; }
}
}
if (@{$nrules})
{ $sub->{'RULES'} = $nrules; }
else
{ return 0; }
}
elsif ($type >= 4 && $type <= 6)
{ return $self->subset_cover($subsetter, $sub->{'MATCH'}[0], $sub->{'MARKS'}) ? 1 : 0; }
elsif ($type >=7 && $type <= 8)
{ return $self->subset_context($subsetter, $sub, $type - 2, $lkvec); }
return 1;
}
package
Font::TTF::GDEF;
sub subset
{
my ($self, $subsetter) = @_;
return unless ($self->SUPER::subset($subsetter));
if (defined $self->{'GLYPH'})
{ delete $self->{'GLYPH'} unless (Font::TTF::Ttopen->subset_class($subsetter, $self->{'GLYPH'}, 1)); }
if (defined $self->{'ATTACH'})
{ delete $self->{'ATTACH'} unless (Font::TTF::Ttopen->subset_cover($subsetter, $self->{'ATTACH'}{'COVERAGE'}, $self->{'ATTACH'}{'POINTS'})); }
if (defined $self->{'LIG'})
{ delete $self->{'LIG'} unless (Font::TTF::Ttopen->subset_cover($subsetter, $self->{'LIG'}{'COVERAGE'}, $self->{'LIG'}{'POINTS'})); }
if (defined $self->{'MARKS'})
{ delete $self->{'MARKS'} unless (Font::TTF::Ttopen->subset_cover($subsetter, $self->{'MARKS'}, undef)); }
}
package
Font::TTF::Cmap;
sub subset
{
my ($self, $subsetter) = @_;
return unless ($self->SUPER::subset($subsetter));
foreach my $i (0 .. $#{$self->{'Tables'}})
{
my ($t) = $self->{'Tables'}[$i]{'val'};
foreach my $k (keys %{$t})
{
if ($subsetter->keep_glyph($t->{$k}))
{ $t->{$k} = $subsetter->map_glyph($t->{$k}); }
else
{ delete $t->{$k}; }
}
if ($self->is_unicode($i))
{
foreach my $k (keys %{$subsetter->{'remaps'}})
{ $t->{$k} = $subsetter->map_glyph($subsetter->{'remaps'}{$k}); }
}
}
}
package
Font::TTF::Post;
no warnings;
sub subset
{
my ($self, $subsetter) = @_;
my ($res) = [];
return unless ($self->SUPER::subset($subsetter));
# need to rewrite for real glyph remapping
foreach my $i (0 .. @{$self->{'VAL'}})
{ $res->[$subsetter->map_glyph($i)] = $subsetter->keep_glyph($i) ? $self->{'VAL'}[$i] : ".notdef"; }
$self->{'VAL'} = $res;
}
package
Font::TTF::Hmtx;
sub subset
{
my ($self, $subsetter) = @_;
my ($adv) = [];
my ($lsb) = [];
return unless ($self->SUPER::subset($subsetter));
for (my $i = 0; $i < @{$self->{'advance'}}; $i++)
{
if ($subsetter->keep_glyph($i))
{
my ($g) = $subsetter->map_glyph($i);
$adv->[$g] = $self->{'advance'}[$i];
$lsb->[$g] = $self->{'lsb'}[$i];
}
}
$self->{'advance'} = $adv;
$self->{'lsb'} = $lsb;
}
package
Font::TTF::LTSH;
sub subset
{
my ($self, $subsetter) = @_;
my ($res) = [];
return unless ($self->SUPER::subset($subsetter));
for (my $i = 0; $i < @{$self->{'glyphs'}}; $i++)
{
if ($subsetter->keep_glyph($i))
{ $res->[$subsetter->map_glyph($i)] = $self->{'glyphs'}[$i]; }
( run in 2.162 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )