Blob Blame History Raw
#!/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);