hpr_generator/site-generator

128 lines
2.5 KiB
Plaintext
Raw Normal View History

#!/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<PAGE> 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 <roan.horning@no-spam.gmail.com>
=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 => '<!--%',
END_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 ".";
};
}