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 )