[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__