ASP4
view release on metacpan or search on metacpan
lib/ASP4/PageParser.pm view on Meta::CPAN
package
ASP4::PageParser;
use strict;
use warnings 'all';
use ASP4::ConfigLoader;
use ASP4::Page;
use ASP4::MasterPage;
sub new
{
my ($class, %args) = @_;
my $s = bless {
script_name => $args{script_name},
filename => undef,
package => undef,
compiled_as => undef,
base_class => undef,
source_code => \"",
}, $class;
$s->_init();
return $s;
}# end new()
sub source_code { shift->{source_code} }
sub _init
{
my $s = shift;
my $config = ASP4::ConfigLoader->load();
my $filename = $config->web->www_root . $s->{script_name};
(my $package = $s->{script_name}) =~ s/[^a-z0-9]/_/ig;
$package = $config->web->application_name . '::' . $package;
(my $compiled_as = "$package.pm") =~ s/::/\//g;
# What we know so far:
$s->{filename} = $filename;
$s->{package} = $package;
$s->{compiled_as} = $compiled_as;
$s->{saved_to} = $config->web->page_cache_root . "/$compiled_as";
}# end _init()
sub parse
{
my $s = shift;
# Open up the file:
open my $ifh, '<', $s->{filename}
or die "Cannot open '$s->{filename}' for reading: $!";
local $/;
$s->{source_code} = \scalar(<$ifh>);
my $directives = $s->_get_directives;
if( my $master_uri = $directives->{page}->{usemasterpage} )
{
$s->{masterpage} = ASP4::PageLoader->load( script_name => $master_uri );
$s->{base_class} = $s->{masterpage}->{package};
}
elsif( $directives->{masterpage} )
{
$s->{base_class} = 'ASP4::MasterPage';
}
else
{
$s->{base_class} = 'ASP4::Page';
}# end if()
$s->_parse_scriptlet_tags;
$s->_parse_include_tags;
( run in 0.778 second using v1.01-cache-2.11-cpan-39bf76dae61 )