package Website; 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->{MAINTAINER} = undef; $self->{URL} = undef; $self->{OUTPUT_DIR} = undef; $self->{DATABASE_FILENAME} = undef; $self->{COMMON_SUBTAGGROUP} = undef; $self->{COMMON_PAGEORDER} = undef; $self->{LASTMOD_TAGNAME} = undef; $self->{INCLUDE_TAGNAME} = undef; $self->{WSMAKE_VERSION_TAGNAME} = undef; $self->{PATH_TAGNAME} = undef; $self->{SOURCE_TAGNAME} = undef; $self->{OUTPUT_TAGNAME} = undef; $self->{HEADER_TAGNAME} = undef; $self->{FOOTER_TAGNAME} = undef; # 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; }; /^maintainer$/i && do { $self->{MAINTAINER} = $val; last SWITCH; }; /^url$/i && do { $self->{URL} = $val; last SWITCH; }; /^output_dir$/i && do { $self->{OUTPUT_DIR} = $val; last SWITCH; }; /^database_filename$/i && do { $self->{DATABASE_FILENAME} = $val; last SWITCH; }; /^common_subtaggroup$/i && do { $self->{COMMON_SUBTAGGROUP} = $val; last SWITCH; }; /^common_pageorder$/i && do { $self->{COMMON_PAGEORDER} = $val; last SWITCH; }; /^lastmod_tagname$/i && do { $self->{LASTMOD_TAGNAME} = $val; last SWITCH; }; /^include_tagname$/i && do { $self->{INCLUDE_TAGNAME} = $val; last SWITCH; }; /^wsmake_version_tagname$/i && do { $self->{WSMAKE_VERSION_TAGNAME} = $val; last SWITCH; }; /^path_tagname$/i && do { $self->{PATH_TAGNAME} = $val; last SWITCH; }; /^source_tagname$/i && do { $self->{SOURCE_TAGNAME} = $val; last SWITCH; }; /^output_tagname$/i && do { $self->{OUTPUT_TAGNAME} = $val; last SWITCH; }; /^header_tagname$/i && do { $self->{HEADER_TAGNAME} = $val; last SWITCH; }; /^footer_tagname$/i && do { $self->{FOOTER_TAGNAME} = $val; last SWITCH; }; $nothing = 1; } } } bless ($self, $class); return $self; } sub print { my $self = shift; my $page = undef; my $subtaggroup = undef; my $pageorder = undef; print "Website {\n"; if(defined($self->{NAME})) { print " name $self->{NAME}\n"; print " maintainer $self->{MAINTAINER}\n"; print " url $self->{URL}\n"; } print "\n DefaultSetup {\n"; print " lastmod_tagname $self->{LASTMOD_TAGNAME}\n"; print " wsmake_version_tagname $self->{WSMAKE_VERSION_TAGNAME}\n"; print " web_path_tagname $self->{PATH_TAGNAME}\n"; print " source_tagname $self->{SOURCE_TAGNAME}\n"; print " output_tagname $self->{OUTPUT_TAGNAME}\n"; if(defined($self->{HEADER_TAGNAME})) { print " header_tagname $self->{HEADER_TAGNAME}\n"; } if(defined($self->{FOOTER_TAGNAME})) { print " footer_tagname $self->{FOOTER_TAGNAME}\n"; } print " include_tagname $self->{INCLUDE_TAGNAME}\n"; print " database_filename $self->{DATABASE_FILENAME}\n"; print "\n"; foreach $subtaggroup (@::subtaggroups) { $subtaggroup->print(); } # Pageorders will handle printing of pageorderpages foreach $pageorder (@::pageorders) { $pageorder->print(); print "\n"; } print " }\n\n"; foreach $page (@::pages) { if($page->page_type ne "PAGEORDER") { $page->print(); print "\n"; } } print "}\n\n"; return; } sub name { my $self = shift; if (@_) { $self->{NAME} = shift } return $self->{NAME}; } sub maintainer { my $self = shift; if (@_) { $self->{MAINTAINER} = shift } return $self->{MAINTAINER}; } sub url { my $self = shift; if (@_) { $self->{URL} = shift } return $self->{URL}; } sub output_dir { my $self = shift; if (@_) { $self->{OUTPUT_DIR} = shift } return $self->{OUTPUT_DIR}; } sub database_filename { my $self = shift; if (@_) { $self->{DATABASE_FILENAME} = shift } return $self->{DATABASE_FILENAME}; } sub common_subtaggroup { my $self = shift; if (@_) { $self->{COMMON_SUBTAGGROUP} = shift } return $self->{COMMON_SUBTAGGROUP}; } sub common_pageorder { my $self = shift; if (@_) { $self->{COMMON_PAGEORDER} = shift } return $self->{COMMON_PAGEORDER}; } sub lastmod_tagname { my $self = shift; if (@_) { $self->{LASTMOD_TAGNAME} = shift } return $self->{LASTMOD_TAGNAME}; } sub include_tagname { my $self = shift; if (@_) { $self->{INCLUDE_TAGNAME} = shift } return $self->{INCLUDE_TAGNAME}; } sub wsmake_version_tagname { my $self = shift; if (@_) { $self->{WSMAKE_VERSION_TAGNAME} = shift } return $self->{WSMAKE_VERSION_TAGNAME}; } sub path_tagname { my $self = shift; if (@_) { $self->{PATH_TAGNAME} = shift } return $self->{PATH_TAGNAME}; } sub source_tagname { my $self = shift; if (@_) { $self->{SOURCE_TAGNAME} = shift } return $self->{SOURCE_TAGNAME}; } sub output_tagname { my $self = shift; if (@_) { $self->{OUTPUT_TAGNAME} = shift } return $self->{OUTPUT_TAGNAME}; } sub header_tagname { my $self = shift; if (@_) { $self->{HEADER_TAGNAME} = shift } return $self->{HEADER_TAGNAME}; } sub footer_tagname { my $self = shift; if (@_) { $self->{FOOTER_TAGNAME} = shift } return $self->{FOOTER_TAGNAME}; } 1; # so the require or use succeeds