#!/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 () { 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);