LaTeX::Driver::FilterProgram - LaTeX::Driver::FilterProgram documentation


LaTeX-Driver documentation Contained in the LaTeX-Driver distribution.

Index


Code Index:

NAME

Top

LaTeX::Driver::FilterProgram

VERSION

Top

SYNOPSIS

Top

  use LaTeX::Driver::FilterProgram;
  LaTeX::Driver::FilterProgram->execute(format => $format);

DESCRIPTION

Top

This module is not intended to be used except by the programs latex2pdf, latex2ps and latex2dvi that are included in the LaTeX::Driver distribution. It implements the guts of those filter programs.

SUBROUTINES/METHODS

Top

execute(%params)

This is the only method. It implements the guts of the filter programs, gathering the parameters for the LaTeX::Driver object constructor from the command line options, along with the options passed from the calling script, which should be the format option. Having constructed a driver object it then runs the driver.

If the -tt2 option is specified then the source document is taken to be a Template Toolkit template and a Template object is constructed and the template processed through that before being fed to the LaTeX::Driver module for latex formatting. Template variables may defined with the -define option and these are passed to the Template Toolkit processing stage (they are ignored if the -tt2 option is not specified).

DIAGNOSTICS

Top

The module invokes the LaTeX::Driver module and optionally the Template module. Any errors from those modules are propogated outwards.

CONFIGURATION AND ENVIRONMENT

Top

The module invokes the latex family of programs via the LaTeX::Driver module. Those programs have their own set of environment variables and configuration files.

DEPENDENCIES

Top

The module requires that the Template Toolkit is installed for the -tt2 option.

INCOMPATIBILITIES

Top

None known.

BUGS AND LIMITATIONS

Top

None known.

AUTHOR

Top

Andrew Ford <a.ford@ford-mason.co.uk>

LICENSE AND COPYRIGHT

Top


LaTeX-Driver documentation Contained in the LaTeX-Driver distribution.

#============================================================= -*-perl-*-
#
# LaTeX::Driver::FilterProgram
#
# DESCRIPTION
#   Implements the guts of the latex2xxx filter programs
#
# AUTHOR
#   Andrew Ford    <a.ford@ford-mason.co.uk>
#
# COPYRIGHT
#   Copyright (C) 2007 Andrew Ford.  All Rights Reserved.
#
#   This module is free software; you can redistribute it and/or
#   modify it under the same terms as Perl itself.
#
# HISTORY
#
#   $Id: Paths.pm 45 2007-09-28 10:33:19Z andrew $
#========================================================================

package LaTeX::Driver::FilterProgram;

use strict;
use warnings;
use Carp;

use LaTeX::Driver;
use Getopt::Long;
use File::Slurp;

sub execute {
    my ($class, %options) = @_;
    my ($source, $output, $tt2mode, $debug, @vars, %var);

    GetOptions( 'output:s' => \$output,
		'tt2mode'  => \$tt2mode,
		'define:s' => \@vars,
		'debug'    => \$debug );

    if ( @ARGV ) {
	$source = shift @ARGV;
    }
    else {
	my $input = join '', <STDIN>;
	$source = \$input;
    }

    if ($tt2mode) {
	eval {
	    use Template;
	};
	if ($@) {
	    die "Cannot load the Template Toolkit - tt2 mode is unavailable\n";
	}
	if (!ref $source) {
	    ${$source} = read_file($source);
	}

	foreach (@vars) {
	    my ($name, $value) = split / \s* = \s* /mx;
	    printf(STDERR "defining %s as '%s'\n", $name, $value) if $debug;
	    $var{$name} = $value;
	}

	my $input;
	my $tt2  = Template->new({});
	$tt2->process($source, \%var, \$input)
	    or die $tt2->error(), "\n";

	$source = \$input;
    }

    if (!$output or $output eq '-') {
	my $tmp;
	$output = \$tmp;
    }
    eval {
	my $drv = LaTeX::Driver->new( source => $source,
				      output => $output,
				      format => $options{format} );
        $drv->run;
    };
    if (my $e = LaTeX::Driver::Exception->caught()) {
        $e->show_trace(1);
#        my $extra = sprintf("\nat %s line %d (%s)\n%s", $e->file, $e->line, $e->package, $e->trace);
        die $e; #sprintf("%s\n%s", "$e", $e->trace);
    }

    if (ref $output) {
        print ${$output};
    }

    return;
}


1;

__END__