|
Packit |
46375d |
#!/usr/bin/perl
|
|
Packit |
46375d |
# a coverage script
|
|
Packit |
46375d |
# depends on Unicode::UCD and Font::TTF
|
|
Packit |
46375d |
# by Martin Hosken
|
|
Packit |
46375d |
# small tweaks by Nicolas Spalinger
|
|
Packit |
46375d |
|
|
Packit |
46375d |
use Font::TTF::Font;
|
|
Packit |
46375d |
use Unicode::UCD qw(charblocks charblock charscripts charscript);
|
|
Packit |
46375d |
use Getopt::Std;
|
|
Packit |
46375d |
|
|
Packit |
46375d |
getopts('s');
|
|
Packit |
46375d |
|
|
Packit |
46375d |
my $blocks, $stats;
|
|
Packit |
46375d |
|
|
Packit |
46375d |
if ($opt_s)
|
|
Packit |
46375d |
{
|
|
Packit |
46375d |
$blocks = charscripts;
|
|
Packit |
46375d |
}
|
|
Packit |
46375d |
else
|
|
Packit |
46375d |
{
|
|
Packit |
46375d |
$blocks = charblocks;
|
|
Packit |
46375d |
}
|
|
Packit |
46375d |
|
|
Packit |
46375d |
foreach (keys %{$blocks})
|
|
Packit |
46375d |
{
|
|
Packit |
46375d |
foreach $r (@{$blocks->{$_}})
|
|
Packit |
46375d |
{ $stats->{$_}[0] += ($r->[1] - $r->[0]) + 1; }
|
|
Packit |
46375d |
}
|
|
Packit |
46375d |
|
|
Packit |
46375d |
$f = Font::TTF::Font->open($ARGV[0]) || die "Can't open font $ARGV[0]";
|
|
Packit |
46375d |
$cmap = $f->{'cmap'}->read->find_ms->{'val'};
|
|
Packit |
46375d |
|
|
Packit |
46375d |
foreach $c (keys %{$cmap})
|
|
Packit |
46375d |
{
|
|
Packit |
46375d |
$r = $opt_s ? charscript($c) : charblock($c);
|
|
Packit |
46375d |
$stats->{$r}[1]++;
|
|
Packit |
46375d |
}
|
|
Packit |
46375d |
|
|
Packit |
46375d |
foreach (sort keys %{$stats})
|
|
Packit |
46375d |
{
|
|
Packit |
46375d |
next unless ($_ && $stats->{$_}[1]);
|
|
Packit |
46375d |
printf "%s: %d/%d (%.2f%%)\n", $_, $stats->{$_}[1], $stats->{$_}[0], $stats->{$_}[1] / $stats->{$_}[0] * 100.;
|
|
Packit |
46375d |
}
|
|
Packit |
46375d |
|