home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
unixtex-6.1b-src.tgz
/
tar.out
/
contrib
/
unixtex
/
web2c
/
lib
/
MakeTeXPK.pl
< prev
next >
Wrap
Perl Script
|
1996-09-28
|
6KB
|
178 lines
#! /usr/local/bin/perl
#
# From: Martin Ward <Martin.Ward@durham.ac.uk>
# Date: Fri, 28 Jan 94 15:40:14 GMT
#
# Here's my MakeTeXPK. Currently it puts all the .pk files in
# $prefix/texmf/fonts/pk/dpiNNN/name.pk and the .tfm files in
# $prefix/texmf/fonts/tfm
# With the automatic generation of pk's and tfm's (and a 40 MIP sparcstation 2
# to run metafont on!) I can get by quite happily with a minimal set of fonts.
#
# This script file makes a new TeX PK font, because one wasn't
# found. Parameters are:
#
# name dpi bdpi magnification [mode]
#
# `name' is the name of the font, such as `cmr10'. `dpi' is
# the resolution the font is needed at. `bdpi' is the base
# resolution, useful for figuring out the mode to make the font
# in. `magnification' is a string to pass to MF as the
# magnification. `mode', if supplied, is the mode to use.
#
# Note that this file must execute Metafont, and then gftopk,
# and place the result in the correct location for the PostScript
# driver to find it subsequently. If this doesn't work, it will
# be evident because MF will be invoked over and over again.
#
# Modified to generate dc fonts automatically. To generate dcXXXnn:
# (1) Create dcXXXnn.mf in current dir, containing the lines:
# if unknown dxbase: input dxbase fi;
# gensize:=nnn;
# generate dcXXX
# (2) Use dxbase base file
print STDERR "MakeTeXPK @ARGV\n";
# Old defaults:
#$base = "/home/ws-csm3/user15/gnu/lib/tex/fonts";
#$pkbase = "/home/ws-csm3/user15/gnu/lib/tex/fonts/pk.RicohA"; # Default pk dir#$stdmode = "RicohA"; # Default mode_def (write-white):
#$pkdefault = "/home/ws-csm3/user15/gnu/lib/tex/fonts/RicohA";
# Default paths:
$prefix = "/local/home/user15/gnu/lib";
$base = "$prefix/texmf/fonts";
$pkbase = "$prefix/texmf/fonts/pk"; # Default pk dir
$stdmode = "CanonCX"; # Default mode_def (write-black):
$pkdefault = "$prefix/texmf/fonts/canon300";
$TEMPDIR = "/tmp";
$name = $ARGV[0];
$dpi = $ARGV[1];
$bdpi = $ARGV[2];
$mag = $ARGV[3];
$mode = $ARGV[4];
$FINALname = "$pkbase/dpi$dpi/$name.pk";
# cd to TEMPDIR if current dir is not writable:
chdir($TEMPDIR) if (! -w ".");
if (-f "$pkdefault/dpi$dpi/$name.pk") { # check if file exists
die "dpi$dpi/$name.pk already exists in $pkdefault\n";
}
if (-f "$pkbase/dpi$dpi/$name.pk") { # check if file exists
die "dpi$dpi/$name.pk already exists in $pkbase\n";
}
if (-f $FINALname) {
die "$FINALname already exists!\n";
}
if (! -w $pkbase) {
mkdir($pkbase, 755);
chmod 0755, $pkbase;
if (! -w $pkbase) {
die "Can't write to $pkbase\n";
}
}
if ($mode eq "") {
if ($bdpi = 300) {
$mode = $stdmode;
} elsif ($bdpi = 118) {
$mode = "sun";
} else {
die "I don't know the mode for $bdpi\n";
}
}
&grokformat;
# redirect stdout to stderr
open(SAVEOUT, ">&STDOUT");
open(STDOUT, ">&STDERR");
print "Running Metafont...\n";
# the split gives an array which prevents perl from using the shell:
$line = "virmf $fmt \\mode:=$mode; \\mag:=$mag; input $name";
print "$line\n";
system split(/\s/, $line);
if (!-f "$name.${dpi}gf") {
$dpi++;
if (!-f "$name.${dpi}gf") {
$dpi--; $dpi--;
if (!-f "$name.${dpi}gf") {
die "Metafont failed to create $name.${dpi}gf\n";
}
}
}
system "gftopk ./$name.${dpi}gf";
die "gftopk failed on $name.${dpi}gf\n" unless (-f "$name.${dpi}pk");
if (! -d "$pkbase/dpi$dpi") { # make the directory:
mkdir("$pkbase/dpi$dpi",755);
chmod 0755, "$pkbase/dpi$dpi";
}
system "mv $name.${dpi}pk $pkbase/dpi$dpi/$name.pk";
chmod 0644, "$pkbase/dpi$dpi/$name.pk";
if (! $mfpic) {
system "mv $name.tfm $base/tfm";
chmod 0644, "$base/tfm/$name.tfm";
}
unlink "$name.${dpi}gf";
unlink "$name.mf" if ($name =~ /^dc/);
# tell dvipsk where the pk file is:
print SAVEOUT "$pkbase/dpi$dpi/$name.pk\n";
exit(0);
sub grokformat {
# See what fmt (if any) to use:
if ($plain) { # -plain option
$fmt = '&plain';
} elsif ($name =~ /^cm/) { # computer modern
$fmt = '&cmbase';
} elsif ($name =~ /^dc/) { # DC fonts
$fmt = '&dxbase';
# Create the .mf file in current directory:
$name =~ m/^([a-zA-Z]+)(\d+)$/ || die "Error in dc font name: $name\n";
$basename = $1;
$designsize = $2;
open(MFFILE, ">$name.mf");
print MFFILE <<END;
if unknown dxbase: input dxbase fi;
gensize:=$designsize;
generate $basename
END
close (MFFILE);
} elsif (($name =~ /circle/) || # latex circle fonts
($name =~ /^line/) || # latex line fonts
($name =~ /^chess/) || # chess font
($name =~ /^knot/) || # Celtic knotwork fonts
($name =~ /^bbold/) || # blackboard bold font
($name =~ /^pn/) || # Pandora fonts
($name =~ /^uic/) || # modified Pandora fonts
($name =~ /^blackletter/) || # blackletter
($name =~ /^manfnt/) || # TeX and METAFONT manuals special font
($name =~ /^ark/) || # hands and pencils
($name =~ /^dingbat/)|| # nice borders
($name =~ /^font29/) || # large headings font
($name =~ /^beam/) || # music font
($name =~ /^music/) || # music font
($name =~ /^slur/)) { # music font
$fmt = '&plain';
} elsif ($name =~ /^logo/) { # logo font
$fmt = '&logo';
} elsif ($name =~ /^eu/) { # Euler fonts
$fmt = '&plain';
} else { # some other font - use cmbase
$fmt = '&cmbase';
}
# mfpic hack! If the mf file is in current dir, and contains
# the string "graphbase" then its an mfpic file, so use plain base:
if (-r "$name.mf") {
system "egrep -s 'graphbase' $name.mf";
if ($? == 0) {
$mfpic = 1;
$fmt = '&plain';
$pkbase = ".";
}
}
}