[Templates-cvs] cvs commit: Template2/bin tpage

cvs@template-toolkit.org cvs@template-toolkit.org
Fri, 17 Sep 2004 08:33:14 +0100


cvs         04/09/17 07:33:14

  Modified:    bin      tpage
  Log:
  * added full range of command line options
  
  Revision  Changes    Path
  2.64      +139 -20   Template2/bin/tpage
  
  Index: tpage
  ===================================================================
  RCS file: /template-toolkit/Template2/bin/tpage,v
  retrieving revision 2.63
  retrieving revision 2.64
  diff -u -r2.63 -r2.64
  --- tpage	2004/01/30 19:30:46	2.63
  +++ tpage	2004/09/17 07:33:14	2.64
  @@ -19,44 +19,163 @@
   #
   #------------------------------------------------------------------------
   #
  -# $Id: tpage,v 2.63 2004/01/30 19:30:46 abw Exp $
  +# $Id: tpage,v 2.64 2004/09/17 07:33:14 abw Exp $
   #
   #========================================================================
   
   use strict;
   use Template;
  +use AppConfig;
   
  -# look for -h or --help option, print usage and exit
  -if (grep /^--?h(elp)?/, @ARGV) {
  -    print "usage: tpage file [ file [...] ]\n";
  -    exit 0;
  +my $NAME     = "tpage";
  +my $VERSION  = sprintf("%d.%02d", q$Revision: 2.64 $ =~ /(\d+)\.(\d+)/);
  +my $HOME     = $ENV{ HOME } || '';
  +my $RCFILE   = $ENV{"\U${NAME}rc"} || "$HOME/.${NAME}rc";
  +my $TTMODULE = 'Template';
  +
  +# read .tpagerc file and any command line arguments
  +my $config   = read_config($RCFILE);
  +
  +# unshift any perl5lib directories onto front of INC
  +unshift(@INC, @{ $config->perl5lib });
  +
  +# get all template_* options from the config and fold keys to UPPER CASE
  +my %ttopts   = $config->varlist('^template_', 1);
  +my $ttmodule = delete($ttopts{ module });
  +my $ucttopts = {
  +    map { my $v = $ttopts{ $_ }; defined $v ? (uc $_, $v) : () }
  +    keys %ttopts,
  +};
  +
  +# load custom template module 
  +if ($ttmodule) {
  +    my $ttpkg = $ttmodule;
  +    $ttpkg =~ s[::][/]g;
  +    $ttpkg .= '.pm';
  +    require $ttpkg;
   }
  -my $vars = { };
  -my ($var, $val);
  -
  -while ($ARGV[0] && $ARGV[0] =~ /^--?d(efine)?/) {
  -    shift(@ARGV);
  -    die "--define expect a 'variable=value' argument\n" 
  -	unless defined ($var = shift(@ARGV));
  -    ($var, $val) = split(/\s*=\s*/, $var, 2);
  -    $vars->{ $var } = $val;
  +else {
  +    $ttmodule = $TTMODULE;
   }
   
  +# add current directory to INCLUDE_PATH
  +unshift(@{ $ucttopts->{ INCLUDE_PATH } }, '.');
  +
   # read from STDIN if no files specified
   push(@ARGV, '-') unless @ARGV;
   
  -# create a template processor 
  -my $template = Template->new({
  -    ABSOLUTE => 1,
  -    RELATIVE => 1,
  -});
  +my $template = $ttmodule->new($ucttopts)
  +    || die $ttmodule->error();
   
   # process each input file 
   foreach my $file (@ARGV) {
       $file = \*STDIN if $file eq '-';
  -    $template->process($file, $vars)
  +    $template->process($file)
   	|| die $template->error();
   }
  +
  +
  +sub read_config {
  +    my $file = shift;
  +
  +    my $config = AppConfig->new(
  +        { 
  +            ERROR  => sub { die(@_, "\ntry `$NAME --help'\n") }
  +        }, 
  +        'help|h'      => { ACTION => \&help },
  +        'template_absolute|absolute' => { DEFAULT => 1 },
  +        'template_relative|relative' => { DEFAULT => 1 },
  +        'template_module|module=s',
  +        'template_anycase|anycase',
  +        'template_eval_perl|eval_perl',
  +        'template_load_perl|load_perl',
  +        'template_interpolate|interpolate',
  +        'template_pre_chomp|pre_chomp|prechomp',
  +        'template_post_chomp|post_chomp|postchomp',
  +        'template_trim|trim',
  +        'template_variables|variables|define=s%',
  +        'template_include_path|include_path|include|I=s@',
  +        'template_pre_process|pre_process|preprocess=s@',
  +        'template_post_process|post_process|postprocess=s@',
  +        'template_process|process=s',
  +        'template_wrapper|wrapper=s',
  +        'template_recursion|recursion',
  +        'template_expose_blocks|expose_blocks',
  +        'template_default|default=s',
  +        'template_error|error=s',
  +        'template_debug|debug=s',
  +        'template_start_tag|start_tag|starttag=s',
  +        'template_end_tag|end_tag|endtag=s',
  +        'template_tag_style|tag_style|tagstyle=s',
  +        'template_compile_ext|compile_ext=s',
  +        'template_compile_dir|compile_dir=s',
  +        'template_plugin_base|plugin_base|pluginbase=s@',
  +        'perl5lib|perllib=s@'
  +    );
  +
  +    # add the 'file' option now that we have a $config object that we 
  +    # can reference in a closure
  +    $config->define(
  +        'file|f=s@' => { 
  +            EXPAND => AppConfig::EXPAND_ALL, 
  +            ACTION => sub { 
  +                my ($state, $item, $file) = @_;
  +                $file = $state->cfg . "/$file" 
  +                    unless $file =~ /^[\.\/]|(?:\w:)/;
  +                $config->file($file) }  
  +        }
  +    );
  +
  +    # process main config file, then command line args
  +    $config->file($file) if -f $file;
  +    $config->args();
  +    return $config;
  +}
  +
  +
  +sub help {
  +    print<<END_OF_HELP;
  +$NAME $VERSION (Template Toolkit version $Template::VERSION)
  +
  +usage: $NAME [options] [files]
  +
  +Options:
  +   --define var=value       Define template variable
  +   --interpolate            Interpolate '\$var' references in text
  +   --anycase                Accept directive keywords in any case.
  +   --pre_chomp              Chomp leading whitespace 
  +   --post_chomp             Chomp trailing whitespace
  +   --trim                   Trim blank lines around template blocks
  +   --eval_perl              Evaluate [% PERL %] ... [% END %] code blocks
  +   --load_perl              Load regular Perl modules via USE directive
  +   --absolute               Allow ABSOLUTE directories (enabled by default)
  +   --relative               Allow RELATIVE directories (enabled by default)
  +   --include_path=DIR       Add directory to INCLUDE_PATH 
  +   --pre_process=TEMPLATE   Process TEMPLATE before each main template
  +   --post_process=TEMPLATE  Process TEMPLATE after each main template
  +   --process=TEMPLATE       Process TEMPLATE instead of main template
  +   --wrapper=TEMPLATE       Process TEMPLATE wrapper around main template
  +   --default=TEMPLATE       Use TEMPLATE as default
  +   --error=TEMPLATE         Use TEMPLATE to handle errors
  +   --debug=STRING           Set TT DEBUG option to STRING
  +   --start_tag=STRING       STRING defines start of directive tag
  +   --end_tag=STRING         STRING defined end of directive tag
  +   --tag_style=STYLE        Use pre-defined tag STYLE    
  +   --plugin_base=PACKAGE    Base PACKAGE for plugins            
  +   --compile_ext=STRING     File extension for compiled template files
  +   --compile_dir=DIR        Directory for compiled template files
  +   --perl5lib=DIR           Specify additional Perl library directories
  +   --template_module=MODULE Specify alternate Template module
  +
  +See 'perldoc tpage' for further information.  
  +
  +END_OF_HELP
  +
  +    exit(0);
  +}
  +
  +
  +
   
   __END__