forked from rho_n/hpr_generator
Allow defining of filename via configuration file
This commit is contained in:
parent
1ec288bbb8
commit
873cfda86a
@ -88,12 +88,12 @@ sub main {
|
|||||||
'verbose' => \$verbose,
|
'verbose' => \$verbose,
|
||||||
) or pod2usage(1);
|
) or pod2usage(1);
|
||||||
pod2usage(1) unless @ARGV;
|
pod2usage(1) unless @ARGV;
|
||||||
my (@pages) = @ARGV;
|
my (@page_args) = @ARGV;
|
||||||
|
|
||||||
# Set flag indicating whether or not to generate all pages.
|
# Set flag indicating whether or not to generate all pages.
|
||||||
# The flag is set to true if the special argument ALL is
|
# The flag is set to true if the special argument ALL is
|
||||||
# passed into the generator
|
# passed into the generator
|
||||||
my $ALL = grep { $_ eq 'ALL' } @pages;
|
my $ALL = grep { $_ eq 'ALL' } @page_args;
|
||||||
|
|
||||||
# Load config file
|
# Load config file
|
||||||
read_config "site.cfg" => my %config;
|
read_config "site.cfg" => my %config;
|
||||||
@ -101,28 +101,33 @@ sub main {
|
|||||||
my $tt = get_template_html($config{DBI});
|
my $tt = get_template_html($config{DBI});
|
||||||
|
|
||||||
if ($ALL) {
|
if ($ALL) {
|
||||||
@pages = keys %config;
|
@page_args = keys %config;
|
||||||
|
|
||||||
# Remove non page sections of the configuration file
|
# Remove non page sections of the configuration file
|
||||||
# from the generated list of pages.
|
# from the generated list of pages.
|
||||||
@pages= grep { $_ ne 'DBI' } @pages;
|
@page_args= grep { $_ ne 'DBI' } @pages_args;
|
||||||
@pages= grep { $_ ne 'root_template' } @pages;
|
@page_args= grep { $_ ne 'root_template' } @page_args;
|
||||||
};
|
};
|
||||||
foreach my $page (@pages) {
|
foreach my $page_arg (@page_args) {
|
||||||
my %pages = get_multiple_pages($page);
|
my %page_arg = parse_page_arg($page_arg);
|
||||||
if (exists($config{$pages{'page'}})) {
|
|
||||||
if ($config{$pages{'page'}}{'multipage'}) {
|
|
||||||
foreach my $id ($pages{'ids'}) {
|
|
||||||
|
|
||||||
|
if (exists($config{$page_arg{'page'}})) {
|
||||||
|
my $page_config = $config{$page_arg{'page'}};
|
||||||
|
$page_config->{'page'} = $page_arg{'page'};
|
||||||
|
|
||||||
|
if ($page_config->{'multipage'}) {
|
||||||
|
print "multipage\n";
|
||||||
|
foreach my $id ($page_config->{'ids'}) {
|
||||||
|
$page_config->{'id'} = $id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
verbose ($verbose, "Generating page: $pages{'page'}");
|
verbose ($verbose, "Generating page: $page_config->{'page'}");
|
||||||
generate_page($tt, $config{root_template}{content}, \%config, $pages{'page'}, $preview);
|
generate_page($tt, $config{root_template}{content}, \$page_config, $preview);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
verbose (1, "\nWarning: Page $pages{'page'} is not defined in the configuration file.");
|
verbose (1, "\nWarning: Page $page_arg{'page'} is not defined in the configuration file.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
verbose (1, "\nFinished processing the files.");
|
verbose (1, "\nFinished processing the files.");
|
||||||
@ -152,13 +157,13 @@ sub get_template_html (\%@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub generate_page {
|
sub generate_page {
|
||||||
my ($tt, $root_template, $config, $page, $preview) = @_;
|
my ($tt, $root_template, $config, $preview) = @_;
|
||||||
|
print Dumper($$config);
|
||||||
my $html;
|
my $html;
|
||||||
if (!$preview) {
|
if (!$preview) {
|
||||||
$html = "$page.html";
|
$html = get_filename($$config);
|
||||||
}
|
}
|
||||||
$tt->process($root_template, $config->{$page}, $html)
|
$tt->process($root_template, $$config, $html)
|
||||||
|| die $tt->error(), "\n";
|
|| die $tt->error(), "\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -173,10 +178,10 @@ sub verbose {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_multiple_pages {
|
sub parse_page_arg {
|
||||||
my ($pages) = @_;
|
my ($page_arg) = @_;
|
||||||
# Split page name from page ids if available.
|
# Split page name from page ids if available.
|
||||||
my ($page, $ids) = split(/=/, $pages);
|
my ($page, $ids) = split(/=/, $page_arg);
|
||||||
my @ids = [];
|
my @ids = [];
|
||||||
|
|
||||||
if(!$ids) {
|
if(!$ids) {
|
||||||
@ -201,3 +206,29 @@ sub get_multiple_pages {
|
|||||||
return ('page', $page, 'ids', @ids);
|
return ('page', $page, 'ids', @ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_filename {
|
||||||
|
my ($config) = @_;
|
||||||
|
my $filename = "output.html";
|
||||||
|
my $base_path = "";
|
||||||
|
|
||||||
|
if ($$config{'filename'}) {
|
||||||
|
if (substr($$config{'filename'}, -1) eq '/') {
|
||||||
|
$base_path = $$config{'filename'};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$filename = $$config{'filename'};
|
||||||
|
my $padded_index = sprintf("%04d", $$config{'id'});
|
||||||
|
$filename =~ s/\[id\]/$padded_index/;
|
||||||
|
return $filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Default naming if full filename configuration is not supplied.
|
||||||
|
if ($$config{'multipage'} && $$config{'multipage'} eq 'true') {
|
||||||
|
my $padded_index = sprintf("%04d", $$config{'id'});
|
||||||
|
$filename = "$base_path$$config{'page'}${padded_index}.html";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$filename = "$base_path$$config{'page'}.html";
|
||||||
|
}
|
||||||
|
return $filename;
|
||||||
|
}
|
||||||
|
15
site.cfg
15
site.cfg
@ -13,9 +13,17 @@ content: page.tpl.html
|
|||||||
|
|
||||||
# Configure the navigation menu and the content templates for each page
|
# Configure the navigation menu and the content templates for each page
|
||||||
# of the site:
|
# of the site:
|
||||||
# [page_name]
|
|
||||||
# navigation: <name of navigation template>
|
# Configure filename if default name is not desired
|
||||||
# content: <name of page content template>
|
# (Default is "ROOT/[page_name].html"):
|
||||||
|
#
|
||||||
|
# filename: OPTIONAL <relative path from ROOT -- optional>
|
||||||
|
# * <directory path> -- Must end in forward slash. File will be created
|
||||||
|
# in this path with the default naming scheme.
|
||||||
|
# * <file name> -- May include a relative path. Should include the file
|
||||||
|
# extension. May have [id] marker in path or name which
|
||||||
|
# will be substituted with a padded page id.
|
||||||
|
|
||||||
|
|
||||||
[index]
|
[index]
|
||||||
navigation: navigation-main.tpl.html
|
navigation: navigation-main.tpl.html
|
||||||
@ -28,6 +36,7 @@ content: content-about.tpl.html
|
|||||||
[correspondents]
|
[correspondents]
|
||||||
navigation: navigation-about.tpl.html
|
navigation: navigation-about.tpl.html
|
||||||
content: content-correspondents.tpl.html
|
content: content-correspondents.tpl.html
|
||||||
|
filename: correspondents/index.html
|
||||||
|
|
||||||
[contact]
|
[contact]
|
||||||
navigation: navigation-about.tpl.html
|
navigation: navigation-about.tpl.html
|
||||||
|
Loading…
Reference in New Issue
Block a user