forked from rho_n/hpr_generator
		
	Process all files if the special ALL argument is passed in, or process the list of files passed in as arguments.
		
			
				
	
	
		
			128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 ".";
 | |
| 	};
 | |
| }
 |