package Page; use strict; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; my $line = undef; my $attr = undef; my $val = undef; my $nothing = undef; $self->{NAME} = undef; $self->{PATH} = undef; $self->{BASE_DIR} = undef; $self->{PAGE_TYPE} = undef; $self->{PARSE} = undef; $self->{CGI_HEADER} = undef; $self->{CGI_FOOTER} = undef; $self->{SUBTAGS} = []; $self->{SUBTAGGROUPS} = []; $self->{PAGEORDERS} = []; $self->{PRINTED} = 0; # Load page from stdin while(! ( ($line = ) =~ /}/)) { next if $line =~ /^\#/; # Skip comments next if $line eq "\n"; # Skip emptylines for ($line) { s/^\s+//; s/\s+$//; } ($attr,$val) = split /\s+/, $line, 2; for ($attr) { SWITCH: { /^name$/i && do { $self->{NAME} = $val; last SWITCH; }; /^path$/i && do { $self->{PATH} = $val; last SWITCH; }; /^base_dir$/i && do { $self->{BASE_DIR} = $val; last SWITCH; }; /^page_type$/i && do { $self->{PAGE_TYPE} = $val; last SWITCH; }; /^parse$/i && do { $self->{PARSE} = $val; last SWITCH; }; /^cgi_header$/i && do { $self->{CGI_HEADER} = $val; last SWITCH; }; /^cgi_footer$/i && do { $self->{CGI_FOOTER} = $val; last SWITCH; }; /^SubTag$/i && do { push @{$self->{SUBTAGS}}, $val; last SWITCH; }; /^subtaggroup$/i && do { push @{$self->{SUBTAGGROUPS}}, $val; last SWITCH; }; /^pageorder$/i && do { push @{$self->{PAGEORDERS}}, $val; last SWITCH; }; $nothing = 1; } } } bless ($self, $class); return $self; } sub print { my $self = shift; my $subtag; my $subtaggroup; my $pageorder; if($self->{PRINTED} == 0) { if($self->{PAGE_TYPE} ne "PAGEORDER") { print " DefaultPage {\n"; if(defined($self->{NAME})) { print " name $self->{NAME}\n"; } print " web_path $self->{PATH}\n"; print " source_dir $self->{BASE_DIR}\n"; print " output_dir ".($::website->output_dir)."\n"; if(defined($self->{PARSE})) { print " parse $self->{PARSE}\n"; } if(defined($self->{PAGE_TYPE})) { print " page_type $self->{PAGE_TYPE}\n"; } foreach $subtag (@{$self->{SUBTAGS}}) { print " SubTag $subtag\n"; } foreach $subtaggroup (@{$self->{SUBTAGGROUPS}}) { print " subtaggroup $subtaggroup\n"; } if(defined($::website->common_subtaggroup)) { print " subtaggroup ".($::website->common_subtaggroup)."\n"; } foreach $pageorder (@{$self->{PAGEORDERS}}) { print " pageorder $pageorder\n"; } if(defined($::website->common_pageorder)) { print " pageorder ".($::website->common_pageorder)."\n"; } if(defined($self->{CGI_HEADER})) { print " cgi_header $self->{CGI_HEADER}\n"; } if(defined($self->{CGI_FOOTER})) { print " cgi_footer $self->{CGI_FOOTER}\n"; } print " }\n"; } else { # First lets print out the pageorderpage's pageorders! foreach $pageorder (@{$self->{PAGEORDERS}}) { &findAndPrint($self,$pageorder); } print " PagePart {\n"; print " name $self->{NAME}\n"; print " filename $self->{PATH}\n"; print " directory $self->{BASE_DIR}\n"; if(defined($self->{PARSE})) { print " parse $self->{PARSE}\n"; } if(defined($self->{CGI_HEADER})) { print " # PageOrderPage's can't be CGI types.... print " # cgi_header $self->{CGI_HEADER}\n"; } if(defined($self->{CGI_FOOTER})) { print " # PageOrderPage's can't be CGI types.... print " # cgi_header $self->{CGI_FOOTER}\n"; } foreach $subtag (@{$self->{SUBTAGS}}) { print " SubTag $subtag\n"; } foreach $subtaggroup (@{$self->{SUBTAGGROUPS}}) { print " subtaggroup $subtaggroup\n"; } foreach $pageorder (@{$self->{PAGEORDERS}}) { print " pageorder $pageorder\n"; } print " }\n"; } $self->{PRINTED} = 1; } return; } sub findAndPrint { my $self = shift; my ($name) = @_; my $pageorder = undef; my $found = 0; $name =~ s/(=?\\)\"//g; foreach $pageorder (@::pageorders) { if($pageorder->name eq $name) { $found = 1; if($pageorder->printed == 0) { $pageorder->print(); } } } print "Could not find reference to `$name'...\n" if !$found; return; } sub name { my $self = shift; if (@_) { $self->{NAME} = shift } return $self->{NAME}; } sub path { my $self = shift; if (@_) { $self->{PATH} = shift } return $self->{PATH}; } sub base_dir { my $self = shift; if (@_) { $self->{BASE_DIR} = shift } return $self->{BASE_DIR}; } sub page_type { my $self = shift; if (@_) { $self->{PAGE_TYPE} = shift } return $self->{PAGE_TYPE}; } sub parse { my $self = shift; if (@_) { $self->{PARSE} = shift } return $self->{PARSE}; } sub cgi_header { my $self = shift; if (@_) { $self->{CGI_HEADER} = shift } return $self->{CGI_HEADER}; } sub cgi_footer { my $self = shift; if (@_) { $self->{CGI_FOOTER} = shift } return $self->{CGI_FOOTER}; } sub subtags { my $self = shift; if (@_) { @{ $self->{SUBTAGS} } = @_ } return @{ $self->{SUBTAGS} }; } sub subtaggroups { my $self = shift; if (@_) { @{ $self->{SUBTAGGROUPS} } = @_ } return @{ $self->{SUBTAGGROUPS} }; } sub pageorders { my $self = shift; if (@_) { @{ $self->{PAGEORDERS} } = @_ } return @{ $self->{PAGEORDERS} }; } sub printed { my $self = shift; if (@_) { $self->{PRINTED} = shift } return $self->{PRINTED}; } 1; # so the require or use succeeds