diff options
author | Karl Berry <karl@freefriends.org> | 2009-08-16 23:33:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-08-16 23:33:14 +0000 |
commit | 1d678c9b24a56c664c9c27a350038656c8b49073 (patch) | |
tree | 56e390ac04c7958d1361e281649989f8355c6e06 /Master/tlpkg/TeXLive | |
parent | d0d7124586683746bbc2a57dc417b86eac77f341 (diff) |
support disabling of maps/formats/hyphenations in local conf files
git-svn-id: svn://tug.org/texlive/trunk@14715 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/TeXLive')
-rw-r--r-- | Master/tlpkg/TeXLive/TLPDB.pm | 28 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLPOBJ.pm | 27 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLUtils.pm | 43 |
3 files changed, 74 insertions, 24 deletions
diff --git a/Master/tlpkg/TeXLive/TLPDB.pm b/Master/tlpkg/TeXLive/TLPDB.pm index fabb05332b7..b069bae9d3c 100644 --- a/Master/tlpkg/TeXLive/TLPDB.pm +++ b/Master/tlpkg/TeXLive/TLPDB.pm @@ -1,6 +1,6 @@ # $Id$ # TeXLive::TLPDB.pm - module for using tlpdb files -# Copyright 2007, 2008 Norbert Preining +# Copyright 2007, 2008, 2009 Norbert Preining # # This file is licensed under the GNU General Public License version 2 # or any later version. @@ -1221,6 +1221,9 @@ sub format_definitions { The function C<fmtutil_cnf_lines> returns the list of a fmtutil.cnf file containing only those formats present in the installation. +Every format listed in the tlpdb but listed in the arguments +will not be included in the list of lines returned. + =cut sub fmtutil_cnf_lines { my $self = shift; @@ -1228,16 +1231,19 @@ sub fmtutil_cnf_lines { foreach my $p ($self->list_packages) { my $obj = $self->get_package ($p); die "$0: No TeX Live package named $p, strange" if ! $obj; - push @lines, $obj->fmtutil_cnf_lines; + push @lines, $obj->fmtutil_cnf_lines(@_); } return(@lines); } -=item C<< $tlpdb->updmap_cfg_lines >> +=item C<< $tlpdb->updmap_cfg_lines ( [@disabled_maps] ) >> The function C<updmap_cfg_lines> returns the list of a updmap.cfg file containing only those maps present in the installation. +A map file mentioned in the tlpdb but listed in the arguments will not +be included in the list of lines returned. + =cut sub updmap_cfg_lines { my $self = shift; @@ -1245,16 +1251,19 @@ sub updmap_cfg_lines { foreach my $p ($self->list_packages) { my $obj = $self->get_package ($p); die "$0: No TeX Live package named $p, strange" if ! $obj; - push @lines, $obj->updmap_cfg_lines; + push @lines, $obj->updmap_cfg_lines(@_); } return(@lines); } -=item C<< $tlpdb->language_dat_lines >> +=item C<< $tlpdb->language_dat_lines ( [@disabled_hyphen_names] )>> The function C<language_dat_lines> returns the list of all lines for language.dat that can be generated from the tlpdb. +Every hyphenation pattern listed in the tlpdb but listed in the arguments +will not be included in the list of lines returned. + =cut sub language_dat_lines { @@ -1263,16 +1272,19 @@ sub language_dat_lines { foreach my $p ($self->list_packages) { my $obj = $self->get_package ($p); die "$0: No TeX Live package named $p, strange" if ! $obj; - push @lines, $obj->language_dat_lines; + push @lines, $obj->language_dat_lines(@_); } return(@lines); } -=item C<< $tlpdb->language_def_lines >> +=item C<< $tlpdb->language_def_lines ( [@disabled_hyphen_names] )>> The function C<language_def_lines> returns the list of all lines for language.def that can be generated from the tlpdb. +Every hyphenation pattern listed in the tlpdb but listed in the arguments +will not be included in the list of lines returned. + =cut sub language_def_lines { @@ -1281,7 +1293,7 @@ sub language_def_lines { foreach my $p ($self->list_packages) { my $obj = $self->get_package ($p); die "$0: No TeX Live package named $p, strange" if ! $obj; - push @lines, $obj->language_def_lines; + push @lines, $obj->language_def_lines(@_); } return(@lines); } diff --git a/Master/tlpkg/TeXLive/TLPOBJ.pm b/Master/tlpkg/TeXLive/TLPOBJ.pm index a2a17e257b3..b05366dff24 100644 --- a/Master/tlpkg/TeXLive/TLPOBJ.pm +++ b/Master/tlpkg/TeXLive/TLPOBJ.pm @@ -938,6 +938,7 @@ sub format_definitions { # sub fmtutil_cnf_lines { my $obj = shift; + my @disabled = @_; my @fmtlines = (); my $first = 1; my $pkg = $obj->name; @@ -952,6 +953,7 @@ sub fmtutil_cnf_lines { $first = 0; } my $mode = ($r{"mode"} ? "" : "#! "); + $mode = "#! " if TeXLive::TLUtils::member ($r{'name'}, @disabled); push @fmtlines, "$mode$r{'name'} $r{'engine'} $r{'patterns'} $r{'options'}\n"; } } @@ -961,6 +963,7 @@ sub fmtutil_cnf_lines { sub updmap_cfg_lines { my $obj = shift; + my @disabled = @_; my %maps; foreach my $e ($obj->executes) { if ($e =~ m/addMap (.*)$/) { @@ -972,6 +975,7 @@ sub updmap_cfg_lines { } my @updmaplines; foreach (sort keys %maps) { + next if TeXLive::TLUtils::member($_, @disabled); if ($maps{$_} == 2) { push @updmaplines, "MixedMap $_\n"; } else { @@ -983,24 +987,33 @@ sub updmap_cfg_lines { sub language_dat_lines { + my $self = shift; + local @disabled = @_; # we use @disabled in the nested sub + my @lines = $self->_parse_hyphen_execute(\&make_dat_lines); + return @lines; + sub make_dat_lines { my ($name, $lhm, $rhm, $file, @syn) = @_; my @ret; + return if TeXLive::TLUtils::member($name, @disabled); push @ret, "$name $file\n"; foreach (@syn) { push @ret, "=$_\n"; } - return(@ret); + return @ret; } - my $self = shift; - my @lines = $self->_parse_hyphen_execute(\&make_dat_lines); - return(@lines); } sub language_def_lines { + my $self = shift; + local @disabled = @_; # we use @disabled in the nested sub + my @lines = $self->_parse_hyphen_execute(\&make_def_lines); + return @lines; + sub make_def_lines { my ($name, $lhm, $rhm, $file, @syn) = @_; + return if TeXLive::TLUtils::member($name, @disabled); my $exc = ""; my @ret; push @ret, "\\addlanguage\{$name\}\{$file\}\{$exc\}\{$lhm\}\{$rhm\}\n"; @@ -1009,15 +1022,11 @@ sub language_def_lines { push @ret, "\\addlanguage\{$_\}\{$file\}\{$exc\}\{$lhm\}\{$rhm\}\n"; #debug("Ignoring synonym $_ for $name when creating language.def\n"); } - return(@ret); + return @ret; } - my $self = shift; - my @lines = $self->_parse_hyphen_execute(\&make_def_lines); - return(@lines); } - sub _parse_hyphen_execute { my ($obj, $coderef) = @_; my @langlines = (); diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index 01350f641aa..5a9568f0a1b 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -2291,36 +2291,65 @@ C<$TEXMFSYSVAR>). These functions merge the information present in the TLPDB C<$tlpdb> (formats, maps, hyphenations) with local configuration additions: C<$localconf>. -Currently the "merging" is done trivially by appending the content of -the local configuration files at the end of the file. This should be -improved (checking for duplicates). +Currently the merging is done by omitting disabled entries specified +in the local file, and then appending the content of the local +configuration files at the end of the file. We should also check for +duplicates, maybe even error checking. =cut +# +# get_disabled_local_configs +# returns the list of disabled formats/hyphenpatterns/maps +# disabling is done by putting +# #!NAME +# or +# %!NAME +# into the respective foo-local.cnf/cfg file +# +sub get_disabled_local_configs { + my $localconf = shift; + my $cc = shift; + if (-r "$localconf") { + open FOO, "<$localconf" + or die "strange, -r ok but cannot open $localconf: $!"; + my @tmp = <FOO>; + close(FOO) || warn("Closing $localconf did not succeed: $!"); + my @disabled = map { if (m/^$cc!(\S+)\s*$/) { $1 } else { }} @tmp; + return @disabled; + } +} + sub create_fmtutil { my ($tlpdb,$dest,$localconf) = @_; - my @lines = $tlpdb->fmtutil_cnf_lines; + my @lines = $tlpdb->fmtutil_cnf_lines( + get_disabled_local_configs($localconf, '#')); _create_config_files($tlpdb, "texmf/web2c/fmtutil-hdr.cnf", $dest, $localconf, 0, '#', \@lines); } sub create_updmap { my ($tlpdb,$dest,$localconf) = @_; - my @lines = $tlpdb->updmap_cfg_lines; + my @lines = $tlpdb->updmap_cfg_lines( + get_disabled_local_configs($localconf, '#')); _create_config_files($tlpdb, "texmf/web2c/updmap-hdr.cfg", $dest, $localconf, 0, '#', \@lines); } sub create_language_dat { my ($tlpdb,$dest,$localconf) = @_; - my @lines = $tlpdb->language_dat_lines; + # no checking for disabled stuff for language.dat and .def + my @lines = $tlpdb->language_dat_lines( + get_disabled_local_configs($localconf, '%')); _create_config_files($tlpdb, "texmf/tex/generic/config/language.us", $dest, $localconf, 0, '%', \@lines); } sub create_language_def { my ($tlpdb,$dest,$localconf) = @_; - my @lines = $tlpdb->language_def_lines; + # no checking for disabled stuff for language.dat and .def + my @lines = $tlpdb->language_def_lines( + get_disabled_local_configs($localconf, '%')); my @postlines; push @postlines, "%%% No changes may be made beyond this point.\n"; push @postlines, "\n"; |