]> git.donarmstrong.com Git - lilypond.git/blob - bin/mf-to-table.in
patch::: 0.1.17.jcn2: biems
[lilypond.git] / bin / mf-to-table.in
1 #!@PERL@ -w
2 # -*-perl-*-
3
4 =head1 TODO
5
6 rename me!
7
8 Ugh . Perl sux. Anybody for Python?
9     
10 =cut    
11
12 $mf_to_table_version = 0.2;
13
14 use Getopt::Long;
15
16 sub last_conversion
17 {
18     my @v = &versions;
19     return pop @v;
20 }
21 sub identify
22 {
23     
24     print STDERR "This is mf-to-table " . $mf_to_table_version . "\n";
25 }
26   
27 sub usage
28 {
29     print STDERR "Usage: mf-to-table [options] LOG..\n"
30     . "Generate mozarella metrics table from preparated metafont log\n\n"
31     . "Options:\n"
32     . "  -h, --help             print this help\n"
33     . "  -l, --ly=FILE          name output table\n"
34     . "  -t, --tex=FILE         name output tex chardefs\n"
35 }
36
37 sub make_table
38 {
39     my $line;
40     my $indent = 0;
41     my $lineno=0;
42     while ($line = <IN>) {
43         $lineno++;
44         if ($line =~ /^@@/) {
45             $line =~ s/^@@(.*)@@/$1/;
46             chop ($line);
47             my @fields = split (/:/,$line);
48             my $label = $fields [0];
49             my $name = $fields [1];
50             print OUTLY "\t" x $indent;
51             if ($label eq "font") {
52                 print OUTLY "% $name=\\symboltables {\n";
53                 print OUTTEX "% $name\n";
54                 $indent++;
55             } elsif ($label eq "group") {
56                 print OUTLY "\"$name\" = \\table {\n";
57                 print OUTTEX "% $name\n";
58                 $indent++;
59             } elsif ($label eq "puorg") {
60                 print OUTLY "}\n";
61                 print OUTTEX "\n";
62                 $indent--;
63             } elsif ($label eq "tnof") {
64                 print OUTLY "%  } % $name\n";
65                 $indent--;
66             } elsif ($label eq "char") {
67                 my $c = $fields [2];
68                 my $w = $fields [3];
69                 my $h = $fields [4];
70                 my $d = $fields [5];
71                 my $b = $fields [6];
72                 my $id = $fields [7];
73                 my $texstr = $fields [8];
74                 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 );
75                 # remove % from generic chars, and save start charcode
76                 my $defstr = "\\fetdef";
77                 if ($texstr =~ /{%/) {
78                         $texstr =~ s/{%.*//;
79                         $texstr .= "start";
80                         $defstr = "\\def"
81                 }
82                 print OUTTEX sprintf( "%s\\%s{%d}\n", $defstr, $texstr, $c);
83             } else {
84                 print STDERR "mf-to-table: $lineno: unknown label: \`$label\'\n";
85             }
86         }
87     }
88 }
89       
90 sub  set_files 
91 {
92     if ($ARGV [0])  {
93         $infile = $ARGV[0];
94     } 
95     if (!(-f $infile) && !($infile =~ /\.log$/s )) {
96         $infile .= ".log";
97     }
98
99     if (defined($opt_ly)) {
100         $lyfile = $opt_ly;
101     }
102     else {
103         $lyfile = $infile;
104         $lyfile =~ s/\.log$/.ly/;
105     }
106     if (defined($opt_tex)) {
107         $texfile = $opt_tex;
108     }
109     else {
110         $texfile = $infile;
111         $texfile =~ s/\.log$/.tex/;
112     }
113
114     print STDERR "Input ", (($infile eq "-") ?"STDIN" : $infile), " .. \n";
115 }
116
117 sub do_one_arg
118 {
119     set_files;
120
121     die "can't open \`$infile\'" unless open IN,$infile ;
122
123     die "can't open \`$lyfile\'" unless open OUTLY, ">$lyfile";
124     print OUTLY "% generated at " . localtime() . " from $infile\n";
125     print OUTLY "% changes will be lost\n\n";
126
127     die "can't open \`$texfile\'" unless open OUTTEX, ">$texfile";
128     print OUTTEX "% generated at " . localtime() . " from $infile\n";
129     print OUTTEX "% changes will be lost\n\n";
130     
131     make_table;
132
133     close IN;
134     close OUTLY;
135     close OUTTEX;
136 }
137
138 ## "main"
139
140 identify;
141
142 #GetOptions ("help", "output=s", "from=i", "to=i", "minor=i", "edit", "show-rules");
143 GetOptions ("help", "ly=s", "tex=s");
144
145 if ($opt_help) {
146     usage();
147     $opt_help = 0;      # to extinguish typo check.
148     exit 0;
149 }
150
151 local ($infile,$lyfile,$texfile);
152 my $processed_one=0;
153
154 while (defined($ARGV[0])) {
155     do_one_arg;
156     shift @ARGV;
157     $processed_one = 1;
158 }
159 do_one_arg unless ($processed_one);
160