Apache-PSP
view release on metacpan or search on metacpan
lib/Template/PSP.pm view on Meta::CPAN
$parseflag = 1;
}
else
{
$handler = $Handler{$file};
}
}
else
{
$parseflag = 1;
$file = $ENV{SCRIPT_FILENAME};
}
if ($parseflag)
{
my $parser;
my $token;
# we need to create a temporary place
# to store the page as it is building it
$oldlineno = $lineno;
$oldfile = $parsefile;
$oldfrags = $frags;
$oldpage = $page;
$oldpkg = $package;
$frags = 0;
$lineno = 1;
$package = $pkg;
$page = \$pg;
$parsefile = $file;
my $eval = "package $pkg;\n" .
'*getpvar = \&Template::PSP::getpvar;' . "\n" .
'*setpvar = \&Template::PSP::setpvar;' . "\n" .
'*cleanup = \&Template::PSP::cleanup;' . "\n" .
'use CGI::Minimal;' . "\n" .
'use vars qw(%QUERY %CGI %FILENAMES %AUTH %COOKIE);' . "\n";
eval $eval;
append_page("package $pkg;\n");
append_page("no strict;\n");
append_page("sub {\n");
if ($topflag)
{
append_page('$Template::PSP::top_package = ' . $pkg . ";\n");
append_page('Template::PSP::set_hashes(*CGI, *COOKIE, *QUERY, *FILENAMES, *AUTH);' . "\n"); }
else
{
append_page(
'*QUERY = *{$Template::PSP::top_package . "::QUERY"};' . "\n" .
'*CGI = *{$Template::PSP::top_package . "::CGI"};' . "\n" .
'*FILENAMES = *{$Template::PSP::top_package . "::FILENAMES"};' . "\n" .
'*AUTH = *{$Template::PSP::top_package . "::AUTH"};' . "\n" .
'*COOKIE = *{$Template::PSP::top_package . "::COOKIE"};' . "\n");
}
$parser = HTML::Parser->new( api_version => 3,
start_h => [\&start, "tagname,attr,text"],
end_h => [\&end, "tagname,text"],
text_h => [\&text, "text,is_cdata"],
comment_h => [\&comment, "text"],
default_h => [\&default, "text"]
);
# send unbroken text instead of chunks to improve performance
# by reducing the number of function calls
$parser->unbroken_text(1);
$parser->xml_mode(1);
if (ref($data))
{
$parser->parse($$data) || croak "$! in pspload()";
}
else
{
$parser->parse_file($data) || croak "$! while loading file '$data'";
}
if ($topflag)
{
append_page('&Template::PSP::cleanup_handler(\@cleanup_handler);' . "\n");
append_page('select(STDOUT);' . "\n");
}
append_page("return 1;\n");
append_page("}\n");
$handler = eval $$page;
if ($@)
{
psperror($file);
}
if ($file)
{
$Handler{$file} = $handler;
}
no strict 'refs';
# restore globals
$lineno = $oldlineno;
$parsefile = $oldfile;
$frags = $oldfrags;
$page = $oldpage;
$package = $oldpkg;
}
# import export_tags from loaded page
if (defined($package))
{
if (!defined($pkg))
{
$pkg = valid_package_name($file);
}
no strict 'refs';
foreach my $tag (keys %{$pkg . "::export_tags"})
{
( run in 0.976 second using v1.01-cache-2.11-cpan-39bf76dae61 )