showdf 1.1 KB
#!/usr/bin/perl

if (@ARGV != 3) {
	print STDERR "Use:\n";
	print STDERR "  showdf <showg-script> <old-file> <new-file>\n";
	print STDERR "to create a showg diagram of glyphs differing in two files\n";
	exit 1;
}

$cmd = shift @ARGV;
$oldf = shift @ARGV;
$newf = shift @ARGV;

open(O, "<$oldf") or die "Unable to open '$oldf'\n";
open(N, "<$newf") or die "Unable to open '$newf'\n";

while(<O>) {
	last if(/CharStrings/);
}
while(<N>) {
	last if(/CharStrings/);
}

undef @symlist;
$sym = '';
$inlist = 0;
$nstop = 0;

while($so = <O>) {
	if($so =~ m|^(/\S+)\s+\{|) {
		$sym = $1;
		$inlist = 0;
		#printf STDERR "found sym $sym\n";
		if (!$nstop || $sn !~ m|^$sym\s+\{|) {
			while($sn = <N>) {
				#print STDERR "+$sn";
				last if($sn =~ m|^${sym}\s+\{|);
			}
		}
		$nstop = 0;
	} elsif(!$nstop) {
		$sn = <N>;
		#print STDERR "<$so>$sn\n";
		if($so ne $sn) {
			if(!$inlist) {
				$inlist = 1;
				push(@symlist, $sym);
			}
			if($sn =~ m|^(/\S+)\s+\{|) {
				$nstop = 1;
				#printf STDERR "stop at $1\n";
			}
		}
	}
}
unshift(@symlist, $cmd, '-c', $oldf, $newf);
#printf("%s\n", join(' ', @symlist));
exec @symlist;