mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
See: https://trac.macports.org/ticket/73590 See: https://trac.macports.org/ticket/62237
147 lines
4.5 KiB
Perl
147 lines
4.5 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
# tl-paper
|
|
#
|
|
# query and change paper settings using TLPaper
|
|
# this is independent from tlmgr
|
|
#
|
|
# Copyright 2011-2015 Norbert Preining
|
|
# This file is licensed under the GNU General Public License version 3
|
|
# or any later version.
|
|
#
|
|
|
|
BEGIN {
|
|
$^W = 1;
|
|
chomp ($mydir = `dirname $0`);
|
|
unshift (@INC, "/usr/share/texlive/tlpkg");
|
|
}
|
|
|
|
$^W = 1;
|
|
use strict;
|
|
use Cwd qw/abs_path/;
|
|
use Pod::Usage;
|
|
use Getopt::Long qw(:config no_autoabbrev permute);
|
|
use TeXLive::TLPaper;
|
|
|
|
# overwrite the default paper config settings
|
|
our %paper_config_name = (
|
|
"xdvi" => "XDvi-paper",
|
|
"pdftex" => "pdftexconfig.tex",
|
|
"dvips" => "config-paper.ps",
|
|
"dvipdfmx" => "dvipdfmx-paper.cfg",
|
|
"context" => "cont-sys-paper.tex",
|
|
);
|
|
|
|
binmode(STDOUT, ":utf8");
|
|
binmode(STDERR, ":utf8");
|
|
|
|
&main();
|
|
|
|
sub main {
|
|
# the script always runs in sys mode
|
|
chomp(my $texmfsysconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`);
|
|
chomp(my $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`);
|
|
$ENV{"TEXMFCONFIG"} = $texmfsysconfig;
|
|
$ENV{"TEXMFVAR"} = $texmfsysvar;
|
|
|
|
my $action = shift @ARGV;
|
|
$action = "status" if !defined($action);
|
|
if ($action =~ m/^status$/i) { # "tl-paper status" shows the current settings
|
|
TeXLive::TLPaper::paper_all($texmfsysvar,undef);
|
|
|
|
} elsif ($action =~ m/^list$/i) { # "tl-paper list prg" lists options for prg
|
|
my $prg = shift @ARGV;
|
|
if (!$prg) {
|
|
# currently, pdftex has the most restricted set of paper sizes
|
|
$prg = "pdftex";
|
|
}
|
|
# the following actually also *reads* the configuration and returns
|
|
# a list where the first item is the one selected.
|
|
my $paperref = TeXLive::TLPaper::get_paper_list($prg);
|
|
my ($current_paper, @other_options) = @{$paperref};
|
|
for my $i ($current_paper, sort @other_options) {
|
|
print "$i\n";
|
|
}
|
|
# for simply getting the list of supported paper sizes without reading
|
|
# anything, one can use:
|
|
# my @paper_options = keys(%{${prg}_papersize});
|
|
|
|
} elsif ($action =~ m/^set$/i) { # "tl-paper set <prg|all> <paper>" sets paper
|
|
my $prg = shift @ARGV;
|
|
my $newpaper = shift @ARGV;
|
|
|
|
if ($prg !~ m/^(xdvi|pdftex|dvips|dvipdfmx|context|all)$/i) {
|
|
usage();
|
|
exit 1;
|
|
}
|
|
# set TEXMFVAR and TEXMFSYSVAR to TEXMFDIST (which is == TEXMFMAIN)
|
|
# so that we always find either the system provided config file
|
|
# as distributed in /usr/share/texlive/texmf-dist, or, if the
|
|
# admin decided to override that, a copy in TEXMFSYSCONFIG
|
|
# but *not* the one we have created at some point in history
|
|
# in TEXMF(SYS)VAR
|
|
chomp(my $texmfdist = `kpsewhich -var-value=TEXMFDIST`);
|
|
$ENV{"TEXMFVAR"} = $ENV{"TEXMFSYSVAR"} = $texmfdist;
|
|
if ($prg =~ m/^all$/i) {
|
|
if ($newpaper !~ /^(a4|letter)$/) {
|
|
# we cannot deal with that for now, only a4|letter supported for
|
|
# all programs
|
|
print "tl-paper: cannot change setting for all programs to $newpaper\n\n";
|
|
exit 1;
|
|
}
|
|
TeXLive::TLPaper::paper_all($texmfsysvar,$newpaper);
|
|
|
|
} else {
|
|
TeXLive::TLPaper::do_paper($prg,$texmfsysvar,$newpaper);
|
|
}
|
|
|
|
# we probably have changed the paper, so run the execute actions
|
|
# as announced by TLPaper, that is $::files_changed and
|
|
# $::regenerate_all_formats.
|
|
#
|
|
# but we do not do this here, but rely on the libpaper shell
|
|
# script to do the rest
|
|
|
|
} elsif ($action =~ m/^get$/i) { # "tl-paper get prg" gets paper setting for prg
|
|
my $prg = shift @ARGV;
|
|
if ($prg !~ m/^(xdvi|pdftex|dvips|dvipdfmx|context)$/i) {
|
|
usage();
|
|
exit 1;
|
|
}
|
|
my $paperref = TeXLive::TLPaper::get_paper_list($prg);
|
|
my ($current_paper, @other_options) = @{$paperref};
|
|
print "$current_paper\n" if defined($current_paper);
|
|
|
|
} else {
|
|
usage();
|
|
exit 1;
|
|
}
|
|
exit 0;
|
|
}
|
|
|
|
sub usage {
|
|
print STDERR "
|
|
tl-paper: inquire and set paper settings for various programs in the TeX World.
|
|
|
|
usage:
|
|
tl-paper list <program> lists available papers, current paper first
|
|
tl-paper status lists all current settings
|
|
tl-paper get <program> prints the current paper for <program>
|
|
tl-paper set <program> <newpaper> sets new paper for <program>
|
|
tl-paper set all <a4|letter> sets new paper for all programs
|
|
|
|
Note: after changing the paper setting for pdftex or context, a rebuild
|
|
of formats (fmtutil-sys --all) is necessary to make the changes
|
|
take effect.
|
|
";
|
|
}
|
|
|
|
|
|
|
|
### Local Variables:
|
|
### perl-indent-level: 2
|
|
### tab-width: 2
|
|
### indent-tabs-mode: nil
|
|
### End:
|
|
# vim:set tabstop=2 expandtab: #
|