#!/usr/bin/perl -w
my
$NAME
=
"tpage"
;
my
$VERSION
= 2.70;
my
$HOME
=
$ENV
{ HOME } ||
''
;
my
$RCFILE
=
$ENV
{
"\U${NAME}rc"
} ||
"$HOME/.${NAME}rc"
;
my
$TTMODULE
=
'Template'
;
my
$config
= read_config(
$RCFILE
);
unshift
(
@INC
, @{
$config
->perl5lib });
my
%ttdirectiveopts
=
$config
->varlist(
'^template_directive_'
, 1);
my
%ttopts
=
$config
->varlist(
'^template_(?!directive_)'
, 1);
my
$ttmodule
=
delete
(
$ttopts
{ module });
my
$ttenvvars
=
delete
(
$ttopts
{ envvars });
my
$ucttopts
= {
map
{
my
$v
=
$ttopts
{
$_
};
defined
$v
? (
uc
$_
,
$v
) : () }
keys
%ttopts
,
};
if
(
$ttmodule
) {
my
$ttpkg
=
$ttmodule
;
$ttpkg
=~ s[::][/]g;
$ttpkg
.=
'.pm'
;
require
$ttpkg
;
}
else
{
$ttmodule
=
$TTMODULE
;
}
map
{
my
$v
=
$ttdirectiveopts
{
$_
};
if
(
defined
$v
) {
${
$Template::Directive::
{
uc
$_
} } =
$ttdirectiveopts
{
$_
}
}
}
keys
%ttdirectiveopts
;
unshift
(@{
$ucttopts
->{ INCLUDE_PATH } },
'.'
);
push
(
@ARGV
,
'-'
)
unless
@ARGV
;
my
$template
=
$ttmodule
->new(
$ucttopts
)
||
die
$ttmodule
->error();
my
%ttvars
= ();
if
(
$ttenvvars
) {
$ttvars
{
'env'
} = \
%ENV
;
}
foreach
my
$file
(
@ARGV
) {
$file
= \
*STDIN
if
$file
eq
'-'
;
$template
->process(
$file
,\
%ttvars
)
||
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@'
,
'template_envvars|envvars'
,
'template_directive_debug'
,
'template_directive_pretty'
,
'template_directive_while_max|while_max=i'
);
$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
) }
}
);
$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
--while_max=INTEGER Change '\$Template::Directive::WHILE_MAX' default
--envvars Set the 'env' variable to the environment (%ENV)
See 'perldoc tpage' for further information.
END_OF_HELP
exit
(0);
}