LaTeXML
view release on metacpan or search on metacpan
lib/LaTeXML/Common/Config.pm view on Meta::CPAN
$$opts{split} = 1 unless defined $$opts{split}; },
"splitpath=s" => sub { $$opts{splitpath} = $_[1];
$$opts{split} = 1 unless defined $$opts{split}; },
"splitnaming=s" => sub { $$opts{splitnaming} = $_[1];
$$opts{split} = 1 unless defined $$opts{split}; },
"scan!" => \$$opts{scan},
"crossref!" => \$$opts{crossref},
"urlstyle=s" => \$$opts{urlstyle},
"navigationtoc=s" => \$$opts{navtoc},
"navtoc=s" => \$$opts{navtoc},
# Generating indices
"index!" => \$$opts{index},
"permutedindex!" => \$$opts{permutedindex},
"splitindex!" => \$$opts{splitindex},
# Generating Bibliographies
"bibliography=s" => \@{ $$opts{bibliographies} }, # TODO: Document
"splitbibliography!" => \$$opts{splitbibliography},
# Options for two phase processing
"prescan" => \$$opts{prescan},
"dbfile=s" => \$$opts{dbfile},
"sitedirectory=s" => \$$opts{sitedirectory},
"sourcedirectory=s" => \$$opts{sourcedirectory},
# For graphics: vaguely similar issues, but more limited.
# includegraphics images (eg. ps) can be converted to webimages (eg.png)
# picture/pstricks images can be converted to png or possibly svg.
"graphicimages!" => \$$opts{dographics},
"graphicsmap=s" => \@{ $$opts{graphicsmaps} },
"svg!" => \$$opts{svg},
"pictureimages!" => \$$opts{picimages},
# HELP
"comments!" => \$$opts{comments},
"VERSION!" => \$$opts{showversion},
"debug=s" => \@{ $$opts{debug} },
"documentid=s" => \$$opts{documentid},
"help" => \$$opts{help}
};
return ($spec, $opts) unless ($options{type} && ($options{type} eq 'keyvals'));
# Representation use case:
my $keyvals = $options{keyvals} || [];
my $rep_spec = {}; # Representation specification
foreach my $key (keys %$spec) {
if ($key =~ /^(.+)=\w$/) {
my $name = $1;
$$rep_spec{$key} = sub { CORE::push @$keyvals, [$name, $_[1]] };
} else {
$$rep_spec{$key} = sub {
my $ctl = $_[0]->{ctl};
my $used = ($$ctl[0] ? 'no' : '') . $$ctl[1];
CORE::push @$keyvals, [$used, undef] };
}
}
return ($rep_spec, $keyvals);
}
# TODO: Separate the keyvals scan from getopt_specification()
# into its own sub, using @GETOPT_KEYS entirely.
our @GETOPT_KEYS = keys %{ (getopt_specification())[0] };
sub read {
my ($self, $argref, %read_options) = @_;
my $opts = $$self{opts};
local @ARGV = @$argref;
my ($spec) = getopt_specification(options => $opts);
my $silent = %read_options && $read_options{silent};
my $getOptions_success = GetOptions(%{$spec});
if (!$getOptions_success && !$silent) {
pod2usage(-message => $LaTeXML::IDENTITY, -exitval => 1, -verbose => 99,
-input => pod_where({ -inc => 1 }, __PACKAGE__),
-sections => 'OPTION SYNOPSIS', -output => \*STDERR);
}
if (!$silent && $$opts{help}) {
pod2usage(-message => $LaTeXML::IDENTITY, -exitval => 0, -verbose => 99,
-input => pod_where({ -inc => 1 }, __PACKAGE__),
-sections => 'OPTION SYNOPSIS', output => \*STDOUT);
}
# Check that options for system I/O (destination and log) are valid before wasting any time...
foreach my $IO_option (qw(destination log)) {
if ($$opts{$IO_option}) {
$$opts{$IO_option} = pathname_canonical($$opts{$IO_option});
if (my $dir = pathname_directory($$opts{$IO_option})) {
pathname_mkdir($dir) or croak "Couldn't create $IO_option directory $dir: $!"; } } }
# Removed math formats are irrelevant for conversion:
delete $$opts{removed_math_formats};
if ($$opts{showversion}) { print STDERR "$LaTeXML::IDENTITY\n"; exit(0); }
$$opts{source} = $ARGV[0] unless $$opts{source};
# Special source-based guessing needs to happen here,
# as we won't have access to the source file/literal/resource later on:
if (!$$opts{type} || ($$opts{type} eq 'auto')) {
$$opts{type} = 'BibTeX' if ($$opts{source} && ($$opts{source} =~ /$is_bibtex/)); }
if (!$$opts{whatsin}) {
$$opts{whatsin} = 'archive' if ($$opts{source} && ($$opts{source} =~ /$is_archive/)); }
return $getOptions_success;
}
sub read_keyvals {
my ($self, $conversion_options, %read_options) = @_;
my $cmdopts = [];
while (my ($key, $value) = splice(@$conversion_options, 0, 2)) {
# TODO: Is skipping over empty values ever harmful? Do we have non-empty defaults anywhere?
next if (!length($value)) && (grep { /^$key\=/ } @GETOPT_KEYS);
$key = "--$key" unless $key =~ /^\-\-/;
$value = length($value) ? "=$value" : '';
CORE::push @$cmdopts, "$key$value";
}
# Read into a Config object:
return $self->read($cmdopts, %read_options); }
sub scan_to_keyvals {
my ($self, $argref, %read_options) = @_;
local @ARGV = @$argref;
my ($spec, $keyvals) = getopt_specification(type => 'keyvals');
my $silent = %read_options && $read_options{silent};
my $getOptions_success = GetOptions(%$spec);
if (!$getOptions_success && !$silent) {
pod2usage(-message => $LaTeXML::IDENTITY, -exitval => 1, -verbose => 99,
-input => pod_where({ -inc => 1 }, __PACKAGE__),
-sections => 'OPTION SYNOPSIS', -output => \*STDERR);
}
CORE::push @$keyvals, ['source', $ARGV[0]] if $ARGV[0];
return $getOptions_success && $keyvals;
}
###########################################
#### Options Object Hashlike API #####
###########################################
sub get {
my ($self, $key, $value) = @_;
return $$self{opts}{$key}; }
sub set {
my ($self, $key, $value) = @_;
$$self{dirty} = 1;
$$self{opts}{$key} = $value;
return; }
sub push {
my ($self, $key, $value) = @_;
$$self{dirty} = 1;
$$self{opts}{$key} = [] unless ref $$self{opts}{$key};
CORE::push @{ $$self{opts}{$key} }, $value;
return; }
sub delete {
my ($self, $key) = @_;
$$self{dirty} = 1;
delete $$self{opts}{$key};
return; }
sub exists {
my ($self, $key) = @_;
return exists $$self{opts}{$key}; }
sub defined {
my ($self, $key) = @_;
return defined $$self{opts}{$key}; }
sub keys {
my ($self) = @_;
return keys %{ $$self{opts} }; }
sub options {
my ($self) = @_;
return $$self{opts}; }
sub clone {
my ($self) = @_;
my $clone = LaTeXML::Common::Config->new(%{ $self->options });
$$clone{dirty} = $$self{dirty};
return $clone; }
( run in 2.387 seconds using v1.01-cache-2.11-cpan-98e64b0badf )