#!@PERL@ -w # -*-perl-*- =head1 TODO rename me! Ugh . Perl sux. Anybody for Python? =cut $mf_to_table_version = 0.2; use Getopt::Long; sub last_conversion { my @v = &versions; return pop @v; } sub identify { print STDERR "This is mf-to-table " . $mf_to_table_version . "\n"; } sub usage { print STDERR "Usage: mf-to-table [options] LOG..\n" . "Generate mozarella metrics table from preparated metafont log\n\n" . "Options:\n" . " -h, --help print this help\n" . " -l, --ly=FILE name output table\n" . " -t, --tex=FILE name output tex chardefs\n" } sub make_table { my $line; my $indent = 0; my $lineno=0; while ($line = ) { $lineno++; if ($line =~ /^@@/) { $line =~ s/^@@(.*)@@/$1/; chop ($line); my @fields = split (/:/,$line); my $label = $fields [0]; my $name = $fields [1]; print OUTLY "\t" x $indent; if ($label eq "font") { print OUTLY "% $name=\\symboltables {\n"; print OUTTEX "% $name\n"; $indent++; } elsif ($label eq "group") { print OUTLY "\"$name\" = \\table {\n"; print OUTTEX "% $name\n"; $indent++; } elsif ($label eq "puorg") { print OUTLY "}\n"; print OUTTEX "\n"; $indent--; } elsif ($label eq "tnof") { print OUTLY "% } % $name\n"; $indent--; } elsif ($label eq "char") { my $c = $fields [2]; my $w = $fields [3]; my $h = $fields [4]; my $d = $fields [5]; my $b = $fields [6]; my $id = $fields [7]; my $texstr = $fields [8]; print OUTLY sprintf( "\"%s\"\t\"\\%s\"\t%.2f\\pt\t%.2f\\pt\t%.2f\\pt\t%.2f\\pt\n", $id, $texstr, -$b, $w, $h, -$d ); # remove % from generic chars, and save start charcode my $defstr = "\\fetdef"; if ($texstr =~ /{%/) { $texstr =~ s/{%.*//; $texstr .= "start"; $defstr = "\\def" } print OUTTEX sprintf( "%s\\%s{%d}\n", $defstr, $texstr, $c); } else { print STDERR "mf-to-table: $lineno: unknown label: \`$label\'\n"; } } } } sub set_files { if ($ARGV [0]) { $infile = $ARGV[0]; } if (!(-f $infile) && !($infile =~ /\.log$/s )) { $infile .= ".log"; } if (defined($opt_ly)) { $lyfile = $opt_ly; } else { $lyfile = $infile; $lyfile =~ s/\.log$/.ly/; } if (defined($opt_tex)) { $texfile = $opt_tex; } else { $texfile = $infile; $texfile =~ s/\.log$/.tex/; } print STDERR "Input ", (($infile eq "-") ?"STDIN" : $infile), " .. \n"; } sub do_one_arg { set_files; die "can't open \`$infile\'" unless open IN,$infile ; die "can't open \`$lyfile\'" unless open OUTLY, ">$lyfile"; print OUTLY "% generated at " . localtime() . " from $infile\n"; print OUTLY "% changes will be lost\n\n"; die "can't open \`$texfile\'" unless open OUTTEX, ">$texfile"; print OUTTEX "% generated at " . localtime() . " from $infile\n"; print OUTTEX "% changes will be lost\n\n"; make_table; close IN; close OUTLY; close OUTTEX; } ## "main" identify; #GetOptions ("help", "output=s", "from=i", "to=i", "minor=i", "edit", "show-rules"); GetOptions ("help", "ly=s", "tex=s"); if ($opt_help) { usage(); $opt_help = 0; # to extinguish typo check. exit 0; } local ($infile,$lyfile,$texfile); my $processed_one=0; while (defined($ARGV[0])) { do_one_arg; shift @ARGV; $processed_one = 1; } do_one_arg unless ($processed_one);