Re: [Templates] tpage extension
[prev]
[thread]
[next]
[Date index for 2004/09/02]
--7JfCtLOvnd9MIVvH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Andy Wardley wrote:
> I can, but I'm just wondering why it doesn't re-use the code from
> ttree which does the same thing.
There's a new patch below which does the same thing re-using the ttree
code, or something similar. Like ttree, it supports an rcfile (~/.tpagerc),
the -f option to load other configuration files, -h for help, and of course
all the other relevant TT options.
Please eyeball it, check it, confirm it works as expected, and I'll commit
it to CVS. We're still short of the appropriate documentation patch, if
anyone feels so inclined....
And finally, thanks to Slaven for the original patch, and to Myk for the prod.
Cheers
A
--7JfCtLOvnd9MIVvH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="tpage.patch"
Index: tpage
===================================================================
RCS file: /template-toolkit/Template2/bin/tpage,v
retrieving revision 2.63
diff -u -u -r2.63 tpage
--- tpage 2004/01/30 19:30:46 2.63
+++ tpage 2004/09/02 07:34:46
@@ -25,38 +25,154 @@
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 $vars = { };
-my ($var, $val);
+my $NAME = "tpage";
+my $VERSION = sprintf("%d.%02d", q$Revision: 0.00 $ =~ /(\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 });
-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;
+# 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;
+}
+else {
+ $ttmodule = $TTMODULE;
}
# 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__
--7JfCtLOvnd9MIVvH--
_______________________________________________
templates mailing list
templates@xxxxxxxxxxxxxxxx.xxx
http://lists.template-toolkit.org/mailman/listinfo/templates