diff options
-rw-r--r-- | Build/source/texk/tetex/ChangeLog | 1 | ||||
-rw-r--r-- | Build/source/texk/tetex/updmap.man | 362 | ||||
-rwxr-xr-x | Master/texmf/scripts/tetex/updmap.pl | 1012 |
3 files changed, 706 insertions, 669 deletions
diff --git a/Build/source/texk/tetex/ChangeLog b/Build/source/texk/tetex/ChangeLog index 32fb254ee40..eccade77090 100644 --- a/Build/source/texk/tetex/ChangeLog +++ b/Build/source/texk/tetex/ChangeLog @@ -1,6 +1,7 @@ 2011-06-16 Karl Berry <karl@tug.org> * updmap.pl (help): add more info and modify to work with help2man. + * updmap.man: generate with help2man. * updmap.pl (progname): eliminate fn in favor of $0 or hardwired "updmap" as appropriate. diff --git a/Build/source/texk/tetex/updmap.man b/Build/source/texk/tetex/updmap.man index b9487c9a0c1..a4d08594617 100644 --- a/Build/source/texk/tetex/updmap.man +++ b/Build/source/texk/tetex/updmap.man @@ -1,260 +1,238 @@ -.TH "updmap" "1" "August 2009" "TeX Live" "TeX Live" -.PP -.SH "NAME" -updmap \- Update font map files for TeX output drivers\&. -.PP -updmap-sys \- Update font map files for TeX output drivers system\-wide\&. -.PP -.SH "SYNOPSIS" -.PP -\fBupdmap\fP [ \fIOPTION\fP \&.\&.\&. ] [ -\fICOMMAND\fP \&.\&.\&. ] -.PP -\fBupdmap-sys\fP [ \fIOPTION\fP \&.\&.\&. ] [ -\fICOMMAND\fP \&.\&.\&. ] -.PP -.SH "DESCRIPTION" -.PP -\fBupdmap\fP is a utility that creates font configuration files for -\fBdvips\fP(1), \fBpdftex\fP(1), \fBxdvi\fP(1), -\fBps2pk\fP(1), \fBgsftopk\fP(1), \fBdvipdfm\fP(1) and (soon) \fBdvipdfmx\fP(1)\&. -In an ideal world, updmap would be unnecessary -- each of these -programs would read the same configuration file to learn what fonts -are available and how they should be treated\&. As things stand, -however, each of these tools has subtly different requirements and -thereby needs its own font configuration file\&. \fBupdmap\fP creates -font configuration files for all of these programs from a single -source, allowing you to easily keep all the different configuration -files in sync\&. -.PP -\fBupdmap\fP reads a configuration file, \fBupdmap\&.cfg\fP(5) and, -depending on the options specified in that file and on the command -line, \fBupdmap\fP will write generated map files to a directory of -your choosing (via one of the \fB--*outputdir\fP options), or automatically -determine where to place the files\&. In the latter case, it tries to -use the tree where the variable TEXMFVAR points to. -When used with the options \fB--edit\fP, \fB--setoption\fP, -\fB--enable\fP, \fB--disable\fP, or \fB--syncwithtrees\fP, \fBupdmap\fP will first write -\fBupdmap\&.cfg\fP(5) and regenerate the map files only if this file -has been changed\&. -.PP -.SH "OPTIONS" -.PP -The following command-line options are available: -.IP -.IP "\fB--cnffile\fP \fIfile\fP" -Specify a configuration \fIfile\fP\&. -.IP -.IP "\fB--dvipsoutputdir\fP \fIdirectory\fP" -Specify the output -\fIdirectory\fP for map files generated with dvips syntax\&. -.IP -.IP "\fB--pdftexoutputdir\fP \fIdirectory\fP" -Specify the output -\fIdirectory\fP for map files generated with pdftex syntax\&. -.IP -.IP "\fB--dvipdfmoutputdir\fP \fIdirectory\fP" -Specify the output -\fIdirectory\fP for map files generated with dvipdfm syntax\&. -.IP -.IP "\fB--outputdir\fP \fIdirectory\fP" -Specify the output -\fIdirectory\fP for all generated map files\&. -.IP -.IP "\fB--nohash\fP" -Do not run \fBtexhash\fP(1)\&. -.IP -.IP "\fB--nomkmap\fP" -Do not recreate existing map files\&. -.IP -.IP "\fB--quiet\fP" -Reduce verbosity\&. -.IP -.PP -The following commands can be substituted for \fICOMMAND\fP: -.IP -.IP "\fB--edit\fP" -Edit the \fIupdmap\&.cfg\fP file\&. -.IP -.IP "\fB--help\fP" -Show a command and option summary\&. -.IP -.IP "\fB--showoptions\fP \fIitem\fP" -Show alternatives for option -\fIitem\fP\&. -.IP -.IP "\fB--setoption\fP \fIoption\fP \fIvalue\fP" -Set -\fIoption\fP to \fIvalue\fP, where \fIoption\fP is one of: -.IP "" -\fBdvipsPreferOutline\fP -.IP "" -\fBLW35\fP -.IP "" -\fBdvipsDownloadBase35\fP -.IP "" -\fBpdftexDownloadBase14\fP -.IP "" -\fBdvipdfmDownloadBase14\fP -.IP -.IP "\fB--enable\fP \fImaptype\fP \fImapfile\fP" -Add or enable a \fBMap\fP or \fBMixedMap\fP for \fImapfile\fP\&. -.IP -.IP "\fB--enable Map=\fImapfile\fP" -Add or enable a Map for \fImapfile\fP\&. -.IP -.IP "\fB--enable MixedMap=\fP\fImapfile\fP" -Add or enable a MixedMap for \fImapfile\fP\&. -.IP -.IP "\fB--disable\fP \fImapfile\fP" -Disable Map or MixedMap for \fImapfile\fP\&. -.IP -.IP "\fB--syncwithtrees\fP" -Disable entries in the config file that refer to map files which are -unavailable\&. -.IP -.IP "\fB--listmaps\fP" -List all active and inactive maps\&. -.IP -.IP "\fB--listavailablemaps\fP" -List all active and inactive maps, but restrict output to map files -that are available in one of the texmf trees\&. -.PP -.SH "FILES" -.PP +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.3. +.TH UPDMAP "1" "June 2011" "TeX Live" "User Commands" +.SH NAME +updmap \- manage TeX font maps, per-user +.br +updmap-sys \- manage TeX font maps, system-wide +.SH SYNOPSIS +.B updmap +[\fIOPTION\fR] ... [\fICOMMAND\fR] +.br +.B updmap-sys +[\fIOPTION\fR] ... [\fICOMMAND\fR] +.SH DESCRIPTION +updmap (TeX Live) version $Id: updmap.pl 23018 2011\-06\-16 20:35:36Z karl $ +.PP +Update the default font map files used by pdftex, dvips, and dvipdfm(x), +as determined by the configuration file updmap.cfg (the one returned by +running "kpsewhich updmap.cfg"). +.PP +Among other things, these map files are used to determine which fonts +should be used as bitmaps and which as outlines, and to determine which +fonts are included in the output. +.PP +By default, the TeX filename database (ls\-R) is also updated. +.SH OPTIONS +.TP +\fB\-\-cnffile\fR FILE +read FILE for the updmap configuration +.TP +\fB\-\-dvipsoutputdir\fR DIR +specify output directory (dvips syntax) +.TP +\fB\-\-pdftexoutputdir\fR DIR +specify output directory (pdftex syntax) +.TP +\fB\-\-outputdir\fR DIR +specify output directory (for all files) +.TP +\fB\-\-copy\fR +cp generic files rather than using symlinks +.TP +\fB\-\-force\fR +recreate files even if config hasn't changed +.TP +\fB\-\-nomkmap\fR +do not recreate map files +.TP +\fB\-\-nohash\fR +do not run texhash +.TP +\fB\-n\fR, \fB\-\-dry\-run\fR +only show the configuration, no output +.TP +\fB\-\-quiet\fR, \fB\-\-silent\fR +reduce verbosity +.SS "Commands:" +.TP +\fB\-\-help\fR +show this message and exit +.TP +\fB\-\-version\fR +show version information and exit +.TP +\fB\-\-showoptions\fR ITEM +show alternatives for options +.TP +\fB\-\-setoption\fR OPTION VALUE +set option, where OPTION is one of: +LW35, dvipsPreferOutline, dvipsDownloadBase35, +or pdftexDownloadBase14 +.TP +\fB\-\-setoption\fR OPTION=VALUE +as above, just different syntax +.TP +\fB\-\-enable\fR MAPTYPE MAPFILE +add "MAPTYPE MAPFILE" to updmap.cfg, +where MAPTYPE is either Map or MixedMap +.TP +\fB\-\-enable\fR Map=MAPFILE +add "Map MAPFILE" to updmap.cfg +.HP +\fB\-\-enable\fR MixedMap=MAPFILE add "MixedMap MAPFILE" to updmap.cfg +.TP +\fB\-\-disable\fR MAPFILE +disable MAPFILE, whether Map or MixedMap +.TP +\fB\-\-listmaps\fR +list all active and inactive maps +.TP +\fB\-\-listavailablemaps\fR +same as \fB\-\-listmaps\fR, but without +unavailable map files +.TP +\fB\-\-syncwithtrees\fR +disable unavailable map files in updmap.cfg +.PP +Explanation of the map types: the (only) difference between Map and +MixedMap is that MixedMap entries are not added to psfonts_pk.map. +The purpose is to help users with printers that render Type 1 outline +fonts worse than mode\-tuned Type 1 bitmap fonts. So, MixedMap is used +for fonts that are available as both Type 1 and Metafont. +.PP +Explanation of the \fB\-\-setoption\fR possibilities: +.TP +dvipsPreferOutline +true|false (default true) +.IP +Whether dvips uses bitmaps or outlines, when both are available. +.TP +dvipsDownloadBase35 +true|false (default false) +.IP +Whether dvips includes the standard 35 PostScript fonts in its output. +.TP +pdftexDownloadBase14 +true|false (default true) +.IP +Whether pdftex includes the standard 14 PDF fonts in its output. +.TP +LW35 +URWkb|URW|ADOBEkb|ADOBE (default URWkb) +.IP +Adapt the font and file names of the standard 35 PostScript fonts. +URWkb URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb) +URW URW fonts with "vendor" filenames (e.g. n019064l.pfb) +ADOBEkb Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb) +ADOBE Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb) +.IP +These options are only read and acted on by updmap; dvips, pdftex, etc., +do not know anything about them. They work by changing the default map +file which the programs read, so they can be overridden by specifying +command\-line options or configuration files to the programs, as +explained at the beginning of updmap.cfg. +.SH ENVIRONMENT +.PP +Explanation of trees and files normally used: +.IP +updmap both reads and writes TEXMFCONFIG/web2c/updmap.cfg, according to +the actions specified. +.IP +updmap writes the map files for dvips (psfonts.map) and pdftex +(pdftex.map) to the TEXMFVAR/fonts/map/updmap/{dvips,pdftex}/ +directories. +.IP +The log file is written to TEXMFVAR/web2c/updmap.log. +.IP +When updmap\-sys is run, TEXMFSYSCONFIG and TEXMFSYSVAR are used +instead. This is the only difference between updmap\-sys and updmap. +.IP +Other locations can be used if overridden on the command line, or these +trees don't exist, or you are not using the original TeX Live. +.IP +To see the precise locations of the various files that +will be read and written, give the \fB\-n\fR option (or read the man page). +.SH EXAMPLES +.PP +For step\-by\-step instructions on making new fonts known to TeX, read +http://tug.org/fonts/fontinstall.html. For even more terse +instructions, read the beginning of updmap.cfg. +.SH FILES Configuration and input files: .IP "\fIupdmap\&.cfg\fP" Main configuration file\&. In \fItexmf/web2c\fP by default, but may be located elsewhere depending on your distribution\&. -.IP .IP "\fIdvips35\&.map\fP" Map file for standard 35 PostScript fonts for use with \fBdvips\fP(1)\&. -.IP .IP "\fIpdftex35\&.map\fP" Map file for standard 35 PostScript fonts for use with \fBpdftex\fP(1)\&. -.IP -.IP "\fIdvipdfm35\&.map\fP" -Map file for standard 35 PostScript fonts for -use with \fBdvipdfm\fP(1)\&. -.IP .IP "\fIps2pk35\&.map\fP" Map file for standard 35 PostScript fonts for use with \fBps2pk\fP(1)\&. -.IP .PP Output files: -.IP .IP "\fIpsfonts\&.map\fP" For \fBdvips\fP(1)\&. -Soft link -against \fIpsfonts_t1\&.map\fP if option \fBdvipsPreferOutline\fP active, -else against \fIpsfonts_pk\&.map\fP. -.IP +Same as \fIpsfonts_t1\&.map\fP if option \fBdvipsPreferOutline\fP active, +else as \fIpsfonts_pk\&.map\fP. .IP "\fIpsfonts_pk\&.map\fP" For \fBdvips\fP(1)\&. Without information from MixedMap files\&. (Setting of \fBdvipsPreferOutline\fP ignored\&.) -.IP .IP "\fIpsfonts_t1\&.map\fP" For \fBdvips\fP(1)\&. With information from MixedMap files\&. (Setting of \fBdvipsPreferOutline\fP ignored\&.) -.IP .IP "\fIdownload35\&.map\fP" For \fBdvips\fP(1)\&. Always downloads the standard 35 fonts\&. (Setting of \fBdvipsDownloadBase35\fP ignored\&.) -.IP .IP "\fIbuiltin35\&.map\fP" For \fBdvips\fP(1)\&. Never downloads the standard 35 fonts\&. (Setting of \fBdvipsDownloadBase35\fP ignored\&.) -.IP .IP "\fIpdftex\&.map\fP" For \fBpdftex\fP(1)\&. -Soft link -against \fIpdftex_dl14\&.map\fP if option \fBpdftexDownloadBase14\fP active, -else against \fIpdftex_ndl14\&.map\fP. -.IP +Same as \fIpdftex_dl14\&.map\fP if option \fBpdftexDownloadBase14\fP active, +else as \fIpdftex_ndl14\&.map\fP. .IP "\fIpdftex_dl14\&.map\fP" For \fBpdftex\fP(1)\&. Always downloads the standard 14 fonts\&. -.IP .IP "\fIpdftex_ndl14\&.map\fP" For \fBpdftex\fP(1)\&. Never downloads the standard 14 fonts\&. -.IP -.IP "\fIdvipdfm\&.map\fP" -For \fBdvipdfm\fP(1)\&. -Soft link -against \fIdvipdfm_dl14\&.map\fP if option \fBdvipdfmDownloadBase14\fP active, -else against \fIdvipdfm_ndl14\&.map\fP. -.IP "\fIdvipdfm_dl14\&.map\fP" -For \fBdvipdfm\fP(1)\&. -Always downloads the standard 14 fonts\&. -.IP -.IP "\fIdvipdfm_ndl14\&.map\fP" -For \fBdvipdfm\fP(1)\&. -Never downloads the standard 14 fonts\&. -.IP .IP "\fIps2pk\&.map\fP" Similar to \fIpsfonts.map\fP file, but forces all fonts to be downloaded, so this map file can be used with \fBxdvi\fP(1) and \fBps2pk\fP(1)\&. -.IP .PP -teTeX configuration files for \fBdvips\fP(1) tuned for use with \fBupdmap\fP: -.IP +Configuration files for \fBdvips\fP(1): .IP "\fIconfig\&.builtin35\fP" Loads \fIbuiltin35\&.map\fP instead of \fIpsfonts\&.map\fP\&. -.IP .IP "\fIconfig\&.download35\fP" Loads \fIdownload35\&.map\fP instead of \fIpsfonts\&.map\fP\&. -.IP .IP "\fIconfig\&.outline\fP" Loads \fIpsfonts_t1\&.map\fP instead of \fIpsfonts\&.map\fP\&. -.IP .IP "\fIconfig\&.pdf\fP" Loads \fIpsfonts_t1\&.map\fP instead of \fIpsfonts\&.map\fP and has additional optimizations for PDF generation\&. -.IP .IP "\fIconfig\&.pk\fP" Loads \fIpsfonts_pk\&.map\fP instead of \fIpsfonts\&.map\fP\&. -.IP .IP "\fIconfig\&.www\fP" Loads \fIpsfonts_t1\&.map\fP instead of \fIpsfonts\&.map\fP\&. -(For compatibility with previous versions of teTeX\&.) -.IP +(For compatibility with old versions\&.) .IP "\fIconfig\&.gstopk\fP" Loads \fIpsfonts_t1\&.map\fP instead of \fIpsfonts\&.map\fP\&. -.IP -.PP -.SH "SEE ALSO" -.PP -\fBupdmap\&.cfg\fP(5), \fBdvipdfm\fP(1), \fBdvips\fP(1), -\fBgsftopk\fP(1), \fBpdftex\fP(1), \fBps2pk\fP(1), -\fBtexhash\fP(1), \fBxdvi\fP(1)\&. -.PP -Web page: \fI<http://tug\&.org/teTeX/>\fP -.PP -.SH "BUGS" -.PP -None known, but report any bugs found to <tetex@dbs\&.uni-hannover\&.de> (mailing list)\&. -.PP -.SH "AUTHOR" -.PP -\fBupdmap\fP was written by Thomas Esser -<te@dbs\&.uni-hannover\&.de> and is in the public domain\&. -.PP -This manual page was written by C\&.M\&. Connelly -<cmc@debian\&.org>, for -the Debian GNU/Linux system and later slightly adapted for teTeX 3\&. +.SH "REPORTING BUGS" +Report bugs to: tex\-k@tug.org +.br +TeX Live home page: <http://tug.org/texlive/> diff --git a/Master/texmf/scripts/tetex/updmap.pl b/Master/texmf/scripts/tetex/updmap.pl index b5c6c7a21c8..ae22fb2e83a 100755 --- a/Master/texmf/scripts/tetex/updmap.pl +++ b/Master/texmf/scripts/tetex/updmap.pl @@ -1,5 +1,4 @@ #! /usr/bin/env perl -############################################################################### # updmap: utility to maintain map files for outline fonts. # # Thomas Esser, (C) 2002. @@ -13,15 +12,16 @@ BEGIN { unshift (@INC, "$TEXMFROOT/tlpkg"); } -my $version = '$Id: updmap.pl 22985 2011-06-14 23:42:39Z karl $'; +my $version = '$Id: updmap.pl 23018 2011-06-16 20:35:36Z karl $'; use strict; use TeXLive::TLUtils qw(mkdirhier mktexupd win32); use Getopt::Long; $Getopt::Long::autoabbrev=0; -Getopt::Long::Configure (qw(bundling ignore_case_always)); +Getopt::Long::Configure (qw(ignore_case_always)); + +my $short_progname = "updmap"; -my $progname='updmap'; my $cnfFile; my $cnfFileShort; my $outputdir; @@ -30,16 +30,16 @@ my $pdftexoutputdir; my $quiet; my $nohash; my $nomkmap; +my (@psADOBE, @fileADOBE, @fileADOBEkb, @fileURW); my $enableItem; -my %setOption = (); +my @setoptions = (); my @showoptions = (); my @disableItem = (); my $listmaps; my $listavailablemaps; my $syncwithtrees; -my $verbose; my $opt_edit; my $opt_force; my $opt_help; @@ -57,13 +57,13 @@ my $pdftex35; my $ps2pk35; my $newcnf; +my $copy; my %link; my %maps; my @missing; my $writelog = 0; my $cache = 0; # don't change! -my $copy; -my $pdftexStripEnc=1; +my $pdftexStripEnc = 0; # initialize mktexupd my $updLSR=&mktexupd(); @@ -71,194 +71,185 @@ $updLSR->{mustexist}(0); my @cfg = (); -my @psADOBE = ( # this list is in reverse order by PostScript name - # so that the Times-BoldItalic substitution (for - # example) happens before Times-Bold. Otherwise the - # result is the bogus "Times-Bold Ital". - 's/ Dingbats / ZapfDingbats /x', - 's/ URWChanceryL-MediItal / ZapfChancery-MediumItalic /x', - 's/ NimbusRomNo9L-ReguItal / Times-Italic /x', - 's/ NimbusRomNo9L-Regu / Times-Roman /x', - 's/ NimbusRomNo9L-MediItal / Times-BoldItalic /x', - 's/ NimbusRomNo9L-Medi / Times-Bold /x', - 's/ StandardSymL / Symbol /x', - 's/ URWPalladioL-Ital / Palatino-Italic /x', - 's/ URWPalladioL-Roma / Palatino-Roman /x', - 's/ URWPalladioL-BoldItal / Palatino-BoldItalic /x', - 's/ URWPalladioL-Bold / Palatino-Bold /x', - 's/ CenturySchL-Ital / NewCenturySchlbk-Italic /x', - 's/ CenturySchL-Roma / NewCenturySchlbk-Roman /x', - 's/ CenturySchL-BoldItal / NewCenturySchlbk-BoldItalic /x', - 's/ CenturySchL-Bold / NewCenturySchlbk-Bold /x', - 's/ NimbusSanL-ReguCondItal / Helvetica-Narrow-Oblique /x', - 's/ NimbusSanL-ReguItal / Helvetica-Oblique /x', - 's/ NimbusSanL-ReguCond / Helvetica-Narrow /x', - 's/ NimbusSanL-Regu / Helvetica /x', - 's/ NimbusSanL-BoldCondItal / Helvetica-Narrow-BoldOblique /x', - 's/ NimbusSanL-BoldItal / Helvetica-BoldOblique /x', - 's/ NimbusSanL-BoldCond / Helvetica-Narrow-Bold /x', - 's/ NimbusSanL-Bold / Helvetica-Bold /x', - 's/ NimbusMonL-ReguObli / Courier-Oblique /x', - 's/ NimbusMonL-Regu / Courier /x', - 's/ NimbusMonL-BoldObli / Courier-BoldOblique /x', - 's/ NimbusMonL-Bold / Courier-Bold /x', - 's/ URWBookmanL-LighItal / Bookman-LightItalic /x', - 's/ URWBookmanL-Ligh / Bookman-Light /x', - 's/ URWBookmanL-DemiBoldItal / Bookman-DemiItalic /x', - 's/ URWBookmanL-DemiBold / Bookman-Demi /x', - 's/ URWGothicL-BookObli / AvantGarde-BookOblique /x', - 's/ URWGothicL-Book / AvantGarde-Book /x', - 's/ URWGothicL-DemiObli / AvantGarde-DemiOblique /x', - 's/ URWGothicL-Demi / AvantGarde-Demi /x', - ); - -my @fileADOBEkb = ( - 's/\buagd8a.pfb\b/pagd8a.pfb/x', - 's/\buagdo8a.pfb\b/pagdo8a.pfb/x', - 's/\buagk8a.pfb\b/pagk8a.pfb/x', - 's/\buagko8a.pfb\b/pagko8a.pfb/x', - 's/\bubkd8a.pfb\b/pbkd8a.pfb/x', - 's/\bubkdi8a.pfb\b/pbkdi8a.pfb/x', - 's/\bubkl8a.pfb\b/pbkl8a.pfb/x', - 's/\bubkli8a.pfb\b/pbkli8a.pfb/x', - 's/\bucrb8a.pfb\b/pcrb8a.pfb/x', - 's/\bucrbo8a.pfb\b/pcrbo8a.pfb/x', - 's/\bucrr8a.pfb\b/pcrr8a.pfb/x', - 's/\bucrro8a.pfb\b/pcrro8a.pfb/x', - 's/\buhvb8a.pfb\b/phvb8a.pfb/x', - 's/\buhvb8ac.pfb\b/phvb8an.pfb/x', - 's/\buhvbo8a.pfb\b/phvbo8a.pfb/x', - 's/\buhvbo8ac.pfb\b/phvbo8an.pfb/x', - 's/\buhvr8a.pfb\b/phvr8a.pfb/x', - 's/\buhvr8ac.pfb\b/phvr8an.pfb/x', - 's/\buhvro8a.pfb\b/phvro8a.pfb/x', - 's/\buhvro8ac.pfb\b/phvro8an.pfb/x', - 's/\buncb8a.pfb\b/pncb8a.pfb/x', - 's/\buncbi8a.pfb\b/pncbi8a.pfb/x', - 's/\buncr8a.pfb\b/pncr8a.pfb/x', - 's/\buncri8a.pfb\b/pncri8a.pfb/x', - 's/\buplb8a.pfb\b/pplb8a.pfb/x', - 's/\buplbi8a.pfb\b/pplbi8a.pfb/x', - 's/\buplr8a.pfb\b/pplr8a.pfb/x', - 's/\buplri8a.pfb\b/pplri8a.pfb/x', - 's/\busyr.pfb\b/psyr.pfb/x', - 's/\butmb8a.pfb\b/ptmb8a.pfb/x', - 's/\butmbi8a.pfb\b/ptmbi8a.pfb/x', - 's/\butmr8a.pfb\b/ptmr8a.pfb/x', - 's/\butmri8a.pfb\b/ptmri8a.pfb/x', - 's/\buzcmi8a.pfb\b/pzcmi8a.pfb/x', - 's/\buzdr.pfb\b/pzdr.pfb/x' - ); - -my @fileURW = ( - 's/\buagd8a.pfb\b/a010015l.pfb/x', - 's/\buagdo8a.pfb\b/a010035l.pfb/x', - 's/\buagk8a.pfb\b/a010013l.pfb/x', - 's/\buagko8a.pfb\b/a010033l.pfb/x', - 's/\bubkd8a.pfb\b/b018015l.pfb/x', - 's/\bubkdi8a.pfb\b/b018035l.pfb/x', - 's/\bubkl8a.pfb\b/b018012l.pfb/x', - 's/\bubkli8a.pfb\b/b018032l.pfb/x', - 's/\bucrb8a.pfb\b/n022004l.pfb/x', - 's/\bucrbo8a.pfb\b/n022024l.pfb/x', - 's/\bucrr8a.pfb\b/n022003l.pfb/x', - 's/\bucrro8a.pfb\b/n022023l.pfb/x', - 's/\buhvb8a.pfb\b/n019004l.pfb/x', - 's/\buhvb8ac.pfb\b/n019044l.pfb/x', - 's/\buhvbo8a.pfb\b/n019024l.pfb/x', - 's/\buhvbo8ac.pfb\b/n019064l.pfb/x', - 's/\buhvr8a.pfb\b/n019003l.pfb/x', - 's/\buhvr8ac.pfb\b/n019043l.pfb/x', - 's/\buhvro8a.pfb\b/n019023l.pfb/x', - 's/\buhvro8ac.pfb\b/n019063l.pfb/x', - 's/\buncb8a.pfb\b/c059016l.pfb/x', - 's/\buncbi8a.pfb\b/c059036l.pfb/x', - 's/\buncr8a.pfb\b/c059013l.pfb/x', - 's/\buncri8a.pfb\b/c059033l.pfb/x', - 's/\buplb8a.pfb\b/p052004l.pfb/x', - 's/\buplbi8a.pfb\b/p052024l.pfb/x', - 's/\buplr8a.pfb\b/p052003l.pfb/x', - 's/\buplri8a.pfb\b/p052023l.pfb/x', - 's/\busyr.pfb\b/s050000l.pfb/x', - 's/\butmb8a.pfb\b/n021004l.pfb/x', - 's/\butmbi8a.pfb\b/n021024l.pfb/x', - 's/\butmr8a.pfb\b/n021003l.pfb/x', - 's/\butmri8a.pfb\b/n021023l.pfb/x', - 's/\buzcmi8a.pfb\b/z003034l.pfb/x', - 's/\buzdr.pfb\b/d050000l.pfb/x' - ); - -my @fileADOBE = ( - 's/\buagd8a.pfb\b/agd_____.pfb/x', - 's/\buagdo8a.pfb\b/agdo____.pfb/x', - 's/\buagk8a.pfb\b/agw_____.pfb/x', - 's/\buagko8a.pfb\b/agwo____.pfb/x', - 's/\bubkd8a.pfb\b/bkd_____.pfb/x', - 's/\bubkdi8a.pfb\b/bkdi____.pfb/x', - 's/\bubkl8a.pfb\b/bkl_____.pfb/x', - 's/\bubkli8a.pfb\b/bkli____.pfb/x', - 's/\bucrb8a.pfb\b/cob_____.pfb/x', - 's/\bucrbo8a.pfb\b/cobo____.pfb/x', - 's/\bucrr8a.pfb\b/com_____.pfb/x', - 's/\bucrro8a.pfb\b/coo_____.pfb/x', - 's/\buhvb8a.pfb\b/hvb_____.pfb/x', - 's/\buhvb8ac.pfb\b/hvnb____.pfb/x', - 's/\buhvbo8a.pfb\b/hvbo____.pfb/x', - 's/\buhvbo8ac.pfb\b/hvnbo___.pfb/x', - 's/\buhvr8a.pfb\b/hv______.pfb/x', - 's/\buhvr8ac.pfb\b/hvn_____.pfb/x', - 's/\buhvro8a.pfb\b/hvo_____.pfb/x', - 's/\buhvro8ac.pfb\b/hvno____.pfb/x', - 's/\buncb8a.pfb\b/ncb_____.pfb/x', - 's/\buncbi8a.pfb\b/ncbi____.pfb/x', - 's/\buncr8a.pfb\b/ncr_____.pfb/x', - 's/\buncri8a.pfb\b/nci_____.pfb/x', - 's/\buplb8a.pfb\b/pob_____.pfb/x', - 's/\buplbi8a.pfb\b/pobi____.pfb/x', - 's/\buplr8a.pfb\b/por_____.pfb/x', - 's/\buplri8a.pfb\b/poi_____.pfb/x', - 's/\busyr.pfb\b/sy______.pfb/x', - 's/\butmb8a.pfb\b/tib_____.pfb/x', - 's/\butmbi8a.pfb\b/tibi____.pfb/x', - 's/\butmr8a.pfb\b/tir_____.pfb/x', - 's/\butmri8a.pfb\b/tii_____.pfb/x', - 's/\buzcmi8a.pfb\b/zcmi____.pfb/x', - 's/\buzdr.pfb\b/zd______.pfb/x' - ); - &main; exit 0; + +# return program name + version string. +sub version { + my $ret = sprintf "%s (TeX Live) version %s\n", $short_progname, $version; + return $ret; +} + ############################################################################### -# progname() -# return the name of the program. Needed if invoked by a wrapper. +# help() +# display help message and exit +# +sub help { + my $usage= <<"EOF"; +Usage: $short_progname [OPTION] ... [COMMAND] + or: $short_progname-sys [OPTION] ... [COMMAND] + +Update the default font map files used by pdftex, dvips, and dvipdfm(x), +as determined by the configuration file updmap.cfg (the one returned by +running "kpsewhich updmap.cfg"). + +Among other things, these map files are used to determine which fonts +should be used as bitmaps and which as outlines, and to determine which +fonts are included in the output. + +By default, the TeX filename database (ls-R) is also updated. + +Options: + --cnffile FILE read FILE for the updmap configuration + --dvipsoutputdir DIR specify output directory (dvips syntax) + --pdftexoutputdir DIR specify output directory (pdftex syntax) + --outputdir DIR specify output directory (for all files) + --copy cp generic files rather than using symlinks + --force recreate files even if config hasn't changed + --nomkmap do not recreate map files + --nohash do not run texhash + -n, --dry-run only show the configuration, no output + --quiet, --silent reduce verbosity + +Commands: + --help show this message and exit + --version show version information and exit + --showoptions ITEM show alternatives for options + --setoption OPTION VALUE set option, where OPTION is one of: + LW35, dvipsPreferOutline, dvipsDownloadBase35, + or pdftexDownloadBase14 + --setoption OPTION=VALUE as above, just different syntax + --enable MAPTYPE MAPFILE add "MAPTYPE MAPFILE" to updmap.cfg, + where MAPTYPE is either Map or MixedMap + --enable Map=MAPFILE add \"Map MAPFILE\" to updmap.cfg + --enable MixedMap=MAPFILE add \"MixedMap MAPFILE\" to updmap.cfg + --disable MAPFILE disable MAPFILE, whether Map or MixedMap + --listmaps list all active and inactive maps + --listavailablemaps same as --listmaps, but without + unavailable map files + --syncwithtrees disable unavailable map files in updmap.cfg + +Explanation of the map types: the (only) difference between Map and +MixedMap is that MixedMap entries are not added to psfonts_pk.map. +The purpose is to help users with printers that render Type 1 outline +fonts worse than mode-tuned Type 1 bitmap fonts. So, MixedMap is used +for fonts that are available as both Type 1 and Metafont. + +Explanation of the --setoption possibilities: + + dvipsPreferOutline true|false (default true) + Whether dvips uses bitmaps or outlines, when both are available. + dvipsDownloadBase35 true|false (default false) + Whether dvips includes the standard 35 PostScript fonts in its output. + pdftexDownloadBase14 true|false (default true) + Whether pdftex includes the standard 14 PDF fonts in its output. + LW35 URWkb|URW|ADOBEkb|ADOBE (default URWkb) + Adapt the font and file names of the standard 35 PostScript fonts. + URWkb URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb) + URW URW fonts with "vendor" filenames (e.g. n019064l.pfb) + ADOBEkb Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb) + ADOBE Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb) + + These options are only read and acted on by updmap; dvips, pdftex, etc., + do not know anything about them. They work by changing the default map + file which the programs read, so they can be overridden by specifying + command-line options or configuration files to the programs, as + explained at the beginning of updmap.cfg. + +Explanation of trees and files normally used: + + updmap both reads and writes TEXMFCONFIG/web2c/updmap.cfg, according to + the actions specified. + + updmap writes the map files for dvips (psfonts.map) and pdftex + (pdftex.map) to the TEXMFVAR/fonts/map/updmap/{dvips,pdftex}/ + directories. + + The log file is written to TEXMFVAR/web2c/updmap.log. + + When updmap-sys is run, TEXMFSYSCONFIG and TEXMFSYSVAR are used + instead. This is the only difference between updmap-sys and updmap. + + Other locations can be used if overridden on the command line, or these + trees don't exist, or you are not using the original TeX Live. + + To see the precise locations of the various files that + will be read and written, give the -n option (or read the man page). + +For step-by-step instructions on making new fonts known to TeX, read +http://tug.org/fonts/fontinstall.html. For even more terse +instructions, read the beginning of updmap.cfg. + +Report bugs to: tex-k\@tug.org +TeX Live home page: <http://tug.org/texlive/> +EOF +; + print &version(); + print $usage; + exit 0; +} + + + ############################################################################### -sub progname { - if (`kpsewhich --var-value=TEXMFVAR` eq `kpsewhich --var-value=TEXMFSYSVAR`) { - return 'updmap-sys'; - } else { - return 'updmap'; +# processOptions() +# process cmd line options +# +sub processOptions { + unless (&GetOptions ( + "cnffile=s" => \$cnfFile, + "copy" => \$copy, + "disable=s" => \@disableItem, + "dvipdfmoutputdir=s" => sub {print "$0: ignoring --dvipdfmoutputdir\n"}, + "dvipsoutputdir=s" => \$dvipsoutputdir, + "enable=s" => \$enableItem, + "edit" => \$opt_edit, + "force" => \$opt_force, + "listavailablemaps" => \$listavailablemaps, + "l|listmaps" => \$listmaps, + "nohash" => \$nohash, + "nomkmap" => \$nomkmap, + "n|dry-run" => \$dry_run, + "outputdir=s" => \$outputdir, + "pdftexoutputdir=s" => \$pdftexoutputdir, + "q|quiet|silent" => \$quiet, + "setoption=s{1,2}" => \@setoptions, + "showoptions=s" => \@showoptions, + "syncwithtrees" => \$syncwithtrees, + "version" => sub { print &version(); exit(0); }, + "h|help" => \$opt_help)) { + die "Try \"$0 --help\" for more information.\n"; } -} -# return program name + version string. -sub version { - my $ret = sprintf "%s version %s", &progname(), $version; - return $ret; + if ($outputdir) { + $dvipsoutputdir = $outputdir if (! $dvipsoutputdir); + $pdftexoutputdir = $outputdir if (! $pdftexoutputdir); + } + if ($cnfFile && ! -f $cnfFile) { + die "$0: Config file \"$cnfFile\" not found.\n"; + } + if ($dvipsoutputdir && ! $dry_run && ! -d $dvipsoutputdir) { + &mkdirhier ($dvipsoutputdir); + } + if ($pdftexoutputdir && ! $dry_run && ! -d $pdftexoutputdir) { + &mkdirhier ($pdftexoutputdir); + } } + ############################################################################### # equalize_file(filename[, comment_char]) # read a file and return its processed content as a string. # look into the source code for more details. -############################################################################### +# sub equalize_file { my $file=shift; my $comment=shift; my @temp; open IN, "$file"; - my @lines=(<IN>); + my @lines = (<IN>); close IN; chomp(@lines); @@ -274,7 +265,7 @@ sub equalize_file { ############################################################################### # files_are_different(file_A, file_B[, comment_char]) # compare two equalized files. -############################################################################### +# sub files_are_different { my $file_A=shift; my $file_B=shift; @@ -291,7 +282,7 @@ sub files_are_different { # files_are_equal(file_A, file_B[, comment_char]) # compare two equalized files. Same as files_are_different() with # return value inverted. -############################################################################### +# sub files_are_equal { return (&files_are_different (@_))? 0:1; } @@ -299,7 +290,7 @@ sub files_are_equal { ############################################################################### # files_are_identical(file_A, file_B) # compare two files. Same as cmp(1). -############################################################################### +# sub files_are_identical { my $file_A=shift; my $file_B=shift; @@ -318,14 +309,14 @@ sub files_are_identical { ############################################################################### # getLines() -# return the lines in $filename +# ############################################################################### sub getLines { my @lines = (); foreach my $fname (@_) { next if (! $fname); if (! exists $maps{"$fname"}) { - open FILE, "<$fname" or die "can't get lines from $fname: $!"; + open FILE, "<$fname" or die "$0: can't get lines from $fname: $!"; my @file=<FILE>; close FILE; if ($writelog) { @@ -352,11 +343,11 @@ sub getLines { ############################################################################### # writeLines() # write the lines in $filename -############################################################################### +# sub writeLines { my ($fname, @lines) = @_; map { ($_ !~ m/\n$/ ? s/$/\n/ : $_ ) } @lines; - open FILE, ">$fname" or die "can't write lines to $fname: $!"; + open FILE, ">$fname" or die "$0: can't write lines to $fname: $!"; print FILE @lines; close FILE; } @@ -364,7 +355,7 @@ sub writeLines { ############################################################################### # copyFile() # copy file $src to $dst, sets $dst creation and mod time -############################################################################### +# sub copyFile { my ($src, $dst) = @_; my $dir; @@ -373,7 +364,7 @@ sub copyFile { $src eq $dst && return "can't copy $src to itself!\n"; - open IN, "<$src" or die "can't open source file $src for copying: $!"; + open IN, "<$src" or die "$0: can't open source file $src for copying: $!"; open OUT, ">$dst"; binmode(IN); @@ -386,113 +377,9 @@ sub copyFile { } ############################################################################### -# help() -# display help message and exit -############################################################################### -sub help { - my $progname=&progname(); - my $usage= <<"EOF"; -Usage: $progname [OPTION] ... [COMMAND] - -Update the default font map files used by pdftex, dvips, and dvipdfm, as -determined by updmap.cfg (the one returned by running -"kpsewhich updmap.cfg"). - -Among other things, these font map files are used to determine which -fonts should be used as bitmaps and which as outlines, and to determine -which fonts are included in the output. - -By default, the TeX filename database is also rebuilt (with mktexlsr). - -Valid options: - --cnffile FILE read FILE for the updmap configuration - --dvipsoutputdir DIR specify output directory (dvips syntax) - --pdftexoutputdir DIR specify output directory (pdftex syntax) - --outputdir DIR specify output directory (for all files) - --copy cp generic files rather than using symlinks - --force recreate files even if config hasn't changed - --nomkmap do not recreate map files - --nohash do not run texhash - -n, --dry-run only show the configuration, no output - --quiet reduce verbosity - -Valid commands: - --help show this message and exit - --version show version information and exit - --edit edit updmap.cfg file - --showoptions ITEM show alternatives for options - --setoption OPTION VALUE set option, where OPTION is one of: - dvipsPreferOutline, LW35, dvipsDownloadBase35, - or pdftexDownloadBase14 - --setoption OPTION=VALUE as above, just different syntax - --enable MAPTYPE MAPFILE add "MAPTYPE MAPFILE" to updmap.cfg, - where MAPTYPE is either Map or MixedMap - --enable Map=MAPFILE add \"Map MAPFILE\" to updmap.cfg - --enable MixedMap=MAPFILE add \"MixedMap MAPFILE\" to updmap.cfg - --disable MAPFILE disable MAPFILE, whether Map or MixedMap - --syncwithtrees entries with unavailable map files will be - disabled in the config file - --listmaps list all active and inactive maps - --listavailablemaps same as --listmaps, but without - unavailable map files - -Explanation of the map types: the (only) difference between Map and -MixedMap is that MixedMap entries are not added to psfonts_pk.map. The -purpose is to help users with printers that render Type 1 outline fonts -worse than mode-tuned Type 1 bitmap fonts. So MixedMap is used for -fonts that are available as both Type 1 and Metafont. - -To see the precise locations of the various files that will be read and -written, run updmap -n. - -For step-by-step instructions on making new fonts known to TeX, see -http://tug.org/fonts/fontinstall.html. - -Report bugs to: tex-k\@tug.org -TeX Live home page: <http://tug.org/texlive/> -EOF -; - print $usage; - exit 0; -} - - -############################################################################### -# cfgval(variable) -# read variable ($1) from config file -############################################################################### -sub cfgval { - my ($variable) = @_; - my $value; - - if ($#cfg < 0) { - open FILE, "<$cnfFile" or die "can't open configuration file $cnfFile: $!"; - while (<FILE>) { - s/\s*$//; # strip trailing spaces - push @cfg, $_; - } - close FILE; - chomp (@cfg); - } - for my $line (@cfg) { - if ($line =~ m/^\s*${variable}[\s=]+(.*)\s*$/) { - $value = $1; - if ($value =~ m/^(true|yes|t|y|1)$/) { - $value = 1; - } - elsif ($value =~ m/^(false|no|f|n|0)$/) { - $value = 0; - } - last; - } - } - return $value; -} - -############################################################################### # SymlinkOrCopy(dir, src, dest) # create symlinks if possible, otherwise copy files -############################################################################### +# sub SymlinkOrCopy { my ($dir, $src, $dest) = @_; if (&win32 || $copy) { # always copy @@ -508,7 +395,7 @@ sub SymlinkOrCopy { ############################################################################### # setupSymlinks() # set symlink for psfonts.map according to dvipsPreferOutline variable -############################################################################### +# sub setupSymlinks { my $src; @@ -529,12 +416,13 @@ sub setupSymlinks { &SymlinkOrCopy("$pdftexoutputdir", "$src", "pdftex.map"); } + ############################################################################### # transLW35(args ...) # transform fontname and filenames according to transformation specified # by mode. Possible values: # URW|URWkb|ADOBE|ADOBEkb -############################################################################### +# sub transLW35 { my ($name) = @_; my @lines = &getLines($name); @@ -549,7 +437,7 @@ sub transLW35 { for my $r (@psADOBE) { map { eval($r); } @lines; } - my @filemode = eval ("\@file" .$mode); + my @filemode = eval ("\@file" . $mode); for my $r (@filemode) { map { eval($r); } @lines; } @@ -560,7 +448,7 @@ sub transLW35 { ############################################################################### # locateWeb2c (file ...) # apply kpsewhich with format 'web2c files' -############################################################################### +# sub locateWeb2c { my @files = @_; return @files if ($#files < 0); @@ -577,7 +465,7 @@ sub locateWeb2c { ############################################################################### # locateMap (file ...) # apply kpsewhich with format 'dvips config' -############################################################################### +# sub locateMap { my @maps = @_; my @files; @@ -598,32 +486,44 @@ sub locateMap { } } + ############################################################################### -# catMaps(regex) -# filter config file by regex for map lines and extract the map filenames. -# These are then looked up (by kpsewhich in locateMap) and the content of -# all map files is send to stdout. -############################################################################### -sub catMaps { - my ($map) = @_; - my %count = ( ); - my @maps = grep { $_ =~ m/$map/ } @cfg; - map{ - $_ =~ s/\#.*//; - $_ =~ s/\s*([^\s]*)\s*([^\s]*)/$2/; - } @maps; - @maps = sort(@maps); - @maps = grep { ++$count{$_} < 2; } @maps; +# cfgval(variable) +# read variable ($1) from config file +# +sub cfgval { + my ($variable) = @_; + my $value; - @maps = &locateMap(@maps); - return @maps; + if ($#cfg < 0) { + open FILE, "<$cnfFile" or die "$0: can't open configuration file $cnfFile: $!"; + while (<FILE>) { + s/\s*$//; # strip trailing spaces + push @cfg, $_; + } + close FILE; + chomp (@cfg); + } + for my $line (@cfg) { + if ($line =~ m/^\s*${variable}[\s=]+(.*)\s*$/) { + $value = $1; + if ($value =~ m/^(true|yes|t|y|1)$/) { + $value = 1; + } + elsif ($value =~ m/^(false|no|f|n|0)$/) { + $value = 0; + } + last; + } + } + return $value; } ############################################################################### # configReplace(file, pattern, line) # The first line in file that matches pattern gets replaced by line. # line will be added at the end of the file if pattern does not match. -############################################################################### +# sub configReplace { my ($file, $pat, $line) = @_; my @lines = &getLines($file); @@ -640,39 +540,92 @@ sub configReplace { } ############################################################################### +# setOption (@options) +# parse @options for "key=value" (one element of @options) +# or "key", "value" (two elements of @options) pairs. +# (These were the values provided to --setoption.) +# +sub setOptions { + my (@options) = @_; + for (my $i = 0; $i < @options; $i++) { + my $o = $options[$i]; + + my ($key,$val); + if ($o =~ /=/) { + ($key,$val) = split (/=/, $o, 2); + } else { + $key = $o; + die "$0: no value for --setoption $key, goodbye.\n" + if $i + 1 >= @options; + $val = $options[$i + 1]; + $i++; + } + + die "$0: unexpected empty key or val for options (@options), goodbye.\n" + if !$key || !$val; + &setOption ($key, $val); + } +} + +############################################################################### # setOption (option, value) # sets option to value in the config file (replacing the existing setting # or by adding a new line to the config file). -############################################################################### +# sub setOption { my ($opt, $val) = @_; if ($opt eq "LW35") { if ($val !~ m/^(URWkb|URW|ADOBE|ADOBEkb)$/) { - die "Invalid value $val for option $opt.\n"; + die "$0: Invalid value $val for option $opt.\n"; } + } elsif ($opt =~ +m/^(dvipsPreferOutline|dvipsDownloadBase35|(pdftex|dvipdfm)DownloadBase14)$/) { + if ($val !~ m/^(true|false)$/) { + die "$0: Invalid value $val for option $opt; should be \"true\" or \"false\".\n"; + } + } else { + die "$0: Unsupported option $opt.\n"; } - elsif ($opt =~ - m/^(dvipsPreferOutline|dvipsDownloadBase35|pdftexDownloadBase14)$/) { - if ($val !~ m/^(true|false)$/) { - die "invalid value $val for option $opt.\n"; + + # silently accept this old option name, just in case. + return if $opt eq "dvipdfmDownloadBase14"; + + #print "Setting option $opt to $val...\n" if !$quiet; + &configReplace("$cnfFile", "^" . "$opt" . "\\s", "$opt $val"); +} + +############################################################################### +# showOptions(item) +# show Options for an item +# +sub showOptions { + foreach my $item (@_) { + if ($item eq "LW35") { + print "URWkb URW ADOBE ADOBEkb\n"; + } + elsif ($item =~ +m/(dvipsPreferOutline|(dvipdfm|pdftex)DownloadBase14|dvipsDownloadBase35)/) { + print "true false\n"; + } + else { + print "Unknown item \"$item\"; should be one of LW35, dvipsPreferOutline,\n" + . " dvipsDownloadBase35, or pdftexDownloadBase14\n"; } } - else { - die "Unsupported option $opt.\n"; - } - &configReplace("$cnfFile", "^" . "$opt" . "\\s", "$opt $val"); + exit 0 } + ############################################################################### # enableMap (type, map) # enables an entry in the config file for map with a given type. -############################################################################### +# sub enableMap { my ($type, $map) = @_; if ($type !~ m/^(Map|MixedMap)$/) { - die "updmap: Invalid mapType $type\n"; + die "$0: Invalid mapType $type\n"; } # a map can only have one type, so we carefully disable everything # about map here: @@ -685,7 +638,7 @@ sub enableMap { ############################################################################### # disableMap (map) # disables map in config file (any type) -############################################################################### +# sub disableMap { my ($map) = @_; my %count = (); @@ -708,48 +661,11 @@ sub disableMap { } ############################################################################### -# initVars() -# initialize global variables -############################################################################### -sub initVars { - $progname="updmap"; - $quiet = 0; - $nohash = 0; - $nomkmap = 0; - $verbose = 1; - $cnfFile = ""; - $cnfFileShort = "updmap.cfg"; - $outputdir = ""; - chomp($TEXMFMAIN =`kpsewhich --var-value=TEXMFMAIN`); -} - -############################################################################### -# showOptions(item) -# show Options for an item -############################################################################### -sub showOptions { - foreach my $item (@_) { - if ($item eq "LW35") { - print "URWkb URW ADOBE ADOBEkb\n"; - } - elsif ($item =~ - m/(dvipsPreferOutline|pdftexDownloadBase14|dvipsDownloadBase35)/) { - print "true false\n"; - } - else { - print "Unknown item \"$item\". Choose one of LW35, dvipsPreferOutline,\n" - . " dvipsDownloadBase35, or pdftexDownloadBase14\n"; - } - } - exit 0 -} - -############################################################################### # setupDestDir() # find an output directory if none specified on cmd line. First choice is # $TEXMFVAR/fonts/map/updmap (if TEXMFVAR is set), next is relative to # config file location. Fallback is $TEXMFMAIN/fonts/map/updmap. -############################################################################### +# sub setupOutputDir { my($od, $driver) = @_; @@ -762,13 +678,13 @@ sub setupOutputDir { if ($tf) { &mkdirhier("$tf/$rel"); if (! -w "$tf/$rel") { - die "Directory \"$tf/$rel\" isn't writable.\n"; + die "$0: Directory \"$tf/$rel\" isn't writable.\n"; } } $od = "$tf/$rel"; } &mkdirhier($od); - print "$driver output dir: \"$od\"\n" if (! $quiet); + print "$driver output dir: \"$od\"\n" if !$quiet; return $od; } @@ -780,7 +696,7 @@ sub setupDestDir { ############################################################################### # setupCfgFile() # find config file if none specified on cmd line. -############################################################################### +# sub setupCfgFile { if (! $cnfFile) { my $tf = `kpsewhich --var-value=TEXMFCONFIG`; @@ -791,71 +707,46 @@ sub setupCfgFile { unlink "$tf/web2c/$cnfFileShort"; my $original_cfg=`kpsewhich updmap.cfg`; chomp($original_cfg); - print("copy $original_cfg => $tf/web2c/$cnfFileShort\n") if (! $quiet); + print("copy $original_cfg => $tf/web2c/$cnfFileShort\n") if !$quiet; $newcnf="$tf/web2c/$cnfFileShort"; ©File("$original_cfg", "$tf/web2c/$cnfFileShort"); $updLSR->{add}("$tf/web2c/$cnfFileShort"); } } $cnfFile = "$tf/web2c/updmap.cfg"; - if ($cnfFile) { - print "Config file: \"$cnfFile\"\n" if (! $quiet); - } - else { - die "Config file updmap.cfg not found.\n"; + if (-s $cnfFile) { + print "Config file: \"$cnfFile\"\n" if !$quiet; + } else { + die "$0: Config file updmap.cfg not found.\n"; } } } ############################################################################### -# processOptions() -# process cmd line options -############################################################################### -sub processOptions { - unless (&GetOptions ( - "cnffile=s" => \$cnfFile, - "copy" => \$copy, - "disable=s" => \@disableItem, - "dvipsoutputdir=s" => \$dvipsoutputdir, - "enable=s" => \$enableItem, - "e|edit" => \$opt_edit, - "force" => \$opt_force, - "listavailablemaps" => \$listavailablemaps, - "l|listmaps" => \$listmaps, - "nohash" => \$nohash, - "nomkmap" => \$nomkmap, - "n|dry-run" => \$dry_run, - "outputdir=s" => \$outputdir, - "pdftexoutputdir=s" => \$pdftexoutputdir, - "q|quiet" => \$quiet, - "setoption=s" => \%setOption, - "showoptions=s" => \@showoptions, - "syncwithtrees" => \$syncwithtrees, - "version" => sub { print &version() . "\n"; exit(0) }, - "h|help" => \$opt_help)) { - my $progname = &progname(); - die "Try \"$progname --help\".\n"; - } +# catMaps(regex) +# filter config file by regex for map lines and extract the map filenames. +# These are then looked up (by kpsewhich in locateMap) and the content of +# all map files is send to stdout. +# +sub catMaps { + my ($map) = @_; + my %count = ( ); + my @maps = grep { $_ =~ m/$map/ } @cfg; + map{ + $_ =~ s/\#.*//; + $_ =~ s/\s*([^\s]*)\s*([^\s]*)/$2/; + } @maps; + @maps = sort(@maps); + @maps = grep { ++$count{$_} < 2; } @maps; - if ($outputdir) { - $dvipsoutputdir = $outputdir if (! $dvipsoutputdir); - $pdftexoutputdir = $outputdir if (! $pdftexoutputdir); - } - if ($cnfFile && ! -f $cnfFile) { - die "Config file \"$cnfFile\" not found.\n"; - } - if ($dvipsoutputdir && ! -d $dvipsoutputdir) { - &mkdirhier ($dvipsoutputdir); - } - if ($pdftexoutputdir && ! -d $pdftexoutputdir) { - &mkdirhier ($pdftexoutputdir); - } + @maps = &locateMap(@maps); + return @maps; } ############################################################################### # listMaps() # list all maps mentioned in the config file -############################################################################### +# sub listMaps { my $what=shift; my @mapfiles; @@ -888,7 +779,7 @@ sub listMaps { my $entry="$_"; unless (grep { $_ =~ m/$entry/ } @paths) { &disableMap($entry); - print " $entry disabled\n" if (! $quiet); + print " $entry disabled\n" if !$quiet; } } @lines; } @@ -899,7 +790,7 @@ sub listMaps { # normalizeLines() # remove comments, whitespace is exactly one space, no empty lines, # no whitespace at end of line, one space before and after " -############################################################################### +# sub normalizeLines { my @lines = @_; my %count = (); @@ -919,11 +810,13 @@ sub normalizeLines { ############################################################################### # to_pdftex() -# strip "PS_Encoding_Name ReEncodeFont" from map entries because -# they are ignored by pdftex anyway. -############################################################################### +# if $pdftexStripEnc is set, strip "PS_Encoding_Name ReEncodeFont" +# from map entries; they are ignored by pdftex. But since the sh +# incarnation of updmap included them, and we want to minimize +# differences, this is not done by default. +# sub to_pdftex { - return unless $pdftexStripEnc; + return @_ unless $pdftexStripEnc; my @in = @_; my @out; foreach my $line (@in) { @@ -936,10 +829,11 @@ sub to_pdftex { return @out; } + ############################################################################### # mkMaps() # the main task of this script: create the output files -############################################################################### +# sub mkMaps { my @lines; my $logfile; @@ -947,14 +841,14 @@ sub mkMaps { $cache=1; if (! $dry_run) { - my $TEXMFVAR=`kpsewhich --var-value=TEXMFVAR`; + my $TEXMFVAR = `kpsewhich --var-value=TEXMFVAR`; chomp($TEXMFVAR); - $logfile="$TEXMFVAR/web2c/updmap.log"; + $logfile = "$TEXMFVAR/web2c/updmap.log"; mkdirhier "$TEXMFVAR/web2c"; open LOG, ">$logfile" - or die "Can't open \"$logfile\""; + or die "$0: Can't open log file \"$logfile\": $!"; $writelog=1; - print LOG &version() . "\n"; + print LOG &version(); printf LOG "%s\n\n", scalar localtime(); print LOG "Using config file \"$cnfFile\".\n"; } @@ -963,7 +857,7 @@ sub mkMaps { if ($dry_run) { print $str; } else { - print $str if (! $quiet); + print $str if !$quiet; print LOG $str; } } @@ -987,26 +881,26 @@ sub mkMaps { $pdftexDownloadBase14 = &cfgval("pdftexDownloadBase14"); $pdftexDownloadBase14 = 1 unless (defined $pdftexDownloadBase14); - &wlog ("\nupdmap " . - ($dry_run ? "would create" : "is creating") . - " new map files using the following configuration:" . - "\n LW35 font names : " . - $mode . - "\n prefer outlines : " . - ($dvipsPreferOutline ? "true" : "false") . - "\n texhash enabled : " . - ($nohash ? "false" : "true") . - "\n download standard fonts (dvips) : " . - ($dvipsDownloadBase35 ? "true" : "false") . - "\n download standard fonts (pdftex) : " . - ($pdftexDownloadBase14 ? "true" : "false") . - "\n\n"); + &wlog ("\n$0 " + . ($dry_run ? "would create" : "is creating") . " new map files" + . "\nusing the following configuration:" + . "\n LW35 font names : " + . $mode + . "\n prefer outlines : " + . ($dvipsPreferOutline ? "true" : "false") + . "\n texhash enabled : " + . ($nohash ? "false" : "true") + . "\n download standard fonts (dvips) : " + . ($dvipsDownloadBase35 ? "true" : "false") + . "\n download standard fonts (pdftex) : " + . ($pdftexDownloadBase14 ? "true" : "false") + . "\n\n"); &wlog ("Scanning for LW35 support files"); $dvips35 = &locateMap("dvips35.map"); $pdftex35 = &locateMap("pdftex35.map"); $ps2pk35 = &locateMap("ps2pk35.map"); - my $LW35="\n$dvips35\n$pdftex35\n$ps2pk35\n\n"; + my $LW35 = "\n$dvips35\n$pdftex35\n$ps2pk35\n\n"; if ($dry_run) { print $LW35; } else { @@ -1045,10 +939,9 @@ sub mkMaps { if (@missing > 0) { print STDERR "\nERROR: The following map file(s) couldn't be found:\n\t"; print STDERR join(' ', @missing); - my $progname=&progname(); print STDERR "\n\n\tDid you run mktexlsr?\n\n" . - "\tYou can delete non-existent map entries using the command\n". - "\n\t $progname --syncwithtrees\n\n"; + "\tYou can delete non-existent map entries using the option\n". + "\t --syncwithtrees.\n\n"; exit (1); } exit(0) if $dry_run; @@ -1072,14 +965,14 @@ sub mkMaps { close FILE; } - print "Generating output for ps2pk...\n" if (! $quiet); + print "Generating output for ps2pk...\n" if !$quiet; my @ps2pk_map = &transLW35($ps2pk35); push @ps2pk_map, &getLines(@tmp1); push @ps2pk_map, &getLines(@tmp2); &writeLines(">$dvipsoutputdir/ps2pk.map", &normalizeLines(@ps2pk_map)); - print "Generating output for dvips...\n" if (! $quiet); + print "Generating output for dvips...\n" if !$quiet; my @download35_map = &transLW35($ps2pk35); &writeLines(">$dvipsoutputdir/download35.map", &normalizeLines(@download35_map)); @@ -1101,7 +994,7 @@ sub mkMaps { &writeLines(">$dvipsoutputdir/psfonts_pk.map", &normalizeLines(@psfonts_pk_map)); - print "Generating output for pdftex...\n" if (! $quiet); + print "Generating output for pdftex...\n" if !$quiet; # remove PaintType due to Sebastian's request my @tmp3 = &transLW35($pdftex35); push @tmp3, &getLines(@tmp1); @@ -1166,24 +1059,191 @@ sub mkMaps { $updLSR->{add}("$d/$f"); } close LOG; - print "\nTranscript written on \"$logfile\".\n" if (! $quiet); + print "\nTranscript written on \"$logfile\".\n" if !$quiet; } + ############################################################################### -# main() -# execution starts here +# initVars() +# initialize global variables +# +sub initVars { + $quiet = 0; + $nohash = 0; + $nomkmap = 0; + $cnfFile = ""; + $cnfFileShort = "updmap.cfg"; + $outputdir = ""; + chomp($TEXMFMAIN =`kpsewhich --var-value=TEXMFMAIN`); + + @psADOBE = ( + 's/ URWGothicL-Demi / AvantGarde-Demi /', + 's/ URWGothicL-DemiObli / AvantGarde-DemiOblique /', + 's/ URWGothicL-Book / AvantGarde-Book /', + 's/ URWGothicL-BookObli / AvantGarde-BookOblique /', + 's/ URWBookmanL-DemiBold / Bookman-Demi /', + 's/ URWBookmanL-DemiBoldItal / Bookman-DemiItalic /', + 's/ URWBookmanL-Ligh / Bookman-Light /', + 's/ URWBookmanL-LighItal / Bookman-LightItalic /', + 's/ NimbusMonL-Bold / Courier-Bold /', + 's/ NimbusMonL-BoldObli / Courier-BoldOblique /', + 's/ NimbusMonL-Regu / Courier /', + 's/ NimbusMonL-ReguObli / Courier-Oblique /', + 's/ NimbusSanL-Bold / Helvetica-Bold /', + 's/ NimbusSanL-BoldCond / Helvetica-Narrow-Bold /', + 's/ NimbusSanL-BoldItal / Helvetica-BoldOblique /', + 's/ NimbusSanL-BoldCondItal / Helvetica-Narrow-BoldOblique /', + 's/ NimbusSanL-Regu / Helvetica /', + 's/ NimbusSanL-ReguCond / Helvetica-Narrow /', + 's/ NimbusSanL-ReguItal / Helvetica-Oblique /', + 's/ NimbusSanL-ReguCondItal / Helvetica-Narrow-Oblique /', + 's/ CenturySchL-Bold / NewCenturySchlbk-Bold /', + 's/ CenturySchL-BoldItal / NewCenturySchlbk-BoldItalic /', + 's/ CenturySchL-Roma / NewCenturySchlbk-Roman /', + 's/ CenturySchL-Ital / NewCenturySchlbk-Italic /', + 's/ URWPalladioL-Bold / Palatino-Bold /', + 's/ URWPalladioL-BoldItal / Palatino-BoldItalic /', + 's/ URWPalladioL-Roma / Palatino-Roman /', + 's/ URWPalladioL-Ital / Palatino-Italic /', + 's/ StandardSymL / Symbol /', + 's/ NimbusRomNo9L-Medi / Times-Bold /', + 's/ NimbusRomNo9L-MediItal / Times-BoldItalic /', + 's/ NimbusRomNo9L-Regu / Times-Roman /', + 's/ NimbusRomNo9L-ReguItal / Times-Italic /', + 's/ URWChanceryL-MediItal / ZapfChancery-MediumItalic /', + 's/ Dingbats / ZapfDingbats /', + ); + + @fileADOBEkb = ( + 's/\buagd8a.pfb\b/pagd8a.pfb/', + 's/\buagdo8a.pfb\b/pagdo8a.pfb/', + 's/\buagk8a.pfb\b/pagk8a.pfb/', + 's/\buagko8a.pfb\b/pagko8a.pfb/', + 's/\bubkd8a.pfb\b/pbkd8a.pfb/', + 's/\bubkdi8a.pfb\b/pbkdi8a.pfb/', + 's/\bubkl8a.pfb\b/pbkl8a.pfb/', + 's/\bubkli8a.pfb\b/pbkli8a.pfb/', + 's/\bucrb8a.pfb\b/pcrb8a.pfb/', + 's/\bucrbo8a.pfb\b/pcrbo8a.pfb/', + 's/\bucrr8a.pfb\b/pcrr8a.pfb/', + 's/\bucrro8a.pfb\b/pcrro8a.pfb/', + 's/\buhvb8a.pfb\b/phvb8a.pfb/', + 's/\buhvb8ac.pfb\b/phvb8an.pfb/', + 's/\buhvbo8a.pfb\b/phvbo8a.pfb/', + 's/\buhvbo8ac.pfb\b/phvbo8an.pfb/', + 's/\buhvr8a.pfb\b/phvr8a.pfb/', + 's/\buhvr8ac.pfb\b/phvr8an.pfb/', + 's/\buhvro8a.pfb\b/phvro8a.pfb/', + 's/\buhvro8ac.pfb\b/phvro8an.pfb/', + 's/\buncb8a.pfb\b/pncb8a.pfb/', + 's/\buncbi8a.pfb\b/pncbi8a.pfb/', + 's/\buncr8a.pfb\b/pncr8a.pfb/', + 's/\buncri8a.pfb\b/pncri8a.pfb/', + 's/\buplb8a.pfb\b/pplb8a.pfb/', + 's/\buplbi8a.pfb\b/pplbi8a.pfb/', + 's/\buplr8a.pfb\b/pplr8a.pfb/', + 's/\buplri8a.pfb\b/pplri8a.pfb/', + 's/\busyr.pfb\b/psyr.pfb/', + 's/\butmb8a.pfb\b/ptmb8a.pfb/', + 's/\butmbi8a.pfb\b/ptmbi8a.pfb/', + 's/\butmr8a.pfb\b/ptmr8a.pfb/', + 's/\butmri8a.pfb\b/ptmri8a.pfb/', + 's/\buzcmi8a.pfb\b/pzcmi8a.pfb/', + 's/\buzdr.pfb\b/pzdr.pfb/', + ); + + @fileURW = ( + 's/\buagd8a.pfb\b/a010015l.pfb/', + 's/\buagdo8a.pfb\b/a010035l.pfb/', + 's/\buagk8a.pfb\b/a010013l.pfb/', + 's/\buagko8a.pfb\b/a010033l.pfb/', + 's/\bubkd8a.pfb\b/b018015l.pfb/', + 's/\bubkdi8a.pfb\b/b018035l.pfb/', + 's/\bubkl8a.pfb\b/b018012l.pfb/', + 's/\bubkli8a.pfb\b/b018032l.pfb/', + 's/\bucrb8a.pfb\b/n022004l.pfb/', + 's/\bucrbo8a.pfb\b/n022024l.pfb/', + 's/\bucrr8a.pfb\b/n022003l.pfb/', + 's/\bucrro8a.pfb\b/n022023l.pfb/', + 's/\buhvb8a.pfb\b/n019004l.pfb/', + 's/\buhvb8ac.pfb\b/n019044l.pfb/', + 's/\buhvbo8a.pfb\b/n019024l.pfb/', + 's/\buhvbo8ac.pfb\b/n019064l.pfb/', + 's/\buhvr8a.pfb\b/n019003l.pfb/', + 's/\buhvr8ac.pfb\b/n019043l.pfb/', + 's/\buhvro8a.pfb\b/n019023l.pfb/', + 's/\buhvro8ac.pfb\b/n019063l.pfb/', + 's/\buncb8a.pfb\b/c059016l.pfb/', + 's/\buncbi8a.pfb\b/c059036l.pfb/', + 's/\buncr8a.pfb\b/c059013l.pfb/', + 's/\buncri8a.pfb\b/c059033l.pfb/', + 's/\buplb8a.pfb\b/p052004l.pfb/', + 's/\buplbi8a.pfb\b/p052024l.pfb/', + 's/\buplr8a.pfb\b/p052003l.pfb/', + 's/\buplri8a.pfb\b/p052023l.pfb/', + 's/\busyr.pfb\b/s050000l.pfb/', + 's/\butmb8a.pfb\b/n021004l.pfb/', + 's/\butmbi8a.pfb\b/n021024l.pfb/', + 's/\butmr8a.pfb\b/n021003l.pfb/', + 's/\butmri8a.pfb\b/n021023l.pfb/', + 's/\buzcmi8a.pfb\b/z003034l.pfb/', + 's/\buzdr.pfb\b/d050000l.pfb/', + ); + + @fileADOBE = ( + 's/\buagd8a.pfb\b/agd_____.pfb/', + 's/\buagdo8a.pfb\b/agdo____.pfb/', + 's/\buagk8a.pfb\b/agw_____.pfb/', + 's/\buagko8a.pfb\b/agwo____.pfb/', + 's/\bubkd8a.pfb\b/bkd_____.pfb/', + 's/\bubkdi8a.pfb\b/bkdi____.pfb/', + 's/\bubkl8a.pfb\b/bkl_____.pfb/', + 's/\bubkli8a.pfb\b/bkli____.pfb/', + 's/\bucrb8a.pfb\b/cob_____.pfb/', + 's/\bucrbo8a.pfb\b/cobo____.pfb/', + 's/\bucrr8a.pfb\b/com_____.pfb/', + 's/\bucrro8a.pfb\b/coo_____.pfb/', + 's/\buhvb8a.pfb\b/hvb_____.pfb/', + 's/\buhvb8ac.pfb\b/hvnb____.pfb/', + 's/\buhvbo8a.pfb\b/hvbo____.pfb/', + 's/\buhvbo8ac.pfb\b/hvnbo___.pfb/', + 's/\buhvr8a.pfb\b/hv______.pfb/', + 's/\buhvr8ac.pfb\b/hvn_____.pfb/', + 's/\buhvro8a.pfb\b/hvo_____.pfb/', + 's/\buhvro8ac.pfb\b/hvno____.pfb/', + 's/\buncb8a.pfb\b/ncb_____.pfb/', + 's/\buncbi8a.pfb\b/ncbi____.pfb/', + 's/\buncr8a.pfb\b/ncr_____.pfb/', + 's/\buncri8a.pfb\b/nci_____.pfb/', + 's/\buplb8a.pfb\b/pob_____.pfb/', + 's/\buplbi8a.pfb\b/pobi____.pfb/', + 's/\buplr8a.pfb\b/por_____.pfb/', + 's/\buplri8a.pfb\b/poi_____.pfb/', + 's/\busyr.pfb\b/sy______.pfb/', + 's/\butmb8a.pfb\b/tib_____.pfb/', + 's/\butmbi8a.pfb\b/tibi____.pfb/', + 's/\butmr8a.pfb\b/tir_____.pfb/', + 's/\butmri8a.pfb\b/tii_____.pfb/', + 's/\buzcmi8a.pfb\b/zcmi____.pfb/', + 's/\buzdr.pfb\b/zd______.pfb/', + ); +} + + ############################################################################### +# main() +# sub main { &initVars; &processOptions; + &help if ($opt_help); + if (@showoptions) { &showOptions(@showoptions); exit 0; } - &help if ($opt_help); - &setupCfgFile; if ($listmaps) { @@ -1206,48 +1266,46 @@ sub main { my $cmd = ''; if ($opt_edit) { - my $editor = undef; - $editor ||= $ENV{'EDITOR'}; - $editor ||= $ENV{'VISUAL'}; - if (&win32) { - $editor ||= "notepad"; - } else { - $editor ||= "vi"; - } + # it's not a good idea to edit updmap.cfg manually these days, + # but for compatibility we'll silently keep the option. $cmd = 'edit'; - system("$editor $cnfFile"); - } - elsif (keys %setOption) { + my $editor = $ENV{'VISUAL'} || $ENV{'EDITOR'}; + $editor ||= (&win32 ? "notepad" : "vi"); + system($editor, $cnfFile); + + } elsif (@setoptions) { $cmd = 'setOption'; - foreach my $m (keys %setOption) { - &setOption ($m, $setOption{$m}); - } - } - elsif ($enableItem) { + &setOptions (@setoptions); + + } elsif ($enableItem) { $cmd = 'enableMap'; - if ($enableItem=~/=/) { + if ($enableItem =~ /=/) { &enableMap(split('=', $enableItem)); } else { &enableMap($enableItem, shift @ARGV); } - } - elsif (@disableItem) { + + } elsif (@disableItem) { $cmd = 'disableMap'; foreach my $m (@disableItem) { &disableMap($m); } } + if ($cmd && !$opt_force && &files_are_equal($bakFile, $cnfFile)) { - print "$cnfFile unchanged. Map files not recreated.\n" unless ($quiet); - } - else { + print "$cnfFile unchanged. Map files not recreated.\n" if !$quiet; + } else { if (! $nomkmap) { &setupDestDir; &mkMaps; } unlink ($bakFile); } - $updLSR->{exec}() unless $nohash; + + unless ($nohash) { + print "$0: Updating ls-R files.\n" if !$quiet; + $updLSR->{exec}() + } } __END__ |