[comp.text.tex] Converting Postscript font files for the new font selection scheme

clipper@csd.uwo.ca (Khun Yee Fung) (04/27/91)

I have written a simple Perl program to convert a Postscript font file
that comes with dvips (e.g. times.sty) that uses the old font
selection scheme to a equivalent file for the new font selection
scheme. It does not know anything about math fonts yet. It will be
difficult to handle them. I am not using \rmdefault, \ttdefault and
\ssdefault.  Should I use them instead of simply passing the
postscript fonts as cm* fonts?

So far I have not encountered any problem. However, I can't guarantee
it is error-free. I hope correcting the ouput will be easier than
convert such a file by hand...

It takes one argument, the name of the file to be converted. A file in
the current directory with "p" prepended to the input file name is
created with the equivalent font definition for the new scheme.

I call the program ptimes, you can call anything you want. Send any
comments/ideas/suggestions you have to me. 

Khun Yee
--
     Name: Khun Yee Fung                        Email: clipper@csd.uwo.ca
        Paper mail: Department of Computer Science, Middlesex College
     The University of Western Ontario, London, Ontario, N6A 5B7  CANADA


#!/usr2/new/bin/perl

($file) = @ARGV;
@entities = split('/', $file);
$outf = "p$entities[$#entities]";
die "Can't find $file\n" if (!open(FILE, $file));
die "Can't open a file in the current directory\n" if (!open(OUT, ">$outf"));
@t = localtime(time);
$filedate = sprintf("%02d/%02d/%02d", $t[5], $t[4]+1, $t[3]);
$docdate = $filedate;
while (<FILE>) {
    if ($_ =~ /\\def\\@mrm\{(.*)\}/) {
	$fonts{$1} = "m,n,r";
    }
    elsif ($_ =~ /\\def\\@mit\{(.*)\}/) {
	$fonts{$1} = "m,it,r";
    }
    elsif ($_ =~ /\\def\\@msl\{(.*)\}/) {
	$fonts{$1} = "m,sl,r";
    }
    elsif ($_ =~ /\\def\\@mbf\{(.*)\}/) {
	$fonts{$1} = "bx,n,r";
    }
    elsif ($_ =~ /\\def\\@mcsc\{(.*)\}/) {
	$fonts{$1} = "m,sc,r";
    }
    elsif ($_ =~ /\\def\\@mtt\{(.*)\}/) {
	$fonts{$1} = "m,n,tt";
    }
    elsif ($_ =~ /\\def\\@mss\{(.*)\}/) {
	$fonts{$1} = "m,n,ss";
    }
}


print OUT "
% Converted automatically by ptimes by Khun Yee Fung
% Date: $filedate

\\def\\fileversion\{v1.0a\}
\\def\\filedate\{$filedate\}
\\def\\docdate \{$docdate\}

\\typeout\{Style Option: `$outf'
  \\fileversion\\space \<\\filedate\>\}
\\@ifundefined\{selectfont\}
     \{\\@latexerr\{`$outf' style option could only be used
                  with the new font selection scheme\}\\@eha
      \\endinput\}\{\}
";
foreach $f (keys(%fonts)) {
    ($series, $shape, $family) = split(',', $fonts{$f});
    print OUT "\\new@fontshape\{cm$family\}\{$series\}\{$shape\}\{%\n";
    print OUT "   \<5\>$f at 5pt%\n";
    print OUT "   \<6\>$f at 6pt%\n";
    print OUT "   \<7\>$f at 7pt%\n";
    print OUT "   \<8\>$f at 8pt%\n";
    print OUT "   \<9\>$f at 9pt%\n";
    print OUT "   \<10\>$f at 10pt%\n";
    print OUT "   \<11\>$f at 10.95pt%\n";
    print OUT "   \<12\>$f at 12pt%\n";
    print OUT "   \<14\>$f at 14.4pt%\n";
    print OUT "   \<17\>$f at 17.28pt%\n";
    print OUT "   \<20\>$f at 20.74pt%\n";
    print OUT "   \<25\>$f at 24.88pt\}\{\}\n";
}

close(OUT);
close(FILE);