From 482e1562295f261296814542810909346b6ef512 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 1 Dec 2008 12:25:56 +0000 Subject: updates git-svn-id: svn://tug.org/texlive/trunk@11496 c570f23f-e606-0410-a88d-b1316a301751 --- .../tlpkg/etc/test-code-for-papersize-in-perl.pl | 167 +++++++++++++++++++-- 1 file changed, 153 insertions(+), 14 deletions(-) (limited to 'Master/tlpkg/etc/test-code-for-papersize-in-perl.pl') diff --git a/Master/tlpkg/etc/test-code-for-papersize-in-perl.pl b/Master/tlpkg/etc/test-code-for-papersize-in-perl.pl index f91cdd4630e..49be2dbbd3e 100644 --- a/Master/tlpkg/etc/test-code-for-papersize-in-perl.pl +++ b/Master/tlpkg/etc/test-code-for-papersize-in-perl.pl @@ -1,4 +1,17 @@ +# +# TODO TODO TODO +# what happens, especially with do_simple, if NO paper config line is +# found, so nothing has been set up. That happens with context already +# It seems that the dvipdfm/config, dvipdfmx.cfg, XDvi we are shipping +# already all have a line. But what happens if someone has a line +# hanging around? +# +# For dvipdfm(x) and xdvi I have fixed that by adding a line at the +# bottom. +# +# For context this doesn't work because there is an \endinput there!!! +# $^W = 1; use strict; @@ -90,6 +103,10 @@ if ($what eq "dvips") { do_dvips(@ARGV); } elsif ($what eq "dvipdfm") { do_dvipdfm(@ARGV); +} elsif ($what eq "dvipdfmx") { + do_dvipdfmx(@ARGV); +} elsif ($what eq "context") { + do_context(@ARGV); } elsif ($what eq "xdvi") { do_xdvi(@ARGV); } else { @@ -98,6 +115,7 @@ if ($what eq "dvips") { } exit 0; + # # dvips config.ps format: # /--- config.ps --- @@ -207,6 +225,45 @@ sub do_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 do_context { + my $newpaper = shift; + # TODO TODO + # we should check whether context is installed at all!!!! + 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; + 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); + } + }, "tex/context/user/cont-sys.rme", \@bla, + '\setuppapersize[a4][a4]', $newpaper); +} + + # # xdvi format: # /--- XDvi --- @@ -222,14 +279,86 @@ sub do_xdvi { my $newpaper = shift; my $xdvi = `kpsewhich --progname=xdvi --format='other text files' XDvi`; chomp($xdvi); - print "file used: $xdvi\n"; + my @bla = keys %xdvi_papersize; + do_simple($xdvi, "xdvi", '^\*paper: ', '^\*paper:\s+(\w+)\s*$', + sub { + my ($ll,$np) = @_; + $ll =~ s/^\*paper:\s+(\w+)\s*$/\*paper: $np\n/; + return($ll); + }, "xdvi/XDvi", \@bla, + '*paper: a4', $newpaper); +} + - open(FOO, "<$xdvi") or die("cannot open file: $!"); +# +# dvipdfm(x) format: +# /--- dvipdfm/config, dvipdfmx/dvipdfmx.cfg --- +# |... +# |p +# |... +# \------------ +# +# Reading is done +# for dvipdfm via --progname=dvipdfm --format='other text files' config +# for dvipdfmx via --progname=dvipdfmx --format='other text files' dvipdfmx.cfg +# Writing is done to TEXMFSYSCONFIG/dvipdfm/config/config +# and /dvipdfmx/dvipdfmx.cfg +# +# +sub do_dvipdfm_and_x { + my ($inp, $prog, $outp, $paplist, $newpaper) = @_; + 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); + }, $outp, $paplist, 'p a4', $newpaper); +} + +sub do_dvipdfm { + my $newpaper = shift; + my $inp = `kpsewhich --progname=dvipdfm --format='other text files' config`; + chomp($inp); + my @bla = keys %dvipdfm_papersize; + do_dvipdfm_and_x($inp, "dvipdfm", "dvipdfm/config/config", \@bla, $newpaper); +} +sub do_dvipdfmx { + my $newpaper = shift; + my $inp = `kpsewhich --progname=dvipdfmx --format='other text files' dvipdfmx.cfg`; + chomp($inp); + my @bla = keys %dvipdfm_papersize; + do_dvipdfm_and_x($inp, "dvipdfmx", "dvipdfmx/dvipdfmx.cfg", \@bla, $newpaper); +} + + + +# +# do_simple does the work for single line config files +# (xdvi, dvipdfm, dvipdfmx) +# arguments: +# $inp, $prog, $firstre, $secondre, $bl, $outp, $paplist, $newpaper +# with +# $inp .. input file location +# $prog .. program name +# $firstre .. re that searches for paper lines +# $secondre .. re that extracts the paper from a paper line +# $bl .. block/sub taking two args, one paper line and the new paper, and +# returns the line with the paper configured, only lines mathing +# $firstre are shipped over to $bl +# $outp .. location of the output file +# $paplist .. ref to an array with the list of admissible paper sizes +# $newpaper .. --list, new paper, or undef +sub do_simple { + my ($inp, $prog, $firstre, $secondre, $bl, $outp, $paplist, $defaultline, $newpaper) = @_; + + print STDERR "file used for $prog: $inp\n"; + + open(FOO, "<$inp") or die("cannot open file: $!"); my @lines = ; close(FOO); my $currentpaper; - my @paperlines = grep (m/^\*paper: /,@lines); + my @paperlines = grep (m/$firstre/,@lines); if (!@paperlines) { $currentpaper = "(undefined)"; } else { @@ -238,41 +367,51 @@ sub do_xdvi { } $currentpaper = $paperlines[0]; chomp($currentpaper); - $currentpaper =~ s/^\*paper:\s+(\w+)\s*$/$1/; + $currentpaper =~ s/$secondre/$1/; } # change value if (defined($newpaper)) { if ($newpaper eq "--list") { print "$currentpaper\n"; - for my $p (keys %xdvi_papersize) { + for my $p (@$paplist) { print "$p\n" unless ($p eq $currentpaper); } } else { my $found = 0; - for my $p (keys %xdvi_papersize) { + for my $p (@$paplist) { if ($p eq $newpaper) { $found = 1; last; } } if ($found) { - map { +s/^\*paper:\s+(\w+)\s*$/\*paper: $newpaper\n/; } @lines; - # output should go to $texmfsysconfig/xdvi/XDvi TODO TODO - for (@lines) { print; } + my @newlines; + my $foundcfg = 0; + for my $l (@lines) { + if ($l =~ m/$firstre/) { + push @newlines, &$bl($l, $newpaper); + $foundcfg = 1; + } else { + push @newlines, $l; + } + } + # what to do if no default line found??? + if (!$foundcfg) { + push @newlines, &$bl($defaultline, $newpaper); + } + for (@newlines) { print; } } else { - warn "Not a valid paper size for xdvi: $newpaper\n"; + warn "Not a valid paper size for $prog: $newpaper\n"; } } } else { - # just print the current value - print "current xdvi paper size: $currentpaper\n"; + # just return the current value + print "Current paper setting for $prog: $currentpaper\n"; } } - - ### Local Variables: ### perl-indent-level: 2 ### tab-width: 2 -- cgit v1.2.3