Font-TTF-Scripts
view release on metacpan or search on metacpan
Examples/ttfwidth.pl view on Meta::CPAN
{
print "font mapping Microsoft id = $c_id, encoding = $c_enc\n";
print " (encoding => " . ($c_enc == 1 ? "UGL coding"
: "unknown or symbol") . ")\n";
}
if ($c_enc == 1)
{
# Microsoft UGL coding (8-bit to unicode mapping table)
(@c_enc) = (32 .. 126, 0, 0, 0, 0x201a, 0x192, 0x201e, 0x2026, 0x2020,
0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0, 0, 0,
0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc,
0x2122, 0x0161, 0x203a, 0x0153, 0, 0, 0x0178,
160 .. 255);
}
# print it all out as comma seperated variables or standard format
if (!defined $opt_s)
{
# print OUTFILE "\"Em box\",\"$h_em\"\n";
if (!defined $opt_u)
{
print OUTFILE "Code, Char, ";
}
printf OUTFILE "%s, " x 8 . "%s\n",
"Unicode", "Glyph", "AdvWidth", "LSdBearing",
"Xmin", "Xmax", "Ymin", "Ymax", "XCentre";
}
$big = 512;
if (defined $opt_u && $m_num > $big)
{
$low = 0; $c_count = $big;
while ($c_count >= $big)
{
&getdata;
&printdata;
undef @c_uni;
undef @l_offsets;
undef @h_adw;
undef @h_lsb;
undef @g_xmin;
undef @g_xmax;
undef @g_ymin;
undef @g_ymax;
undef @map;
}
}
else
{
$low = -1;
&getdata;
&printdata;
}
close(OUTFILE);
close(INFILE);
sub printdata
{
for ($i = (defined $opt_u ? $[ : 32); $i <= (defined $opt_u ? $#c_uni : 255);
$i++)
{
if (defined $opt_u)
{
next if ($c_uni[$i] == 0);
$j = $map[$i];
}
else
{
$j = ($c_enc == 1) ? $c_map[$c_enc[$i - 32]] : $c_map[$i];
next if ($j == 0);
}
$o_cnt = $h_lsb[$j] + ($g_xmax[$j] - $g_xmin[$j]) / 2;
$o_centre = $h_adw[$j] - $o_cnt;
$o_centre = -$o_centre if ($o_cnt < 0);
if (defined $opt_s)
{
if (!defined $opt_u)
{
printf OUTFILE "\\code %d\n\\char %c\n\\uni 0x%04x\n\\glyph %d\n"
. "\\adw %d\n\\lsb %d\n",
$i, $i, ($c_enc == 1) ? $c_enc[$i] : $i + 0xf000, $i,
$h_adw[$j], $h_lsb[$j];
}
else
{
printf OUTFILE "\\code 0x%04x\n\\glyph %d\n\\adw %d\n\\lsb %d \n",
$c_uni[$i], $i, $h_adw[$j], $h_lsb[$j];
}
printf OUTFILE "\\xmin %d\n\\xmax %d\n\\ymin %d\n\\ymax %d\n\\xcent %d\n\n",
$g_xmin[$j], $g_xmax[$j], $g_ymin[$j], $g_ymax[$j], $o_centre;
}
else
{
if (!defined $opt_u)
{
if ($i == 34)
{ $o_s = "\"" x 4; }
elsif ($i == 44)
{ $o_s = "\",\""; }
else
{ $o_s = sprintf("%c", $i); }
printf OUTFILE "%d,%s,0x%04X,%d,",
$i, $o_s, ($c_enc == 1) ? $c_enc[$i - 32] : $i + 0xf000, $j;
}
else
{
printf OUTFILE "0x%04X,%d,", $c_uni[$i], $i;
}
printf OUTFILE "%d,%d,%d,%d,%d,%d,%d\n",
$h_adw[$j], $h_lsb[$j], $g_xmin[$j],
$g_xmax[$j], $g_ymin[$j], $g_ymax[$j], $o_centre;
}
}
}
sub getdata
{
seek(INFILE, $dir{"cmap"} + $c_offset, 0);
read(INFILE, $c_head, 6) == 6 || die "reading cmap table header";
( run in 0.864 second using v1.01-cache-2.11-cpan-5b529ec07f3 )