diff options
Diffstat (limited to 'Build/source/texk/tetex/updmap')
-rwxr-xr-x | Build/source/texk/tetex/updmap | 1383 |
1 files changed, 1383 insertions, 0 deletions
diff --git a/Build/source/texk/tetex/updmap b/Build/source/texk/tetex/updmap new file mode 100755 index 00000000000..c66303fdeee --- /dev/null +++ b/Build/source/texk/tetex/updmap @@ -0,0 +1,1383 @@ +#!/bin/sh + +############################################################################### +# updmap: utility to maintain map files for outline fonts. +# +# Thomas Esser. Public domain. +# Usage: updmap [option] ... [command] +# +# Valid options: +# --cnffile file specify configuration file +# --dvipsoutputdir directory specify output directory (dvips syntax) +# --pdftexoutputdir directory specify output directory (pdftex syntax) +# --dvipdfmoutputdir directory specify output directory (dvipdfm syntax) +# --outputdir directory specify output directory (for all files) +# --nohash do not run texhash +# --nomkmap do not recreate map files +# --quiet reduce verbosity +# +# Valid commands: +# --edit edit $cnfFileShort file +# --help show this message +# --showoptions item show alternatives for options +# --setoption option value set option where option is one +# of dvipsPreferOutline, LW35, dvipsDownloadBase35, +# pdftexDownloadBase14 or dvipdfmDownloadBase14 +# --setoption option=value see above, just different syntax +# --enable maptype mapfile add or enable a Map or MixedMap +# --enable Map=mapfile add or enable a Map +# --enable MixedMap=mapfile add or enable a MixedMap +# --disable mapfile disable Map or MixedMap for mapfile +# --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 filter out +# unavailable map files +############################################################################### + +############################################################################### +# program history: +# Fr Jul 22 07:22:38 CEST 2005 +# write hint about log file into output files +# Fr Apr 8 19:15:05 CEST 2005 +# cleanup now has an argument for the return code +# So Mär 27 18:52:06 CEST 2005 +# honor $TMPDIR, $TEMP and $TMP, not just $TMP +# Do Mär 10 19:31:39 CET 2005 +# add a few quotes for $cnfFile with whitespace +# Sa Jan 15 18:13:46 CET 2005 +# avoid multiple variable assignments in one statement +# Sa Dez 25 12:44:23 CET 2004 +# implementaion adopted for teTeX-3.0 (tcfmgr) +# Mi Nov 3 16:33:22 CET 2004 +# add "--setoption option=value" syntax +# Fr Okt 29 21:05:53 CEST 2004 +# add --enable Map=... / --enable MixedMap=... +# Mi Okt 20 19:17:19 CEST 2004 +# transcript added; even better warnings / error messages +# So Okt 17 19:07:17 CEST 2004 +# improved warnings / error messages +# added --syncwithtrees +# added --listavailablemaps +# Mi Okt 6 16:37:49 CEST 2004 +# commenty may start with any of *#;% +# Sun Aug 1 11:42:14 CEST 2004, te +# remove pdftex related hacks; pdftex no longer needs them! +# Thu May 13 22:04:23 CEST 2004, te +# support user with new map file locations +# Fri Mar 19 15:22:55 CET 2004, te +# output "xxx yyy" instead of " xxx yyy " (less blanks) +# Fri Jan 2 22:41:11 CET 2004, te: +# add version string +# Wed Aug 20 18:51:47 CEST 2003 +# store map files to fonts/map, add options for dvipsoutputdir, +# pdftexoutputdir, dvipdfmoutputdir +# Mon Mar 24 13:40:55 CET 2003 +# fix fmex[789] for dvipdfm (no -r option) +# Sun Mar 23 18:58:00 CET 2003 +# make the script robust against whitespace in filenames +# Mon Jan 27 22:38:44 CET 2003 +# don't call a function before processOptions; we may loose our +# argument list with some broken shells +# Mon Jan 27 06:55:28 CET 2003 +# fix unportable egrep / sed +# Sat Jan 18 10:10:26 CET 2003 +# use $tmp8 in dvips2dvipdfm() +# Thu Jan 2 23:14:34 CET 2003 +# add umask 022, so generated files are always world-readable +# Sun Oct 27 11:33:04 CET 2002 +# write output in normalized format +# add support for dvipdfm +# Mon Sep 22 19:18:57 CEST 2002 +# fix typo: buildin -> builtin +# Mon Sep 2 19:18:57 CEST 2002 +# fix condensed <-> narrow mapping +# Sun Sep 1 15:02:28 CEST 2002 +# add dvipsDownloadBase35 / pdftexDownloadBase14 options +# Wed May 22 20:00:13 CEST 2002 +# listmaps option added by Gerben Wierda +# Tue May 21 05:27:37 CEST 2002 +# now removing map files before rewriting them; fixes permission problems +# Tue May 21 05:05:34 CEST 2002: +# cli options added: showoptions, setoption, enable, disable, nomkmap +# now even more verbose; now reporting non-existing map files +# fixing trap for MAC OS/X compatibility +# Fri May 17 22:38:37 CEST 2002: +# rewritten from teTeX-1.0 version; Completely new designed. +############################################################################### + +test -f /bin/ksh && test -z "$RUNNING_KSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ + && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } +unset RUNNING_KSH + +test -f /bin/bsh && test -z "$RUNNING_BSH" \ + && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \ + && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; } +unset RUNNING_BSH + +export PATH + +# hack around a bug in zsh: +test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' + +# the version string +version=1122009795 # seconds since `00:00:00 1970-01-01 UTC' + # date '+%s' (with GNU date) + +############################################################################### +# help() +# display help message and exit +############################################################################### +help() +{ + cat <<eof +Usage: updmap [option] ... [command] + +Valid options: + --cnffile file specify configuration file + --dvipsoutputdir directory specify output directory (dvips syntax) + --pdftexoutputdir directory specify output directory (pdftex syntax) + --dvipdfmoutputdir directory specify output directory (dvipdfm syntax) + --outputdir directory specify output directory (for all files) + --nohash do not run texhash + --nomkmap do not recreate map files + --quiet reduce verbosity + +Valid commands: + --edit edit $cnfFileShort file + --help show this message + --showoptions item show alternatives for options + --setoption option value set option where option is one + of dvipsPreferOutline, LW35, dvipsDownloadBase35, + pdftexDownloadBase14 or dvipdfmDownloadBase14 + --setoption option=value see above, just different syntax + --enable maptype mapfile add or enable a Map or MixedMap + --enable Map=mapfile add or enable a Map + --enable MixedMap=mapfile add or enable a MixedMap + --disable mapfile disable Map or MixedMap for mapfile + --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 filter out + unavailable map files +eof + (exit 0); exit +} + +############################################################################### +# verboseMsg(msg) +# print `msg' to stderr is $verbose is true +############################################################################### +verboseMsg() { + test -n "$log" && echo ${1+"$@"} >> "$log" + $verbose && echo ${1+"$@"} >&2 +} + +############################################################################### +# verboseCat() +# cat to stderr is $verbose is true +############################################################################### +verboseCat() { + if $verbose; then + if test -n "$log"; then + cat ${1+"$@"} | tee -a "$log" >&2 + else + cat ${1+"$@"} >&2 + fi + else + test -n "$log" && cat ${1+"$@"} >> "$log" + fi +} + +############################################################################### +# warn(msg) +# print `msg' to stderr +############################################################################### +warn() +{ + test -n "$log" && echo ${1+"$@"} >> "$log" + echo ${1+"$@"} >&2 +} + +############################################################################### +# abort(errmsg) +# print `errmsg' to stderr and exit with error code 1 +############################################################################### +abort() +{ + warn "$progname: $1." + cleanup 1 +} + +############################################################################### +# cfgval(variable) +# read variable ($1) from config file, first match wins +############################################################################### +cfgval() +{ + cat "$cnfFile" | sed -n 's/^'"$1"'[ =][ =]*//p' | sed q +} + +############################################################################### +# setupSymlinks() +# set symlink for psfonts.map according to dvipsPreferOutline variable +############################################################################### +setupSymlinks() +{ + rm -f "$dvipsoutputdir/psfonts.map" + if test "x$dvipsPreferOutline" = xtrue; then + ln -s psfonts_t1.map "$dvipsoutputdir/psfonts.map" + else + ln -s psfonts_pk.map "$dvipsoutputdir/psfonts.map" + fi + + rm -f "$pdftexoutputdir/pdftex.map" + if test "x$pdftexDownloadBase14" = xtrue; then + ln -s pdftex_dl14.map "$pdftexoutputdir/pdftex.map" + else + ln -s pdftex_ndl14.map "$pdftexoutputdir/pdftex.map" + fi + rm -f "$dvipdfmoutputdir/dvipdfm.map" + if test "x$dvipdfmDownloadBase14" = xtrue; then + ln -s dvipdfm_dl14.map "$dvipdfmoutputdir/dvipdfm.map" + else + ln -s dvipdfm_ndl14.map "$dvipdfmoutputdir/dvipdfm.map" + fi +} + +############################################################################### +# transLW35(args ...) +# transform fontname and filenames according to transformation specified +# by mode +############################################################################### +transLW35() +{ + case $mode in + ""|URWkb) + cat ${1+"$@"} + ;; + URW) + fileURW ${1+"$@"} + ;; + ADOBE|ADOBEkb) + psADOBE ${1+"$@"} | file$mode + ;; + esac +} + +############################################################################### +# 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. +############################################################################### +catMaps() +{ + rm -f $catMapsFailed + egrep "$1" "$cnfFile" \ + | sed 's@#.*@@' \ + | awk '{print $2}' \ + | sort \ + | uniq \ + | grep . > $tmp4 + + while read map; do + file=`locateMap "$map"` || { touch $catMapsFailed; break; } + + # output the file; also output a newline, because the final newline + # might be missing in the map file; Empty lines are filtered out later, + # so it does not really hurt do do this here. + test -n "$file" && { cat "$file"; echo; } + done < $tmp4 + if test -f $catMapsFailed; then + false; return 1 + else + true; return 0 + fi +} + +############################################################################### +# 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. +############################################################################### +configReplace() +{ + file=$1; pat=$2; line=$3 + + if grep "$pat" "$file" >/dev/null; then + ed "$file" >/dev/null 2>&1 <<-eof + /$pat/ + c + $line + . + w + q +eof + else + echo "$line" >> "$file" + fi +} + +############################################################################### +# 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). +############################################################################### +setOption() +{ + opt=$1 + val=$2 + case "$opt" in + LW35) + case "$val" in + URWkb|URW|ADOBE|ADOBEkb) + ;; + *) + abort "invalid value $val for option $opt" + ;; + esac + ;; + dvipsPreferOutline|dvipsDownloadBase35|pdftexDownloadBase14|dvipdfmDownloadBase14) + case "$val" in + true|false) + ;; + *) + abort "invalid value $val for option $opt" + esac + ;; + *) + abort "unsupported option $opt" + ;; + esac + + configReplace "$cnfFile" "^$opt[ ]" "$opt $val" +} + +############################################################################### +# enableMap (type, map) +# enables an entry in the config file for map with a given type. +############################################################################### +enableMap() +{ + case $1 in + Map|MixedMap) + ;; + *) + abort "invalid mapType $1" + ;; + esac + + # a map can only have one type, so we carefully disable everything + # about map here: + disableMap "$2" + + # now enable with the right type: + configReplace "$cnfFile" "^#![ ]*$1[ ]*$2" "$1 $2" +} + +############################################################################### +# disableMap (map) +# disables map in config file (any type) +############################################################################### +disableMap() +{ + #mapType=`awk '($1 == "MixedMap" || $1 == "Map") && $2 == map { print $1 }' \ + # map=$1 <"$cnfFile" | sort | uniq` + map=$1 + mapType=`egrep "^(MixedMap|Map)[ ]*$map( | |$)" "$cnfFile" | awk '{print $1}' | sort | uniq` + for type in $mapType; do + configReplace "$cnfFile" "^$type[ ]*$1" "#! $type $1" + done +} + +############################################################################### +# psADOBE() +# transform fontnames from URW to Adobe +############################################################################### +psADOBE() +{ + sed \ + -e 's/ URWGothicL-Demi / AvantGarde-Demi /' \ + -e 's/ URWGothicL-DemiObli / AvantGarde-DemiOblique /' \ + -e 's/ URWGothicL-Book / AvantGarde-Book /' \ + -e 's/ URWGothicL-BookObli / AvantGarde-BookOblique /' \ + -e 's/ URWBookmanL-DemiBold / Bookman-Demi /' \ + -e 's/ URWBookmanL-DemiBoldItal / Bookman-DemiItalic /' \ + -e 's/ URWBookmanL-Ligh / Bookman-Light /' \ + -e 's/ URWBookmanL-LighItal / Bookman-LightItalic /' \ + -e 's/ NimbusMonL-Bold / Courier-Bold /' \ + -e 's/ NimbusMonL-BoldObli / Courier-BoldOblique /' \ + -e 's/ NimbusMonL-Regu / Courier /' \ + -e 's/ NimbusMonL-ReguObli / Courier-Oblique /' \ + -e 's/ NimbusSanL-Bold / Helvetica-Bold /' \ + -e 's/ NimbusSanL-BoldCond / Helvetica-Narrow-Bold /' \ + -e 's/ NimbusSanL-BoldItal / Helvetica-BoldOblique /' \ + -e 's/ NimbusSanL-BoldCondItal / Helvetica-Narrow-BoldOblique /' \ + -e 's/ NimbusSanL-Regu / Helvetica /' \ + -e 's/ NimbusSanL-ReguCond / Helvetica-Narrow /' \ + -e 's/ NimbusSanL-ReguItal / Helvetica-Oblique /' \ + -e 's/ NimbusSanL-ReguCondItal / Helvetica-Narrow-Oblique /' \ + -e 's/ CenturySchL-Bold / NewCenturySchlbk-Bold /' \ + -e 's/ CenturySchL-BoldItal / NewCenturySchlbk-BoldItalic /' \ + -e 's/ CenturySchL-Roma / NewCenturySchlbk-Roman /' \ + -e 's/ CenturySchL-Ital / NewCenturySchlbk-Italic /' \ + -e 's/ URWPalladioL-Bold / Palatino-Bold /' \ + -e 's/ URWPalladioL-BoldItal / Palatino-BoldItalic /' \ + -e 's/ URWPalladioL-Roma / Palatino-Roman /' \ + -e 's/ URWPalladioL-Ital / Palatino-Italic /' \ + -e 's/ StandardSymL / Symbol /' \ + -e 's/ NimbusRomNo9L-Medi / Times-Bold /' \ + -e 's/ NimbusRomNo9L-MediItal / Times-BoldItalic /' \ + -e 's/ NimbusRomNo9L-Regu / Times-Roman /' \ + -e 's/ NimbusRomNo9L-ReguItal / Times-Italic /' \ + -e 's/ URWChanceryL-MediItal / ZapfChancery-MediumItalic /' \ + -e 's/ Dingbats / ZapfDingbats /' \ + ${1+"$@"} +} + +############################################################################### +# fileADOBEkb() +# transform filenames from URW to ADOBE (both berry names) +############################################################################### +fileADOBEkb() +{ + sed \ + -e 's/\([^A-Za-z]\)uagd8a.pfb/\1pagd8a.pfb/' \ + -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1pagdo8a.pfb/' \ + -e 's/\([^A-Za-z]\)uagk8a.pfb/\1pagk8a.pfb/' \ + -e 's/\([^A-Za-z]\)uagko8a.pfb/\1pagko8a.pfb/' \ + -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1pbkd8a.pfb/' \ + -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1pbkdi8a.pfb/' \ + -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1pbkl8a.pfb/' \ + -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1pbkli8a.pfb/' \ + -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1pcrb8a.pfb/' \ + -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1pcrbo8a.pfb/' \ + -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1pcrr8a.pfb/' \ + -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1pcrro8a.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1phvb8a.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1phvb8an.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1phvbo8a.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1phvbo8an.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1phvr8a.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1phvr8an.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1phvro8a.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1phvro8an.pfb/' \ + -e 's/\([^A-Za-z]\)uncb8a.pfb/\1pncb8a.pfb/' \ + -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1pncbi8a.pfb/' \ + -e 's/\([^A-Za-z]\)uncr8a.pfb/\1pncr8a.pfb/' \ + -e 's/\([^A-Za-z]\)uncri8a.pfb/\1pncri8a.pfb/' \ + -e 's/\([^A-Za-z]\)uplb8a.pfb/\1pplb8a.pfb/' \ + -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1pplbi8a.pfb/' \ + -e 's/\([^A-Za-z]\)uplr8a.pfb/\1pplr8a.pfb/' \ + -e 's/\([^A-Za-z]\)uplri8a.pfb/\1pplri8a.pfb/' \ + -e 's/\([^A-Za-z]\)usyr.pfb/\1psyr.pfb/' \ + -e 's/\([^A-Za-z]\)utmb8a.pfb/\1ptmb8a.pfb/' \ + -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1ptmbi8a.pfb/' \ + -e 's/\([^A-Za-z]\)utmr8a.pfb/\1ptmr8a.pfb/' \ + -e 's/\([^A-Za-z]\)utmri8a.pfb/\1ptmri8a.pfb/' \ + -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1pzcmi8a.pfb/' \ + -e 's/\([^A-Za-z]\)uzdr.pfb/\1pzdr.pfb/' \ + ${1+"$@"} +} + +############################################################################### +# fileURW() +# transform filenames from URWkb (berry names) to URW (vendor names) +############################################################################### +fileURW() +{ + sed \ + -e 's/\([^A-Za-z]\)uagd8a.pfb/\1a010015l.pfb/' \ + -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1a010035l.pfb/' \ + -e 's/\([^A-Za-z]\)uagk8a.pfb/\1a010013l.pfb/' \ + -e 's/\([^A-Za-z]\)uagko8a.pfb/\1a010033l.pfb/' \ + -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1b018015l.pfb/' \ + -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1b018035l.pfb/' \ + -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1b018012l.pfb/' \ + -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1b018032l.pfb/' \ + -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1n022004l.pfb/' \ + -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1n022024l.pfb/' \ + -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1n022003l.pfb/' \ + -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1n022023l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1n019004l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1n019044l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1n019024l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1n019064l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1n019003l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1n019043l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1n019023l.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1n019063l.pfb/' \ + -e 's/\([^A-Za-z]\)uncb8a.pfb/\1c059016l.pfb/' \ + -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1c059036l.pfb/' \ + -e 's/\([^A-Za-z]\)uncr8a.pfb/\1c059013l.pfb/' \ + -e 's/\([^A-Za-z]\)uncri8a.pfb/\1c059033l.pfb/' \ + -e 's/\([^A-Za-z]\)uplb8a.pfb/\1p052004l.pfb/' \ + -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1p052024l.pfb/' \ + -e 's/\([^A-Za-z]\)uplr8a.pfb/\1p052003l.pfb/' \ + -e 's/\([^A-Za-z]\)uplri8a.pfb/\1p052023l.pfb/' \ + -e 's/\([^A-Za-z]\)usyr.pfb/\1s050000l.pfb/' \ + -e 's/\([^A-Za-z]\)utmb8a.pfb/\1n021004l.pfb/' \ + -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1n021024l.pfb/' \ + -e 's/\([^A-Za-z]\)utmr8a.pfb/\1n021003l.pfb/' \ + -e 's/\([^A-Za-z]\)utmri8a.pfb/\1n021023l.pfb/' \ + -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1z003034l.pfb/' \ + -e 's/\([^A-Za-z]\)uzdr.pfb/\1d050000l.pfb/' \ + ${1+"$@"} +} + +############################################################################### +# fileADOBE() +# transform filenames from URWkb (berry names) to ADOBE (vendor names) +############################################################################### +fileADOBE() +{ + sed \ + -e 's/\([^A-Za-z]\)uagd8a.pfb/\1agd_____.pfb/' \ + -e 's/\([^A-Za-z]\)uagdo8a.pfb/\1agdo____.pfb/' \ + -e 's/\([^A-Za-z]\)uagk8a.pfb/\1agw_____.pfb/' \ + -e 's/\([^A-Za-z]\)uagko8a.pfb/\1agwo____.pfb/' \ + -e 's/\([^A-Za-z]\)ubkd8a.pfb/\1bkd_____.pfb/' \ + -e 's/\([^A-Za-z]\)ubkdi8a.pfb/\1bkdi____.pfb/' \ + -e 's/\([^A-Za-z]\)ubkl8a.pfb/\1bkl_____.pfb/' \ + -e 's/\([^A-Za-z]\)ubkli8a.pfb/\1bkli____.pfb/' \ + -e 's/\([^A-Za-z]\)ucrb8a.pfb/\1cob_____.pfb/' \ + -e 's/\([^A-Za-z]\)ucrbo8a.pfb/\1cobo____.pfb/' \ + -e 's/\([^A-Za-z]\)ucrr8a.pfb/\1com_____.pfb/' \ + -e 's/\([^A-Za-z]\)ucrro8a.pfb/\1coo_____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8a.pfb/\1hvb_____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvb8ac.pfb/\1hvnb____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8a.pfb/\1hvbo____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvbo8ac.pfb/\1hvnbo___.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8a.pfb/\1hv______.pfb/' \ + -e 's/\([^A-Za-z]\)uhvr8ac.pfb/\1hvn_____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8a.pfb/\1hvo_____.pfb/' \ + -e 's/\([^A-Za-z]\)uhvro8ac.pfb/\1hvno____.pfb/' \ + -e 's/\([^A-Za-z]\)uncb8a.pfb/\1ncb_____.pfb/' \ + -e 's/\([^A-Za-z]\)uncbi8a.pfb/\1ncbi____.pfb/' \ + -e 's/\([^A-Za-z]\)uncr8a.pfb/\1ncr_____.pfb/' \ + -e 's/\([^A-Za-z]\)uncri8a.pfb/\1nci_____.pfb/' \ + -e 's/\([^A-Za-z]\)uplb8a.pfb/\1pob_____.pfb/' \ + -e 's/\([^A-Za-z]\)uplbi8a.pfb/\1pobi____.pfb/' \ + -e 's/\([^A-Za-z]\)uplr8a.pfb/\1por_____.pfb/' \ + -e 's/\([^A-Za-z]\)uplri8a.pfb/\1poi_____.pfb/' \ + -e 's/\([^A-Za-z]\)usyr.pfb/\1sy______.pfb/' \ + -e 's/\([^A-Za-z]\)utmb8a.pfb/\1tib_____.pfb/' \ + -e 's/\([^A-Za-z]\)utmbi8a.pfb/\1tibi____.pfb/' \ + -e 's/\([^A-Za-z]\)utmr8a.pfb/\1tir_____.pfb/' \ + -e 's/\([^A-Za-z]\)utmri8a.pfb/\1tii_____.pfb/' \ + -e 's/\([^A-Za-z]\)uzcmi8a.pfb/\1zcmi____.pfb/' \ + -e 's/\([^A-Za-z]\)uzdr.pfb/\1zd______.pfb/' \ + ${1+"$@"} +} + +############################################################################### +# locateWeb2c (file ...) +# apply kpsewhich with format 'web2c files' +############################################################################### +locateWeb2c() +{ + kpsewhich --format='web2c files' ${1+"$@"} +} + +############################################################################### +# locateMap (file ...) +# apply kpsewhich with format 'map' +############################################################################### +locateMap() +{ + + # Always use the "migration checking version". This might become + # consigurable, but for now, we always want to check. + if :; then + locateMapMigrate "$@" + return $? + fi + + # The old version of the code; not used at the moment. + for map + do + file=`kpsewhich --format=map "$map"` + if test -f "$file"; then + verboseMsg "$progname: using map file \`$file'" + echo "$file" + else + warn "map file \`$map' not found." + fi + done +} + +############################################################################### +# locateMapMigrate (file ...) +# look for map file; assist user with possibly files in wrong locations; +# also watch out for possibly hidden conflicts +############################################################################### +locateMapMigrate() +{ + for map + do + # look up using the new search path + file=`kpsewhich --format=map "$map"` + + # look up using the old search path + file2=`kpsewhich --format='dvips config' "$map"` + + # Well, the search paths should not overlap. If they do, and if + # file1 = file2, we don't want to complain about file2, so: + test "x$file" = "x$file2" && file2= + + if test -f "$file"; then + + verboseMsg "$progname: using map file \`$file'" + echo "$file" + + # we have found the file where we should. If we have additional + # ones: complain! + if test -f "$file2"; then + mapCmp "$file" "$file2" \ + && mapWarn obsoleteCopy "$map" "$file2" \ + || mapWarn manualResolve "$map" "$file" "$file2" + fi + + else + if test -f "$file2"; then + # bad: map file exists in the wrong location only + mapWarn badLocation "$map" "$file2" + else + # bad: map file does not exist at all + mapWarn notFound "$map" + fi + false; return 1 + fi + done + true; return 0 +} + +############################################################################### +# mapCmp(file, file2) +# compare two map files like cmp; but less strict, so changes regarding +# whitespaces, comments etc. are tolerated. Important is only the +# return value here. +############################################################################### +mapCmp() +{ + file=$1; file2=$2 + + # For reasons of speed only. Avoid normalizeLines if files are 100% + # the same. + cmp "$file" "$file2" >/dev/null 2>&1 && return 0 + + normalizeLines <"$file" >"$tmpdir/mapCmp-1" + normalizeLines <"$file2" >"$tmpdir/mapCmp-2" + cmp "$tmpdir/mapCmp-1" "$tmpdir/mapCmp-2" >/dev/null 2>&1 +} + +############################################################################### +# mapWarn() +############################################################################### +mapWarn() +{ + + case $1 in + obsoleteCopy) + warn " +!!! WARNING: Identical copy of used file for \`$2' + exists in obsolete location + $3 + Please, consider removing this file. +" + touch $mapWarnCalled + ;; + manualResolve) + warn " +!!! WARNING: While searching for the right map file for \`$2', we have + found the file + $3 + in the right location and we are using this + file. However, a map file with different content has been found in + the obsolete location + $4 + Please, see which version you want to use and eventually update the + content of the used map file. Additionally, consider removing the + obsolete file. +" + touch $mapWarnCalled + ;; + badLocation) + map=$2 + location=$3 + + m=" +!!! ERROR: The right location for map files has been + changed for this release and the map file \`$map' has + not been found in the right location, but in the obsolete + location + $location + instead. + + To fix this, please move this file into an appropriate + subdirectory of fonts/map in one of your texmf trees. + + For more information about the changed search paths, see + the release notes section in the teTeX manual. You probably + can read this document by executing the command + texdoc TETEXDOC + else visit the web page + http://tug.org/texlive/mapenc.html +" + warn "$m" + false; return 1 + ;; + notFound) + warn " +!!! ERROR! The map file \`$2' has not been found at all. + + Either put this file into the right place or remove the + reference from the configuration file. An automatic way + to disable unavailable map files is to call + $progname --syncwithtrees + + For manual editing, call + $progname --edit +" + + false; return 1 + ;; + esac +} + +############################################################################### +# cleanup() +# clean up the temp area and exit with proper exit status +############################################################################### +cleanup() +{ + rc=$1 + $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \ + && { cd / && rm -rf "$tmpdir"; } + (exit $rc); exit $rc +} + +############################################################################### +# setupTmpDir() +# set up a temp directory and a trap to remove it +############################################################################### +setupTmpDir() +{ + $needsCleanup && return + + trap 'cleanup 1' 1 2 3 7 13 15 + needsCleanup=true + mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'" +} + +############################################################################### +# showOptions(item) +# show Options for an item +############################################################################### +showOptions() +{ + item=$1 + + case "$item" in + LW35) + echo "URWkb URW ADOBE ADOBEkb" + ;; + dvipsPreferOutline|pdftexDownloadBase14|dvipdfmDownloadBase14|dvipsDownloadBase35) + echo "true false" + ;; + *) + abort "Unknown item \"$item\". Choose one of LW35, dvipsPreferOutline, dvipsDownloadBase35, pdftexDownloadBase14 or dvipdfmDownloadBase14" + ;; + esac + + (exit 0); exit 0 +} + +############################################################################### +# mktexdir(args) +# call mktexdir script, disable all features (to prevent sticky directories) +############################################################################### +mktexdir() +{ + MT_FEATURES=none "$TEXMFMAIN/web2c/mktexdir" "$@" >&2 +} + +############################################################################### +# setupDestDir() +# Assign output directories which are not yet assigned. Always use +# the TEXMFVAR for this. +############################################################################### +setupDestDir() +{ + vartexmf=`kpsewhich -var-value=TEXMFVAR` + + # dvips + if test -z "$dvipsoutputdir"; then + dvipsoutputdir=$vartexmf/fonts/map/dvips/updmap + fi + + # pdftex + if test -z "$pdftexoutputdir"; then + pdftexoutputdir=$vartexmf/fonts/map/pdftex/updmap + fi + + # dvipdfm + if test -z "$dvipdfmoutputdir"; then + dvipdfmoutputdir=$vartexmf/fonts/map/dvipdfm/updmap + fi + + mktexdir "$dvipsoutputdir" "$pdftexoutputdir" "$dvipdfmoutputdir" >/dev/null 2>&1 + for d in "$dvipsoutputdir" "$pdftexoutputdir" "$dvipdfmoutputdir"; do + test -d "$d" || abort "output directory \`$d' does not exist" + test -w "$d" || abort "output directory \`$d' is not writable" + done + +} + +############################################################################### +# setupLog(cfgFile) +# try to set up a log file in $TEXMFVAR/web2c +############################################################################### +setupLog() +{ + vartexmf=`kpsewhich -var-value=TEXMFVAR` + dir=$vartexmf/web2c + mktexdir "$dir" >/dev/null 2>&1 + log="$dir/$progname.log" + if test -d "$dir" && test -w "$dir"; then + rm -f "$log" + > "$log" + fi + if test -w "$log"; then + date > "$log" + verboseMsg "$progname: This is $progname, version $version" + verboseMsg "$progname: using transcript file \`$log'" + else + log= + verboseMsg "$progname: This is $progname, version $version" + verboseMsg "$progname: no permissions for writing $dir/$progname.log', so no transcript" + fi +} + +############################################################################### +# setupCfgFile() +# find config file if none specified on cmd line. +############################################################################### +setupCfgFile() +{ + case "$cnfFile" in + "") cnfFile=`locateWeb2c $cnfFileShort` + case "$cnfFile" in + "") abort "config file $cnfFileShort not found" + esac;; + esac + setupLog +} + +############################################################################### +# processOptions() +# process cmd line options +############################################################################### +processOptions() +{ + while + case $1 in + --quiet|-q) + verbose=false;; + --cnffile) + cfgparam=1; cnfFile=$2; shift;; + --cnffile=*) + cfgparam=1; cnfFile=`echo "$1" | sed 's/--cnffile=//'`;; + --dvipsoutputdir) + dvipsoutputdirparam=1; dvipsoutputdir=$2; shift;; + --dvipsoutputdir=*) + dvipsoutputdirparam=1; dvipsoutputdir=`echo "$1" | sed 's/--dvipsoutputdir=//'`;; + --pdftexoutputdir) + pdftexoutputdirparam=1; pdftexoutputdir=$2; shift;; + --pdftexoutputdir=*) + pdftexoutputdirparam=1; pdftexoutputdir=`echo "$1" | sed 's/--pdftexoutputdir=//'`;; + --dvipdfmoutputdir) + dvipdfmoutputdirparam=1; dvipdfmoutputdir=$2; shift;; + --dvipdfmoutputdir=*) + dvipdfmoutputdirparam=1; dvipdfmoutputdir=`echo "$1" | sed 's/--dvipdfmoutputdir=//'`;; + --outputdir) + dvipsoutputdirparam=1; dvipsoutputdir=$2 + pdftexoutputdirparam=1; pdftexoutputdir=$2 + dvipdfmoutputdirparam=1; dvipdfmoutputdir=$2 + shift + ;; + --outputdir=*) + outputdir=`echo "$1" | sed 's/--outputdir=//'` + dvipsoutputdirparam=1; dvipsoutputdir=$outputdir + pdftexoutputdirparam=1; pdftexoutputdir=$outputdir + dvipdfmoutputdirparam=1; dvipdfmoutputdir=$outputdir + ;; + --setoption) + cfgmaint=1 + cmd=setoption + case $2 in + *=*) + setoptionOpt=`echo $2 | sed 's@=.*@@'` + setoptionVal=`echo $2 | sed 's@[^=]*=@@'` + shift + ;; + *) + test $# -ge 3 || { abort "--setoption needs two parameters: option value"; } + setoptionOpt=$2; setoptionVal=$3; shift; shift + ;; + esac + ;; + --enable) + cfgmaint=1 + cmd=enable + case $2 in + Map=*) + enableMapType=Map; enableMapFile=`echo "$2" | sed 's/Map=//'`; shift;; + MixedMap=*) + enableMapType=MixedMap; enableMapFile=`echo "$2" | sed 's/MixedMap=//'`; shift;; + Map|MixedMap) + test $# -ge 3 || { abort "--enable needs two parameters: mapType mapFile"; } + enableMapType=$2; enableMapFile=$3; shift; shift;; + *) + abort "--enable needs two parameters mapType mapFile";; + esac + ;; + --syncwithtrees) + cfgmaint=1 + cmd=syncwithtrees;; + --disable) + cfgmaint=1 + cmd=disable; disableMapFile=$2; shift + ;; + --disable=*) + cfgmaint=1 + disableMapFile=`echo "$1" | sed 's/--disable=//'` + cmd=disable + ;; + --edit|-e) + cfgmaint=1 + cmd=edit;; + --listmaps|-l) + cmd=listmaps;; + --listavailablemaps) + cmd=listavailablemaps;; + --showoptions) + cmd=showoptions; showoptionsItem=$2; shift;; + --showoptions=*) + cmd=showoptions; showoptionsItem=`echo "$1" | sed 's/--showoptions=//'`;; + --nohash) + texhashEnabled=false;; + --nomkmap) + mkmapEnabled=false;; + --help|-help|-h) + help;; + --version) + echo "$progname version $version."; (exit 0); exit 0;; + "") break;; + *) abort "$progname: unknown option \`$1'. Try $progname --help for help";; + esac + do test $# -gt 0 && shift; done + + if test -n "$cfgparam"; then + if test -z "$cnfFile" || test ! -f "$cnfFile"; then + abort "config file \`$cnfFileShort' not found" + fi + fi + + if test -n "$dvipdoutputdirparam"; then + if test -z "$dvipdoutputdir" || test ! -d "$dvipdoutputdir"; then + abort "dvips output directory \`$1' not found" + fi + fi + if test -n "$pdftexoutputdirparam"; then + if test -z "$pdftexoutputdir" || test ! -d "$pdftexoutputdir"; then + abort "pdftex output directory \`$1' not found" + fi + fi + if test -n "$dvipdfmoutputdirparam"; then + if test -z "$dvipdfmoutputdir" || test ! -d "$dvipdfmoutputdir"; then + abort "dvipdfm output directory \`$1' not found" + fi + fi + +} + +############################################################################### +# listMaps() +# list all maps mentioned in the config file +############################################################################### +listMaps() +{ + egrep '^(#! *)?(Mixed)?Map' "$cnfFile" +} + +############################################################################### +# listAvailableMaps() +# list maps mentioned in the config file if they are available +############################################################################### +listAvailableMaps() +{ + # loop over each possible line in the config file (-> $line) + # extract the name of the map file (-> $m) + # check if the map file exists and in that case echo the line + OLDIFS=$IFS + IFS=' +' + for line in `egrep '^(#! *)?(Mixed)?Map' "$cnfFile"`; do + m=`echo "$line" | sed 's@[ ]*$@@; s@.*[ ]@@'` + kpsewhich --format=map "$m" >/dev/null && echo "$line" + done + IFS=$OLDIFS +} + +############################################################################### +# syncWithTrees() +# update the config file: uncomment all lines which refer to map files that +# are unavailabe in the texmf trees +############################################################################### +syncWithTrees() +{ + for i in `egrep '^(Mixed)?Map' "$cnfFile" | sed 's@.* @@'`; do + kpsewhich --format=map "$i" >/dev/null || echo "$i" + done > $tmp1 + { + sed 's@/@\\/@g; s@^@/^MixedMap[ ]*@; s@$@$/s/^/#! /@' <$tmp1 + sed 's@/@\\/@g; s@^@/^Map[ ]*@; s@$@$/s/^/#! /@' <$tmp1 + } > $tmp2 + sed -f $tmp2 "$cnfFile" > $tmp3 && cat $tmp3 > "$cnfFile" +} + +############################################################################### +# normalizeLines() +# remove comments, whitespace is exactly one space, no empty lines, +# no whitespace at end of line, one space before and after " +############################################################################### +normalizeLines() +{ + sed \ + -e '/^[*#;%]/d' \ + -e 's@[ ][ ]*@ @g' \ + -e '/^ *$/d' \ + -e 's@ $@@' \ + -e 's@ *" *@ " @g' \ + -e 's@" \([^"]*\) "@"\1"@g' | sort | uniq +} + +############################################################################### +# dvips2dvipdfm() +# reads from stdin, writes to stdout. It transforms "dvips"-like syntax into +# "dvipdfm"-like syntax. It is a very ugly hack. +############################################################################### +dvips2dvipdfm() +{ + sed -e 's@$@ %@' \ + -e 's@^\(\([^ ]*\).*\)@\1\2@' \ + -e 's@\(.*<\[* *\([^ ]*\)\.enc\(.*\)\)@\1 \2@' \ + -e '/%[^ ]*$/s@$@ default@' \ + -e 's@\(.*<<* *\([^ ]*\)\.pf[ab].*\)@\1 \2@' \ + -e '/%[^ ]* [^ ]*$/s@\( \([^ ]*\).*\)$@\1 \2@' \ + -e 's@\(.*[" ]\([.0-9-][.0-9-]*\) *ExtendFont.*\)@\1 -e \2@' \ + -e 's@\(.*[" ]\([.0-9-][.0-9-]*\) *SlantFont.*\)@\1 -s \2@' \ + -e 's@.*%@@' | + awk '$1 == $3 && $2 == "default" {$2=""; $3=""} {print}' > $tmp8 + + egrep '^(cm|eu|la|lc|line|msam|xy)' $tmp8 \ + | sed 's@$@ -r@; s@\(fmex[789]\) -r$@\1@' + egrep -v '^(cm|eu|la|lc|line|msam|xy)' $tmp8 +} + + +############################################################################### +# mkMaps() +# the main task of this script: create the output files +############################################################################### +mkMaps() +{ + newline=' +' + mode=`cfgval LW35` + dvipsPreferOutline=`cfgval dvipsPreferOutline` + dvipsDownloadBase35=`cfgval dvipsDownloadBase35` + pdftexDownloadBase14=`cfgval pdftexDownloadBase14` + dvipdfmDownloadBase14=`cfgval dvipdfmDownloadBase14` + + # defaults + test -z "$mode" && mode=URWkb + test -z "$dvipsPreferOutline" && dvipsPreferOutline=true + test -z "$dvipsDownloadBase35" && dvipsDownloadBase35=false + test -z "$pdftexDownloadBase14" && pdftexDownloadBase14=false + test -z "$dvipdfmDownloadBase14" && dvipdfmDownloadBase14=false + + outputFiles="$dvipsoutputdir/download35.map +$dvipsoutputdir/builtin35.map +$dvipsoutputdir/psfonts_t1.map +$dvipsoutputdir/psfonts_pk.map +$pdftexoutputdir/pdftex_dl14.map +$pdftexoutputdir/pdftex_ndl14.map +$dvipdfmoutputdir/dvipdfm_dl14.map +$dvipdfmoutputdir/dvipdfm_ndl14.map +$dvipsoutputdir/ps2pk.map" + + outputLinks="$dvipsoutputdir/psfonts.map +$pdftexoutputdir/pdftex.map +$dvipdfmoutputdir/dvipdfm.map" + + allOutput="$outputFiles +$outputLinks" + + notfound=false + OLDIFS=$IFS; IFS=$newline + for o in $allOutput; do + test -f "$o" || notfound=true + done + IFS=$OLDIFS + $notfound || texhashEnabled=false + + verboseCat <<-eof + + updmap is creating new map files using the following configuration: + + config file: \`$cnfFile' + dvips output directory: \`$dvipsoutputdir' + pdftex output directory: \`$pdftexoutputdir' + dvipdfm output directory: \`$dvipdfmoutputdir' + + prefer outlines: \`$dvipsPreferOutline' + texhash enabled: \`$texhashEnabled' + download standard fonts (dvips): \`$dvipsDownloadBase35' + download standard fonts (pdftex): \`$pdftexDownloadBase14' + download standard fonts (dvipdfm): \`$dvipdfmDownloadBase14' +eof + + verboseMsg + verboseMsg "$progname: Scanning for LW35 support files" + dvips35=`locateMap dvips35.map` || cleanup 1 + pdftex35=`locateMap pdftex35.map` || cleanup 1 + dvipdfm35=`locateMap dvipdfm35.map` || cleanup 1 + ps2pk35=`locateMap ps2pk35.map` || cleanup 1 + + verboseMsg + verboseMsg "$progname: Scanning for MixedMap entries:" + catMaps '^MixedMap' > $tmp1 || cleanup 1 + + verboseMsg + verboseMsg "$progname: Scanning for Map entries:" + catMaps '^Map' > $tmp2 || cleanup 1 + verboseMsg + + # files should be world-readable + umask 022 + + OLDIFS=$IFS; IFS=$newline + for file in $allOutput; do + rm -f "$file" + cat > "$file" <<-eof + % $file: maintained by the script updmap. + % Don't change this file directly. Edit texmf/web2c/$cnfFileShort + % and run updmap to recreate this file. +eof + if test -n "$log"; then + cat >> "$file" <<-eof + % A log of the updmap run that has created this file is available here: + % $log +eof + fi + done + IFS=$OLDIFS + + verboseMsg "$progname: Generating output for ps2pk..." + { transLW35 "$ps2pk35"; cat $tmp1 $tmp2; } \ + | normalizeLines >> "$dvipsoutputdir/ps2pk.map" + + verboseMsg "$progname: Generating output for dvips..." + { transLW35 "$ps2pk35"; } \ + | normalizeLines >> "$dvipsoutputdir/download35.map" + { transLW35 "$dvips35"; } \ + | normalizeLines >> "$dvipsoutputdir/builtin35.map" + + if test "x$dvipsDownloadBase35" = xtrue; then + dftdvips=$ps2pk35 + else + dftdvips=$dvips35 + fi + { transLW35 "$dftdvips"; cat $tmp1 $tmp2; } \ + | normalizeLines >> "$dvipsoutputdir/psfonts_t1.map" + { transLW35 "$dftdvips"; cat $tmp2; } \ + | normalizeLines >> "$dvipsoutputdir/psfonts_pk.map" + + verboseMsg "$progname: Generating output for pdftex..." + # remove PaintType due to Sebastian's request + { transLW35 "$pdftex35"; cat $tmp1 $tmp2; } \ + | grep -v PaintType | grep . > $tmp3 + { transLW35 "$dvipdfm35"; cat $tmp1 $tmp2; } \ + | grep -v PaintType | grep . > $tmp6 + { transLW35 "$ps2pk35"; cat $tmp1 $tmp2; } \ + | grep -v PaintType | grep . > $tmp7 + + <$tmp3 normalizeLines >> "$pdftexoutputdir/pdftex_ndl14.map" + <$tmp7 normalizeLines >> "$pdftexoutputdir/pdftex_dl14.map" + + verboseMsg "$progname: Generating output for dvipdfm..." + <$tmp7 normalizeLines | dvips2dvipdfm | normalizeLines >> "$dvipdfmoutputdir/dvipdfm_dl14.map" + <$tmp6 normalizeLines | dvips2dvipdfm | normalizeLines >> "$dvipdfmoutputdir/dvipdfm_ndl14.map" + verboseMsg "$progname: All output generated!" + verboseMsg + + setupSymlinks + $texhashEnabled && { $verbose && texhash || texhash >/dev/null 2>&1; } + + verboseMsg + verboseMsg "$progname: Files generated:" + OLDIFS=$IFS; IFS=$newline + ls -l $outputFiles | verboseCat + IFS=$OLDIFS + verboseMsg + + verboseMsg "$progname: Map file links:" + { cd "$dvipsoutputdir"; ls -l psfonts.map; + cd "$pdftexoutputdir"; ls -l pdftex.map; + cd "$dvipdfmoutputdir"; ls -l dvipdfm.map; } \ + | awk '{print $(NF-2), $(NF-1), $NF}' | verboseCat + verboseMsg + + if test -f $mapWarnCalled; then + m=" + +!!! NOTICE: + + With this release, the search paths for map files have been changed + and we have found that some files exist in the new path as well as + in the obsolete path. + + This is not an error per se, but please consider removing duplicates + from the old location and search the above output" + + test -n "$log" && m="$m or the transcript file + $log + " + + m="$m for warnings. + + For more information about the changed search paths, see + the release notes section in the teTeX manual. You probably + can read this document by executing the command + texdoc TETEXDOC + else visit the web page + http://tug.org/texlive/mapenc.html +" + warn "$m" + fi + return 0 +} + +############################################################################### +# main() +# execution starts here +############################################################################### +main() +{ + # initialize global variables + progname=updmap + cmd= + log= + + cfgparam= + outputdirparam= + cfgmaint= + texhashEnabled=true + mkmapEnabled=true + verbose=true + needsCleanup=false + + cnfFileShort=updmap.cfg + cnfFile= + dvipsoutputdir=; pdftexoutputdir=; dvipdfmoutputdir= + : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`} + + tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/$progname.$$ + tmp1=$tmpdir/a + tmp2=$tmpdir/b + tmp3=$tmpdir/c + tmp4=$tmpdir/d + tmp5=$tmpdir/e + tmp6=$tmpdir/f + tmp7=$tmpdir/g + tmp8=$tmpdir/h + mapWarnCalled=$tmpdir/mapWarnCalled + catMapsFailed=$tmpdir/catMapsFailed + + processOptions ${1+"$@"} + + case "$cmd" in + showoptions) showOptions "$showoptionsItem"; (exit 0); exit;; + help) help; (exit 0); exit;; + esac + + setupCfgFile + case "$cmd" in + listmaps) listMaps; (exit 0); exit;; + listavailablemaps) listAvailableMaps; (exit 0); exit;; + esac + + # keep a copy of config file, so that we can see if the file was modified + setupTmpDir + + if test -n "$cfgmaint"; then + if test -z "$cfgparam"; then + co=`$TEXMFMAIN/texconfig/tcfmgr --tmp $tmpdir --cmd co --file $cnfFileShort` + test $? = 0 || cleanup 1 + set x $co; shift + id=$1; cnfFile=$3; orig=$4 + verboseMsg "$progname: initial config file is \`$orig'" + else + verboseMsg "$progname: config file is \`$cnfFile'" + cp "$cnfFile" $tmp5 + fi + + case "$cmd" in + edit) + ${VISUAL-${EDITOR-vi}} "$cnfFile";; + setoption) + setOption "$setoptionOpt" "$setoptionVal";; + enable) + enableMap "$enableMapType" "$enableMapFile";; + disable) + disableMap "$disableMapFile";; + syncwithtrees) + syncWithTrees;; + esac + + unchanged=true + if test -z "$cfgparam"; then + ci=`$TEXMFMAIN/texconfig/tcfmgr --tmp $tmpdir --cmd ci --id $id` + test $? = 0 || cleanup 1 + case "$ci" in + "") : ;; + *) unchanged=false + cnfFile=$ci + ;; + esac + else + cmp "$cnfFile" $tmp5 >/dev/null 2>&1 || unchanged=false + fi + case $unchanged in + true) if $mkmapEnabled; then + verboseMsg "$progname: configuration (updmap.cfg) unchanged. Map files will not be recreated." + mkmapEnabled=false + else + verboseMsg "$progname: configuration (updmap.cfg) unchanged." + fi;; + *) + verboseMsg "$progname: configuration file updated: \`$cnfFile'";; + esac + fi + + $mkmapEnabled || return + setupDestDir + mkMaps +} + +main ${1+"$@"} +cleanup 0 |