summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xMaster/texmf/scripts/texlive/tlmgr2.pl21
-rw-r--r--Master/tlpkg/TeXLive/TLPaper.pm (renamed from Master/texmf/scripts/texlive/papersize-setting.pl)512
2 files changed, 290 insertions, 243 deletions
diff --git a/Master/texmf/scripts/texlive/tlmgr2.pl b/Master/texmf/scripts/texlive/tlmgr2.pl
index fb46752f730..8212dbaa66d 100755
--- a/Master/texmf/scripts/texlive/tlmgr2.pl
+++ b/Master/texmf/scripts/texlive/tlmgr2.pl
@@ -59,9 +59,7 @@ use TeXLive::TLWinGoo;
TeXLive::TLUtils->import(qw(member info give_ctan_mirror win32 dirname
mkdirhier merge_into copy log debug));
-require("papersize-setting.pl");
-our %papersetting_subs;
-#use TeXLive::TLPaper;
+use TeXLive::TLPaper;
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
@@ -715,15 +713,10 @@ sub action_paper {
my $newpaper = shift @ARGV;
if (!defined($newpaper) || $newpaper !~ /^(a4|letter)$/) {
$newpaper = "the empty string." if !defined($newpaper);
- tlwarn("tlmgr: paper expects `a4' or `letter', not $newpaper\n");
+ tlwarn("tlmgr: paper expects `a4' or `letter', not $newpaper.\n");
return;
}
- # output is done to the path components as given in
- # our %paper_config_path_component, and if not present the defaults
- # in %default_paper_config_path_component;
- # together with the tree as given in the first argument of paper_*
- merge_into(\%ret, paper_all($texmfsysconfig, $newpaper));
- #karl merge_into(\%ret, TeXLive::TLPaper::paper_all($texmfsysconfig, $newpaper));
+ merge_into(\%ret, TeXLive::TLPaper::paper_all($texmfsysconfig, $newpaper));
} else {
my $prog = $action; # first argument is the program to change
my $arg = shift @ARGV; # get "paper" argument
@@ -732,10 +725,12 @@ sub action_paper {
tlwarn("tlmgr: expected `paper' after $prog, not $arg\n");
return;
}
- merge_into(\%ret, &{$papersetting_subs{$prog}}($texmfsysconfig, @ARGV));
- #karl merge_into(\%ret,TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV));
+ merge_into(\%ret,TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV));
+ }
+ if ($ret{"format"} && ! $localtlpdb->option_create_formats) {
+ info("$0: option to update formats is off, skipping.\n");
+ delete $ret{"format"};
}
- $ret{"format"} = 1 if ($localtlpdb->option_create_formats);
return \%ret;
}
diff --git a/Master/texmf/scripts/texlive/papersize-setting.pl b/Master/tlpkg/TeXLive/TLPaper.pm
index 13557b132d2..51275b94cb5 100644
--- a/Master/texmf/scripts/texlive/papersize-setting.pl
+++ b/Master/tlpkg/TeXLive/TLPaper.pm
@@ -1,9 +1,8 @@
-#
-# $Id$
+# $Id: papersize-setting.pl 11574 2008-12-10 00:06:21Z preining $
#
# Adjusting and querying paper sizes from various config files
#
-# Copyright 2008 Norbert Preining
+# Copyright 2008, 2009 Norbert Preining
# This file is licensed under the GNU General Public License version 2
# or any later version.
#
@@ -11,113 +10,211 @@
# if no paperconfig line is found in paper_do_simple it adds to the end of the
# file the new line, but this does not work on context because it
# has an \endinput at the end ... needs to be fixed
-#
-# output is done to stdout, not the right config file
-#
-$^W = 1;
-use strict;
+package TeXLive::TLPaper;
-our $localtlpdb;
+=pod
-our %default_paper_config_path_component;
+=head1 NAME
-$default_paper_config_path_component{"pdftex"} =
- "tex/generic/config/pdftexconfig.tex";
-$default_paper_config_path_component{"xdvi"} =
- "xdvi/XDvi";
-$default_paper_config_path_component{"dvipdfm"} =
- "dvipdfm/config/config";
-$default_paper_config_path_component{"dvipdfmx"} =
- "dvipdfmx/dvipdfmx.cfg";
-$default_paper_config_path_component{"context"} =
- "tex/context/user/cont-sys.tex";
-$default_paper_config_path_component{"dvips"} =
- "dvips/config/config.ps";
+C<TeXLive::TLPaper> -- paper size setting
-# Output is actually done to the components in this hash, and
-# if a value is undefined to the one from %default_....
-#
-our %paper_config_path_component;
+=head1 SYNOPSIS
+
+ use TeXLive::TLPaper;
+
+=head1 DESCRIPTION
+
+=over 4
+
+=cut
+
+use TeXLive::TLUtils qw(:DEFAULT dirname merge_into mkdirhier);
+
+my %paper_sub = (
+ "xdvi" => \&paper_xdvi,
+ "pdftex" => \&paper_pdftex,
+ "dvips" => \&paper_dvips,
+ "dvipdfmx" => \&paper_dvipdfmx,
+ "dvipdfm" => \&paper_dvipdfm,
+ "context" => \&paper_context,
+);
+
+# Where to write to by default.
+my %default_paper_config_path_component = (
+ "xdvi" => "xdvi/XDvi",
+ "pdftex" => "tex/generic/config/pdftexconfig.tex",
+ "dvips" => "dvips/config/config.ps",
+ "dvipdfmx" => "dvipdfmx/dvipdfmx.cfg",
+ "dvipdfm" => "dvipdfm/config/config",
+ "context" => "tex/context/user/cont-sys.tex",
+);
+# Output is done to the components in this hash.
+# If a value is undefined, we take the one from %default_...
+#
+my %paper_config_path_component;
+
+
+my %xdvi_papersize = (
+ "a1" => "59.4x84.0cm",
+ "a1r" => "84.0x59.4cm",
+ "a2" => "42.0x59.4cm",
+ "a2r" => "59.4x42.0cm",
+ "a3" => "29.7x42.0cm",
+ "a3r" => "42.0x29.7cm",
+ "a4" => "21.0x29.7cm",
+ "a4r" => "29.7x21.0cm",
+ "a5" => "14.85x21.0cm",
+ "a5r" => "21.0x14.85cm",
+ "a6" => "10.5x14.85cm",
+ "a6r" => "14.85x10.5cm",
+ "a7" => "7.42x10.5cm",
+ "a7r" => "10.5x7.42cm",
+ "b1" => "70.6x100.0cm",
+ "b1r" => "100.0x70.6cm",
+ "b2" => "50.0x70.6cm",
+ "b2r" => "70.6x50.0cm",
+ "b3" => "35.3x50.0cm",
+ "b3r" => "50.0x35.3cm",
+ "b4" => "25.0x35.3cm",
+ "b4r" => "35.3x25.0cm",
+ "b5" => "17.6x25.0cm",
+ "b5r" => "25.0x17.6cm",
+ "b6" => "13.5x17.6cm",
+ "b6r" => "17.6x13.5cm",
+ "b7" => "8.8x13.5cm",
+ "b7r" => "13.5x8.8cm",
+ "c1" => "64.8x91.6cm",
+ "c1r" => "91.6x64.8cm",
+ "c2" => "45.8x64.8cm",
+ "c2r" => "64.8x45.8cm",
+ "c3" => "32.4x45.8cm",
+ "c3r" => "45.8x32.4cm",
+ "c4" => "22.9x32.4cm",
+ "c4r" => "32.4x22.9cm",
+ "c5" => "16.2x22.9cm",
+ "c5r" => "22.9x16.2cm",
+ "c6" => "11.46x16.2cm",
+ "c6r" => "16.2x11.46cm",
+ "c7" => "8.1x11.46cm",
+ "c7r" => "11.46x8.1cm",
+ "foolscap" => "13.5x17.0",
+ "ledger" => "17.0x11.0",
+ "legal" => "8.5x14",
+ "letter" => "8.5x11",
+ "tabloid" => "11.0x17.0",
+ "us" => "8.5x11",
+ "usr" => "11x8.5",
+);
my %pdftex_papersize = (
+ "a4" => [ '210 true mm', '297 true mm' ],
"letter" => [ '8.5 true in', '11 true in' ],
- "a4" => [ '210 true mm', '297 true mm' ],
);
-my %xdvi_papersize;
-$xdvi_papersize{'us'}='8.5x11';
-$xdvi_papersize{'letter'}='8.5x11';
-$xdvi_papersize{'usr'}='11x8.5';
-$xdvi_papersize{'legal'}='8.5x14';
-$xdvi_papersize{'ledger'}='17.0x11.0';
-$xdvi_papersize{'tabloid'}= '11.0x17.0';
-$xdvi_papersize{'foolscap'}='13.5x17.0';
-$xdvi_papersize{'a1'}='59.4x84.0cm';
-$xdvi_papersize{'a2'}='42.0x59.4cm';
-$xdvi_papersize{'a3'}='29.7x42.0cm';
-$xdvi_papersize{'a4'}='21.0x29.7cm';
-$xdvi_papersize{'a5'}='14.85x21.0cm';
-$xdvi_papersize{'a6'}='10.5x14.85cm';
-$xdvi_papersize{'a7'}='7.42x10.5cm';
-$xdvi_papersize{'a1r'}='84.0x59.4cm';
-$xdvi_papersize{'a2r'}='59.4x42.0cm';
-$xdvi_papersize{'a3r'}='42.0x29.7cm';
-$xdvi_papersize{'a4r'}='29.7x21.0cm';
-$xdvi_papersize{'a5r'}='21.0x14.85cm';
-$xdvi_papersize{'a6r'}='14.85x10.5cm';
-$xdvi_papersize{'a7r'}='10.5x7.42cm';
-$xdvi_papersize{'b1'}='70.6x100.0cm';
-$xdvi_papersize{'b2'}='50.0x70.6cm';
-$xdvi_papersize{'b3'}='35.3x50.0cm';
-$xdvi_papersize{'b4'}='25.0x35.3cm';
-$xdvi_papersize{'b5'}='17.6x25.0cm';
-$xdvi_papersize{'b6'}='13.5x17.6cm';
-$xdvi_papersize{'b7'}='8.8x13.5cm';
-$xdvi_papersize{'b1r'}='100.0x70.6cm';
-$xdvi_papersize{'b2r'}='70.6x50.0cm';
-$xdvi_papersize{'b3r'}='50.0x35.3cm';
-$xdvi_papersize{'b4r'}='35.3x25.0cm';
-$xdvi_papersize{'b5r'}='25.0x17.6cm';
-$xdvi_papersize{'b6r'}='17.6x13.5cm';
-$xdvi_papersize{'b7r'}='13.5x8.8cm';
-$xdvi_papersize{'c1'}='64.8x91.6cm';
-$xdvi_papersize{'c2'}='45.8x64.8cm';
-$xdvi_papersize{'c3'}='32.4x45.8cm';
-$xdvi_papersize{'c4'}='22.9x32.4cm';
-$xdvi_papersize{'c5'}='16.2x22.9cm';
-$xdvi_papersize{'c6'}='11.46x16.2cm';
-$xdvi_papersize{'c7'}='8.1x11.46cm';
-$xdvi_papersize{'c1r'}='91.6x64.8cm';
-$xdvi_papersize{'c2r'}='64.8x45.8cm';
-$xdvi_papersize{'c3r'}='45.8x32.4cm';
-$xdvi_papersize{'c4r'}='32.4x22.9cm';
-$xdvi_papersize{'c5r'}='22.9x16.2cm';
-$xdvi_papersize{'c6r'}='16.2x11.46cm';
-$xdvi_papersize{'c7r'}='11.46x8.1cm';
-
-my %dvipdfm_papersize = ( 'letter' => 1, 'legal' => 1, 'ledger' => 1,
- 'tabloid' => 1, 'a4' => 1, 'a3' => 1 );
-
-
-our %papersetting_subs;
+my %dvipdfm_papersize = (
+ "a3" => 1,
+ "a4" => 1,
+ "ledger" => 1,
+ "legal" => 1,
+ "letter" => 1,
+ "tabloid" => 1,
+);
+
+
+
+=item C<do_paper($prog,$texmfsysconfig,@args)>
+
+Call the paper subroutine for C<$prog>, passing args. Return hash of
+necessary post-install programs for C<handle_ret_hash> to run.
+
+=cut
+
+sub do_paper {
+ my ($prog,$texmfsysconfig,@args) = @_;
+ my @ret = ();
+ if (exists $paper_sub{$prog}) {
+ my $sub = $paper_sub{$prog};
+ @ret = &$sub($texmfsysconfig, @args);
+ } else {
+ tlwarn("$0: unknown paper program $prog ($texmfsysconfig,@args)\n");
+ }
+ return @ret;
+}
+
+
+=item C<paper_all($texmfsysconfig, $newpaper)>
+
+Pass all C<@args> to each paper subroutine in turn, thus setting the
+paper size for all supported programs. Return merge of all returned
+hashes.
+
+=cut
sub paper_all {
my %ret;
- for my $p (keys %papersetting_subs) {
- #info("setting paper size for $p to @_\n");
- merge_into(\%ret, &{$papersetting_subs{$p}}(@_));
+ for my $p (sort keys %paper_sub) {
+ merge_into(\%ret, &{$paper_sub{$p}} (@_));
}
return \%ret;
}
-sub get_paper_list {
- my $prog = shift;
- return ( &{$papersetting_subs{$prog}} ( "/dummy", "--returnlist" ) );
+
+# return the config file to look in by running kpsewhich with the
+# specified PROGNAME, FORMAT, and @FILENAMES. If no result, give a
+# warning and return the empty string.
+#
+sub find_paper_file {
+ my ($progname, $format, @filenames) = @_;
+ my $ret = "";
+
+ my $cmd;
+ for my $filename (@filenames) {
+ $cmd = qq!kpsewhich --progname=$progname --format="$format" $filename!;
+ chomp($ret = `$cmd`);
+ if ($ret) {
+ debug("paper file for $progname ($format) $filename: $ret\n");
+ last;
+ }
+ }
+
+ tlwarn("$0: found no paper file for $progname (from $cmd)\n") if ! $ret;
+ return $ret;
}
+
+# xdvi format:
+# /--- XDvi ---
+# |...
+# |*paper: <NAME>
+# |...
+# \------------
#
+# Reading is done via --progname=xdvi --format='other text files' XDvi
+# Writing is done to TEXMFSYSCONFIG/xdvi/XDvi
+#
+sub paper_xdvi {
+ my $outtree = shift;
+ my $newpaper = shift;
+
+ my $inp = &find_paper_file("xdvi", "other text files", "XDvi");
+ return () unless $inp;
+
+ my $outcomp = $paper_config_path_component{"xdvi"}
+ || $default_paper_config_path_component{"xdvi"};
+ my $outfile = "$outtree/$outcomp";
+
+ my @sizes = keys %xdvi_papersize;
+ return &paper_do_simple($xdvi, "xdvi", '^\*paper: ', '^\*paper:\s+(\w+)\s*$',
+ sub {
+ my ($ll,$np) = @_;
+ $ll =~ s/^\*paper:\s+(\w+)\s*$/\*paper: $np\n/;
+ return($ll);
+ }, $outfile, \@sizes, '(undefined)', '*paper: a4', $newpaper);
+}
+
+
# pdftex pdftexconfig.tex format
# /--- pdftexconfig.tex ---
# |...
@@ -130,17 +227,18 @@ sub get_paper_list {
# Writing is done to TEXMFSYSCONFIG/tex/generic/config/pdftexconfig.tex
#
sub paper_pdftex {
- my %ret;
my $outtree = shift;
- my $outcomp = $paper_config_path_component{"pdftex"};
- $outcomp || ($outcomp = $default_paper_config_path_component{"pdftex"});
- my $outfile = "$outtree/$outcomp";
my $newpaper = shift;
- my $cf = `kpsewhich --progname=pdftex --format=tex pdftexconfig.tex`;
- chomp($cf);
- debug("file used for pdftex: $cf\n");
+ my %ret;
+
+ my $outcomp = $paper_config_path_component{"pdftex"}
+ || $default_paper_config_path_component{"pdftex"};
+ my $outfile = "$outtree/$outcomp";
+
+ my $inp = &find_paper_file("pdftex", "tex", "pdftexconfig.tex");
+ return () unless $inp;
- open(FOO, "<$cf") or die("cannot open file: $!");
+ open(FOO, "<$inp") || die "$0: open($inp) failed: $!";
my @lines = <FOO>;
close(FOO);
@@ -187,7 +285,7 @@ sub paper_pdftex {
info("$p\n") unless ($p eq $currentpaper);
}
} elsif ($newpaper eq "--returnlist") {
- my @ret;
+ my @ret = ();
push @ret, "$currentpaper";
for my $p (keys %pdftex_papersize) {
push @ret, $p unless ($p eq $currentpaper);
@@ -224,31 +322,29 @@ sub paper_pdftex {
$lines[$#lines] = $newwline;
}
}
- info("Setting paper for pdftex to $newpaper.\n");
+ info("$0: setting paper size for pdftex to $newpaper.\n");
mkdirhier(dirname($outfile));
# if we create the outfile we have to call mktexlsr
$ret{"mktexlsr"} = 1 unless (-r $outfile);
if (!open(TMP, ">$outfile")) {
- tlwarn("Cannot write to $outfile: $!\n");
- tlwarn("Not setting paper for pdftex.\n");
- return;
+ tlwarn("$0: Cannot write to $outfile: $!\n");
+ tlwarn("Not setting paper size for pdftex.\n");
+ return ();
}
for (@lines) { print TMP; }
- close (TMP);
+ close(TMP) || warn "$0: close(>$outfile) failed: $!";
+ $ret{"format"} = 1;
} else {
- warn "Not a valid paper size for pdftex: $newpaper\n";
+ tlwarn("$0: Not a valid paper size for pdftex: $newpaper\n");
}
}
} else {
- # just print the current value
- info("current pdftex paper size: $currentpaper\n");
+ info("Current pdftex paper size (from $inp): $currentpaper\n");
}
return \%ret;
}
-$papersetting_subs{"pdftex"} = \&paper_pdftex;
-###############################################
-#
+
# dvips config.ps format:
# /--- config.ps ---
# |...
@@ -277,17 +373,18 @@ $papersetting_subs{"pdftex"} = \&paper_pdftex;
# Writing is done to TEXMFSYSCONFIG/dvips/config/config.ps
#
sub paper_dvips {
- my %ret;
my $outtree = shift;
- my $outcomp = $paper_config_path_component{"dvips"};
- $outcomp || ($outcomp = $default_paper_config_path_component{"dvips"});
- my $outfile = "$outtree/$outcomp";
my $newpaper = shift;
- my $configps = `kpsewhich --progname=dvips --format="dvips config" config.ps`;
- chomp($configps);
- debug("file used for dvips: $configps\n");
+ my %ret;
+
+ my $inp = &find_paper_file("dvips", "dvips config", "config.ps");
+ return () unless $inp;
+
+ my $outcomp = $paper_config_path_component{"dvips"}
+ || $default_paper_config_path_component{"dvips"};
+ my $outfile = "$outtree/$outcomp";
- open(FOO, "<$configps") or die("cannot open file: $!");
+ open(FOO, "<$inp") || die "$0: open($inp) failed: $!";
my @lines = <FOO>;
close(FOO);
@@ -348,109 +445,28 @@ sub paper_dvips {
}
push @newlines, $lines[$idx];
}
- info("Setting paper for dvips to $newpaper.\n");
+ info("$0: setting paper size for dvips to $newpaper.\n");
mkdirhier(dirname($outfile));
# if we create the outfile we have to call mktexlsr
$ret{"mktexlsr"} = 1 unless (-r $outfile);
if (!open(TMP, ">$outfile")) {
- tlwarn("Cannot write to $outfile: $!\n");
- tlwarn("Not setting paper for dvips.\n");
- return;
+ tlwarn("$0: Cannot write to $outfile: $!\n");
+ tlwarn("Not setting paper size for dvips.\n");
+ return ();
}
for (@newlines) { print TMP; }
- close (TMP);
+ close(TMP) || warn "$0: close(>$outfile) failed: $!";
} else {
- warn "Not a valid paper size for dvips: $newpaper\n";
+ tlwarn("$0: Not a valid paper size for dvips: $newpaper\n");
}
}
} else {
- # just print the current value
- info("current dvips paper size: $papersizes[0]\n");
+ info("Current dvips paper size (from $inp): $papersizes[0]\n");
}
return \%ret;
}
-$papersetting_subs{"dvips"} = \&paper_dvips;
-#
-# context format:
-# /--- cont-sys.{tex,rme}
-# |...
-# |\setuppapersize[letter][letter]
-# |...
-# \------------
-#
-# Reading is done first via kpsewhich -prog=tex -format=tex cont-sys.tex
-# if that fails via -prog=tex -format='other text files' cont-sys.rme
-#
-# Writing is done to TEXMFSYSCONFIG/tex/context/user/cont-sys.tex
-#
-sub paper_context {
- my $outtree = shift;
- my $outcomp = $paper_config_path_component{"context"};
- $outcomp || ($outcomp = $default_paper_config_path_component{"context"});
- my $outfile = "$outtree/$outcomp";
- my $newpaper = shift;
- # check that context is installed at all
- if (!defined($localtlpdb->get_package("context"))) {
- debug("context not installed, not setting paper size\n");
- return;
- }
- my $inp = `kpsewhich --progname=tex --format=tex cont-sys.tex`;
- chomp($inp);
- if (!$inp) {
- # we didn't get anything, so retry with .rme
- $inp = `kpsewhich --progname=tex --format="other text files" cont-sys.rme`;
- chomp($inp);
- }
- my @bla = keys %pdftex_papersize;
- # take care here, the \\\\ are necessary in some places and not in
- # some others because there is no intermediate evaluation
- return &paper_do_simple($inp, "context", '^\s*\\\\setuppapersize\s*',
- '^\s*\\\\setuppapersize\s*\[([^][]*)\].*$',
- sub {
- my ($ll,$np) = @_;
- if ($ll =~ m/^\s*\\setuppapersize\s*/) {
- return("\\setuppapersize[$np][$np]\n");
- } else {
- return($ll);
- }
- },
- $outfile, \@bla, 'a4', '\setuppapersize[a4][a4]', $newpaper);
-}
-$papersetting_subs{"context"} = \&paper_context;
-
-
-#
-# xdvi format:
-# /--- XDvi ---
-# |...
-# |*paper: <NAME>
-# |...
-# \------------
-#
-# Reading is done via --progname=xdvi --format='other text files' XDvi
-# Writing is done to TEXMFSYSCONFIG/xdvi/XDvi
-#
-sub paper_xdvi {
- my $outtree = shift;
- my $outcomp = $paper_config_path_component{"xdvi"};
- $outcomp || ($outcomp = $default_paper_config_path_component{"xdvi"});
- my $outfile = "$outtree/$outcomp";
- my $newpaper = shift;
- my $xdvi = `kpsewhich --progname=xdvi --format="other text files" XDvi`;
- chomp($xdvi);
- my @bla = keys %xdvi_papersize;
- return &paper_do_simple($xdvi, "xdvi", '^\*paper: ', '^\*paper:\s+(\w+)\s*$',
- sub {
- my ($ll,$np) = @_;
- $ll =~ s/^\*paper:\s+(\w+)\s*$/\*paper: $np\n/;
- return($ll);
- }, $outfile, \@bla, '(not defined)', '*paper: a4', $newpaper);
-}
-$papersetting_subs{"xdvi"} = \&paper_xdvi;
-
-
-#
+
# dvipdfm(x) format:
# /--- dvipdfm/config, dvipdfmx/dvipdfmx.cfg ---
# |...
@@ -466,43 +482,78 @@ $papersetting_subs{"xdvi"} = \&paper_xdvi;
#
#
sub do_dvipdfm_and_x {
- my ($inp, $prog, $outtree, $paplist, $newpaper) = @_;
- my $outcomp = $paper_config_path_component{$prog};
- $outcomp || ($outcomp = $default_paper_config_path_component{$prog});
+ my ($inp,$prog,$outtree,$paplist,$newpaper) = @_;
+ my $outcomp = $paper_config_path_component{$prog}
+ || $default_paper_config_path_component{$prog};
my $outfile = "$outtree/$outcomp";
return &paper_do_simple($inp, $prog, '^p\s+', '^p\s+(\w+)\s*$',
sub {
my ($ll,$np) = @_;
$ll =~ s/^p\s+(\w+)\s*$/p $np\n/;
return($ll);
- }, $outfile, $paplist, '(not defined)', 'p a4', $newpaper);
+ }, $outfile, $paplist, '(undefined)', 'p a4', $newpaper);
}
sub paper_dvipdfm {
my $outtree = shift;
my $newpaper = shift;
- my $inp = `kpsewhich --progname=dvipdfm --format="other text files" config`;
- chomp($inp);
- my @bla = keys %dvipdfm_papersize;
- return &do_dvipdfm_and_x($inp, "dvipdfm", $outtree, \@bla, $newpaper);
+
+ my $inp = &find_paper_file("dvipdfm", "other text files", "config");
+ return () unless $inp;
+
+ my @sizes = keys %dvipdfm_papersize;
+ return &do_dvipdfm_and_x($inp, "dvipdfm", $outtree, \@sizes, $newpaper);
}
-$papersetting_subs{"dvipdfm"} = \&paper_dvipdfm;
sub paper_dvipdfmx {
my $outtree = shift;
my $newpaper = shift;
- my $inp = `kpsewhich --progname=dvipdfmx --format="other text files" dvipdfmx.cfg`;
- chomp($inp);
- my @bla = keys %dvipdfm_papersize;
- return &do_dvipdfm_and_x($inp, "dvipdfmx", $outtree, \@bla, $newpaper);
+
+ my $inp = &find_paper_file("dvipdfmx", "other text files", "dvipdfmx.cfg");
+ return () unless $inp;
+
+ my @sizes = keys %dvipdfm_papersize;
+ return &do_dvipdfm_and_x($inp, "dvipdfmx", $outtree, \@sizes, $newpaper);
}
-$papersetting_subs{"dvipdfmx"} = \&paper_dvipdfmx;
+
+# context format:
+# /--- cont-sys.{tex,rme}
+# |...
+# |\setuppapersize[letter][letter]
+# |...
+# \------------
+#
+sub paper_context {
+ my $outtree = shift;
+ my $newpaper = shift;
+
+ my $outcomp = $paper_config_path_component{"context"}
+ || $default_paper_config_path_component{"context"};
+ my $outfile = "$outtree/$outcomp";
+ my $inp = &find_paper_file("context", "tex", "cont-sys.tex", "cont-sys.rme");
+ return () unless $inp;
-#
+ my @sizes = keys %pdftex_papersize;
+ # take care here, the \\\\ are necessary in some places and not in
+ # some others because there is no intermediate evaluation
+ return &paper_do_simple($inp, "context", '^\s*\\\\setuppapersize\s*',
+ '^\s*\\\\setuppapersize\s*\[([^][]*)\].*$',
+ sub {
+ my ($ll,$np) = @_;
+ if ($ll =~ m/^\s*\\setuppapersize\s*/) {
+ return("\\setuppapersize[$np][$np]\n");
+ } else {
+ return($ll);
+ }
+ },
+ $outfile, \@sizes, 'a4', '\setuppapersize[a4][a4]', $newpaper);
+}
+
+
# paper_do_simple does the work for single line config files
-# (xdvi, dvipdfm, dvipdfmx)
+# (xdvi, dvipdfm, ...)
# arguments:
# $inp, $prog, $firstre, $secondre, $bl, $outp, $paplist, $newpaper
# with
@@ -552,7 +603,7 @@ sub paper_do_simple {
info("$p\n") unless ($p eq $currentpaper);
}
} elsif ($newpaper eq "--returnlist") {
- my @ret;
+ my @ret = ();
push @ret, $currentpaper;
for my $p (@$paplist) {
push @ret, $p unless ($p eq $currentpaper);
@@ -581,24 +632,25 @@ sub paper_do_simple {
if (!$foundcfg) {
push @newlines, &$bl($defaultline, $newpaper);
}
- info("Setting paper for $prog to $newpaper.\n");
+ info("$0: setting paper size for $prog to $newpaper.\n");
mkdirhier(dirname($outp));
# if we create the outfile we have to call mktexlsr
$ret{"mktexlsr"} = 1 unless (-r $outp);
if (!open(TMP, ">$outp")) {
- tlwarn("Cannot write to $outp: $!\n");
- tlwarn("Not setting paper for $prog.\n");
+ tlwarn("$0: Cannot write to $outp: $!\n");
+ tlwarn("Not setting paper size for $prog.\n");
return;
}
for (@newlines) { print TMP; }
- close (TMP);
+ close(TMP) || warn "$0: close(>$outfile) failed: $!";
+ $ret{"format"} = 1 if $prog eq "context";
} else {
- warn "Not a valid paper size for $prog: $newpaper\n";
+ tlwarn("$0: Not a valid paper size for $prog: $newpaper\n");
}
}
} else {
- # just return the current value
- info("Current paper setting for $prog: $currentpaper\n");
+ # return the current value
+ info("Current $prog paper size (from $inp): $currentpaper\n");
}
return \%ret;
}