#!/usr/bin/perl =head1 NAME siteGenerator - HPR Site Generator =head1 SYNOPSIS siteGenerator [OPTION]... PAGE... -v, --verbose use verbose mode --help print this help message Where I is a file name of a web page or the special ALL (to generate all pages). Examples: Generate two specific pages: siteGenerator index about Generate the whole site: siteGenerator ALL =head1 DESCRIPTION This is a site generator based upon the Perl Templates Toolkit. =head1 AUTHOR Roan Horning =cut use strict; use warnings; use Getopt::Long qw(:config auto_help); use Pod::Usage; use Config::Std; use Template; exit main(); sub main { # Argument parsing my $verbose; GetOptions( 'verbose' => \$verbose, ) or pod2usage(1); pod2usage(1) unless @ARGV; my (@pages) = @ARGV; # Set flag indicating whether or not to generate all pages. # The flag is set to true if the special argument ALL is # passed into the generator my $ALL = grep { $_ eq 'ALL' } @pages; # Load config file read_config "site.cfg" => my %config; my $tt = get_template_html($config{DBI}); if ($ALL) { @pages = keys %config; # Remove non page sections of the configuration file # from the generated list of pages. @pages= grep { $_ ne 'DBI' } @pages; @pages= grep { $_ ne 'root_template' } @pages; }; foreach my $page (@pages) { if (exists($config{$page})) { verbose ($verbose, "Generating page: $page"); generate_page($tt, $config{root_template}{content}, $config{$page}{navigation}, $config{$page}{content}); } else { verbose (1, "\nWarning: Page $page is not defined in the configuration file."); } } verbose (1, "\nFinished processing the files."); return 0; } sub get_template_html (\%@) { # For an HTML based Template file, define the # template start and end tags to also function as # HTML comments to make the template file valid HTML. # return Template->new({ INCLUDE_PATH => './templates', EVAL_PERL => 1, START_TAG => '', CONSTANTS => { driver => $_[0]{driver}, user => $_[0]{user}, password => $_[0]{password}, } }) || die $Template::ERROR, "\n"; } sub generate_page { my ($tt, $page, $navigation, $content) = @_; my $tt_vars = { navigation => $navigation, content => $content }; $tt->process($page, $tt_vars) || die $tt->error(), "\n"; } sub verbose { my ($verbose, $message) = @_; if ($verbose) { print "$message\n"; } else { print "."; }; }