diff options
author | Norbert Preining <preining@logic.at> | 2012-01-12 05:26:31 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2012-01-12 05:26:31 +0000 |
commit | 51394b9d9d598fd9903dd1d4c823f311000ad4cb (patch) | |
tree | 91969a4de90069bc82cd9509cab40e9ca91c84bf /Master/tlpkg/dev/quilt-patches | |
parent | bcfe3e9f5280b8f27815952cd799ab3190cf8471 (diff) |
rename quilt patch to dev.mupdmap-integration, it does NOT contain
the actual mupdmap patch
git-svn-id: svn://tug.org/texlive/trunk@25080 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/dev/quilt-patches')
-rw-r--r-- | Master/tlpkg/dev/quilt-patches/dev.multi-updmap | 4209 | ||||
-rw-r--r-- | Master/tlpkg/dev/quilt-patches/dev.mupdmap-integration | 976 | ||||
-rw-r--r-- | Master/tlpkg/dev/quilt-patches/series | 2 |
3 files changed, 977 insertions, 4210 deletions
diff --git a/Master/tlpkg/dev/quilt-patches/dev.multi-updmap b/Master/tlpkg/dev/quilt-patches/dev.multi-updmap deleted file mode 100644 index 551bb33f852..00000000000 --- a/Master/tlpkg/dev/quilt-patches/dev.multi-updmap +++ /dev/null @@ -1,4209 +0,0 @@ ---- - install-tl | 7 - texmf-dist/web2c/updmap.cfg | 230 +++ - texmf/scripts/tetex/updmap.pl | 3017 ++++++++++++++++++++++++----------------- - texmf/scripts/texlive/tlmgr.pl | 131 - - texmf/web2c/updmap-hdr.cfg | 107 - - texmf/web2c/updmap.cfg | 256 --- - tlpkg/TeXLive/TLUtils.pm | 67 - 7 files changed, 2071 insertions(+), 1744 deletions(-) - -Index: Master/texmf/web2c/updmap.cfg -=================================================================== ---- Master.orig/texmf/web2c/updmap.cfg 2012-01-12 12:54:40.000000000 +0900 -+++ Master/texmf/web2c/updmap.cfg 2012-01-12 12:55:09.000000000 +0900 -@@ -1,31 +1,7 @@ --# Generated by /home/texlive/karl/Master/bin/i386-linux/tlmgr on Mon Jan 9 04:29:26 2012 --# $Id: updmap-hdr.cfg 24398 2011-10-26 01:07:22Z preining $ --# --# The full updmap.cfg is generated by concatenating updmap-hdr.cfg with --# all the Map and MixedMap lines from an installation, possibly --# appending a local configuration file. --# --# To make local customizations to the map files, please use of the --# following methods: --# --# 1) call --# updmap-sys --enable Map=foo.map --# for each map file. (Or MixedMap instead of Map, if your font has --# both Metafont and outline definitions.) See the updmap --help --# documentation. --# --# 2) add your local map entries to the file --# TEXMFLOCAL/web2c/updmap-local.cfg --# and then call --# tlmgr generate updmap --# which will concatenate updmap-local.cfg to the end of the final --# updmap.cfg. (You can override the local.cfg file location with the --# --localcfg option; see tlmgr --help.) --# --# If you use either of these methods, your local adaptations will be --# preserved when tlmgr updates the installation or this config file. --# Manual edits to updmap.cfg may be lost on update. -- -+# -+# updmap.cfg -+# TEXMFMAIN -+# only the options are defined here - - ################################################################ - # OPTIONS -@@ -100,227 +76,3 @@ - # map file used. - kanjiEmbed noEmbed - --################################################################ --# Map files. --################################################################ --# --# There are two possible entries: Map and MixedMap. Both have one additional --# argument: the filename of the map file. MixedMap ("mixed" means that --# the font is available as bitmap and as outline) lines will not be used --# in the default map of dvips if dvipsPreferOutline is false. Inactive --# Map files should be marked by "#! " (without the quotes), not just #. --# -- --Map OrnementsADF.map --Map ArrowsADF.map --Map BulletsADF.map --MixedMap allrunes.map --Map euler.map --MixedMap cm.map --MixedMap cmextra.map --MixedMap cyrillic.map --MixedMap latxfont.map --MixedMap symbols.map --Map uaq.map --Map antt.map --Map arabi.map --MixedMap arabtex.map --Map archaicprw.map --Map arev.map --Map bkaiu.map --Map bsmiu.map --Map gbsnu.map --Map gkaiu.map --Map ascii.map --Map augie.map --Map auncial.map --Map aurical.map --Map ybv.map --MixedMap bbold.map --Map belleek.map --Map bera.map --Map ybd.map --Map sqrcaps.map --Map boondox.map --Map pbsi.map --Map burmese.map --Map calligra.map --Map cantarell.map --Map cmin.map --MixedMap cbgreek-full.map --MixedMap ccpl.map --Map ccicons.map --Map clm.map --Map chemarrow.map --Map cjhebrew.map --MixedMap cmtext-bsr-interpolated.map --Map cm-lgc.map --MixedMap cm-super-t1.map --MixedMap cm-super-t2a.map --MixedMap cm-super-t2b.map --MixedMap cm-super-t2c.map --MixedMap cm-super-ts1.map --MixedMap cm-super-x2.map --Map cmcyr.map --MixedMap cmll.map --Map comfortaa.map --Map original-context-symbol.map --MixedMap csother.map --MixedMap cstext.map --Map cyklop.map --Map dejavu-type1.map --Map dictsym.map --Map dstroke.map --Map droid.map --Map dutchcal.map --Map yes.map --Map epigrafica.map --Map epiolmec.map --MixedMap esint.map --Map ESSTIX.map --Map esvect.map --MixedMap ethiop.map --MixedMap eurosym.map --Map fdsymbol.map --Map fge.map --Map foekfont.map --Map fonetika.map --Map fourier-utopia-expert.map --Map fourier.map --Map frcursive.map --Map garuda-c90.map --Map gfsartemisia.map --Map gfsbaskerville.map --Map gfsbodoni.map --Map gfscomplutum.map --Map gfsdidot.map --Map gfsneohellenic.map --Map gfsporson.map --Map gfssolomos.map --Map yfrak.map --Map ugq.map --Map grverb.map --MixedMap hfbright.map --MixedMap iby.map --Map fi4.map --Map Acorn.map --Map AnnSton.map --Map ArtNouv.map --Map ArtNouvc.map --Map Carrickc.map --Map Eichenla.map --Map Eileen.map --Map EileenBl.map --Map Elzevier.map --Map GotIn.map --Map GoudyIn.map --Map Kinigcap.map --Map Konanur.map --Map Kramer.map --Map MorrisIn.map --Map Nouveaud.map --Map Romantik.map --Map Rothdn.map --Map RoyalIn.map --Map Sanremo.map --Map Starburst.map --Map Typocaps.map --Map Zallman.map --Map iwona.map --KanjiMap otf-@kanjiEmbed@.map --KanjiMap otf-cktx.map --Map kerkis.map --Map knitfont.map --Map kpfonts.map --Map kurier.map --Map lato.map --Map libertine.map --Map yly.map --Map linearA.map --Map l7x-urwvn.map --Map lm.map --MixedMap lxfonts.map --MixedMap manfnt.map --Map marvosym.map --Map mathabx.map --Map mdbch.map --Map mdput.map --Map mdugm.map --Map mdsymbol.map --Map troff-updmap.map --MixedMap mflogo.map --Map MnSymbol.map --MixedMap mongolian.map --MixedMap musix.map --Map norasi-c90.map --Map cherokee.map --Map ocrb.map --Map oinuit.map --Map omega.map --Map opensans.map --Map paratype-type1.map --Map phaistos.map --MixedMap pigpen.map --MixedMap plother.map --MixedMap pltext.map --Map ap.map --Map prodint.map --Map charter.map --Map fpls.map --Map pazo.map --Map utopia.map --KanjiMap morisawa.map --KanjiMap ptex-@kanjiEmbed@.map --Map pxfonts.map --Map pxtx.map --Map recycle.map --Map yrd.map --MixedMap rsfs.map --Map rsfso.map --Map skt.map --MixedMap semaf.map --Map SkakNew.map --Map starfont.map --Map icelandic.map --MixedMap stmaryrd.map --Map tabvar.map --Map mathpple.map --Map qag.map --Map qbk.map --Map qcr.map --Map qcs.map --Map qhv.map --Map qpl.map --Map qtm.map --Map qzc.map --Map tfrupee.map --MixedMap tipa.map --MixedMap trajan.map --Map txfonts.map --Map gptimes.map --Map umj.map --MixedMap dvng.map --Map yv1.map --Map yv2.map --Map yv3.map --Map yvo.map --Map yvt.map --Map arevvn.map --Map chartervn.map --Map cmbrightvn.map --Map concretevn.map --Map grotesqvn.map --Map txttvn.map --Map urwvn.map --MixedMap vnrother.map --MixedMap vnrtext.map --Map vntopia.map --Map dgj.map --Map dmj.map --Map mc2j.map --Map mcj.map --Map mr2j.map --Map mrj.map --MixedMap wasy.map --MixedMap xypic.map --MixedMap yhmath.map -Index: Master/texmf-dist/web2c/updmap.cfg -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Master/texmf-dist/web2c/updmap.cfg 2012-01-12 12:56:10.000000000 +0900 -@@ -0,0 +1,230 @@ -+# -+# updmap.cfg -+# TEXMFDIST -+# only contains the actual maps -+# settings are in TEXMFMAIN -+ -+################################################################ -+# Map files. -+################################################################ -+# -+# There are two possible entries: Map and MixedMap. Both have one additional -+# argument: the filename of the map file. MixedMap ("mixed" means that -+# the font is available as bitmap and as outline) lines will not be used -+# in the default map of dvips if dvipsPreferOutline is false. Inactive -+# Map files should be marked by "#! " (without the quotes), not just #. -+# -+ -+Map OrnementsADF.map -+Map ArrowsADF.map -+Map BulletsADF.map -+MixedMap allrunes.map -+Map euler.map -+MixedMap cm.map -+MixedMap cmextra.map -+MixedMap cyrillic.map -+MixedMap latxfont.map -+MixedMap symbols.map -+Map uaq.map -+Map antt.map -+Map arabi.map -+MixedMap arabtex.map -+Map archaicprw.map -+Map arev.map -+Map bkaiu.map -+Map bsmiu.map -+Map gbsnu.map -+Map gkaiu.map -+Map ascii.map -+Map augie.map -+Map auncial.map -+Map aurical.map -+Map ybv.map -+MixedMap bbold.map -+Map belleek.map -+Map bera.map -+Map ybd.map -+Map sqrcaps.map -+Map boondox.map -+Map pbsi.map -+Map burmese.map -+Map calligra.map -+Map cantarell.map -+Map cmin.map -+MixedMap cbgreek-full.map -+MixedMap ccpl.map -+Map ccicons.map -+Map clm.map -+Map chemarrow.map -+Map cjhebrew.map -+MixedMap cmtext-bsr-interpolated.map -+Map cm-lgc.map -+MixedMap cm-super-t1.map -+MixedMap cm-super-t2a.map -+MixedMap cm-super-t2b.map -+MixedMap cm-super-t2c.map -+MixedMap cm-super-ts1.map -+MixedMap cm-super-x2.map -+Map cmcyr.map -+MixedMap cmll.map -+Map comfortaa.map -+Map original-context-symbol.map -+MixedMap csother.map -+MixedMap cstext.map -+Map cyklop.map -+Map dejavu-type1.map -+Map dictsym.map -+Map dstroke.map -+Map droid.map -+Map dutchcal.map -+Map yes.map -+Map epigrafica.map -+Map epiolmec.map -+MixedMap esint.map -+Map ESSTIX.map -+Map esvect.map -+MixedMap ethiop.map -+MixedMap eurosym.map -+Map fdsymbol.map -+Map fge.map -+Map foekfont.map -+Map fonetika.map -+Map fourier-utopia-expert.map -+Map fourier.map -+Map frcursive.map -+Map garuda-c90.map -+Map gfsartemisia.map -+Map gfsbaskerville.map -+Map gfsbodoni.map -+Map gfscomplutum.map -+Map gfsdidot.map -+Map gfsneohellenic.map -+Map gfsporson.map -+Map gfssolomos.map -+Map yfrak.map -+Map ugq.map -+Map grverb.map -+MixedMap hfbright.map -+MixedMap iby.map -+Map fi4.map -+Map Acorn.map -+Map AnnSton.map -+Map ArtNouv.map -+Map ArtNouvc.map -+Map Carrickc.map -+Map Eichenla.map -+Map Eileen.map -+Map EileenBl.map -+Map Elzevier.map -+Map GotIn.map -+Map GoudyIn.map -+Map Kinigcap.map -+Map Konanur.map -+Map Kramer.map -+Map MorrisIn.map -+Map Nouveaud.map -+Map Romantik.map -+Map Rothdn.map -+Map RoyalIn.map -+Map Sanremo.map -+Map Starburst.map -+Map Typocaps.map -+Map Zallman.map -+Map iwona.map -+KanjiMap otf-@kanjiEmbed@.map -+KanjiMap otf-cktx.map -+Map kerkis.map -+Map knitfont.map -+Map kpfonts.map -+Map kurier.map -+Map lato.map -+Map libertine.map -+Map yly.map -+Map linearA.map -+Map l7x-urwvn.map -+Map lm.map -+MixedMap lxfonts.map -+MixedMap manfnt.map -+Map marvosym.map -+Map mathabx.map -+Map mdbch.map -+Map mdput.map -+Map mdugm.map -+Map mdsymbol.map -+Map troff-updmap.map -+MixedMap mflogo.map -+Map MnSymbol.map -+MixedMap mongolian.map -+MixedMap musix.map -+Map norasi-c90.map -+Map cherokee.map -+Map ocrb.map -+Map oinuit.map -+Map omega.map -+Map opensans.map -+Map paratype-type1.map -+Map phaistos.map -+MixedMap pigpen.map -+MixedMap plother.map -+MixedMap pltext.map -+Map ap.map -+Map prodint.map -+Map charter.map -+Map fpls.map -+Map pazo.map -+Map utopia.map -+KanjiMap morisawa.map -+KanjiMap ptex-@kanjiEmbed@.map -+Map pxfonts.map -+Map pxtx.map -+Map recycle.map -+Map yrd.map -+MixedMap rsfs.map -+Map rsfso.map -+Map skt.map -+MixedMap semaf.map -+Map SkakNew.map -+Map starfont.map -+Map icelandic.map -+MixedMap stmaryrd.map -+Map tabvar.map -+Map mathpple.map -+Map qag.map -+Map qbk.map -+Map qcr.map -+Map qcs.map -+Map qhv.map -+Map qpl.map -+Map qtm.map -+Map qzc.map -+Map tfrupee.map -+MixedMap tipa.map -+MixedMap trajan.map -+Map txfonts.map -+Map gptimes.map -+Map umj.map -+MixedMap dvng.map -+Map yv1.map -+Map yv2.map -+Map yv3.map -+Map yvo.map -+Map yvt.map -+Map arevvn.map -+Map chartervn.map -+Map cmbrightvn.map -+Map concretevn.map -+Map grotesqvn.map -+Map txttvn.map -+Map urwvn.map -+MixedMap vnrother.map -+MixedMap vnrtext.map -+Map vntopia.map -+Map dgj.map -+Map dmj.map -+Map mc2j.map -+Map mcj.map -+Map mr2j.map -+Map mrj.map -+MixedMap wasy.map -+MixedMap xypic.map -+MixedMap yhmath.map -Index: Master/texmf/scripts/texlive/tlmgr.pl -=================================================================== ---- Master.orig/texmf/scripts/texlive/tlmgr.pl 2012-01-12 12:54:40.000000000 +0900 -+++ Master/texmf/scripts/texlive/tlmgr.pl 2012-01-12 13:42:40.000000000 +0900 -@@ -624,47 +624,21 @@ - chomp(my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); - chomp(my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); - chomp(my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); -+ chomp(my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); - - # - # maps handling -- # if enabled and disabled -> do nothing -- # if only enabled -> enable it -- # if only disabled -> disable it -- # if the option "generate_updmap" is set, then simply ignore all that -- # and run the equivalent of tlmgr generate updmap - { - my $updmap_run_needed = 0; -- my %do_enable; -- my %do_disable; - for my $m (keys %{$::execute_actions{'enable'}{'maps'}}) { - $updmap_run_needed = 1; -- $do_enable{$m} = 1; - } - for my $m (keys %{$::execute_actions{'disable'}{'maps'}}) { - $updmap_run_needed = 1; -- if (defined($do_enable{$m})) { -- # we are upgrading because it is disabled and enabled, so -- # delete the entry in do_enable, it is already -- delete $do_enable{$m}; -- } else { -- # not new installed, so simply removed -- $do_disable{$m} = 1; -- } -- } -- if ($updmap_run_needed && $localtlpdb->option("generate_updmap")) { -- my $dest = "$TEXMFSYSCONFIG/web2c/updmap.cfg"; -- my $localcfg = "$TEXMFLOCAL/web2c/updmap-local.cfg"; -- info("tlmgr: generate_updmap writing new $dest\n"); -- TeXLive::TLUtils::create_updmap($localtlpdb, $dest, $localcfg); -- } else { -- for my $m (keys %do_disable) { -- $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --disable $m"); -- } -- for my $m (keys %do_enable) { -- my $str = "updmap-sys --nomkmap --nohash --enable " . -- $::execute_actions{'enable'}{'maps'}{$m} . "=$m"; -- $errors += do_cmd_and_check($str); -- } -+ } -+ if ($updmap_run_needed) { -+ my $dest = "$TEXMFDIST/web2c/updmap.cfg"; -+ TeXLive::TLUtils::create_updmap($localtlpdb, $dest); - } - $errors += do_cmd_and_check("updmap-sys") if $updmap_run_needed; - } -@@ -3918,17 +3892,15 @@ - init_local_db(); - - # we create fmtutil.cnf, language.dat, language.def in TEXMFSYSVAR and -- # updmap.cfg in TEXMFSYSCONFIG. The reason is that calls to -- # updmap-sys (as is done by the tlmgr update call when packages with -- # maps are installed) will create the updmap.cfg file in -- # TEXMFSYSCONFIG. It would start from the version in TEXMFSYSVAR, but -- # after that the TEXMFSYSCONFIG takes precedence and thus the -- # mechanism explained in updmap.cfg header would not work. We don't -- # want that. So just use TEXMFSYSCONFIG from the start. -+ # updmap.cfg in TEXMFDIST. The reason is that we are now using an -+ # implementation of updmap that supports multiple updmap files. -+ # Local adaptions should not be made there, but only in TEXMFLOCAL -+ # or TEXMF(SYS)CONFIG updmap.cfg - # - chomp (my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); - chomp (my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); - chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); -+ chomp (my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); - - # we do generate all config files, treat $opts{"dest"} as pattern - # and make it append the respective extensions -@@ -4006,10 +3978,9 @@ - } - - } elsif ($what =~ m/^updmap$/i) { -- my $dest = $opts{"dest"} || "$TEXMFSYSCONFIG/web2c/updmap.cfg"; -- my $localcfg = $opts{"localcfg"} || "$TEXMFLOCAL/web2c/updmap-local.cfg"; -+ my $dest = $opts{"dest"} || "$TEXMFDIST/web2c/updmap.cfg"; - debug("$0: writing new updmap.cfg to $dest\n"); -- TeXLive::TLUtils::create_updmap($localtlpdb, $dest, $localcfg); -+ TeXLive::TLUtils::create_updmap($localtlpdb, $dest); - - if ($opts{"rebuild-sys"}) { - do_cmd_and_check("updmap-sys"); -@@ -6110,7 +6081,6 @@ - sys_bin (directory to which executables are linked by the path action) - sys_man (directory to which man pages are linked by the path action) - sys_info (directory to which Info files are linked by the path action) -- generate_updmap (run the equivalent of tlmgr generate updmap on changes) - desktop_integration (Windows-only: create Start menu shortcuts) - fileassocs (Windows-only: change file associations) - multiuser (Windows-only: install for all users) -@@ -6166,9 +6136,6 @@ - Unix-like systems to control the generation of links for executables, - info files and man pages. See the C<path> action for details. - --For the C<generate_updmap> option, see the C<updmap> section in --L<generate|/"generate [I<option>]... I<what>">. -- - The last three options control behaviour on Windows installations. If - C<desktop_integration> is set, then some packages will install items in - a sub-folder of the Start menu for C<tlmgr gui>, documentation, etc. If -@@ -6558,31 +6525,20 @@ - =back - - The C<generate> action overwrites any manual changes made in the --respective files: it recreates them from scratch. -+respective files: it recreates them from scratch based on the -+information of the installed packages, plus local adaptions. - --For C<fmtutil> and the language files, this is normal, and both the TeX --Live installer and C<tlmgr> routinely call C<generate> for them. -+The TeX Live installer and C<tlmgr> routinely call C<generate> for -+all of these files. - --For C<updmap>, however, C<tlmgr> does I<not> use C<generate> by default, --because the result would be to disable all maps which have been manually --installed via S<C<updmap-sys --enable>>, e.g., for proprietary or local --fonts, which has been the standard method for adding fonts to TeX --installations for years. Rather, the C<generate> action only --incorporates the changes in the C<--localcfg> file mentioned below. -- --Notwithstanding the above, if you only use the fonts and font packages --within TeX Live, and rigorously maintain your local fonts (if any) using --C<updmap-local.cfg>, there is nothing wrong with using C<generate --updmap>. It can be helpful in moving from release to release, --especially. We use it ourselves to generate the C<updmap.cfg> file in --the live source repository. If you want to commit yourself to using --C<updmap-local.cfg>, you can set the C<generate_updmap> option and --C<tlmgr> will run C<generate updmap> for you on update. -- --In any case, C<tlmgr> updates and maintains the final C<updmap.cfg> in --C<TEXMFSYSCONFIG> (while the other generated files are in --C<TEXMFSYSVAR>), because that is the location that C<updmap-sys> (via --C<tcfmgr>) historically uses. -+For managing your own fonts, please see the documentation of -+updmap, which supports multiple updmap.cfg files. So by simply -+editing TEXMFLOCAL's updmap.cfg they will be accounted for. -+ -+In any case, C<tlmgr> updates and maintains C<updmap.cfg> in -+C<TEXMFDIST> (while the other generated files are in -+C<TEXMFSYSVAR>), because that is the location where the fonts -+are installed. - - In more detail: C<generate> remakes any of the five config files - C<language.dat>, C<language.def>, C<language.dat.lua>, C<fmtutil.cnf>, -@@ -6590,26 +6546,27 @@ - locally-maintained files. - - The locally-maintained files are C<language-local.dat>, --C<language-local.def>, C<language-local.dat.lua>, C<fmtutil-local.cnf>, --or C<updmap-local.cfg>, searched for in C<TEXMFLOCAL> in the respective --directories. If they are present, the final file is made by starting -+C<language-local.def>, C<language-local.dat.lua>, or C<fmtutil-local.cnf>, -+searched for in C<TEXMFLOCAL> in the respective directories. -+The formerly supported C<updmap-local.cfg> is not supported anymore, -+since C<updmap> now supports multiple updmap.cfg files, so local -+additions can be put into an updmap.cfg file in TEXMFLOCAL. -+If local additions are present, the final file is made by starting - with the main file, omitting any entries that the local file specifies - to be disabled, and finally appending the local file. - - Local files specify entries to be disabled with a comment line, namely - one of these: - -- #!NAME - %!NAME - --!NAME - --where C<fmtutil.cnf> and C<updmap.cfg> use C<#>, C<language.dat> and -+where C<fmtutil.cnf> uses C<#>, C<language.dat> and - C<language.def> use C<%>, and C<language.dat.lua> use C<-->. In any --case, the I<name> is the respective format name, map file name (include --the C<.map> extension), or hyphenation pattern identifier. Examples: -+case, the I<name> is the respective format name, or hyphenation pattern -+identifier. Examples: - - #!pdflatex -- #!lm.map - %!german - --!usenglishmax - -@@ -6622,20 +6579,9 @@ - syntax as the master files. - - The form C<generate language> recreates both the C<language.dat>, the --C<language.def> and the C<language.dat.lua>files, while the forms with -+C<language.def> and the C<language.dat.lua> files, while the forms with - extension recreates only the given language file. - --Special consideration for updmap.cfg: in addition to font map files, --this file specifies the setting of five options: C<dvipsPreferOutline>, --C<LW35>, C<dvipsDownloadBase35>, C<pdftexDownloadBase14>, and --C<dvipdfmDownloadBase14>. The defaults for these as set in --C<updmap-hdr.cfg> are usually fine. If you want to change them, you can --include changed settings for any or all of these five options in your --C<updmap-local.cfg> file and they will be respected by C<generate --updmap>. For example: -- -- dvipsDownloadBase35 true -- - Options: - - =over 4 -@@ -6643,7 +6589,7 @@ - =item B<--dest> I<output_file> - - specifies the output file (defaults to the respective location in --C<TEXMFSYSVAR> for C<language*> and C<fmtutil>, and C<TEXMFSYSCONFIG> -+C<TEXMFSYSVAR> for C<language*> and C<fmtutil>, and C<TEXMFSYSDIST> - for C<updmap>). If C<--dest> is given to C<generate language>, it serves - as a basename onto which C<.dat> will be appended for the name of the - C<language.dat> output file, C<.def> will be -@@ -6681,13 +6627,6 @@ - web2c/fmtutil.cnf (and fmtutil-local.cnf); - web2c/updmap.cfg (and updmap-local.cfg). - --Final repetition: as explained above, C<tlmgr> does I<not> use --C<generate updmap> for font map files. Therefore, if you want to make --use of C<updmap-local.cfg>, you must run C<tlmgr generate updmap> --and C<updmap-sys> yourself after making any local changes. If you --make yourself responsible for rigorously using C<updmap-local.cfg>), set --C<option generate_updmap>). -- - - =head1 CONFIGURATION FILE - -Index: Master/texmf/web2c/updmap-hdr.cfg -=================================================================== ---- Master.orig/texmf/web2c/updmap-hdr.cfg 2011-10-26 10:07:22.000000000 +0900 -+++ Master/texmf/web2c/updmap-hdr.cfg 2012-01-12 13:42:09.000000000 +0900 -@@ -1,8 +1,8 @@ - # $Id: updmap-hdr.cfg 24398 2011-10-26 01:07:22Z preining $ - # --# The full updmap.cfg is generated by concatenating updmap-hdr.cfg with --# all the Map and MixedMap lines from an installation, possibly --# appending a local configuration file. -+# The updmap.cfg in this tree (TEXMFDIST) is generated by tlmgr by -+# concatenating updmap-hdr.cfg with all the Map and MixedMap lines -+# from an installation. - # - # To make local customizations to the map files, please use of the - # following methods: -@@ -11,102 +11,11 @@ - # updmap-sys --enable Map=foo.map - # for each map file. (Or MixedMap instead of Map, if your font has - # both Metafont and outline definitions.) See the updmap --help --# documentation. -+# documentation. This will add lines to the updmap.cfg file in -+# TEXMFSYSCONFIG (creating it if necessary). - # --# 2) add your local map entries to the file --# TEXMFLOCAL/web2c/updmap-local.cfg --# and then call --# tlmgr generate updmap --# which will concatenate updmap-local.cfg to the end of the final --# updmap.cfg. (You can override the local.cfg file location with the --# --localcfg option; see tlmgr --help.) -+# 2) put all your additional fonts into TEXMFLOCAL and edit -+# TEXMFLOCAL/web2c/updmap.cfg. - # --# If you use either of these methods, your local adaptations will be --# preserved when tlmgr updates the installation or this config file. --# Manual edits to updmap.cfg may be lost on update. -- -- --################################################################ --# OPTIONS --################################################################ -- -+# Manual edits to this updmap.cfg will be lost on update. - # --# dvipsPreferOutline --# --# Should dvips (by default) prefer bitmap fonts or outline fonts --# if both are available? Independent of this setting, outlines --# can be forced by putting "p psfonts_t1.map" into a config file --# that dvips reads. Bitmaps (for the fonts in question) can --# be forced by putting "p psfonts_pk.map" into a config file. --# We provide such config files which can be enabled via --# dvips -Poutline ... resp. dvips -Ppk ... --# --# Valid settings for dvipsPreferOutline are true / false: --dvipsPreferOutline true -- --# --# LW35 --# --# Which fonts for the "Basic 35 Laserwriter Fonts" do you want to use and --# how are the filenames chosen? Valid settings: --# URW: URW fonts with "vendor" filenames (e.g. n019064l.pfb) --# URWkb: URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb) --# ADOBE: Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb) --# ADOBEkb: Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb) --LW35 URWkb -- --# --# dvipsDownloadBase35 --# --# Should dvips (by default) download the standard 35 LaserWriter fonts --# with the document (then set dvipsDownloadBase35 true) or should these --# fonts be used from the ps interpreter / printer? --# Whatever the default is, the user can override it by specifying --# dvips -Pdownload35 ... resp. dvips -Pbuiltin35 ... to either download --# the LW35 fonts resp. use the built-in fonts. --# --# Valid settings are true / false: --dvipsDownloadBase35 true -- --# --# pdftexDownloadBase14 --# --# Should pdftex download the base 14 pdf fonts? Since some configurations --# (ps / pdf tools / printers) use bad default fonts, it is safer to download --# the fonts. The pdf files will get bigger, though. --# Valid settings are true (download the fonts) or false (don't download --# the fonts). Adobe recommends embedding all fonts. --pdftexDownloadBase14 true -- --# --# dvipdfmDownloadBase14 --# --# Should dvipdfm download the base 14 pdf fonts? Since some configurations --# (ps / pdf tools / printers) use bad default fonts, it is safer to download --# the fonts. The pdf files will get bigger, though. --# Valid settings are true (download the fonts) or false (don't download --# the fonts). --dvipdfmDownloadBase14 true -- --# --# kanjiEmbed --# --# updmap generates a file kanjix.map for usage with dvipdfmx. Using this --# option one can switch between not embedding any kanji font, and several --# available. --# Valid setting is any string. At updmap run time the @kanjiEmbed@ substring --# in a map file name will be replaced with this settings, and the respective --# map file used. --kanjiEmbed noEmbed -- --################################################################ --# Map files. --################################################################ --# --# There are two possible entries: Map and MixedMap. Both have one additional --# argument: the filename of the map file. MixedMap ("mixed" means that --# the font is available as bitmap and as outline) lines will not be used --# in the default map of dvips if dvipsPreferOutline is false. Inactive --# Map files should be marked by "#! " (without the quotes), not just #. --# -- -Index: Master/tlpkg/TeXLive/TLUtils.pm -=================================================================== ---- Master.orig/tlpkg/TeXLive/TLUtils.pm 2012-01-05 11:07:33.000000000 +0900 -+++ Master/tlpkg/TeXLive/TLUtils.pm 2012-01-12 13:04:16.000000000 +0900 -@@ -2575,67 +2575,10 @@ - } - - sub create_updmap { -- my ($tlpdb,$dest,$localconf) = @_; -- my @tlpdblines = $tlpdb->updmap_cfg_lines( -- get_disabled_local_configs($localconf, '#')); -- # we do not use _create_config_files here because we want to -- # parse the $localconf file for the five options in updmap.cfg -- #_create_config_files($tlpdb, "texmf/web2c/updmap-hdr.cfg", $dest, -- # $localconf, 0, '#', \@tlpdblines); -- my $headfile = "texmf/web2c/updmap-hdr.cfg"; -- my $root = $tlpdb->root; -- my @lines; -- my @localconflines; -- my %configs; -- if (-r "$localconf") { -- # -- # this should be done more intelligently, but for now only add those -- # lines without any duplication check ... -- open FOO, "<$localconf" -- or die "strange, -r ok but cannot open $localconf: $!"; -- my @bla = <FOO>; -- close(FOO); -- for my $l (@bla) { -- my ($k, $v, @rest) = split(' ', $l); -- if (check_updmap_config_value($k, $v, $localconf)) { -- $configs{$k} = $v; -- } else { -- push @localconflines, $l; -- } -- } -- } -- # -- # read the -hdr file and replace the options if given in the local -- # config file -- open(INFILE,"<$root/$headfile") or die("Cannot open $root/$headfile"); -- for my $l (<INFILE>) { -- my ($k, $v, @rest) = split(' ', $l); -- if (check_updmap_config_value($k, $v, "$root/$headfile")) { -- if (defined($configs{$k})) { -- push @lines, "$k $configs{$k}\n"; -- } else { -- push @lines, $l; -- } -- } else { -- push @lines, $l; -- } -- } -- close (INFILE); -- -- # add the lines from the tlpdb -- push @lines, @tlpdblines; -- -- # add additional local config lines -- push @lines, @localconflines; -- -- if ($#lines >= 0) { -- open(OUTFILE,">$dest") -- or die("Cannot open $dest for writing: $!"); -- -- printf OUTFILE "# Generated by %s on %s\n", "$0", scalar localtime; -- print OUTFILE @lines; -- close(OUTFILE) || warn "close(>$dest) failed: $!"; -- } -+ my ($tlpdb,$dest) = @_; -+ my @tlpdblines = $tlpdb->updmap_cfg_lines(); -+ _create_config_files($tlpdb, "texmf/web2c/updmap-hdr.cfg", $dest, -+ undef, 0, '#', \@tlpdblines); - } - - sub check_updmap_config_value { -@@ -2703,7 +2646,7 @@ - my @lines = <INFILE>; - push @lines, @$tlpdblinesref; - close (INFILE); -- if (-r "$localconf") { -+ if (defined($localconf) && -r $localconf) { - # - # this should be done more intelligently, but for now only add those - # lines without any duplication check ... -Index: Master/install-tl -=================================================================== ---- Master.orig/install-tl 2011-10-07 07:50:55.000000000 +0900 -+++ Master/install-tl 2012-01-12 13:27:39.000000000 +0900 -@@ -861,11 +861,10 @@ - "$TEXMFSYSVAR/web2c/fmtutil.cnf", - "$TEXMFLOCAL/web2c/fmtutil-local.cnf"); - -- mkdirhier "$vars{'TEXMFSYSCONFIG'}/web2c"; -- info("writing updmap.cfg to $TEXMFSYSCONFIG/web2c/updmap.cfg\n"); -+ mkdirhier "$TEXDIR/texmf-dist/web2c"; -+ info("writing updmap.cfg to $TEXDIR/texmf-dist/web2c/updmap.cfg\n"); - TeXLive::TLUtils::create_updmap ($usedtlpdb, -- "$TEXMFSYSCONFIG/web2c/updmap.cfg", -- "$TEXMFLOCAL/web2c/updmap-local.cfg"); -+ "$TEXDIR/texmf-dist/web2c/updmap.cfg"); - - info("writing language.dat to $TEXMFSYSVAR/tex/generic/config/language.dat\n"); - TeXLive::TLUtils::create_language_dat($usedtlpdb, -Index: Master/texmf/scripts/tetex/updmap.pl -=================================================================== ---- Master.orig/texmf/scripts/tetex/updmap.pl 2011-11-16 07:55:48.000000000 +0900 -+++ Master/texmf/scripts/tetex/updmap.pl 2012-01-12 13:48:49.000000000 +0900 -@@ -1,390 +1,452 @@ --#! /usr/bin/env perl --# updmap: utility to maintain map files for outline fonts. --# --# Copyright 2002-2011 Thomas Esser. --# Fabrice Popineau wrote the Perl version. -+#!/usr/bin/env perl -+# mupdmap: utility to maintain map files for outline fonts. -+# $Id: mupdmap.pl 25074 2012-01-12 02:48:37Z preining $ -+# -+# Copyright 2011, 2012 Norbert Preining -+# This file is licensed under the GNU General Public License version 2 -+# or any later version. -+# -+# History: -+# Original shell script (C) 2002 Thomas Esser -+# first perl variant (C) Fabrice Popineau -+# later adaptions by Reinhard Kotucha and Karl Berry -+# the original versions were licensed under the following agreement: - # Anyone may freely use, modify, and/or distribute this file, without - # limitation. -+# -+# TODO -+# - check all other invocations -+# -+# TODO after inclusion in TL: -+# - remove the special code that excludes TEXMFMAIN and reorder the rest, -+# should not be necessary anymore -+# - after TL2012? Maybe remove support for reading updmap-local.cfg -+# -+ -+my $TEXMFROOT; - - BEGIN { - $^W=1; -- chomp($TEXMFROOT = `kpsewhich -var-value=TEXMFROOT`); -+ $TEXMFROOT = `kpsewhich -var-value=TEXMFROOT`; -+ if ($?) { -+ print STDERR "(m)updmap: Cannot find TEXMFROOT, aborting!\n"; -+ exit 1; -+ } -+ chomp($TEXMFROOT); - unshift (@INC, "$TEXMFROOT/tlpkg"); - } - --my $version = '$Id: updmap.pl 24602 2011-11-15 22:55:34Z preining $'; -- --use strict; --use TeXLive::TLUtils qw(mkdirhier mktexupd win32); --use Getopt::Long; --$Getopt::Long::autoabbrev=0; --Getopt::Long::Configure (qw(ignore_case_always)); -- --my $short_progname = "updmap"; -- --my $cnfFile; --my $cnfFileShort; --my $outputdir; --my $dvipsoutputdir; --my $pdftexoutputdir; --my $dvipdfmoutputdir; --my $pxdvioutputdir; --my $quiet; --my $nohash; --my $nomkmap; --my (@psADOBE, @fileADOBE, @fileADOBEkb, @fileURW); -- --my $enableItem; --my @setoptions = (); --my @showoptions = (); --my @disableItem = (); --my $listmaps; --my $listavailablemaps; --my $syncwithtrees; -- --my $opt_edit; --my $opt_force; --my $opt_help; --my $dry_run; --my $TEXMFMAIN; --my $TEXMFVAR; -- --my $mode; --my $dvipsPreferOutline; --my $dvipsDownloadBase35; --my $pdftexDownloadBase14; --my $pxdviUse; --my $kanjiEmbed; -- --my $dvips35; --my $pdftex35; --my $ps2pk35; -- --my $newcnf; --my $copy; --my %link; --my %maps; --my @missing; --my $writelog = 0; --my $cache = 0; # don't change! --my $pdftexStripEnc = 0; -- --# initialize mktexupd --my $updLSR=&mktexupd(); --$updLSR->{mustexist}(0); -- --my @cfg = (); -- --&main; --exit 0; -- -- --# return program name + version string. --sub version { -- my $ret = sprintf "%s (TeX Live) version %s\n", $short_progname, $version; -- return $ret; --} -- --############################################################################### --# 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), --(and optionally pxdvi) 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 -- --dvipdfmoutputdir DIR specify output directory (dvipdfm syntax) -- --dvipsoutputdir DIR specify output directory (dvips syntax) -- --pdftexoutputdir DIR specify output directory (pdftex syntax) -- --pxdvioutputdir DIR specify output directory (pxdvi 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, -- pdftexDownloadBase14, pxdviUse, or kanjiEmbed -- --setoption OPTION=VALUE as above, just different syntax -- --enable MAPTYPE MAPFILE add "MAPTYPE MAPFILE" to updmap.cfg, -- where MAPTYPE is one of: Map, MixedMap, KanjiMap -- --enable Map=MAPFILE add \"Map MAPFILE\" to updmap.cfg -- --enable MixedMap=MAPFILE add \"MixedMap MAPFILE\" to updmap.cfg -- --enable KanjiMap=MAPFILE add \"KanjiMap MAPFILE\" to updmap.cfg -- --disable MAPFILE disable MAPFILE, whether Map, MixedMap, -- or KanjiMap -- --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. -- pxdviUse true|false (default false) -- Whether maps for pxdvi (Japanese-patched xdvi) is under control of updmap. -- 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) -- kanjiEmbed (any string) - -- 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. -+my $version = '$Id: mupdmap.pl 25074 2012-01-12 02:48:37Z preining $'; - --Explanation of trees and files normally used: -+use Getopt::Long qw(:config no_autoabbrev ignore_case_always); -+use strict; -+use TeXLive::TLUtils qw(mkdirhier mktexupd win32 basename dirname -+ sort_uniq member); - -- updmap both reads and writes TEXMFCONFIG/web2c/updmap.cfg, according to -- the actions specified. -+#use Data::Dumper; -+#$Data::Dumper::Indent = 1; - -- updmap writes the map files for dvips (psfonts.map) and pdftex -- (pdftex.map) to the TEXMFVAR/fonts/map/updmap/{dvips,pdftex}/ -- directories. -+chomp(my $TEXMFMAIN = `kpsewhich --var-value=TEXMFMAIN`); -+chomp(my $TEXMFVAR = `kpsewhich -var-value=TEXMFVAR`); -+chomp(my $TEXMFCONFIG = `kpsewhich -var-value=TEXMFCONFIG`); -+ -+# make sure that on windows *everything* is in lower case for comparison -+if (win32()) { -+ $TEXMFMAIN = lc($TEXMFMAIN); -+ $TEXMFVAR = lc($TEXMFVAR); -+ $TEXMFCONFIG = lc($TEXMFCONFIG); -+ $TEXMFROOT = lc($TEXMFROOT); -+} -+ -+my $prg = basename($0); -+ -+my %opts = ( quiet => 0, nohash => 0, nomkmap => 0 ); -+my $alldata; -+my $updLSR; -+ -+my @cmdline_options = ( -+ "oldmode", -+ "cnffile=s@", -+ "copy", -+ "disable=s@", -+ "dvipdfmoutputdir=s", -+ "dvipsoutputdir=s", -+ # the following does not work, Getopt::Long looses the first -+ # entry in a multi setting, treat it separately in processOptions -+ # furthermore, it is not supported by older perls, so do it differently -+ #"enable=s{1,2}", -+ "edit", -+ "force", -+ "listavailablemaps", -+ "listmaps|l", -+ "nohash", -+ "nomkmap", -+ "dry-run|n", -+ "outputdir=s", -+ "pdftexoutputdir=s", -+ "pxdvioutputdir=s", -+ "quiet|silent|q", -+ # the following is a correct specification of an option according -+ # to the manual, but it does not work! -+ # we will treat that option by itself in processOptions -+ # furthermore, it is not supported by older perls, so do it differently -+ #"setoption=s@{1,2}", -+ "showoptions=s@", -+ "showoption=s@", -+ "syncwithtrees", -+ "version", -+ "help|h", -+ # some debugging invocations -+ "_readsave=s", -+ "_listupdmap", -+ ); -+ -+my %settings = ( -+ dvipsPreferOutline => { -+ type => "binary", -+ default => "true", -+ }, -+ LW35 => { -+ type => "string", -+ possible => [ qw/URW URWkb ADOBE ADOBEkb/ ], -+ default => "URWkb", -+ }, -+ dvipsDownloadBase35 => { -+ type => "binary", -+ default => "true", -+ }, -+ pdftexDownloadBase14 => { -+ type => "binary", -+ default => "true", -+ }, -+ dvipdfmDownloadBase14 => { -+ type => "binary", -+ default => "true", -+ }, -+ pxdviUse => { -+ type => "binary", -+ default => "false", -+ }, -+ kanjiEmbed => { -+ type => "any", -+ default => "noEmbed", -+ }, -+); - -- The log file is written to TEXMFVAR/web2c/updmap.log. -+&main(); - -- 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. -+sub main { -+ processOptions(); - -- To see the precise locations of the various files that -- will be read and written, give the -n option (or read the man page). -+ help() if $opts{'help'}; - --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. -+ if ($opts{'_readsave'}) { -+ read_updmap_files($opts{'_readsave'}); -+ print "READING DONE ============================\n"; -+ #print Dumper($alldata); -+ $alldata->{'updmap'}{$opts{'_readsave'}}{'changed'} = 1; -+ save_updmap($opts{'_readsave'}); -+ exit 0; -+ } - --Report bugs to: tex-k\@tug.org --TeX Live home page: <http://tug.org/texlive/> --EOF --; -- print &version(); -- print $usage; -- exit 0; --} -+ if ($opts{'showoptions'}) { -+ for my $o (@{$opts{'showoptions'}}) { -+ if (defined($settings{$o})) { -+ if ($settings{$o}{'type'} eq "binary") { -+ print "true false\n"; -+ } elsif ($settings{$o}{'type'} eq "string") { -+ print "@{$settings{$o}{'possible'}}\n"; -+ } elsif ($settings{$o}{'type'} eq "any") { -+ print "(any string)\n"; -+ } else { -+ print "strange: unknown type of option $o\nplease report\n"; -+ } -+ } else { -+ print "$prg: unknown option: $o\n"; -+ } -+ } -+ exit 0; -+ } - -+ # config file for changes -+ my $changes_config_file; - -- --############################################################################### --# processOptions() --# process cmd line options --# --sub processOptions { -+ # determine which config files should be used -+ # replaces the former "setupCfgFile" - # -- # We parse the command line twice. The first time is to handle -- # --setoption, which might take either one or two following values. -- # the second to handle everything else. The Getopt::Long feature to -- # handle this is only supported in 5.8.8 (released in 2006) or later, -- # and a few people run older perls. -- # -- my $oldconfig = Getopt::Long::Configure(qw(pass_through)); -- # -- sub read_for_set_options { -- my ($setopt, $val) = @_; -- # check if = occurs in $val, if not, get the next argument -- if ($val =~ m/=/) { -- push (@setoptions, $val); -+ # we also determine here where changes will be saved to -+ if ($opts{'cnffile'}) { -+ for my $f (@{$opts{'cnffile'}}) { -+ if (! -f $f) { -+ die "$prg: Config file \"$f\" not found."; -+ } -+ } -+ # in case that config files are given on the command line, the first -+ # in the list is the one where changes will be written to. -+ ($changes_config_file) = @{$opts{'cnffile'}}; -+ } else { -+ my @all_files = `kpsewhich -all updmap.cfg`; -+ chomp(@all_files); -+ my @used_files; -+ # -+ # in --oldmode we ignore texmf/web2c/updmap.cfg and reorder some -+ # order to get things right -+ # without --oldmode everything will be used as default to, i.e. -+ # the order is given by kpsewhich -all updmap.cfg -+ if (!$opts{"oldmode"}) { -+ push @used_files, @all_files; - } else { -- my $vv = shift @ARGV; -- die "$0: --setoption $val given with no value; try --help.\n" -- if !defined($vv); -- push (@setoptions, "$val=$vv"); -+ # --oldmode -+ for my $f (@all_files) { -+ # make sure that all file names are lower case on windows for comparison -+ $f = lc($f) if win32(); -+ if ($f =~ m!$TEXMFROOT/texmf/web2c/updmap.cfg!) { -+ warning("Ignoring $f, it is only a sample file!\n"); -+ } else { -+ push @used_files, $f; -+ } -+ } -+ } -+ # -+ # reorder used files: since we ship and manage with tlmgr -+ # the file in TEXMFSYSCONFIG, and TEXMFLOCAL has *lower* priority -+ # then TEXMFSYSCONFIG, we move a TEXMFLOCAL-updmap.cfg if found -+ # after TEXMFCONFIG TEXMFVAR and TEXMFHOME -+ chomp(my $TEXMFLOCAL =`kpsewhich --var-value=TEXMFLOCAL`); -+ chomp(my $TEXMFHOME =`kpsewhich --var-value=TEXMFHOME`); -+ if (win32()) { -+ $TEXMFLOCAL = lc($TEXMFLOCAL); -+ $TEXMFHOME = lc($TEXMFHOME); -+ } -+ my $found = 0; -+ my $TMLabs = Cwd::abs_path($TEXMFLOCAL); -+ if ($TMLabs) { -+ for my $f (@used_files) { -+ my $absf = Cwd::abs_path($f); #should always work -+ if ($absf =~ m/^$TMLabs/) { -+ $found = 1; -+ last; -+ } -+ } -+ } -+ my $old_updmap_local_found = 0; -+ if (-r "$TMLabs/web2c/updmap-local.cfg") { -+ $old_updmap_local_found = 1; -+ warning("Old configuration file TEXMFLOCAL/web2c/updmap-local.cfg found!\n"); -+ if ($found) { -+ warning("Will read this file *instead* of TEXMFLOCAL/web2c/updmap.cfg!!!\n"); -+ } else { -+ # if TEXMFLOCAL updmap.cfg does not exist, we have to make sure -+ # that the replacement is added to the list of updmap files -+ push @used_files, "$TMLabs/web2c/updmap-local.cfg"; -+ } -+ warning("Please consider moving the information from updmap-local.cfg to TEXMFLOCAL/web2c/updmap.cfg\n"); -+ } -+ if ($found || $old_updmap_local_found) { -+ my @tmp; -+ my $local_pushed = 0; -+ for my $f (@used_files) { -+ if ($f =~ m!$TEXMFCONFIG|$TEXMFVAR|$TEXMFHOME!) { -+ push @tmp, $f; -+ } else { -+ if (!$local_pushed) { -+ # should we use the return value of grep here, but we know -+ # what we will find?!?! -+ if ($old_updmap_local_found) { -+ push @tmp, "$TEXMFLOCAL/web2c/updmap-local.cfg"; -+ } else { -+ push @tmp, "$TEXMFLOCAL/web2c/updmap.cfg"; -+ } -+ $local_pushed = 1; -+ } -+ # push the original -+ push @tmp, $f unless ($f =~ m!$TEXMFLOCAL!); -+ } -+ } -+ @used_files = @tmp; -+ } -+ @{$opts{'cnffile'}} = @used_files; -+ # determine the config file that we will use for changes -+ # if in the list of used files contains either one from -+ # TEXMFHOME or TEXMFCONFIG (which is TEXMFSYSCONFIG in the -sys case) -+ # then use the *top* file (which will be either one of the two), -+ # if none of the two exists, create a file in TEXMFCONFIG and use it -+ my $use_top = 0; -+ for my $f (@used_files) { -+ if ($f =~ m!($TEXMFHOME|$TEXMFCONFIG)/web2c/updmap.cfg!) { -+ $use_top = 1; -+ last; -+ } -+ } -+ if ($use_top) { -+ ($changes_config_file) = @used_files; -+ } else { -+ # add the empty config file -+ my $dn = "$TEXMFCONFIG/web2c"; -+ $changes_config_file = "$dn/updmap.cfg"; - } - } -- GetOptions("setoption=s@" => \&read_for_set_options) -- || die "$0: could not read for --setoption; try --help.\n"; -- -- # restore old getopt config and read everything else. -- Getopt::Long::Configure($oldconfig); -- unless (&GetOptions ( -- "cnffile=s" => \$cnfFile, -- "copy" => \$copy, -- "disable=s" => \@disableItem, -- "dvipdfmoutputdir=s" => \$dvipdfmoutputdir, -- "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, -- "pxdvioutputdir=s" => \$pxdvioutputdir, -- "q|quiet|silent" => \$quiet, -- "setoption" => -- sub {die "$0: --setoption needs an option and value; try --help.\n"}, -- "showoptions=s" => \@showoptions, -- "syncwithtrees" => \$syncwithtrees, -- "version" => sub { print &version(); exit(0); }, -- "h|help" => \$opt_help)) { -- die "Try \"$0 --help\" for more information.\n"; -- } -- -- if (@ARGV) { -- warn "$0: Ignoring unexpected non-option argument(s): @ARGV.\n"; -- } -- -- if ($outputdir) { -- $dvipsoutputdir = $outputdir if (! $dvipsoutputdir); -- $pdftexoutputdir = $outputdir if (! $pdftexoutputdir); -- $dvipdfmoutputdir = $outputdir if (! $dvipdfmoutputdir); -- $pxdvioutputdir = $outputdir if (! $pxdvioutputdir); -- } -- if ($cnfFile && ! -f $cnfFile) { -- die "$0: Config file \"$cnfFile\" not found.\n"; -- } -- if ($dvipsoutputdir && ! $dry_run && ! -d $dvipsoutputdir) { -- &mkdirhier ($dvipsoutputdir); -- } -- if ($dvipdfmoutputdir && ! $dry_run && ! -d $dvipdfmoutputdir) { -- &mkdirhier ($dvipdfmoutputdir); -- } -- if ($pdftexoutputdir && ! $dry_run && ! -d $pdftexoutputdir) { -- &mkdirhier ($pdftexoutputdir); -+ print "$prg is using the following updmap.cfg files (in precedence order):\n"; -+ for my $f (@{$opts{'cnffile'}}) { -+ print " $f\n"; - } -- if ($pxdvioutputdir && ! $dry_run && ! -d $pxdvioutputdir) { -- &mkdirhier ($pxdvioutputdir); -+ $alldata->{'changes_config'} = $changes_config_file; -+ -+ if ($opts{'_listupdmap'}) { -+ exit 0; - } --} - -- --############################################################################### --# 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; -+ read_updmap_files(@{$opts{'cnffile'}}); - -- open IN, "$file"; -- my @lines = (<IN>); -- close IN; -- chomp(@lines); -+ if ($opts{'showoption'}) { -+ for my $o (@{$opts{'showoption'}}) { -+ if (defined($settings{$o})) { -+ my ($v, $vo) = get_cfg($o); -+ print "$o: $v ($vo)\n"; -+ } else { -+ print "$prg: unknown option: $o\n"; -+ } -+ } -+ exit 0; -+ } - -- for (@lines) { -- s/\s*${comment}.*// if (defined $comment); # remove comments -- next if /^\s*$/; # remove empty lines -- s/\s+/ /g; # replace multiple whitespace chars by a single one -- push @temp, $_; -+ if ($opts{'listmaps'}) { -+ for my $m (keys %{$alldata->{'maps'}}) { -+ my $origin = $alldata->{'maps'}{$m}{'origin'}; -+ print $alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'}, " $m ", -+ $alldata->{'updmap'}{$origin}{'maps'}{$m}{'status'}, " in $origin\n"; -+ } -+ exit 0; - } -- return join('X', sort(@temp)); --} - --############################################################################### --# 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; -- my $comment=shift; -- my $retval=0; -+ # we do changes always in the used config file with the highest -+ # priority -+ my $bakFile = $changes_config_file; -+ $bakFile =~ s/\.cfg$/.bak/; -+ my $changed = 0; - -- my $A=equalize_file("$file_A", $comment); -- my $B=equalize_file("$file_B", $comment); -- $retval=1 unless ($A eq $B); -- return $retval; --} -+ if ($opts{'syncwithtrees'}) { -+ my @missing = read_map_files(); -+ if (@missing) { -+ print "Missing map files found, disabling them in $changes_config_file\n"; -+ for my $m (@missing) { -+ $changed ||= disableMap($m); -+ } -+ # the original script did not run any update of the map files here, -+ # should we do that? -+ } -+ exit 0; -+ } - --############################################################################### --# 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; --} -+ my $cmd; -+ if ($opts{'edit'}) { -+ if ($opts{"dry-run"}) { -+ printf STDERR "No, are you joking, you want to edit with --dry-run?\n"; -+ printf STDERR "Not doing that, bye bye!\n"; -+ exit 1; -+ } -+ # it's not a good idea to edit updmap.cfg manually these days, -+ # but for compatibility we'll silently keep the option. -+ $cmd = 'edit'; -+ my $editor = $ENV{'VISUAL'} || $ENV{'EDITOR'}; -+ $editor ||= (&win32 ? "notepad" : "vi"); -+ if (-r $changes_config_file) { -+ ©File($changes_config_file, $bakFile); -+ } else { -+ touch($bakFile); -+ touch($changes_config_file); -+ } -+ system($editor, $changes_config_file); -+ $changed = files_are_different($bakFile, $changes_config_file); -+ } elsif ($opts{'setoption'}) { -+ $cmd = 'setOption'; -+ $changed = setOptions (@{$opts{'setoption'}}); -+ } elsif ($opts{'enable'} || $opts{'disable'}) { -+ $cmd = 'enableMap'; -+ $changed ||= enable_disable_maps(@{$opts{'enable'}}, @{$opts{'disable'}}); -+ } - --############################################################################### --# 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; -- my $retval=0; -+ # what does this? -+ $updLSR = &mktexupd(); -+ $updLSR->{mustexist}(0); - -- open IN, "$file_A"; -- my $A=(<IN>); -- close IN; -- open IN, "$file_B"; -- my $B=(<IN>); -- close IN; -+ if ($cmd && !$opts{'force'} && !$changed) { -+ print "$changes_config_file unchanged. Map files not recreated.\n" -+ if !$opts{'quiet'}; -+ } else { -+ if (!$opts{'nomkmap'}) { -+ # before we continue we have to make sure that a newly created config -+ # file is acually used. So we have to push the $changes_config_file -+ # onto the list of available files. Since it is already properly -+ # initialized and the merging is done later, all settings should be -+ # honored -+ my @aaa = @{$alldata->{'order'}}; -+ unshift @aaa, $changes_config_file; -+ $alldata->{'order'} = [ @aaa ]; -+ setupOutputDir("dvips"); -+ setupOutputDir("pdftex"); -+ setupOutputDir("dvipdfmx"); -+ setupOutputDir("dvipdfm"); -+ setupOutputDir("pxdvi"); -+ my @missing = read_map_files(); -+ if (@missing) { -+ print STDERR "\nERROR: The following map file(s) couldn't be found:\n"; -+ for my $m (@missing) { -+ my $orig = $alldata->{'maps'}{$m}{'origin'}; -+ print STDERR "\t$m (in $orig)\n"; -+ } -+ print STDERR "\n\tDid you run mktexlsr?\n\n" . -+ "\tYou can disable non-existent map entries using the option\n". -+ "\t --syncwithtrees.\n\n"; -+ exit 1; -+ } -+ merge_data(); -+ # for inspecting the output -+ #print STDERR Data::Dumper->Dump([$alldata], [qw(mapdata)]); -+ #print Dumper($alldata); -+ mkMaps(); -+ } -+ unlink ($bakFile) if (-r $bakFile); -+ } - -- $retval=1 if ($A eq $B); -- return $retval; -+ if (!$opts{'nohash'}) { -+ print "$prg: Updating ls-R files.\n" if !$opts{'quiet'}; -+ $updLSR->{exec}() unless $opts{"dry-run"}; -+ } - } - --############################################################################### --# getLines() -+################################################################## - # --############################################################################### --sub getLines { -+# -+ -+sub getFonts { -+ my ($first, @rest) = @_; -+ my $getall = 0; -+ my @maps = (); -+ if ($first eq "-all") { -+ $getall = 1; -+ @maps = @rest; -+ } else { -+ @maps = ($first, @rest); -+ } - my @lines = (); -- foreach my $fname (@_) { -- next if (! $fname); -- if (! exists $maps{"$fname"}) { -- open FILE, "<$fname" or die "$0: can't get lines from $fname: $!"; -- my @file=<FILE>; -- close FILE; -- if ($writelog) { -- print LOG ("\n$fname:\n"); -- foreach my $line (@file) { -- next if $line =~ /^\s*%/; # comment -- next if $line =~ /^\s*#/; # comment -- next if $line =~ /^\s*$/; # empty line -- my $tfm; -- ($tfm)=split ' ', $line; -- print LOG "$tfm\n"; -+ for my $m (@maps) { -+ if (defined($alldata->{'maps'}{$m})) { -+ print LOG "\n" . $alldata->{'maps'}{$m}{'fullpath'} . ":\n" unless $opts{'dry-run'}; -+ push @lines, "% $m"; -+ for my $k (sort keys %{$alldata->{'maps'}{$m}{'fonts'}}) { -+ if ($getall || $alldata->{'fonts'}{$k}{'origin'} eq $m) { -+ if (defined($alldata->{'maps'}{$m}{'fonts'}{$k})) { -+ push @lines, "$k " . $alldata->{'maps'}{$m}{'fonts'}{$k}; -+ } else { -+ print "undefined fonts for $k in $m ?!?!?\n"; -+ } -+ print LOG "$k\n" unless $opts{'dry-run'}; - } - } -- $maps{"$fname"} = [ @file ] if ($cache); -- push @lines, @file; -- } else { -- push @lines, @{$maps{"$fname"}}; - } - } - chomp @lines; -@@ -397,50 +459,33 @@ - # - sub writeLines { - my ($fname, @lines) = @_; -+ return if $opts{"dry-run"}; - map { ($_ !~ m/\n$/ ? s/$/\n/ : $_ ) } @lines; -- open FILE, ">$fname" or die "$0: can't write lines to $fname: $!"; -+ open FILE, ">$fname" or die "$prg: can't write lines to $fname: $!"; - print FILE @lines; - close FILE; - } - - ############################################################################### --# copyFile() --# copy file $src to $dst, sets $dst creation and mod time -+# to_pdftex() -+# 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 copyFile { -- my ($src, $dst) = @_; -- my $dir; -- ($dir=$dst)=~s/(.*)\/.*/$1/; -- mkdirhier $dir; -- -- $src eq $dst && return "can't copy $src to itself!\n"; -- -- open IN, "<$src" or die "$0: can't open source file $src for copying: $!"; -- open OUT, ">$dst"; -- -- binmode(IN); -- binmode(OUT); -- print OUT <IN>; -- close(OUT); -- close(IN); -- my @t = stat($src); -- utime($t[8], $t[9], $dst); --} -- --############################################################################### --# SymlinkOrCopy(dir, src, dest) --# create symlinks if possible, otherwise copy files --# --sub SymlinkOrCopy { -- my ($dir, $src, $dest) = @_; -- if (&win32 || $copy) { # always copy -- ©File("$dir/$src", "$dir/$dest"); -- } else { # symlink if supported by fs, copy otherwise -- system("cd \"$dir\" && ln -s $src $dest 2>/dev/null || " -- . "cp -p \"$dir/$src\" \"$dir/$dest\""); -+sub to_pdftex { -+ my $pdftexStripEnc = 0; -+ return @_ unless $pdftexStripEnc; -+ my @in = @_; -+ my @out; -+ foreach my $line (@in) { -+ if ($line =~ /^(.*\s+)(\S+\s+ReEncodeFont\s)(.*)/) { -+ $line = "$1$3"; -+ $line =~ s/\s+\"\s+\"\s+/ /; -+ } -+ push @out, $line; - } -- # remember for "Files generated" in &mkMaps. -- $link{"$dest"}="$src"; -+ return @out; - } - - ############################################################################### -@@ -448,35 +493,208 @@ - # set symlink for psfonts.map according to dvipsPreferOutline variable - # - sub setupSymlinks { -+ my ($dvipsPreferOutline, $dvipsoutputdir, $pdftexDownloadBase14, $pdftexoutputdir) = @_; - my $src; -+ my %link; -+ my @link; - -- if ($dvipsPreferOutline) { -+ if ($dvipsPreferOutline eq "true") { - $src = "psfonts_t1.map"; - } else { - $src = "psfonts_pk.map"; - } -- unlink "$dvipsoutputdir/psfonts.map"; -- &SymlinkOrCopy("$dvipsoutputdir", "$src", "psfonts.map"); -+ unlink "$dvipsoutputdir/psfonts.map" unless $opts{"dry-run"}; -+ push @link, &SymlinkOrCopy("$dvipsoutputdir", "$src", "psfonts.map"); - -- if ($pdftexDownloadBase14) { -+ if ($pdftexDownloadBase14 eq "true") { - $src = "pdftex_dl14.map"; - } else { - $src = "pdftex_ndl14.map"; - } -- unlink "$pdftexoutputdir/pdftex.map"; -- &SymlinkOrCopy("$pdftexoutputdir", "$src", "pdftex.map"); -+ unlink "$pdftexoutputdir/pdftex.map" unless $opts{"dry-run"}; -+ push @link, &SymlinkOrCopy("$pdftexoutputdir", "$src", "pdftex.map"); -+ %link = @link; -+ return \%link; -+} -+ -+############################################################################### -+# SymlinkOrCopy(dir, src, dest) -+# create symlinks if possible, otherwise copy files -+# -+sub SymlinkOrCopy { -+ my ($dir, $src, $dest) = @_; -+ return ($src, $dest) if $opts{"dry-run"}; -+ if (&win32 || $opts{'copy'}) { # always copy -+ ©File("$dir/$src", "$dir/$dest"); -+ } else { # symlink if supported by fs, copy otherwise -+ system("cd \"$dir\" && ln -s $src $dest 2>/dev/null || " -+ . "cp -p \"$dir/$src\" \"$dir/$dest\""); -+ } -+ # remember for "Files generated" in &mkMaps. -+ return ($dest, $src); - } - -- -+ - ############################################################################### --# transLW35(args ...) -+# transLW35(mode 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); -+ my ($mode, @lines) = @_; -+ -+ my @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 /', -+ ); -+ -+ my @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/', -+ ); -+ -+ my @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/', -+ ); -+ -+ my @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/', -+ ); - - if ($mode eq "" || $mode eq "URWkb") { - # do nothing -@@ -497,963 +715,1300 @@ - } - - ############################################################################### --# locateWeb2c (file ...) --# apply kpsewhich with format 'web2c files' --# --sub locateWeb2c { -- my @files = @_; -- return @files if ($#files < 0); -- -- @files = split (/\n/, `kpsewhich --format="web2c files" @files`); -- if (wantarray) { -- return @files; -- } -- else { -- return $files[0]; -+# cidx2dvips() -+# reads from stdin, writes to stdout. It transforms "cid-x"-like syntax into -+# "dvips"-like syntax. -+############################################################################### -+sub cidx2dvips { -+ my ($s) = @_; -+ my @d; -+ foreach (@$s) { -+ if (m/^%/) { -+ push(@d, $_); -+ next; -+ } -+ s/,BoldItalic/ -s .3/; -+ s/,Bold//; -+ s/,Italic/ -s .3/; -+ s/\s\s*/ /g; -+ if ($_ =~ /.*[@\:\/,]/) {next;} -+ elsif ($_ =~ /^[^ ][^ ]* unicode /) {next;} -+ s/^([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*)\.[Oo][Tt][Ff]/$1/; -+ s/^([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*)\.[Tt][Tt][FfCc]/$1/; -+ s/$/ %/; -+ s/^(([^ ]*).*)/$1$2/; -+ s/^([^ ][^ ]* ([^ ][^ ]*) !*([^ ][^ ]*).*)/$1 $3-$2/; -+ s/^(.* -e ([.0-9-][.0-9-]*).*)/$1 "$2 ExtendFont"/; -+ s/^(.* -s ([.0-9-][.0-9-]*).*)/$1 "$2 SlantFont"/; -+ s/.*%//; -+ push(@d, $_); -+ } -+ return @d -+} -+ -+sub get_cfg { -+ my ($v) = @_; -+ if (defined($alldata->{'merged'}{'setting'}{$v})) { -+ return ( $alldata->{'merged'}{'setting'}{$v}{'val'}, -+ $alldata->{'merged'}{'setting'}{$v}{'origin'} ); -+ } else { -+ return ($settings{$v}{'default'}, "default"); - } - } - --############################################################################### --# locateMap (file ...) --# apply kpsewhich with format 'map' --# --sub locateMap { -- my @maps = @_; -- return @maps if ($#maps < 0); -+sub mkMaps { -+ my $logfile; - -- my @files = `kpsewhich --format=map @maps`; -- chomp @files; -+ $logfile = "$TEXMFVAR/web2c/updmap.log"; - -- foreach my $map (@maps) { -- push @missing, $map if (! grep /\/$map(\.map)?$/, @files); -+ if (! $opts{'dry-run'}) { -+ mkdirhier("$TEXMFVAR/web2c"); -+ open LOG, ">$logfile" -+ or die "$prg: Can't open log file \"$logfile\": $!"; -+ print LOG &version(); -+ printf LOG "%s\n\n", scalar localtime(); -+ print LOG "Using the following config files:\n"; -+ for (@{$opts{'cnffile'}}) { -+ print LOG " $_\n"; -+ } - } -- -- if (wantarray) { -- return @files; -- } else { -- return $files[0]; -+ sub print_and_log { -+ my $str=shift; -+ print $str if !$opts{'quiet'}; -+ print LOG $str unless $opts{'dry-run'}; -+ } -+ sub only_log { -+ print LOG shift unless $opts{'dry-run'}; - } --} - -- --############################################################################### --# cfgval(variable) --# read variable ($1) from config file --# --sub cfgval { -- my ($variable) = @_; -- my $value; -+ my ($mode, $mode_origin) = get_cfg('LW35'); -+ my ($dvipsPreferOutline, $dvipsPreferOutline_origin) = -+ get_cfg('dvipsPreferOutline'); -+ my ($dvipsDownloadBase35, $dvipsDownloadBase35_origin) = -+ get_cfg('dvipsDownloadBase35'); -+ my ($pdftexDownloadBase14, $pdftexDownloadBase14_origin) = -+ get_cfg('pdftexDownloadBase14'); -+ my ($pxdviUse, $pxdviUse_origin) = get_cfg('pxdviUse'); -+ my ($kanjiEmbed, $kanjiEmbed_origin) = get_cfg('kanjiEmbed'); -+ -+ print_and_log ("\n$prg is creating new map files" -+ . "\nusing the following configuration:" -+ . "\n LW35 font names : " -+ . "$mode ($mode_origin)" -+ . "\n prefer outlines : " -+ . "$dvipsPreferOutline ($dvipsPreferOutline_origin)" -+ . "\n texhash enabled : " -+ . ($opts{'nohash'} ? "false" : "true") -+ . "\n download standard fonts (dvips) : " -+ . "$dvipsDownloadBase35 ($dvipsDownloadBase35_origin)" -+ . "\n download standard fonts (pdftex) : " -+ . "$pdftexDownloadBase14 ($pdftexDownloadBase14_origin)" -+ . "\n kanjiEmbed replacement string : " -+ . "$kanjiEmbed ($kanjiEmbed_origin)" -+ . "\n create a mapfile for pxdvi : " -+ . "$pxdviUse ($pxdviUse_origin)" -+ . "\n\n"); - -- if ($#cfg < 0) { -- open FILE, "<$cnfFile" or die "$0: can't open configuration file $cnfFile: $!"; -- while (<FILE>) { -- s/\s*$//; # strip trailing spaces -- push @cfg, $_; -+ print_and_log ("Scanning for LW35 support files"); -+ my $dvips35 = $alldata->{'maps'}{"dvips35.map"}{'fullpath'}; -+ my $pdftex35 = $alldata->{'maps'}{"pdftex35.map"}{'fullpath'}; -+ my $ps2pk35 = $alldata->{'maps'}{"ps2pk35.map"}{'fullpath'}; -+ my $LW35 = "\n$dvips35\n$pdftex35\n$ps2pk35\n\n"; -+ only_log ("\n"); -+ only_log ($LW35); -+ print_and_log (" [ 3 files]\n"); -+ only_log ("\n"); -+ -+ print_and_log ("Scanning for MixedMap entries"); -+ my @mixedmaps; -+ my @notmixedmaps; -+ my @kanjimaps; -+ for my $m (keys %{$alldata->{'maps'}}) { -+ my $origin = $alldata->{'maps'}{$m}{'origin'}; -+ next if !defined($origin); -+ next if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'status'} eq "disabled"); -+ push @mixedmaps, $m -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} eq "MixedMap"); -+ push @notmixedmaps, $m -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} eq "Map"); -+ push @kanjimaps, $m -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} eq "KanjiMap"); -+ } -+ -+ @mixedmaps = sort @mixedmaps; -+ @notmixedmaps = sort @notmixedmaps; -+ @kanjimaps = sort @kanjimaps; -+ only_log("\n"); -+ foreach my $m (sort @mixedmaps) { -+ if (defined($alldata->{'maps'}{$m}{'fullpath'})) { -+ only_log($alldata->{'maps'}{$m}{'fullpath'} . "\n"); -+ } else { -+ only_log("$m (full path not set?)\n"); - } -- 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; -+ only_log("\n"); -+ print_and_log (sprintf(" [%3d files]\n", scalar @mixedmaps)); -+ only_log("\n"); -+ -+ print_and_log ("Scanning for KanjiMap entries"); -+ only_log("\n"); -+ foreach my $m (@kanjimaps) { -+ if (defined($alldata->{'maps'}{$m}{'fullpath'})) { -+ only_log($alldata->{'maps'}{$m}{'fullpath'} . "\n"); -+ } else { -+ only_log("$m (full path not set?)\n"); - } - } -- 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); -- my $found = 0; -- map { -- if (/$pat/) { -- $found = 1; $_ = $line; -- } -- } @lines; -- if (! $found) { -- push @lines, $line; -- } -- &writeLines($file, @lines); --} -- --############################################################################### --# 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); -+ only_log("\n"); -+ print_and_log (sprintf(" [%3d files]\n", scalar @kanjimaps)); -+ only_log("\n"); -+ -+ print_and_log ("Scanning for Map entries"); -+ only_log("\n"); -+ foreach my $m (@notmixedmaps) { -+ if (defined($alldata->{'maps'}{$m}{'fullpath'})) { -+ only_log($alldata->{'maps'}{$m}{'fullpath'} . "\n"); - } else { -- $key = $o; -- die "$0: no value for --setoption $key, goodbye.\n" -- if $i + 1 >= @options; -- $val = $options[$i + 1]; -- $i++; -+ only_log("$m (full path not set?)\n"); - } -- -- 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) = @_; -+ only_log("\n"); -+ print_and_log (sprintf(" [%3d files]\n\n", scalar @notmixedmaps)); -+ only_log("\n"); - -- if ($opt eq "LW35") { -- if ($val !~ m/^(URWkb|URW|ADOBE|ADOBEkb)$/) { -- die "$0: Invalid value $val for option $opt; try --help.\n"; -- } -- } elsif ($opt =~ --m/^(dvipsPreferOutline|dvipsDownloadBase35|(pdftex|dvipdfm)DownloadBase14|pxdviUse)$/) { -- if ($val !~ m/^(true|false)$/) { -- die "$0: Invalid value $val for option $opt; should be \"true\" or \"false\".\n"; -- } -- } elsif ($opt eq "kanjiEmbed"){ -- # do nothing -- } else { -- die "$0: Unsupported option $opt (value given: $val).\n"; -+ # Create psfonts_t1.map, psfonts_pk.map, ps2pk.map and pdftex.map: -+ my $dvipsoutputdir = $opts{'dvipsoutputdir'}; -+ my $pdftexoutputdir = $opts{'pdftexoutputdir'}; -+ my $dvipdfmoutputdir = $opts{'dvipdfmoutputdir'}; -+ my $pxdvioutputdir = $opts{'pxdvioutputdir'}; -+ if (!$opts{'dry-run'}) { -+ my @managed_files = ("$dvipsoutputdir/download35.map", -+ "$dvipsoutputdir/builtin35.map", -+ "$dvipsoutputdir/psfonts_t1.map", -+ "$dvipsoutputdir/psfonts_pk.map", -+ "$pdftexoutputdir/pdftex_dl14.map", -+ "$pdftexoutputdir/pdftex_ndl14.map", -+ "$dvipdfmoutputdir/kanjix.map", -+ "$dvipsoutputdir/ps2pk.map"); -+ push @managed_files, "$pxdvioutputdir/xdvi-ptex.map" -+ if ($pxdviUse eq "true"); -+ for my $file (@managed_files) { -+ open FILE, ">$file"; -+ print FILE "% $file:\ -+% maintained by updmap[-sys] (multi).\ -+% Don't change this file directly. Use updmap[-sys] instead.\ -+% See the updmap documentation.\ -+% A log of the run that created this file is available here:\ -+% $logfile\ -+"; -+ close FILE; -+ } - } - -- # 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"); --} -+ my @kanjimaps_fonts = getFonts(@kanjimaps); -+ @kanjimaps_fonts = &normalizeLines(@kanjimaps_fonts); -+ my @ps2pk_fonts = getFonts('-all', "ps2pk35.map"); -+ my @dvips35_fonts = getFonts('-all', "dvips35.map"); -+ my @pdftex35_fonts = getFonts('-all', "pdftex35.map"); -+ my @mixedmaps_fonts = getFonts(@mixedmaps); -+ my @notmixedmaps_fonts = getFonts(@notmixedmaps); - --############################################################################### --# 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|pxdviUse)/) { -- print "true false\n"; -- } -- elsif ($item eq "kanjiEmbed") { -- print "(any string)\n"; -- } -- else { -- print "Unknown item \"$item\"; should be one of LW35, dvipsPreferOutline,\n" -- . " dvipsDownloadBase35, pdftexDownloadBase14, pxdviUse or kanjiEmbed\n"; -- } -+ print "Generating output for dvipdfm...\n" if !$opts{'quiet'}; -+ &writeLines(">$dvipdfmoutputdir/kanjix.map", @kanjimaps_fonts); -+ -+ if ($pxdviUse eq "true") { -+ # we use the very same data as for kanjix.map, but generate -+ # a different file, so that in case a user wants to hand-craft it -+ print "Generating output for pxdvi...\n" if !$opts{'quiet'}; -+ &writeLines(">$pxdvioutputdir/xdvi-ptex.map", @kanjimaps_fonts); - } -- 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|KanjiMap)$/) { -- die "$0: Invalid mapType $type\n"; -+ print "Generating output for ps2pk...\n" if !$opts{'quiet'}; -+ my @ps2pk_map; -+ push @ps2pk_map, "% ps2pk35.map"; -+ push @ps2pk_map, transLW35($mode, @ps2pk_fonts); -+ push @ps2pk_map, @mixedmaps_fonts; -+ push @ps2pk_map, @notmixedmaps_fonts; -+ &writeLines(">$dvipsoutputdir/ps2pk.map", -+ normalizeLines(@ps2pk_map)); -+ -+ print "Generating output for dvips...\n" if !$opts{'quiet'}; -+ my @download35_map; -+ push @download35_map, "% ps2pk35.map"; -+ push @download35_map, transLW35($mode, @ps2pk_fonts); -+ &writeLines(">$dvipsoutputdir/download35.map", -+ normalizeLines(@download35_map)); -+ -+ my @builtin35_map; -+ push @builtin35_map, "% dvips35.map"; -+ push @builtin35_map, transLW35($mode, @dvips35_fonts); -+ &writeLines(">$dvipsoutputdir/builtin35.map", -+ normalizeLines(@builtin35_map)); -+ -+ my @dftdvips_fonts = ($dvipsDownloadBase35 ? @ps2pk_fonts : @dvips35_fonts); -+ -+ my @psfonts_t1_map; -+ if ($dvipsDownloadBase35) { -+ push @psfonts_t1_map, "% ps2pk35.map", -+ @dftdvips_fonts = @ps2pk_fonts; -+ } else { -+ push @psfonts_t1_map, "% dvips35.map"; -+ @dftdvips_fonts = @dvips35_fonts; - } -- # a map can only have one type, so we carefully disable everything -- # about map here: -- &disableMap("$map"); -+ push @psfonts_t1_map, transLW35($mode, @dftdvips_fonts); -+ my @tmpkanji2 = cidx2dvips(\@kanjimaps_fonts); -+ push @psfonts_t1_map, @mixedmaps_fonts; -+ push @psfonts_t1_map, @notmixedmaps_fonts; -+ push @psfonts_t1_map, @tmpkanji2; -+ &writeLines(">$dvipsoutputdir/psfonts_t1.map", -+ normalizeLines(@psfonts_t1_map)); - -- # now enable with the right type: -- &configReplace("$cnfFile", "^#!\\s*" . "$type" . "\\s*$map", "$type $map"); --} -+ my @psfonts_pk_map; -+ push @psfonts_pk_map, transLW35($mode, @dftdvips_fonts); -+ push @psfonts_pk_map, @notmixedmaps_fonts; -+ push @psfonts_pk_map, @tmpkanji2; -+ &writeLines(">$dvipsoutputdir/psfonts_pk.map", -+ normalizeLines(@psfonts_pk_map)); - --############################################################################### --# disableMap (map) --# disables map in config file (any type) --# --sub disableMap { -- my ($map) = @_; -- my %count = (); -- my $type; -+ print "Generating output for pdftex...\n" if !$opts{'quiet'}; -+ # remove PaintType due to Sebastian's request -+ my @pdftexmaps_ndl; -+ push @pdftexmaps_ndl, "% pdftex35.map"; -+ push @pdftexmaps_ndl, transLW35($mode, @pdftex35_fonts); -+ push @pdftexmaps_ndl, @mixedmaps_fonts; -+ push @pdftexmaps_ndl, @notmixedmaps_fonts; -+ @pdftexmaps_ndl = grep { $_ !~ m/(^%\|PaintType)/ } @pdftexmaps_ndl; -+ -+ my @pdftexmaps_dl; -+ push @pdftexmaps_dl, "% ps2pk35.map"; -+ push @pdftexmaps_dl, transLW35($mode, @ps2pk_fonts); -+ push @pdftexmaps_dl, @mixedmaps_fonts; -+ push @pdftexmaps_dl, @notmixedmaps_fonts; -+ @pdftexmaps_dl = grep { $_ !~ m/(^%\|PaintType)/ } @pdftexmaps_dl; - -- my @mapType = grep { -- my @fields = split; -- if ($fields[0] and $fields[0] =~ /^(MixedMap|Map|KanjiMap)$/ -- and $fields[1] eq $map and ++$count{$fields[0]}) { -- $_ = $fields[0]; -- } -- else { -- $_ = ''; -- } -- } &getLines($cnfFile); -+ my @pdftex_ndl14_map = @pdftexmaps_ndl; -+ @pdftex_ndl14_map = &normalizeLines(@pdftex_ndl14_map); -+ @pdftex_ndl14_map = &to_pdftex(@pdftex_ndl14_map); -+ &writeLines(">$pdftexoutputdir/pdftex_ndl14.map", @pdftex_ndl14_map); - -- foreach $type (@mapType) { -- &configReplace("$cnfFile", "^$type" . "\\s*$map", "#! $type $map"); -- } --} -+ my @pdftex_dl14_map = @pdftexmaps_dl; -+ @pdftex_dl14_map = &normalizeLines(@pdftex_dl14_map); -+ @pdftex_dl14_map = &to_pdftex(@pdftex_dl14_map); -+ &writeLines(">$pdftexoutputdir/pdftex_dl14.map", @pdftex_dl14_map); - --############################################################################### --# 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) = @_; -+ our $link = &setupSymlinks($dvipsPreferOutline, $dvipsoutputdir, $pdftexDownloadBase14, $pdftexoutputdir); -+ -+ print_and_log ("\nFiles generated:\n"); -+ sub dir { -+ my ($d, $f, $target)=@_; -+ our $link; -+ if (-e "$d/$f") { -+ my @stat=lstat("$d/$f"); -+ my ($s,$m,$h,$D,$M,$Y)=localtime($stat[9]); -+ my $timestamp=sprintf ("%04d-%02d-%02d %02d:%02d:%02d", -+ $Y+1900, $M+1, $D, $h, $m, $s); -+ my $date=sprintf "%12d %s %s", $stat[7], $timestamp, $f; -+ print_and_log ($date); - -- if (!$od) { -- my $rel = "fonts/map/$driver/updmap"; -- my $tf; -- # Try TEXMFVAR tree. Use it if variable is set and $rel can -- # be written. -- chomp($tf = `kpsewhich --var-value=TEXMFVAR`); -- if ($tf) { -- &mkdirhier("$tf/$rel"); -- if (! -w "$tf/$rel") { -- die "$0: Directory \"$tf/$rel\" isn't writable.\n"; -+ if (-l "$d/$f") { -+ my $lnk=sprintf " -> %s\n", readlink ("$d/$f"); -+ print_and_log ($lnk); -+ } elsif ($f eq $target) { -+ if (&files_are_identical("$d/$f", "$d/" . $link->{$target})) { -+ print_and_log (" = $link->{$target}\n"); -+ } else { -+ print_and_log (" = ?????\n"); # This shouldn't happen. -+ } -+ } else { -+ print_and_log ("\n"); - } -+ } else { -+ print STDERR "Warning: File $d/$f doesn't exist.\n"; -+ print LOG "Warning: File $d/$f doesn't exist.\n" -+ unless $opts{'dry-run'}; - } -- $od = "$tf/$rel"; - } -- &mkdirhier($od); -- print "$driver output dir: \"$od\"\n" if !$quiet; -- return $od; --} -- --sub setupDestDir { -- $dvipsoutputdir = &setupOutputDir($dvipsoutputdir, "dvips"); -- $pdftexoutputdir = &setupOutputDir($pdftexoutputdir, "pdftex"); -- $dvipdfmoutputdir = &setupOutputDir($dvipdfmoutputdir, "dvipdfm"); -- $pxdvioutputdir = &setupOutputDir($pxdvioutputdir, "pxdvi"); --} - --############################################################################### --# setupCfgFile() --# find config file if none specified on cmd line. --# --sub setupCfgFile { -- if (! $cnfFile) { -- my $tf = `kpsewhich --var-value=TEXMFCONFIG`; -- chomp($tf); -- if ($tf && ! -f "$tf/web2c/$cnfFileShort") { -- &mkdirhier("$tf/web2c") if (! -d "$tf/web2c"); -- if (-d "$tf/web2c" && -w "$tf/web2c") { -- unlink "$tf/web2c/$cnfFileShort"; -- my $original_cfg=`kpsewhich updmap.cfg`; -- chomp($original_cfg); -- 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 (-s $cnfFile) { -- print "Config file: \"$cnfFile\"\n" if !$quiet; -- } else { -- die "$0: Config file updmap.cfg not found.\n"; -+ my $d; -+ $d = "$dvipsoutputdir"; -+ print_and_log(" $d:\n"); -+ foreach my $f ('builtin35.map', 'download35.map', 'psfonts_pk.map', -+ 'psfonts_t1.map', 'ps2pk.map', 'psfonts.map') { -+ dir ($d, $f, 'psfonts.map'); -+ $updLSR->{add}("$d/$f") unless $opts{'dry-run'}; -+ } -+ $d = "$pdftexoutputdir"; -+ print_and_log(" $d:\n"); -+ foreach my $f ('pdftex_dl14.map', 'pdftex_ndl14.map', 'pdftex.map') { -+ dir ($d, $f, 'pdftex.map'); -+ $updLSR->{add}("$d/$f") unless $opts{'dry-run'}; -+ } -+ $d="$dvipdfmoutputdir"; -+ print_and_log(" $d:\n"); -+ foreach my $f ('kanjix.map') { -+ dir ($d, $f, ''); -+ $updLSR->{add}("$d/$f") unless $opts{'dry-run'}; -+ } -+ if ($pxdviUse eq "true") { -+ $d="$pxdvioutputdir"; -+ print_and_log(" $d:\n"); -+ foreach my $f ('xdvi-ptex.map') { -+ dir ($d, $f, ''); -+ $updLSR->{add}("$d/$f") unless $opts{'dry-run'}; - } - } -+ close LOG unless $opts{'dry-run'}; -+ print "\nTranscript written on \"$logfile\".\n" if !$opts{'quiet'}; -+ - } - --############################################################################### --# 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/\@kanjiEmbed@/$kanjiEmbed/; -- $_ =~ s/\s*([^\s]*)\s*([^\s]*)/$2/; -- } @maps; -- @maps = sort(@maps); -- @maps = grep { ++$count{$_} < 2; } @maps; - -- @maps = &locateMap(@maps); -- return @maps; -+sub locateMap { -+ my $map = shift; -+ my $ret = `kpsewhich --format=map $map`; -+ chomp($ret); -+ return $ret; - } - --############################################################################### --# listMaps() --# list all maps mentioned in the config file --# --sub listMaps { -- my $what=shift; -- my @mapfiles; -- my @paths; -- $kanjiEmbed = &cfgval("kanjiEmbed"); -- $kanjiEmbed = "noEmbed" unless (defined $kanjiEmbed); -- -- my @lines = grep { -- if ($what eq 'sync') { -- $_ =~ m/^(Mixed|Kanji)?Map/ -+sub processOptions { -+ # first process the stupid setoption= s@{1,2} which is not accepted -+ # furthermore, try to work around missing s{1,2} support in older perls -+ my $oldconfig = Getopt::Long::Configure(qw(pass_through)); -+ our @setoptions; -+ our @enable; -+ sub read_one_or_two { -+ my ($opt, $val) = @_; -+ our @setoptions; -+ our @enable; -+ # check if = occirs in $val, if not, get the next argument -+ if ($val =~ m/=/) { -+ if ($opt eq "setoption") { -+ push @setoptions, $val; -+ } else { -+ push @enable, $val; -+ } - } else { -- $_ =~ m/^(\#! *)?(Mixed|Kanji)?Map/ -- } -- } &getLines($cnfFile); -- -- if ($what eq 'list') { -- # --listmaps -- map { print "$_\n"; } @lines; -- } else { -- map { $_ =~ s/\@kanjiEmbed@/$kanjiEmbed/ } @lines; -- @mapfiles=grep { $_ =~ s/^(\#! *)?(Mixed|Kanji)?Map\s+// } @lines; -- @paths=&locateMap(@mapfiles); -- -- if ($what eq 'avail') { -- # --listavailablemaps -- map { -- my $entry="$_"; -- # that was disabled, but I don't understand why (NP) -- print "$entry\n" if (grep { $_ =~ m/\/$entry/ } @paths); -- } @lines; -- } elsif ($what eq 'sync') { -- # --syncwithtrees -- map { -- my $entry="$_"; -- unless (grep { $_ =~ m/\/$entry/ } @paths) { -- &disableMap($entry); -- print " $entry disabled\n" if !$quiet; -- } -- } @lines; -+ my $vv = shift @ARGV; -+ die "Try \"$prg --help\" for more information.\n" -+ if !defined($vv); -+ if ($opt eq "setoption") { -+ push @setoptions, "$val=$vv"; -+ } else { -+ push @enable, "$val=$vv"; -+ } - } - } --} -+ GetOptions("setoption=s@" => \&read_one_or_two, -+ "enable=s@" => \&read_one_or_two) or -+ die "Try \"$prg --help\" for more information.\n"; - --############################################################################### --# 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 = (); -+ @{$opts{'setoption'}} = @setoptions if (@setoptions); -+ @{$opts{'enable'}} = @enable if (@enable); - -- @lines = grep { $_ !~ m/^[*#;%]/ } @lines; -- map {$_ =~ s/\s+/ /gx } @lines; -- @lines = grep { $_ !~ m/^\s*$/x } @lines; -- map { $_ =~ s/\s$//x ; -- $_ =~ s/\s*\"\s*/ \" /gx; -- $_ =~ s/\" ([^\"]*) \"/\"$1\"/gx; -- } @lines; -+ Getopt::Long::Configure($oldconfig); - -- @lines = grep {++$count{$_} < 2 } (sort @lines); -+ # now continue with normal option handling - -- return @lines; -+ GetOptions(\%opts, @cmdline_options) or -+ die "Try \"$prg --help\" for more information.\n"; - } - --############################################################################### --# to_pdftex() --# 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; -- my @in = @_; -- my @out; -- foreach my $line (@in) { -- if ($line =~ /^(.*\s+)(\S+\s+ReEncodeFont\s)(.*)/) { -- $line = "$1$3"; -- $line =~ s/\s+\"\s+\"\s+/ /; -+# determines the output dir for driver from cmd line, or if not given -+# from TEXMFVAR -+sub setupOutputDir { -+ my $driver = shift; -+ if (!$opts{$driver . "outputdir"}) { -+ if ($opts{'outputdir'}) { -+ $opts{$driver . "outputdir"} = $opts{'outputdir'}; -+ } else { -+ $opts{$driver . "outputdir"} = "$TEXMFVAR/fonts/map/$driver/updmap"; - } -- push @out, $line; - } -- return @out; --} -- --############################################################################### --# cidx2dvips() --# reads from stdin, writes to stdout. It transforms "cid-x"-like syntax into --# "dvips"-like syntax. --############################################################################### --sub cidx2dvips { -- my ($s) = @_; -- my @d; -- foreach (@$s) { -- s/,BoldItalic/ -s .3/; -- s/,Bold//; -- s/,Italic/ -s .3/; -- s/\s\s*/ /g; -- if ($_ =~ /.*[@\:\/,]/) {next;} -- elsif ($_ =~ /^[^ ][^ ]* unicode /) {next;} -- s/^([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*)\.[Oo][Tt][Ff]/$1/; -- s/^([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*)\.[Tt][Tt][FfCc]/$1/; -- s/$/ %/; -- s/^(([^ ]*).*)/$1$2/; -- s/^([^ ][^ ]* ([^ ][^ ]*) !*([^ ][^ ]*).*)/$1 $3-$2/; -- s/^(.* -e ([.0-9-][.0-9-]*).*)/$1 "$2 ExtendFont"/; -- s/^(.* -s ([.0-9-][.0-9-]*).*)/$1 "$2 SlantFont"/; -- s/.*%//; -- push(@d, $_); -+ my $od = $opts{$driver . "outputdir"}; -+ if (!$opts{"dry-run"}) { -+ &mkdirhier($od); -+ if (! -w $od) { -+ die "$prg: Directory \"$od\" isn't writable: $!"; - } -- return @d -+ } -+ print "$driver output dir: \"$od\"\n" if !$opts{'quiet'}; -+ return $od; - } - -- - ############################################################################### --# mkMaps() --# the main task of this script: create the output files -+# setOption (@options) -+# parse @options for "key=value" (one element of @options) -+# we can only have "key=value" since that is the way it was prepared -+# in process_options -+# (These were the values provided to --setoption.) - # --sub mkMaps { -- my @lines; -- my $logfile; -+sub setOptions { -+ my (@options) = @_; -+ for (my $i = 0; $i < @options; $i++) { -+ my $o = $options[$i]; - -- $cache=1; -+ my ($key,$val) = split (/=/, $o, 2); - -- if (! $dry_run) { -- my $TEXMFVAR = `kpsewhich --var-value=TEXMFVAR`; -- chomp($TEXMFVAR); -- $logfile = "$TEXMFVAR/web2c/updmap.log"; -- mkdirhier "$TEXMFVAR/web2c"; -- open LOG, ">$logfile" -- or die "$0: Can't open log file \"$logfile\": $!"; -- $writelog=1; -- print LOG &version(); -- printf LOG "%s\n\n", scalar localtime(); -- print LOG "Using config file \"$cnfFile\".\n"; -- } -- sub wlog () { -- my $str=shift; -- if ($dry_run) { -- print $str; -- } else { -- print $str if !$quiet; -- print LOG $str; -- } -+ die "$prg: unexpected empty key or val for options (@options), goodbye.\n" -+ if !$key || !$val; -+ &setOption ($key, $val); - } -- sub newline() { -- if ($dry_run) { -- print "\n"; -+ return save_updmap($alldata->{'changes_config'}); -+} -+ -+sub enable_disable_maps { -+ my (@what) = @_; -+ my $tc = $alldata->{'changes_config'}; -+ die "$prg: top config file $tc has not been read." -+ if (!defined($alldata->{'updmap'}{$tc})); -+ my $changed = 0; -+ for my $w (@what) { -+ if ($w =~ m/=/) { -+ # this is --enable MapType=MapName -+ my ($type, $map) = split ('=', $w); -+ enable_map($tc, $type, $map); - } else { -- print LOG "\n"; -+ # this is --disable MapName -+ disable_map($tc, $w); - } - } -+ return save_updmap($tc); -+} - -- $mode = &cfgval("LW35"); -- $mode = "URWkb" unless (defined $mode); -- -- $dvipsPreferOutline = &cfgval("dvipsPreferOutline"); -- $dvipsPreferOutline = 1 unless (defined $dvipsPreferOutline); -- -- $dvipsDownloadBase35 = &cfgval("dvipsDownloadBase35"); -- $dvipsDownloadBase35 = 1 unless (defined $dvipsDownloadBase35); -- -- $pdftexDownloadBase14 = &cfgval("pdftexDownloadBase14"); -- $pdftexDownloadBase14 = 1 unless (defined $pdftexDownloadBase14); -- -- $kanjiEmbed = &cfgval("kanjiEmbed"); -- $kanjiEmbed = "noEmbed" unless (defined $kanjiEmbed); -- -- $pxdviUse = &cfgval("pxdviUse"); -- $pxdviUse = 0 unless (defined $pxdviUse); -+sub enable_map { -+ my ($tc, $type, $map) = @_; - -- &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 create a mapfile for pxdvi : " -- . ($pxdviUse ? "true" : "false") -- . "\n\n"); -+ die "$prg: invalid mapType $type" if ($type !~ m/^(Map|MixedMap|KanjiMap)$/); - -- &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"; -- if ($dry_run) { -- print $LW35; -+ if (defined($alldata->{'updmap'}{$tc}{'maps'}{$map})) { -+ # the map data has already been read in, no special precautions necessary -+ if (($alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} eq "enabled") && -+ ($alldata->{'updmap'}{$tc}{'maps'}{$map}{'type'} eq $type)) { -+ # nothing to do here ... be happy! -+ return; -+ } else { -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} = "enabled"; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'type'} = $type; -+ $alldata->{'maps'}{$map}{'origin'} = $tc; -+ $alldata->{'maps'}{$map}{'status'} = "enabled"; -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; -+ } - } else { -- print LOG $LW35; -+ # add a new map file! -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'type'} = $type; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} = "enabled"; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'line'} = -1; -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; -+ $alldata->{'maps'}{$map}{'origin'} = $tc; -+ $alldata->{'maps'}{$map}{'status'} = "enabled"; - } -- printf " [%3d files]\n", 3 unless ($quiet || $dry_run); -+} - -- &wlog ("Scanning for MixedMap entries"); -- &newline; -- my @tmp1 = &catMaps('^MixedMap'); -- foreach my $line (@tmp1) { -- if ($dry_run) { -- print "$line\n"; -+sub disable_map { -+ my ($tc, $map) = @_; -+ -+ if (defined($alldata->{'updmap'}{$tc}{'maps'}{$map})) { -+ # the map data has already been read in, no special precautions necessary -+ if ($alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} eq "disabled") { -+ # nothing to do here ... be happy! - } else { -- print LOG "$line\n"; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} = "disabled"; -+ $alldata->{'maps'}{$map}{'origin'} = $tc; -+ $alldata->{'maps'}{$map}{'status'} = "disabled"; -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; - } -+ } else { -+ # disable a Map type that might be activated in a lower ranked updmap.cfg -+ if (!defined($alldata->{'maps'}{$map})) { -+ warning("Map is not present anywhere, why should I disable it?\n"); -+ return; -+ } -+ my $orig = $alldata->{'maps'}{$map}{'origin'}; -+ # add a new entry to the top level where we disable it -+ # copy over the type from the last entry -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'type'} = -+ $alldata->{'updmap'}{$orig}{'maps'}{$map}{'type'}; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'status'} = "disabled"; -+ $alldata->{'updmap'}{$tc}{'maps'}{$map}{'line'} = -1; -+ # rewrite the origin -+ $alldata->{'maps'}{$map}{'origin'} = $tc; -+ $alldata->{'maps'}{$map}{'status'} = "disabled"; -+ # go on for writing -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; - } -- &newline; -- printf " [%3d files]\n", scalar @tmp1 -- unless ($quiet || $dry_run); -- -- &wlog ("Scanning for KanjiMap entries"); -- &newline; -- my @tmpkanji0 = &catMaps('^KanjiMap'); -- foreach my $line (@tmpkanji0) { -- if ($dry_run) { -- print "$line\n"; -- } else { -- print LOG "$line\n"; -+} -+ -+ -+# returns 1 if actually saved due to changes -+sub save_updmap { -+ my $fn = shift; -+ return if $opts{'dry-run'}; -+ my %upd = %{$alldata->{'updmap'}{$fn}}; -+ if ($upd{'changed'}) { -+ mkdirhier(dirname($fn)); -+ open (FN, ">$fn") || die "$prg: can't write to $fn: $!"; -+ my @lines = @{$upd{'lines'}}; -+ if (!@lines) { -+ print "Creating new config file $fn\n"; -+ } -+ # collect the lines with data -+ my %line_to_setting; -+ my %line_to_map; -+ my @add_setting; -+ my @add_map; -+ if (defined($upd{'setting'})) { -+ for my $k (keys %{$upd{'setting'}}) { -+ if ($upd{'setting'}{$k}{'line'} == -1) { -+ push @add_setting, $k; -+ } else { -+ $line_to_setting{$upd{'setting'}{$k}{'line'}} = $k; -+ } -+ } - } -- } -- &newline; -- printf " [%3d files]\n", scalar @tmpkanji0 -- unless ($quiet || $dry_run); -- -- &wlog ("Scanning for Map entries"); -- &newline(); -- my @tmp2 = &catMaps('^Map'); -- foreach my $line (@tmp2) { -- if ($dry_run) { -- print "$line\n"; -- } else { -- print LOG "$line\n"; -+ if (defined($upd{'maps'})) { -+ for my $k (keys %{$upd{'maps'}}) { -+ if ($upd{'maps'}{$k}{'line'} == -1) { -+ push @add_map, $k; -+ } else { -+ $line_to_map{$upd{'maps'}{$k}{'line'}} = $k; -+ } -+ } - } -+ for my $i (0..$#lines) { -+ if (defined($line_to_setting{$i})) { -+ my $k = $line_to_setting{$i}; -+ my $v = $upd{'setting'}{$k}{'val'}; -+ print FN "$k $v\n"; -+ } elsif (defined($line_to_map{$i})) { -+ my $m = $line_to_map{$i}; -+ my $rm; -+ if (defined($upd{'maps'}{$m}{'original'})) { -+ # we have the case that @noEmbed@ was replaced by the respective -+ # setting. Before writing out we have to replace this back with -+ # the original line!A -+ $rm = $upd{'maps'}{$m}{'original'}; -+ } else { -+ $rm = $m; -+ } -+ my $t = $upd{'maps'}{$m}{'type'}; -+ my $p = ($upd{'maps'}{$m}{'status'} eq "disabled" ? "#! " : ""); -+ print FN "$p$t $rm\n"; -+ } else { -+ print FN "$lines[$i]\n"; -+ } -+ } -+ # add the new settings and maps -+ for my $k (@add_setting) { -+ my $v = $upd{'setting'}{$k}{'val'}; -+ print FN "$k $v\n"; -+ } -+ for my $m (@add_map) { -+ my $t = $upd{'maps'}{$m}{'type'}; -+ my $p = ($upd{'maps'}{$m}{'status'} eq "disabled" ? "#! " : ""); -+ print FN "$p$t $m\n"; -+ } -+ close(FN) || warn("Cannot close file handle for $fn: $!"); -+ delete $alldata->{'updmap'}{$fn}{'changed'}; -+ return 1; - } -- &newline; -- printf " [%3d files]\n\n", scalar @tmp2 -- unless ($quiet || $dry_run); -- -- if (@missing > 0) { -- print STDERR "\nERROR: The following map file(s) couldn't be found:\n\t"; -- print STDERR join(' ', @missing); -- print STDERR "\n\n\tDid you run mktexlsr?\n\n" . -- "\tYou can delete non-existent map entries using the option\n". -- "\t --syncwithtrees.\n\n"; -- exit (1); -- } -- exit(0) if $dry_run; -+ return 0; -+} - -- # Create psfonts_t1.map, psfonts_pk.map, ps2pk.map and pdftex.map: -- my @managed_files = ("$dvipsoutputdir/download35.map", -- "$dvipsoutputdir/builtin35.map", -- "$dvipsoutputdir/psfonts_t1.map", -- "$dvipsoutputdir/psfonts_pk.map", -- "$pdftexoutputdir/pdftex_dl14.map", -- "$pdftexoutputdir/pdftex_ndl14.map", -- "$dvipdfmoutputdir/kanjix.map", -- "$dvipsoutputdir/ps2pk.map"); -- if ($pxdviUse) { -- push @managed_files, "$pxdvioutputdir/xdvi-ptex.map"; -- } -- for my $file (@managed_files) { -- open FILE, ">$file"; -- print FILE "% $file:\ --% maintained by updmap[-sys].\ --% Don't change this file directly. Use updmap[-sys] instead.\ --% See texmf/web2c/$cnfFileShort and the updmap documentation.\ --% A log of the run that created this file is available here:\ --% $logfile\ --"; -- close FILE; -+###################### -+# check for correct option value -+# -+sub check_option { -+ my ($opt, $val) = @_; -+ if ((($settings{$opt}{'type'} eq "binary") && -+ $val ne "true" && $val ne "false") || -+ (($settings{$opt}{'type'} eq "string") && -+ !member($val, @{$settings{$opt}{'possible'}}))) { -+ return 0; - } -+ return 1; -+} - -- print "Generating output for dvipdfm...\n" if !$quiet; -- my @tmpkanji1; -- push @tmpkanji1, &getLines(@tmpkanji0); -- @tmpkanji1 = &normalizeLines(@tmpkanji1); -- &writeLines(">$dvipdfmoutputdir/kanjix.map", -- @tmpkanji1); -- -- if ($pxdviUse) { -- # we use the very same data as for kanjix.map, but generate -- # a different file, so that in case a user wants to hand-craft it -- print "Generating output for pxdvi...\n" if !$quiet; -- &writeLines(">$pxdvioutputdir/xdvi-ptex.map", -- @tmpkanji1); -- } -- -- 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; -- my @download35_map = &transLW35($ps2pk35); -- &writeLines(">$dvipsoutputdir/download35.map", -- &normalizeLines(@download35_map)); -- -- my @builtin35_map = &transLW35($dvips35); -- &writeLines(">$dvipsoutputdir/builtin35.map", -- &normalizeLines(@builtin35_map)); -- -- my $dftdvips = ($dvipsDownloadBase35 ? $ps2pk35 : $dvips35); -- -- my @psfonts_t1_map = &transLW35($dftdvips); -- my @tmpkanji2 = &cidx2dvips(\@tmpkanji1); -- push @psfonts_t1_map, &getLines(@tmp1); -- push @psfonts_t1_map, &getLines(@tmp2); -- push @psfonts_t1_map, @tmpkanji2; -- &writeLines(">$dvipsoutputdir/psfonts_t1.map", -- &normalizeLines(@psfonts_t1_map)); -- -- my @psfonts_pk_map = &transLW35($dftdvips); -- push @psfonts_pk_map, &getLines(@tmp2); -- push @psfonts_pk_map, @tmpkanji2; -- &writeLines(">$dvipsoutputdir/psfonts_pk.map", -- &normalizeLines(@psfonts_pk_map)); -+############################################################################### -+# setOption (conf_file, 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) = @_; - -- print "Generating output for pdftex...\n" if !$quiet; -- # remove PaintType due to Sebastian's request -- my @tmp3 = &transLW35($pdftex35); -- push @tmp3, &getLines(@tmp1); -- push @tmp3, &getLines(@tmp2); -- @tmp3 = grep { $_ !~ m/(^%|PaintType)/ } @tmp3; -- -- my @tmp7 = &transLW35($ps2pk35); -- push @tmp7, &getLines(@tmp1); -- push @tmp7, &getLines(@tmp2); -- @tmp7 = grep { $_ !~ m/(^%|PaintType)/ } @tmp7; -+ die "$prg: Unsupported option $opt." if (!defined($settings{$opt})); -+ die "$0: Invalid value $val for option $opt." -+ if (!check_option($opt, $val)); - -- my @pdftex_ndl14_map = @tmp3; -- @pdftex_ndl14_map = &normalizeLines(@pdftex_ndl14_map); -- @pdftex_ndl14_map = &to_pdftex(@pdftex_ndl14_map); -- &writeLines(">$pdftexoutputdir/pdftex_ndl14.map", @pdftex_ndl14_map); -+ # silently accept this old option name, just in case. -+ return if $opt eq "dvipdfmDownloadBase14"; - -- my @pdftex_dl14_map = @tmp7; -- @pdftex_dl14_map = &normalizeLines(@pdftex_dl14_map); -- @pdftex_dl14_map = &to_pdftex(@pdftex_dl14_map); -- &writeLines(">$pdftexoutputdir/pdftex_dl14.map", @pdftex_dl14_map); -+ #print "Setting option $opt to $val...\n" if !$opts{'quiet'}; -+ my $tc = $alldata->{'changes_config'}; - -- &setupSymlinks; -+ die "$prg: top config file $tc has not been read." -+ if (!defined($alldata->{'updmap'}{$tc})); - -- &wlog ("\nFiles generated:\n"); -- sub dir { -- my ($d, $f, $target)=@_; -- if (-e "$d/$f") { -- my @stat=lstat("$d/$f"); -- my ($s,$m,$h,$D,$M,$Y)=localtime($stat[9]); -- my $timestamp=sprintf ("%04d-%02d-%02d %02d:%02d:%02d", -- $Y+1900, $M+1, $D, $h, $m, $s); -- my $date=sprintf "%12d %s %s", $stat[7], $timestamp, $f; -- &wlog ($date); -- -- if (-l "$d/$f") { -- my $lnk=sprintf " -> %s\n", readlink ("$d/$f"); -- &wlog ($lnk); -- } elsif ($f eq $target) { -- if (&files_are_identical("$d/$f", "$d/$link{$target}")) { -- &wlog (" = $link{$target}\n"); -- } else { -- &wlog (" = ?????\n"); # This shouldn't happen. -- } -- } else { -- &wlog ("\n"); -- } -- } else { -- print STDERR "Warning: File $d/$f doesn't exist.\n"; -- print LOG "Warning: File $d/$f doesn't exist.\n"; -- } -- } -- my $d; -- $d="$dvipsoutputdir"; &wlog (" $d:\n"); -- foreach my $f ('builtin35.map', 'download35.map', 'psfonts_pk.map', -- 'psfonts_t1.map', 'ps2pk.map', 'psfonts.map') { -- dir ($d, $f, 'psfonts.map'); -- $updLSR->{add}("$d/$f"); -- } -- $d="$pdftexoutputdir"; &wlog (" $d:\n"); -- foreach my $f ('pdftex_dl14.map', 'pdftex_ndl14.map', 'pdftex.map') { -- dir ($d, $f, 'pdftex.map'); -- $updLSR->{add}("$d/$f"); -- } -- $d="$dvipdfmoutputdir"; &wlog (" $d:\n"); -- foreach my $f ('kanjix.map') { -- dir ($d, $f, ''); -- $updLSR->{add}("$d/$f"); -- } -- if ($pxdviUse) { -- $d="$pxdvioutputdir"; &wlog (" $d:\n"); -- foreach my $f ('xdvi-ptex.map') { -- dir ($d, $f, ''); -- $updLSR->{add}("$d/$f"); -+ if (defined($alldata->{'updmap'}{$tc}{'setting'}{$opt}{'val'})) { -+ # the value is already set, do nothing -+ if ($alldata->{'updmap'}{$tc}{'setting'}{$opt}{'val'} eq $val) { -+ return; - } -+ $alldata->{'updmap'}{$tc}{'setting'}{$opt}{'val'} = $val; -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; -+ } else { -+ $alldata->{'updmap'}{$tc}{'setting'}{$opt}{'val'} = $val; -+ $alldata->{'updmap'}{$tc}{'setting'}{$opt}{'line'} = -1; -+ $alldata->{'updmap'}{$tc}{'changed'} = 1; - } -- close LOG; -- print "\nTranscript written on \"$logfile\".\n" if !$quiet; - } - -- -+ - ############################################################################### --# initVars() --# initialize global variables -+# copyFile() -+# copy file $src to $dst, sets $dst creation and mod time - # --sub initVars { -- $quiet = 0; -- $nohash = 0; -- $nomkmap = 0; -- $cnfFile = ""; -- $cnfFileShort = "updmap.cfg"; -- $outputdir = ""; -- chomp($TEXMFMAIN =`kpsewhich --var-value=TEXMFMAIN`); -+sub copyFile { -+ my ($src, $dst) = @_; -+ my $dir; -+ ($dir=$dst)=~s/(.*)\/.*/$1/; -+ mkdirhier($dir); - -- @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 /', -- ); -+ $src eq $dst && return "can't copy $src to itself!\n"; - -- @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/', -- ); -+ open IN, "<$src" or die "$0: can't open source file $src for copying: $!"; -+ open OUT, ">$dst"; - -- @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/', -- ); -+ binmode(IN); -+ binmode(OUT); -+ print OUT <IN>; -+ close(OUT); -+ close(IN); -+ my @t = stat($src); -+ utime($t[8], $t[9], $dst); - } - -- - ############################################################################### --# main() -+# files_are_identical(file_A, file_B) -+# compare two files. Same as cmp(1). - # --sub main { -- &initVars; -- &processOptions; -+sub files_are_identical { -+ my $file_A=shift; -+ my $file_B=shift; -+ my $retval=0; - -- &help if ($opt_help); -+ open IN, "$file_A"; -+ my $A=(<IN>); -+ close IN; -+ open IN, "$file_B"; -+ my $B=(<IN>); -+ close IN; - -- if (@showoptions) { -- &showOptions(@showoptions); -- exit 0; -- } -+ $retval=1 if ($A eq $B); -+ return $retval; -+} - -- &setupCfgFile; -+############################################################################### -+# 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; -+ my $comment=shift; -+ my $retval=0; - -- if ($listmaps) { -- &listMaps ('list'); -- exit 0; -- } -- if ($listavailablemaps) { -- &listMaps ('avail'); -- exit 0; -- } -- if ($syncwithtrees) { -- &listMaps ('sync'); -- exit 0; -+ my $A=equalize_file("$file_A", $comment); -+ my $B=equalize_file("$file_B", $comment); -+ $retval=1 unless ($A eq $B); -+ return $retval; -+} -+ -+############################################################################### -+# 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>); -+ close IN; -+ chomp(@lines); -+ -+ for (@lines) { -+ s/\s*${comment}.*// if (defined $comment); # remove comments -+ next if /^\s*$/; # remove empty lines -+ s/\s+/ /g; # replace multiple whitespace chars by a single one -+ push @temp, $_; - } -+ return join('X', sort(@temp)); -+} - -- my $bakFile = $cnfFile; -- $bakFile =~ s/\.cfg$/.bak/; -- ©File($cnfFile, $bakFile); -+############################################################################### -+# normalizeLines() -+# not the original function, we want it to keep comments, that are -+# anyway only the file names we are adding! -+# 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 = (); -+ -+ # @lines = grep { $_ !~ m/^[*#;%]/ } @lines; -+ map {$_ =~ s/\s+/ /gx } @lines; -+ @lines = grep { $_ !~ m/^\s*$/x } @lines; -+ map { $_ =~ s/\s$//x ; -+ $_ =~ s/\s*\"\s*/ \" /gx; -+ $_ =~ s/\" ([^\"]*) \"/\"$1\"/gx; -+ } @lines; - -- my $cmd = ''; -+ # @lines = grep {++$count{$_} < 2 } (sort @lines); -+ @lines = grep {++$count{$_} < 2 } (@lines); - -- if ($opt_edit) { -- # it's not a good idea to edit updmap.cfg manually these days, -- # but for compatibility we'll silently keep the option. -- $cmd = 'edit'; -- my $editor = $ENV{'VISUAL'} || $ENV{'EDITOR'}; -- $editor ||= (&win32 ? "notepad" : "vi"); -- system($editor, $cnfFile); -+ return @lines; -+} - -- } elsif (@setoptions) { -- $cmd = 'setOption'; -- &setOptions (@setoptions); - -- } elsif ($enableItem) { -- $cmd = 'enableMap'; -- if ($enableItem =~ /=/) { -- &enableMap(split('=', $enableItem)); -+################################################################# -+# -+# reading updmap-cfg files and the actual map files -+# -+# the following hash saves *all* the information and is passed around -+# we do not fill everything from the very beginning to make sure that -+# we only read what is necessary (speed!) -+# -+# initialized by main -+# $alldata->{'changes_config'} = the config file where changes are saved -+# -+# initialized by read_updmap_files -+# $alldata->{'order'} = [ list of updmap in decreasing priority ] -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'lines'} = \@lines -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'setting'}{$key}{'val'} = $val -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'setting'}{$key}{'line'} = $i -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'maps'}{$mapname}{'type'} -+# = 'Map'|'MixedMap'|'KanjiMap'|'disabled' -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'maps'}{$mapname}{'status'} -+# = 'enabled'|'disabled' -+# $alldata->{'updmap'}{$full_path_name_of_updmap}{'maps'}{$mapname}{'line'} = $i -+# $alldata->{'maps'}{$m}{'origin'} = $updmap_path_name -+# $alldata->{'maps'}{$m}{'status'} = enabled | disabled -+# -+# initialized by read_map_files -+# $alldata->{'maps'}{$m}{'fonts'}{$font} = $definition -+# $alldata->{'fonts'}{$f}{'origin'} = $map -+# -+# initialized by merge_data -+# $alldata->{'merged'}{'setting'}{$key}{'val'} = $val -+# $alldata->{'merged'}{'setting'}{$key}{'origin'} = $origin_updmap_cfg -+# $alldata->{'merged'}{'allMaps'}{'fonts'}{$fontdef} = $rest -+# $alldata->{'merged'}{'noMixedMaps'}{'fonts'}{$fontdef} = $rest -+# $alldata->{'merged'}{'KanjiMaps'}{'fonts'}{$fontdef} = $rest -+# -+ -+sub read_updmap_files { -+ my (@l) = @_; -+ for my $l (@l) { -+ my $updmap = read_updmap_file($l); -+ $alldata->{'updmap'}{$l}{'lines'} = $updmap->{'lines'}; -+ if (defined($updmap->{'setting'})) { -+ for my $k (keys %{$updmap->{'setting'}}) { -+ $alldata->{'updmap'}{$l}{'setting'}{$k}{'val'} = $updmap->{'setting'}{$k}{'val'}; -+ $alldata->{'updmap'}{$l}{'setting'}{$k}{'line'} = $updmap->{'setting'}{$k}{'line'}; -+ } -+ } -+ if (defined($updmap->{'maps'})) { -+ for my $k (keys %{$updmap->{'maps'}}) { -+ $alldata->{'updmap'}{$l}{'maps'}{$k}{'type'} = $updmap->{'maps'}{$k}{'type'}; -+ $alldata->{'updmap'}{$l}{'maps'}{$k}{'status'} = $updmap->{'maps'}{$k}{'status'}; -+ $alldata->{'updmap'}{$l}{'maps'}{$k}{'line'} = $updmap->{'maps'}{$k}{'line'}; -+ } -+ } -+ } -+ # in case the changes_config is a new one read it in and initialize it here -+ my $cc = $alldata->{'changes_config'}; -+ if (! -r $cc) { -+ $alldata->{'updmap'}{$cc}{'lines'} = [ ]; -+ } -+ # -+ $alldata->{'order'} = \@l; -+ # -+ # merge the settings so that we can check for kanjiEmbed -+ # -+ merge_settings(); -+ # -+ my ($kanjiEmbed, $kanjiEmbed_origin) = get_cfg('kanjiEmbed'); -+ # -+ # go through all map files and check that the text is properly replaced -+ # -+ for my $l (@l) { -+ for my $m (keys %{$alldata->{'updmap'}{$l}{'maps'}}) { -+ if ($m =~ m/\@kanjiEmbed@/) { -+ my $newm = $m; -+ $newm =~ s/\@kanjiEmbed@/$kanjiEmbed/; -+ # now we have to update various linked items -+ $alldata->{'updmap'}{$l}{'maps'}{$newm}{'type'} = -+ $alldata->{'updmap'}{$l}{'maps'}{$m}{'type'}; -+ $alldata->{'updmap'}{$l}{'maps'}{$newm}{'status'} = -+ $alldata->{'updmap'}{$l}{'maps'}{$m}{'status'}; -+ $alldata->{'updmap'}{$l}{'maps'}{$newm}{'line'} = -+ $alldata->{'updmap'}{$l}{'maps'}{$m}{'line'}; -+ $alldata->{'updmap'}{$l}{'maps'}{$newm}{'original'} = $m; -+ delete $alldata->{'updmap'}{$l}{'maps'}{$m}; -+ } -+ } -+ } -+ # -+ # first round determine which maps should be used and which type, as -+ # different updmap.cfg files might specify different types of maps -+ # (MixedMap or Map or KanjiMap). -+ # Again, we have to do that in reverse order -+ for my $l (reverse @l) { -+ if (defined($alldata->{'updmap'}{$l}{'maps'})) { -+ for my $m (keys %{$alldata->{'updmap'}{$l}{'maps'}}) { -+ $alldata->{'maps'}{$m}{'origin'} = $l; -+ $alldata->{'maps'}{$m}{'status'} = $alldata->{'updmap'}{$l}{'maps'}{$m}{'status'}; -+ } -+ } -+ } -+} -+ -+sub read_updmap_file { -+ my $fn = shift; -+ my $is_old_local = ($fn =~ m/updmap-local.cfg/ ? 1 : 0); -+ my %data; -+ if (!open(FN,"<$fn")) { -+ die ("Cannot read $fn: $!"); -+ } -+ # we count lines from 0 ..!!!! -+ my $i = -1; -+ my @lines = <FN>; -+ chomp(@lines); -+ $data{'lines'} = [ @lines ]; -+ close(FN) || warn("Cannot close $fn: $!"); -+ for (@lines) { -+ $i++; -+ chomp; -+ if ($is_old_local) { -+ # in case we read an old updmap-local.cfg we have to make sure -+ # that the disable lines -+ # ^#!foo.map -+ # are rewritten to proper disable lines -+ # ^#! Map foo.map -+ # we are guessing here the type of the map (namely Map) -+ $_ =~ s/^#!([^ ])/#! Map $1/; -+ } -+ next if /^\s*$/; -+ next if /^\s*#$/; -+ next if /^\s*#[^!]/; -+ next if /^\s*##/; -+ next if /^#![^ ]/; -+ # allow for commands on the line itself -+ s/([^#].*)#.*$/$1/; -+ my ($a, $b, @rest) = split ' '; -+ if ($a eq "#!") { -+ if ($b eq "Map" || $b eq "MixedMap" || $b eq "KanjiMap") { -+ my $c = shift @rest; -+ if (!defined($c)) { -+ warning("updmap: apparently not a real disable line, ignored: $_\n"); -+ } else { -+ if (defined($data{'maps'}{$c})) { -+ warning("updmap: double mentioning of $c in $fn\n"); -+ } -+ $data{'maps'}{$c}{'status'} = 'disabled'; -+ $data{'maps'}{$c}{'type'} = $b; -+ $data{'maps'}{$c}{'line'} = $i; -+ } -+ } -+ next; -+ } -+ if (@rest) { -+ warning("updmap: line $i in $fn contains a syntax error, more than two words!\n"); -+ } -+ if (defined($settings{$a})) { -+ if (check_option($a, $b)) { -+ $data{'setting'}{$a}{'val'} = $b; -+ $data{'setting'}{$a}{'line'} = $i; -+ } else { -+ warning("updmap: unknown setting for $a: $b, ignored!\n"); -+ } -+ } elsif ($a eq "Map" || $a eq "MixedMap" || $a eq "KanjiMap") { -+ if (defined($data{'maps'}{$b}) && $data{'maps'}{$b}{'type'} ne $a) { -+ warning("updmap: double mentioning of $b with conflicting types in $fn\n"); -+ } else { -+ $data{'maps'}{$b}{'type'} = $a; -+ $data{'maps'}{$b}{'status'} = 'enabled'; -+ $data{'maps'}{$b}{'line'} = $i; -+ } - } else { -- &enableMap($enableItem, shift @ARGV); -+ warning("updmap: unrecognized line $i in $fn: $_\n"); - } -+ } -+ return \%data; -+} - -- } elsif (@disableItem) { -- $cmd = 'disableMap'; -- foreach my $m (@disableItem) { -- &disableMap($m); -+sub read_map_files { -+ if (!defined($alldata->{'updmap'})) { -+ return; -+ } -+ my @missing; -+ my @l = @{$alldata->{'order'}}; -+ # first collect all the map files we are interested in -+ # and determine whether they exist, and get their full path -+ my @maps; -+ for my $f (@l) { -+ next if !defined($alldata->{'updmap'}{$f}{'maps'}); -+ for my $m (keys %{$alldata->{'updmap'}{$f}{'maps'}}) { -+ # only read a map file if its final status is enabled! -+ push @maps, $m if ($alldata->{'maps'}{$m}{'status'} eq 'enabled'); -+ } -+ } -+ for my $m (qw/dvips35.map pdftex35.map ps2pk35.map/) { -+ push @maps, $m; -+ $alldata->{'maps'}{$m}{'status'} = 'enabled'; -+ } -+ @maps = sort_uniq(@maps); -+ my @fullpath = `kpsewhich --format=map @maps`; -+ chomp @fullpath; -+ foreach my $map (@maps) { -+ my ($ff) = grep /\/$map(\.map)?$/, @fullpath; -+ if ($ff) { -+ $alldata->{'maps'}{$map}{'fullpath'} = $ff; -+ } else { -+ # if the map file is not found, then push it onto the list of -+ # missing map files, since we know that it is enabled -+ push @missing, $map; - } - } - -- if ($cmd && !$opt_force && &files_are_equal($bakFile, $cnfFile)) { -- print "$cnfFile unchanged. Map files not recreated.\n" if !$quiet; -- } else { -- if (! $nomkmap) { -- &setupDestDir; -- &mkMaps; -+ # -+ # read in the three basic fonts definition maps -+ for my $m (qw/dvips35.map pdftex35.map ps2pk35.map/) { -+ my $ret = read_map_file($alldata->{'maps'}{$m}{'fullpath'}); -+ my @ff = (); -+ for my $font (keys %$ret) { -+ $alldata->{'fonts'}{$font}{'origin'} = $m; -+ $alldata->{'maps'}{$m}{'fonts'}{$font} = $ret->{$font}; -+ } -+ } -+ # we read the updmap in reverse directions, since we -+ # replace the origin field of font definition always with the -+ # top one -+ for my $f (reverse @l) { -+ my @maps = keys %{$alldata->{'updmap'}{$f}{'maps'}}; -+ for my $m (@maps) { -+ # we do not read a map file multiple times, if $alldata{'maps'}{$m} is -+ # defined we expect that it was read and do skip it -+ next if defined($alldata->{'maps'}{$m}{'fonts'}); -+ # we do not read a map files content if it is disabled -+ next if ($alldata->{'maps'}{$m}{'status'} eq 'disabled'); -+ if (!defined($alldata->{'maps'}{$m}{'fullpath'})) { -+ # we have already pushed these map files onto the list of missing -+ # map files, so do nothing here -+ next; -+ } -+ my $ret = read_map_file($alldata->{'maps'}{$m}{'fullpath'}); -+ if (defined($ret)) { -+ for my $font (keys %$ret) { -+ if (defined($alldata->{'fonts'}{$font})) { -+ # we got another definition, warn on that -+ # if the origin is not defined by now, the font is defined -+ # multiple times in the same map file, otherwise it is -+ # defined in another map file already -+ if (defined($alldata->{'fonts'}{$font}{'origin'})) { -+ my $fontorig = $alldata->{'fonts'}{$font}{'origin'}; -+ my $maporig = $alldata->{'maps'}{$fontorig}{'origin'}; -+ warning("$prg: font $font is defined multiple times:\n"); -+ warning("$prg: $fontorig (from $maporig)\n"); -+ warning("$prg: $m (from $f) (used)\n"); -+ } else { -+ warning("$prg: font $font is multiply defined in $m, using an arbitrary instance!\n"); -+ } -+ } -+ $alldata->{'fonts'}{$font}{'origin'} = $m; -+ $alldata->{'maps'}{$m}{'fonts'}{$font} = $ret->{$font}; -+ } -+ } - } -- unlink ($bakFile); - } -+ return (@missing); -+} - -- unless ($nohash) { -- print "$0: Updating ls-R files.\n" if !$quiet; -- $updLSR->{exec}() -+sub read_map_file { -+ my $fn = shift; -+ my @lines; -+ if (!open(MF,"<$fn")) { -+ warn("cannot open $fn: $!"); -+ return; -+ } -+ @lines = <MF>; -+ close(MF); -+ chomp(@lines); -+ my %data; -+ for (@lines) { -+ next if /^\s*#/; -+ next if /^\s*%/; -+ next if /^\s*$/; -+ my ($a, $b) = split(' ', $_, 2); -+ $data{$a} = $b; - } -+ return \%data; -+} -+ -+# -+# merge and update the setting -+# -+sub merge_settings { -+ my @l = @{$alldata->{'order'}}; -+ # -+ # for security clean out everything that was there -+ %{$alldata->{'merged'}} = (); -+ # -+ # first read in the settings -+ # we read it in *reverse* order and simple fill up the combined data -+ # thus if there are multiple definitions/settings, the one coming from -+ # the first in the original list will win! -+ for my $l (reverse @l) { -+ # merge settings -+ if (defined($alldata->{'updmap'}{$l}{'setting'})) { -+ for my $k (keys %{$alldata->{'updmap'}{$l}{'setting'}}) { -+ $alldata->{'merged'}{'setting'}{$k}{'val'} = $alldata->{'updmap'}{$l}{'setting'}{$k}{'val'}; -+ $alldata->{'merged'}{'setting'}{$k}{'origin'} = $l; -+ } -+ } -+ } -+ # -+} -+ -+# -+# merging the various font definitions -+# -+sub merge_data { -+ my @l = @{$alldata->{'order'}}; -+ # -+ # now merge the data -+ # -+ for my $m (keys %{$alldata->{'maps'}}) { -+ my $origin = $alldata->{'maps'}{$m}{'origin'}; -+ next if !defined($origin); -+ next if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'status'} eq "disabled"); -+ for my $f (keys %{$alldata->{'maps'}{$m}{'fonts'}}) { -+ # use the font definition only for those fonts where the origin matches -+ if ($alldata->{'fonts'}{$f}{'origin'} eq $m) { -+ $alldata->{'merged'}{'allMaps'}{'fonts'}{$f} = -+ $alldata->{'maps'}{$m}{'fonts'}{$f} -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} ne "KanjiMap"); -+ $alldata->{'merged'}{'noMixedMaps'}{'fonts'}{$f} = -+ $alldata->{'maps'}{$m}{'fonts'}{$f} -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} eq "Map"); -+ $alldata->{'merged'}{'KanjiMap'}{'fonts'}{$f} = -+ $alldata->{'maps'}{$m}{'fonts'}{$f} -+ if ($alldata->{'updmap'}{$origin}{'maps'}{$m}{'type'} eq "KanjiMap"); -+ } -+ } -+ } -+} -+ -+sub warning { -+ print STDERR @_; -+} -+ -+# -+# help, version etc etc -+# -+ -+sub version { -+ my $ret = sprintf "%s (TeX Live, multi) version %s\n", $prg, $version; -+ return $ret; -+} -+ -+sub help { -+ my $usage = <<"EOF"; -+Usage: $prg [OPTION] ... [COMMAND] -+ or: $prg-sys [OPTION] ... [COMMAND] -+ -+Update the default font map files used by pdftex, dvips, and dvipdfm(x), -+(and optionally pxdvi) as determined by all configuration files updmap.cfg -+(the ones returned by running "kpsewhich --all updmap.cfg", but see below). -+ -+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 -+ (can be given multiple times, in which case -+ all the files are used) -+ --dvipdfmoutputdir DIR specify output directory (dvipdfm syntax) -+ --dvipsoutputdir DIR specify output directory (dvips syntax) -+ --pdftexoutputdir DIR specify output directory (pdftex syntax) -+ --pxdvioutputdir DIR specify output directory (pxdvi 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 OPTION show possible settings for OPTION -+ --showoption OPTION show the current setting of OPTION -+ --setoption OPTION VALUE set OPTION to value -+ --setoption OPTION=VALUE as above, just different syntax -+ --enable MAPTYPE MAPFILE add "MAPTYPE MAPFILE" to updmap.cfg, -+ where MAPTYPE is either Map, MixedMap, KanjiMap -+ --enable Map=MAPFILE add \"Map MAPFILE\" to updmap.cfg -+ --enable MixedMap=MAPFILE add \"MixedMap MAPFILE\" to updmap.cfg -+ --enable KanjiMap=MAPFILE add \"KanjiMap MAPFILE\" to updmap.cfg -+ --disable MAPFILE disable MAPFILE, whether Map, MixedMap, or KanjiMap -+ --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. -+KanjiMap entries are added to psfonts_t1.map and kanjix.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 possible OPTIONS (showoptions, showoptions, setoption): -+ -+ 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. -+ pxdviUse true|false (default false) -+ Whether maps for pxdvi (Japanese-patched xdvi) is under control of updmap. -+ 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) -+ kanjiEmbed (any string) -+ -+ 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: -+ -+NEEDS TO BE FIXED TODO TODO TODO AFTER FINAL INCLUSION -+ -+BEHAVIOUR HOW IT IS NOW -+ -+ updmap reads all the updmap.cfg found by -+ kpsewhich -all updmap.cfg -+ or those given on the command line with --cnffile. If kpsewhich is -+ used to determine the list of config files, there is one caveat: An -+ occurrence of updmap.cfg in TEXMFLOCAL is moved up in the priority -+ list just after files from TEXMFCONFIG, TEXMFVAR and TEXMFHOME. This -+ allows system administrator to override settings in -+ TEXMFSYSCONFIG/web2c/updmap.cfg which is used by tlmgr to manage -+ the installed options. -+ -+BEHAVIOUR HOW IT SHOULD BE AFTER INCLUSION -+ -+ updmap reads all the updmap.cfg files found by -+ kpsewhich -all updmap.cfg -+ in the order returned by kpsewhich. There is one exception to keep -+ upgradability from earlier versions of TeX Live: If there is a file -+ TEXMFLOCAL/web2c/updmap-local.cfg (which was formerly used by tlmgr -+ to merge local fonts), then a (not necessarily existing) file -+ TEXMFLOCAL/web2c/updmap.cfg is ignored and the updmap-local.cfg is -+ used instead. In this case updmap recognizes also the syntax for -+ disabling map files in the updmap-local.cfg (this syntax was different -+ to what is used now!). -+ -+ According to the actions updmap might write to one of the given files or -+ create a new updmap.cfg, see below for details. -+ -+ If multiple updmap.cfg files are found, all the map files mentioned -+ in all the updmap.cfg files are merged. -+ -+ CAVEATS with multiple updmap.cfg files -+ * where changes are saved -+ If config files are given on the cmd line, then the first given will -+ be used to save changes (by --setoption, --enable or --disable). -+ If the config files are taken from kpsewhich, then the algorithm is -+ more complex: -+ - if one of \$TEXMFHOME/web2c/updmap.cfg or \$TEXMFCONFIG/web2c/updmap.cfg -+ appears in the list of used files, then the one given *first* by -+ kpsewhich --all, or equivalently, the one given by kpsewhich updmap.cfg, -+ is used -+ - if none of the above two are present, a new config file is created -+ in \$TEXMFCONFIG/web2c/updmap.cfg (in case there are actual changes) -+ and used -+ -+ * multiple font definitions -+ If a font is defined multiple times in different maps, then the -+ definition of the map file that comes from the highest priority -+ updmap.cfg file is used. -+ If a font is defined multiple times in the same map file, an -+ arbitrary definition is used. -+ In both cases warnings are issued. -+ -+ * disabling map files -+ updmap.cfg files with higher priority can disable map files that -+ are mentioned in lower priority updmap.cfg files by disabling -+ them, i.e., writing -+ \#! Map mapname.map -+ or -+ \#! MixedMap mapname.map -+ into the higher prioprity updmap.cfg file. -+ -+ As an example take a user with a copy of the commercial MTPRO fonts. -+ He wants to disable the belleek version of the fonts, that is -+ disable the map belleek.map. The user should create a updmap.cfg file -+ in \$TEXMFCONFIG/web2c/updmap.cfg with the content -+ #! Map belleek.map -+ Map mt-plus.map -+ Map mt-yy.map -+ and call $prg. -+ -+ 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; - } --__END__ - - ### Local Variables: - ### perl-indent-level: 2 diff --git a/Master/tlpkg/dev/quilt-patches/dev.mupdmap-integration b/Master/tlpkg/dev/quilt-patches/dev.mupdmap-integration new file mode 100644 index 00000000000..c7da49280c8 --- /dev/null +++ b/Master/tlpkg/dev/quilt-patches/dev.mupdmap-integration @@ -0,0 +1,976 @@ +--- + install-tl | 7 + texmf-dist/web2c/updmap.cfg | 230 +++ + texmf/scripts/texlive/tlmgr.pl | 131 - + texmf/web2c/updmap-hdr.cfg | 107 - + texmf/web2c/updmap.cfg | 256 --- + tlpkg/TeXLive/TLUtils.pm | 67 + 7 files changed, 2071 insertions(+), 1744 deletions(-) + +Index: Master/texmf/web2c/updmap.cfg +=================================================================== +--- Master.orig/texmf/web2c/updmap.cfg 2012-01-12 12:54:40.000000000 +0900 ++++ Master/texmf/web2c/updmap.cfg 2012-01-12 12:55:09.000000000 +0900 +@@ -1,31 +1,7 @@ +-# Generated by /home/texlive/karl/Master/bin/i386-linux/tlmgr on Mon Jan 9 04:29:26 2012 +-# $Id: updmap-hdr.cfg 24398 2011-10-26 01:07:22Z preining $ +-# +-# The full updmap.cfg is generated by concatenating updmap-hdr.cfg with +-# all the Map and MixedMap lines from an installation, possibly +-# appending a local configuration file. +-# +-# To make local customizations to the map files, please use of the +-# following methods: +-# +-# 1) call +-# updmap-sys --enable Map=foo.map +-# for each map file. (Or MixedMap instead of Map, if your font has +-# both Metafont and outline definitions.) See the updmap --help +-# documentation. +-# +-# 2) add your local map entries to the file +-# TEXMFLOCAL/web2c/updmap-local.cfg +-# and then call +-# tlmgr generate updmap +-# which will concatenate updmap-local.cfg to the end of the final +-# updmap.cfg. (You can override the local.cfg file location with the +-# --localcfg option; see tlmgr --help.) +-# +-# If you use either of these methods, your local adaptations will be +-# preserved when tlmgr updates the installation or this config file. +-# Manual edits to updmap.cfg may be lost on update. +- ++# ++# updmap.cfg ++# TEXMFMAIN ++# only the options are defined here + + ################################################################ + # OPTIONS +@@ -100,227 +76,3 @@ + # map file used. + kanjiEmbed noEmbed + +-################################################################ +-# Map files. +-################################################################ +-# +-# There are two possible entries: Map and MixedMap. Both have one additional +-# argument: the filename of the map file. MixedMap ("mixed" means that +-# the font is available as bitmap and as outline) lines will not be used +-# in the default map of dvips if dvipsPreferOutline is false. Inactive +-# Map files should be marked by "#! " (without the quotes), not just #. +-# +- +-Map OrnementsADF.map +-Map ArrowsADF.map +-Map BulletsADF.map +-MixedMap allrunes.map +-Map euler.map +-MixedMap cm.map +-MixedMap cmextra.map +-MixedMap cyrillic.map +-MixedMap latxfont.map +-MixedMap symbols.map +-Map uaq.map +-Map antt.map +-Map arabi.map +-MixedMap arabtex.map +-Map archaicprw.map +-Map arev.map +-Map bkaiu.map +-Map bsmiu.map +-Map gbsnu.map +-Map gkaiu.map +-Map ascii.map +-Map augie.map +-Map auncial.map +-Map aurical.map +-Map ybv.map +-MixedMap bbold.map +-Map belleek.map +-Map bera.map +-Map ybd.map +-Map sqrcaps.map +-Map boondox.map +-Map pbsi.map +-Map burmese.map +-Map calligra.map +-Map cantarell.map +-Map cmin.map +-MixedMap cbgreek-full.map +-MixedMap ccpl.map +-Map ccicons.map +-Map clm.map +-Map chemarrow.map +-Map cjhebrew.map +-MixedMap cmtext-bsr-interpolated.map +-Map cm-lgc.map +-MixedMap cm-super-t1.map +-MixedMap cm-super-t2a.map +-MixedMap cm-super-t2b.map +-MixedMap cm-super-t2c.map +-MixedMap cm-super-ts1.map +-MixedMap cm-super-x2.map +-Map cmcyr.map +-MixedMap cmll.map +-Map comfortaa.map +-Map original-context-symbol.map +-MixedMap csother.map +-MixedMap cstext.map +-Map cyklop.map +-Map dejavu-type1.map +-Map dictsym.map +-Map dstroke.map +-Map droid.map +-Map dutchcal.map +-Map yes.map +-Map epigrafica.map +-Map epiolmec.map +-MixedMap esint.map +-Map ESSTIX.map +-Map esvect.map +-MixedMap ethiop.map +-MixedMap eurosym.map +-Map fdsymbol.map +-Map fge.map +-Map foekfont.map +-Map fonetika.map +-Map fourier-utopia-expert.map +-Map fourier.map +-Map frcursive.map +-Map garuda-c90.map +-Map gfsartemisia.map +-Map gfsbaskerville.map +-Map gfsbodoni.map +-Map gfscomplutum.map +-Map gfsdidot.map +-Map gfsneohellenic.map +-Map gfsporson.map +-Map gfssolomos.map +-Map yfrak.map +-Map ugq.map +-Map grverb.map +-MixedMap hfbright.map +-MixedMap iby.map +-Map fi4.map +-Map Acorn.map +-Map AnnSton.map +-Map ArtNouv.map +-Map ArtNouvc.map +-Map Carrickc.map +-Map Eichenla.map +-Map Eileen.map +-Map EileenBl.map +-Map Elzevier.map +-Map GotIn.map +-Map GoudyIn.map +-Map Kinigcap.map +-Map Konanur.map +-Map Kramer.map +-Map MorrisIn.map +-Map Nouveaud.map +-Map Romantik.map +-Map Rothdn.map +-Map RoyalIn.map +-Map Sanremo.map +-Map Starburst.map +-Map Typocaps.map +-Map Zallman.map +-Map iwona.map +-KanjiMap otf-@kanjiEmbed@.map +-KanjiMap otf-cktx.map +-Map kerkis.map +-Map knitfont.map +-Map kpfonts.map +-Map kurier.map +-Map lato.map +-Map libertine.map +-Map yly.map +-Map linearA.map +-Map l7x-urwvn.map +-Map lm.map +-MixedMap lxfonts.map +-MixedMap manfnt.map +-Map marvosym.map +-Map mathabx.map +-Map mdbch.map +-Map mdput.map +-Map mdugm.map +-Map mdsymbol.map +-Map troff-updmap.map +-MixedMap mflogo.map +-Map MnSymbol.map +-MixedMap mongolian.map +-MixedMap musix.map +-Map norasi-c90.map +-Map cherokee.map +-Map ocrb.map +-Map oinuit.map +-Map omega.map +-Map opensans.map +-Map paratype-type1.map +-Map phaistos.map +-MixedMap pigpen.map +-MixedMap plother.map +-MixedMap pltext.map +-Map ap.map +-Map prodint.map +-Map charter.map +-Map fpls.map +-Map pazo.map +-Map utopia.map +-KanjiMap morisawa.map +-KanjiMap ptex-@kanjiEmbed@.map +-Map pxfonts.map +-Map pxtx.map +-Map recycle.map +-Map yrd.map +-MixedMap rsfs.map +-Map rsfso.map +-Map skt.map +-MixedMap semaf.map +-Map SkakNew.map +-Map starfont.map +-Map icelandic.map +-MixedMap stmaryrd.map +-Map tabvar.map +-Map mathpple.map +-Map qag.map +-Map qbk.map +-Map qcr.map +-Map qcs.map +-Map qhv.map +-Map qpl.map +-Map qtm.map +-Map qzc.map +-Map tfrupee.map +-MixedMap tipa.map +-MixedMap trajan.map +-Map txfonts.map +-Map gptimes.map +-Map umj.map +-MixedMap dvng.map +-Map yv1.map +-Map yv2.map +-Map yv3.map +-Map yvo.map +-Map yvt.map +-Map arevvn.map +-Map chartervn.map +-Map cmbrightvn.map +-Map concretevn.map +-Map grotesqvn.map +-Map txttvn.map +-Map urwvn.map +-MixedMap vnrother.map +-MixedMap vnrtext.map +-Map vntopia.map +-Map dgj.map +-Map dmj.map +-Map mc2j.map +-Map mcj.map +-Map mr2j.map +-Map mrj.map +-MixedMap wasy.map +-MixedMap xypic.map +-MixedMap yhmath.map +Index: Master/texmf-dist/web2c/updmap.cfg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ Master/texmf-dist/web2c/updmap.cfg 2012-01-12 12:56:10.000000000 +0900 +@@ -0,0 +1,230 @@ ++# ++# updmap.cfg ++# TEXMFDIST ++# only contains the actual maps ++# settings are in TEXMFMAIN ++ ++################################################################ ++# Map files. ++################################################################ ++# ++# There are two possible entries: Map and MixedMap. Both have one additional ++# argument: the filename of the map file. MixedMap ("mixed" means that ++# the font is available as bitmap and as outline) lines will not be used ++# in the default map of dvips if dvipsPreferOutline is false. Inactive ++# Map files should be marked by "#! " (without the quotes), not just #. ++# ++ ++Map OrnementsADF.map ++Map ArrowsADF.map ++Map BulletsADF.map ++MixedMap allrunes.map ++Map euler.map ++MixedMap cm.map ++MixedMap cmextra.map ++MixedMap cyrillic.map ++MixedMap latxfont.map ++MixedMap symbols.map ++Map uaq.map ++Map antt.map ++Map arabi.map ++MixedMap arabtex.map ++Map archaicprw.map ++Map arev.map ++Map bkaiu.map ++Map bsmiu.map ++Map gbsnu.map ++Map gkaiu.map ++Map ascii.map ++Map augie.map ++Map auncial.map ++Map aurical.map ++Map ybv.map ++MixedMap bbold.map ++Map belleek.map ++Map bera.map ++Map ybd.map ++Map sqrcaps.map ++Map boondox.map ++Map pbsi.map ++Map burmese.map ++Map calligra.map ++Map cantarell.map ++Map cmin.map ++MixedMap cbgreek-full.map ++MixedMap ccpl.map ++Map ccicons.map ++Map clm.map ++Map chemarrow.map ++Map cjhebrew.map ++MixedMap cmtext-bsr-interpolated.map ++Map cm-lgc.map ++MixedMap cm-super-t1.map ++MixedMap cm-super-t2a.map ++MixedMap cm-super-t2b.map ++MixedMap cm-super-t2c.map ++MixedMap cm-super-ts1.map ++MixedMap cm-super-x2.map ++Map cmcyr.map ++MixedMap cmll.map ++Map comfortaa.map ++Map original-context-symbol.map ++MixedMap csother.map ++MixedMap cstext.map ++Map cyklop.map ++Map dejavu-type1.map ++Map dictsym.map ++Map dstroke.map ++Map droid.map ++Map dutchcal.map ++Map yes.map ++Map epigrafica.map ++Map epiolmec.map ++MixedMap esint.map ++Map ESSTIX.map ++Map esvect.map ++MixedMap ethiop.map ++MixedMap eurosym.map ++Map fdsymbol.map ++Map fge.map ++Map foekfont.map ++Map fonetika.map ++Map fourier-utopia-expert.map ++Map fourier.map ++Map frcursive.map ++Map garuda-c90.map ++Map gfsartemisia.map ++Map gfsbaskerville.map ++Map gfsbodoni.map ++Map gfscomplutum.map ++Map gfsdidot.map ++Map gfsneohellenic.map ++Map gfsporson.map ++Map gfssolomos.map ++Map yfrak.map ++Map ugq.map ++Map grverb.map ++MixedMap hfbright.map ++MixedMap iby.map ++Map fi4.map ++Map Acorn.map ++Map AnnSton.map ++Map ArtNouv.map ++Map ArtNouvc.map ++Map Carrickc.map ++Map Eichenla.map ++Map Eileen.map ++Map EileenBl.map ++Map Elzevier.map ++Map GotIn.map ++Map GoudyIn.map ++Map Kinigcap.map ++Map Konanur.map ++Map Kramer.map ++Map MorrisIn.map ++Map Nouveaud.map ++Map Romantik.map ++Map Rothdn.map ++Map RoyalIn.map ++Map Sanremo.map ++Map Starburst.map ++Map Typocaps.map ++Map Zallman.map ++Map iwona.map ++KanjiMap otf-@kanjiEmbed@.map ++KanjiMap otf-cktx.map ++Map kerkis.map ++Map knitfont.map ++Map kpfonts.map ++Map kurier.map ++Map lato.map ++Map libertine.map ++Map yly.map ++Map linearA.map ++Map l7x-urwvn.map ++Map lm.map ++MixedMap lxfonts.map ++MixedMap manfnt.map ++Map marvosym.map ++Map mathabx.map ++Map mdbch.map ++Map mdput.map ++Map mdugm.map ++Map mdsymbol.map ++Map troff-updmap.map ++MixedMap mflogo.map ++Map MnSymbol.map ++MixedMap mongolian.map ++MixedMap musix.map ++Map norasi-c90.map ++Map cherokee.map ++Map ocrb.map ++Map oinuit.map ++Map omega.map ++Map opensans.map ++Map paratype-type1.map ++Map phaistos.map ++MixedMap pigpen.map ++MixedMap plother.map ++MixedMap pltext.map ++Map ap.map ++Map prodint.map ++Map charter.map ++Map fpls.map ++Map pazo.map ++Map utopia.map ++KanjiMap morisawa.map ++KanjiMap ptex-@kanjiEmbed@.map ++Map pxfonts.map ++Map pxtx.map ++Map recycle.map ++Map yrd.map ++MixedMap rsfs.map ++Map rsfso.map ++Map skt.map ++MixedMap semaf.map ++Map SkakNew.map ++Map starfont.map ++Map icelandic.map ++MixedMap stmaryrd.map ++Map tabvar.map ++Map mathpple.map ++Map qag.map ++Map qbk.map ++Map qcr.map ++Map qcs.map ++Map qhv.map ++Map qpl.map ++Map qtm.map ++Map qzc.map ++Map tfrupee.map ++MixedMap tipa.map ++MixedMap trajan.map ++Map txfonts.map ++Map gptimes.map ++Map umj.map ++MixedMap dvng.map ++Map yv1.map ++Map yv2.map ++Map yv3.map ++Map yvo.map ++Map yvt.map ++Map arevvn.map ++Map chartervn.map ++Map cmbrightvn.map ++Map concretevn.map ++Map grotesqvn.map ++Map txttvn.map ++Map urwvn.map ++MixedMap vnrother.map ++MixedMap vnrtext.map ++Map vntopia.map ++Map dgj.map ++Map dmj.map ++Map mc2j.map ++Map mcj.map ++Map mr2j.map ++Map mrj.map ++MixedMap wasy.map ++MixedMap xypic.map ++MixedMap yhmath.map +Index: Master/texmf/scripts/texlive/tlmgr.pl +=================================================================== +--- Master.orig/texmf/scripts/texlive/tlmgr.pl 2012-01-12 12:54:40.000000000 +0900 ++++ Master/texmf/scripts/texlive/tlmgr.pl 2012-01-12 13:42:40.000000000 +0900 +@@ -624,47 +624,21 @@ + chomp(my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); + chomp(my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); + chomp(my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); ++ chomp(my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); + + # + # maps handling +- # if enabled and disabled -> do nothing +- # if only enabled -> enable it +- # if only disabled -> disable it +- # if the option "generate_updmap" is set, then simply ignore all that +- # and run the equivalent of tlmgr generate updmap + { + my $updmap_run_needed = 0; +- my %do_enable; +- my %do_disable; + for my $m (keys %{$::execute_actions{'enable'}{'maps'}}) { + $updmap_run_needed = 1; +- $do_enable{$m} = 1; + } + for my $m (keys %{$::execute_actions{'disable'}{'maps'}}) { + $updmap_run_needed = 1; +- if (defined($do_enable{$m})) { +- # we are upgrading because it is disabled and enabled, so +- # delete the entry in do_enable, it is already +- delete $do_enable{$m}; +- } else { +- # not new installed, so simply removed +- $do_disable{$m} = 1; +- } +- } +- if ($updmap_run_needed && $localtlpdb->option("generate_updmap")) { +- my $dest = "$TEXMFSYSCONFIG/web2c/updmap.cfg"; +- my $localcfg = "$TEXMFLOCAL/web2c/updmap-local.cfg"; +- info("tlmgr: generate_updmap writing new $dest\n"); +- TeXLive::TLUtils::create_updmap($localtlpdb, $dest, $localcfg); +- } else { +- for my $m (keys %do_disable) { +- $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --disable $m"); +- } +- for my $m (keys %do_enable) { +- my $str = "updmap-sys --nomkmap --nohash --enable " . +- $::execute_actions{'enable'}{'maps'}{$m} . "=$m"; +- $errors += do_cmd_and_check($str); +- } ++ } ++ if ($updmap_run_needed) { ++ my $dest = "$TEXMFDIST/web2c/updmap.cfg"; ++ TeXLive::TLUtils::create_updmap($localtlpdb, $dest); + } + $errors += do_cmd_and_check("updmap-sys") if $updmap_run_needed; + } +@@ -3918,17 +3892,15 @@ + init_local_db(); + + # we create fmtutil.cnf, language.dat, language.def in TEXMFSYSVAR and +- # updmap.cfg in TEXMFSYSCONFIG. The reason is that calls to +- # updmap-sys (as is done by the tlmgr update call when packages with +- # maps are installed) will create the updmap.cfg file in +- # TEXMFSYSCONFIG. It would start from the version in TEXMFSYSVAR, but +- # after that the TEXMFSYSCONFIG takes precedence and thus the +- # mechanism explained in updmap.cfg header would not work. We don't +- # want that. So just use TEXMFSYSCONFIG from the start. ++ # updmap.cfg in TEXMFDIST. The reason is that we are now using an ++ # implementation of updmap that supports multiple updmap files. ++ # Local adaptions should not be made there, but only in TEXMFLOCAL ++ # or TEXMF(SYS)CONFIG updmap.cfg + # + chomp (my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`); + chomp (my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`); + chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); ++ chomp (my $TEXMFDIST = `kpsewhich -var-value=TEXMFDIST`); + + # we do generate all config files, treat $opts{"dest"} as pattern + # and make it append the respective extensions +@@ -4006,10 +3978,9 @@ + } + + } elsif ($what =~ m/^updmap$/i) { +- my $dest = $opts{"dest"} || "$TEXMFSYSCONFIG/web2c/updmap.cfg"; +- my $localcfg = $opts{"localcfg"} || "$TEXMFLOCAL/web2c/updmap-local.cfg"; ++ my $dest = $opts{"dest"} || "$TEXMFDIST/web2c/updmap.cfg"; + debug("$0: writing new updmap.cfg to $dest\n"); +- TeXLive::TLUtils::create_updmap($localtlpdb, $dest, $localcfg); ++ TeXLive::TLUtils::create_updmap($localtlpdb, $dest); + + if ($opts{"rebuild-sys"}) { + do_cmd_and_check("updmap-sys"); +@@ -6110,7 +6081,6 @@ + sys_bin (directory to which executables are linked by the path action) + sys_man (directory to which man pages are linked by the path action) + sys_info (directory to which Info files are linked by the path action) +- generate_updmap (run the equivalent of tlmgr generate updmap on changes) + desktop_integration (Windows-only: create Start menu shortcuts) + fileassocs (Windows-only: change file associations) + multiuser (Windows-only: install for all users) +@@ -6166,9 +6136,6 @@ + Unix-like systems to control the generation of links for executables, + info files and man pages. See the C<path> action for details. + +-For the C<generate_updmap> option, see the C<updmap> section in +-L<generate|/"generate [I<option>]... I<what>">. +- + The last three options control behaviour on Windows installations. If + C<desktop_integration> is set, then some packages will install items in + a sub-folder of the Start menu for C<tlmgr gui>, documentation, etc. If +@@ -6558,31 +6525,20 @@ + =back + + The C<generate> action overwrites any manual changes made in the +-respective files: it recreates them from scratch. ++respective files: it recreates them from scratch based on the ++information of the installed packages, plus local adaptions. + +-For C<fmtutil> and the language files, this is normal, and both the TeX +-Live installer and C<tlmgr> routinely call C<generate> for them. ++The TeX Live installer and C<tlmgr> routinely call C<generate> for ++all of these files. + +-For C<updmap>, however, C<tlmgr> does I<not> use C<generate> by default, +-because the result would be to disable all maps which have been manually +-installed via S<C<updmap-sys --enable>>, e.g., for proprietary or local +-fonts, which has been the standard method for adding fonts to TeX +-installations for years. Rather, the C<generate> action only +-incorporates the changes in the C<--localcfg> file mentioned below. +- +-Notwithstanding the above, if you only use the fonts and font packages +-within TeX Live, and rigorously maintain your local fonts (if any) using +-C<updmap-local.cfg>, there is nothing wrong with using C<generate +-updmap>. It can be helpful in moving from release to release, +-especially. We use it ourselves to generate the C<updmap.cfg> file in +-the live source repository. If you want to commit yourself to using +-C<updmap-local.cfg>, you can set the C<generate_updmap> option and +-C<tlmgr> will run C<generate updmap> for you on update. +- +-In any case, C<tlmgr> updates and maintains the final C<updmap.cfg> in +-C<TEXMFSYSCONFIG> (while the other generated files are in +-C<TEXMFSYSVAR>), because that is the location that C<updmap-sys> (via +-C<tcfmgr>) historically uses. ++For managing your own fonts, please see the documentation of ++updmap, which supports multiple updmap.cfg files. So by simply ++editing TEXMFLOCAL's updmap.cfg they will be accounted for. ++ ++In any case, C<tlmgr> updates and maintains C<updmap.cfg> in ++C<TEXMFDIST> (while the other generated files are in ++C<TEXMFSYSVAR>), because that is the location where the fonts ++are installed. + + In more detail: C<generate> remakes any of the five config files + C<language.dat>, C<language.def>, C<language.dat.lua>, C<fmtutil.cnf>, +@@ -6590,26 +6546,27 @@ + locally-maintained files. + + The locally-maintained files are C<language-local.dat>, +-C<language-local.def>, C<language-local.dat.lua>, C<fmtutil-local.cnf>, +-or C<updmap-local.cfg>, searched for in C<TEXMFLOCAL> in the respective +-directories. If they are present, the final file is made by starting ++C<language-local.def>, C<language-local.dat.lua>, or C<fmtutil-local.cnf>, ++searched for in C<TEXMFLOCAL> in the respective directories. ++The formerly supported C<updmap-local.cfg> is not supported anymore, ++since C<updmap> now supports multiple updmap.cfg files, so local ++additions can be put into an updmap.cfg file in TEXMFLOCAL. ++If local additions are present, the final file is made by starting + with the main file, omitting any entries that the local file specifies + to be disabled, and finally appending the local file. + + Local files specify entries to be disabled with a comment line, namely + one of these: + +- #!NAME + %!NAME + --!NAME + +-where C<fmtutil.cnf> and C<updmap.cfg> use C<#>, C<language.dat> and ++where C<fmtutil.cnf> uses C<#>, C<language.dat> and + C<language.def> use C<%>, and C<language.dat.lua> use C<-->. In any +-case, the I<name> is the respective format name, map file name (include +-the C<.map> extension), or hyphenation pattern identifier. Examples: ++case, the I<name> is the respective format name, or hyphenation pattern ++identifier. Examples: + + #!pdflatex +- #!lm.map + %!german + --!usenglishmax + +@@ -6622,20 +6579,9 @@ + syntax as the master files. + + The form C<generate language> recreates both the C<language.dat>, the +-C<language.def> and the C<language.dat.lua>files, while the forms with ++C<language.def> and the C<language.dat.lua> files, while the forms with + extension recreates only the given language file. + +-Special consideration for updmap.cfg: in addition to font map files, +-this file specifies the setting of five options: C<dvipsPreferOutline>, +-C<LW35>, C<dvipsDownloadBase35>, C<pdftexDownloadBase14>, and +-C<dvipdfmDownloadBase14>. The defaults for these as set in +-C<updmap-hdr.cfg> are usually fine. If you want to change them, you can +-include changed settings for any or all of these five options in your +-C<updmap-local.cfg> file and they will be respected by C<generate +-updmap>. For example: +- +- dvipsDownloadBase35 true +- + Options: + + =over 4 +@@ -6643,7 +6589,7 @@ + =item B<--dest> I<output_file> + + specifies the output file (defaults to the respective location in +-C<TEXMFSYSVAR> for C<language*> and C<fmtutil>, and C<TEXMFSYSCONFIG> ++C<TEXMFSYSVAR> for C<language*> and C<fmtutil>, and C<TEXMFSYSDIST> + for C<updmap>). If C<--dest> is given to C<generate language>, it serves + as a basename onto which C<.dat> will be appended for the name of the + C<language.dat> output file, C<.def> will be +@@ -6681,13 +6627,6 @@ + web2c/fmtutil.cnf (and fmtutil-local.cnf); + web2c/updmap.cfg (and updmap-local.cfg). + +-Final repetition: as explained above, C<tlmgr> does I<not> use +-C<generate updmap> for font map files. Therefore, if you want to make +-use of C<updmap-local.cfg>, you must run C<tlmgr generate updmap> +-and C<updmap-sys> yourself after making any local changes. If you +-make yourself responsible for rigorously using C<updmap-local.cfg>), set +-C<option generate_updmap>). +- + + =head1 CONFIGURATION FILE + +Index: Master/texmf/web2c/updmap-hdr.cfg +=================================================================== +--- Master.orig/texmf/web2c/updmap-hdr.cfg 2011-10-26 10:07:22.000000000 +0900 ++++ Master/texmf/web2c/updmap-hdr.cfg 2012-01-12 13:42:09.000000000 +0900 +@@ -1,8 +1,8 @@ + # $Id: updmap-hdr.cfg 24398 2011-10-26 01:07:22Z preining $ + # +-# The full updmap.cfg is generated by concatenating updmap-hdr.cfg with +-# all the Map and MixedMap lines from an installation, possibly +-# appending a local configuration file. ++# The updmap.cfg in this tree (TEXMFDIST) is generated by tlmgr by ++# concatenating updmap-hdr.cfg with all the Map and MixedMap lines ++# from an installation. + # + # To make local customizations to the map files, please use of the + # following methods: +@@ -11,102 +11,11 @@ + # updmap-sys --enable Map=foo.map + # for each map file. (Or MixedMap instead of Map, if your font has + # both Metafont and outline definitions.) See the updmap --help +-# documentation. ++# documentation. This will add lines to the updmap.cfg file in ++# TEXMFSYSCONFIG (creating it if necessary). + # +-# 2) add your local map entries to the file +-# TEXMFLOCAL/web2c/updmap-local.cfg +-# and then call +-# tlmgr generate updmap +-# which will concatenate updmap-local.cfg to the end of the final +-# updmap.cfg. (You can override the local.cfg file location with the +-# --localcfg option; see tlmgr --help.) ++# 2) put all your additional fonts into TEXMFLOCAL and edit ++# TEXMFLOCAL/web2c/updmap.cfg. + # +-# If you use either of these methods, your local adaptations will be +-# preserved when tlmgr updates the installation or this config file. +-# Manual edits to updmap.cfg may be lost on update. +- +- +-################################################################ +-# OPTIONS +-################################################################ +- ++# Manual edits to this updmap.cfg will be lost on update. + # +-# dvipsPreferOutline +-# +-# Should dvips (by default) prefer bitmap fonts or outline fonts +-# if both are available? Independent of this setting, outlines +-# can be forced by putting "p psfonts_t1.map" into a config file +-# that dvips reads. Bitmaps (for the fonts in question) can +-# be forced by putting "p psfonts_pk.map" into a config file. +-# We provide such config files which can be enabled via +-# dvips -Poutline ... resp. dvips -Ppk ... +-# +-# Valid settings for dvipsPreferOutline are true / false: +-dvipsPreferOutline true +- +-# +-# LW35 +-# +-# Which fonts for the "Basic 35 Laserwriter Fonts" do you want to use and +-# how are the filenames chosen? Valid settings: +-# URW: URW fonts with "vendor" filenames (e.g. n019064l.pfb) +-# URWkb: URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb) +-# ADOBE: Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb) +-# ADOBEkb: Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb) +-LW35 URWkb +- +-# +-# dvipsDownloadBase35 +-# +-# Should dvips (by default) download the standard 35 LaserWriter fonts +-# with the document (then set dvipsDownloadBase35 true) or should these +-# fonts be used from the ps interpreter / printer? +-# Whatever the default is, the user can override it by specifying +-# dvips -Pdownload35 ... resp. dvips -Pbuiltin35 ... to either download +-# the LW35 fonts resp. use the built-in fonts. +-# +-# Valid settings are true / false: +-dvipsDownloadBase35 true +- +-# +-# pdftexDownloadBase14 +-# +-# Should pdftex download the base 14 pdf fonts? Since some configurations +-# (ps / pdf tools / printers) use bad default fonts, it is safer to download +-# the fonts. The pdf files will get bigger, though. +-# Valid settings are true (download the fonts) or false (don't download +-# the fonts). Adobe recommends embedding all fonts. +-pdftexDownloadBase14 true +- +-# +-# dvipdfmDownloadBase14 +-# +-# Should dvipdfm download the base 14 pdf fonts? Since some configurations +-# (ps / pdf tools / printers) use bad default fonts, it is safer to download +-# the fonts. The pdf files will get bigger, though. +-# Valid settings are true (download the fonts) or false (don't download +-# the fonts). +-dvipdfmDownloadBase14 true +- +-# +-# kanjiEmbed +-# +-# updmap generates a file kanjix.map for usage with dvipdfmx. Using this +-# option one can switch between not embedding any kanji font, and several +-# available. +-# Valid setting is any string. At updmap run time the @kanjiEmbed@ substring +-# in a map file name will be replaced with this settings, and the respective +-# map file used. +-kanjiEmbed noEmbed +- +-################################################################ +-# Map files. +-################################################################ +-# +-# There are two possible entries: Map and MixedMap. Both have one additional +-# argument: the filename of the map file. MixedMap ("mixed" means that +-# the font is available as bitmap and as outline) lines will not be used +-# in the default map of dvips if dvipsPreferOutline is false. Inactive +-# Map files should be marked by "#! " (without the quotes), not just #. +-# +- +Index: Master/tlpkg/TeXLive/TLUtils.pm +=================================================================== +--- Master.orig/tlpkg/TeXLive/TLUtils.pm 2012-01-05 11:07:33.000000000 +0900 ++++ Master/tlpkg/TeXLive/TLUtils.pm 2012-01-12 13:04:16.000000000 +0900 +@@ -2575,67 +2575,10 @@ + } + + sub create_updmap { +- my ($tlpdb,$dest,$localconf) = @_; +- my @tlpdblines = $tlpdb->updmap_cfg_lines( +- get_disabled_local_configs($localconf, '#')); +- # we do not use _create_config_files here because we want to +- # parse the $localconf file for the five options in updmap.cfg +- #_create_config_files($tlpdb, "texmf/web2c/updmap-hdr.cfg", $dest, +- # $localconf, 0, '#', \@tlpdblines); +- my $headfile = "texmf/web2c/updmap-hdr.cfg"; +- my $root = $tlpdb->root; +- my @lines; +- my @localconflines; +- my %configs; +- if (-r "$localconf") { +- # +- # this should be done more intelligently, but for now only add those +- # lines without any duplication check ... +- open FOO, "<$localconf" +- or die "strange, -r ok but cannot open $localconf: $!"; +- my @bla = <FOO>; +- close(FOO); +- for my $l (@bla) { +- my ($k, $v, @rest) = split(' ', $l); +- if (check_updmap_config_value($k, $v, $localconf)) { +- $configs{$k} = $v; +- } else { +- push @localconflines, $l; +- } +- } +- } +- # +- # read the -hdr file and replace the options if given in the local +- # config file +- open(INFILE,"<$root/$headfile") or die("Cannot open $root/$headfile"); +- for my $l (<INFILE>) { +- my ($k, $v, @rest) = split(' ', $l); +- if (check_updmap_config_value($k, $v, "$root/$headfile")) { +- if (defined($configs{$k})) { +- push @lines, "$k $configs{$k}\n"; +- } else { +- push @lines, $l; +- } +- } else { +- push @lines, $l; +- } +- } +- close (INFILE); +- +- # add the lines from the tlpdb +- push @lines, @tlpdblines; +- +- # add additional local config lines +- push @lines, @localconflines; +- +- if ($#lines >= 0) { +- open(OUTFILE,">$dest") +- or die("Cannot open $dest for writing: $!"); +- +- printf OUTFILE "# Generated by %s on %s\n", "$0", scalar localtime; +- print OUTFILE @lines; +- close(OUTFILE) || warn "close(>$dest) failed: $!"; +- } ++ my ($tlpdb,$dest) = @_; ++ my @tlpdblines = $tlpdb->updmap_cfg_lines(); ++ _create_config_files($tlpdb, "texmf/web2c/updmap-hdr.cfg", $dest, ++ undef, 0, '#', \@tlpdblines); + } + + sub check_updmap_config_value { +@@ -2703,7 +2646,7 @@ + my @lines = <INFILE>; + push @lines, @$tlpdblinesref; + close (INFILE); +- if (-r "$localconf") { ++ if (defined($localconf) && -r $localconf) { + # + # this should be done more intelligently, but for now only add those + # lines without any duplication check ... +Index: Master/install-tl +=================================================================== +--- Master.orig/install-tl 2011-10-07 07:50:55.000000000 +0900 ++++ Master/install-tl 2012-01-12 13:27:39.000000000 +0900 +@@ -861,11 +861,10 @@ + "$TEXMFSYSVAR/web2c/fmtutil.cnf", + "$TEXMFLOCAL/web2c/fmtutil-local.cnf"); + +- mkdirhier "$vars{'TEXMFSYSCONFIG'}/web2c"; +- info("writing updmap.cfg to $TEXMFSYSCONFIG/web2c/updmap.cfg\n"); ++ mkdirhier "$TEXDIR/texmf-dist/web2c"; ++ info("writing updmap.cfg to $TEXDIR/texmf-dist/web2c/updmap.cfg\n"); + TeXLive::TLUtils::create_updmap ($usedtlpdb, +- "$TEXMFSYSCONFIG/web2c/updmap.cfg", +- "$TEXMFLOCAL/web2c/updmap-local.cfg"); ++ "$TEXDIR/texmf-dist/web2c/updmap.cfg"); + + info("writing language.dat to $TEXMFSYSVAR/tex/generic/config/language.dat\n"); + TeXLive::TLUtils::create_language_dat($usedtlpdb, diff --git a/Master/tlpkg/dev/quilt-patches/series b/Master/tlpkg/dev/quilt-patches/series index 5297f57d7da..003ca468a12 100644 --- a/Master/tlpkg/dev/quilt-patches/series +++ b/Master/tlpkg/dev/quilt-patches/series @@ -1,2 +1,2 @@ dev.multi-source-support-v2.patch -p0 -dev.multi-updmap +dev.mupdmap-integration |