mirror of
https://github.com/nicoverbruggen/gnu-freefont.git
synced 2025-08-06 17:20:11 +02:00
118 lines
2.6 KiB
Perl
Executable File
118 lines
2.6 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
=pod
|
|
|
|
=head1 KerningNumerals.pl
|
|
|
|
Move kerning information from ASCII numerals (U+0030...) to characters in
|
|
the Adobe corporate use area (U+F6xx).
|
|
|
|
By: Primož Peterlin, 2003
|
|
|
|
$Id: KerningNumerals.pl,v 1.2 2003-05-15 12:04:41 peterlin Exp $
|
|
|
|
=cut
|
|
|
|
sub numerically { $a <=> $b; }
|
|
|
|
if ($#ARGV != 0) {
|
|
print $#ARGV;
|
|
die "Usage: $0 file.sfd\n";
|
|
}
|
|
|
|
open(INFILE, $ARGV[0]) || die "Failed to open file: $ARGV[0]\n";
|
|
|
|
while (<INFILE>) {
|
|
if (/^Kerns:/) {
|
|
# Old-style kerning information
|
|
chomp;
|
|
# Cut off the first seven characters ("Kerns: ")
|
|
substr($_,0,7) = "";
|
|
@values = split;
|
|
# Construct the hash $kern{$code}
|
|
for ($i = 0; $i <= $#values; $i += 2) {
|
|
$code = $values[$i];
|
|
# Recode ASCII numerals to Adobe corporate use values
|
|
if ($code == 48) {
|
|
$code = 63033;
|
|
} elsif ($code == 49) {
|
|
$code = 63196;
|
|
} elsif ($code == 50) {
|
|
$code = 63034;
|
|
} elsif ($code == 51) {
|
|
$code = 63035;
|
|
} elsif ($code == 52) {
|
|
$code = 63036;
|
|
} elsif ($code == 53) {
|
|
$code = 63037;
|
|
} elsif ($code == 54) {
|
|
$code = 63038;
|
|
} elsif ($code == 55) {
|
|
$code = 63039;
|
|
} elsif ($code == 56) {
|
|
$code = 63040;
|
|
} elsif ($code == 57) {
|
|
$code = 63041;
|
|
}
|
|
$kern{$code} = $values[$i+1];
|
|
}
|
|
print "Kerns:";
|
|
foreach $code (sort numerically keys(%kern)) {
|
|
print " ",$code," ",$kern{$code};
|
|
}
|
|
print "\n";
|
|
# Clean-up
|
|
foreach $code (keys(%kern)) {
|
|
delete $kern{$code};
|
|
}
|
|
} elsif (/^KernsSLIF:/) {
|
|
# New-style kerning information
|
|
chomp;
|
|
# Cut off the first eleven characters ("KernsSLIF: ")
|
|
substr($_,0,11) = "";
|
|
@values = split;
|
|
# Construct the hash $kern{$code}
|
|
for ($i = 0; $i <= $#values; $i += 4) {
|
|
$code = $values[$i];
|
|
# Recode ASCII numerals to Adobe corporate use values
|
|
if ($code == 48) {
|
|
$code = 63033;
|
|
} elsif ($code == 49) {
|
|
$code = 63196;
|
|
} elsif ($code == 50) {
|
|
$code = 63034;
|
|
} elsif ($code == 51) {
|
|
$code = 63035;
|
|
} elsif ($code == 52) {
|
|
$code = 63036;
|
|
} elsif ($code == 53) {
|
|
$code = 63037;
|
|
} elsif ($code == 54) {
|
|
$code = 63038;
|
|
} elsif ($code == 55) {
|
|
$code = 63039;
|
|
} elsif ($code == 56) {
|
|
$code = 63040;
|
|
} elsif ($code == 57) {
|
|
$code = 63041;
|
|
}
|
|
$kern{$code} = $values[$i+1];
|
|
$unx{$code} = $values[$i+2];
|
|
$uny{$code} = $values[$i+3];
|
|
}
|
|
print "KernsSLIF:";
|
|
foreach $code (sort numerically keys(%kern)) {
|
|
print " ",$code," ",$kern{$code}," ",$unx{$code}," ",$uny{$code};
|
|
}
|
|
print "\n";
|
|
# Clean-up
|
|
foreach $code (keys(%kern)) {
|
|
delete $kern{$code};
|
|
}
|
|
} else {
|
|
# All other lines
|
|
print;
|
|
}
|
|
}
|
|
|
|
close(INFILE);
|