#! /usr/bin/perl
#
# build_html.pl - Command line utility for auto-building HTML-pages
# Copyright (C) 2003-2007 Tommi Saviranta
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Version: build_html.pl v0.3.0 9-Jun-2007 wnd@iki.fi
use strict;
use warnings FATAL => 'all';
my $basedir = ".";
my $file_header = "header.html";
my $file_footer = "footer.html";
# $basedir = $ENV{'basedir'};
my $xhtml = "/";
my $tmpl_header = &read_file($file_header);
my $tmpl_footer = &read_file($file_footer);
sub read_file($) {
my $r = "";
open(FILE, "< $_[0]") or die "$!: $_[0]";
while () {
$r .= $_;
}
close(FILE);
return $r;
}
sub replace_simple_single($$$) {
$_ = shift;
my ($key, $val) = @_;
$val = "" unless (defined($val));
s/-\??!?\Q$key\E-/$val/g;
return $_;
}
sub replace_simple($\%) {
$_ = shift;
my %keys = %{(shift)};
# replace declared tags and...
while (my ($key, $val) = each %keys) {
s/-\??\Q$key\E-/$val/g;
s/-\?!\Q$key\E-/$val/g;
}
# removed tags that may not be used on every page
s/-\?[A-Z]+-//g;
# remove lines with undefined such tags
my @t;
foreach my $line (split(/\n/, $_)) {
my $pass = 1;
foreach my $key ($line =~ /-\??!([A-Z]+)-/g) {
undef $pass unless (defined($keys{$key}));
}
$line =~ s/-\??![A-Z]+-.*// if (defined($pass));
push(@t, $line) if (defined($pass));
}
$_ = join("\n", @t);
return $_;
}
foreach my $file (@ARGV) {
my %keys;
my $t_tags;
my @file_path = split(/\//, $file);
my $file_in = $file_path[$#file_path];
$file_in = "_$file_in" unless ($file_in =~ /^_/);
my $file_out = $file_in;
$file_out =~ s/_(.*)/$1.html/;
pop(@file_path);
$file_in = join("/", @file_path) . "/$file_in";
$file_out = join("/", @file_path) . "/$file_out";
print "$file_in -> $file_out\n";
my $d_content = &read_file($file_in);
($t_tags, $d_content) = split(/\n\n/s, $d_content, 2);
my $d_header = $tmpl_header;
my $d_footer = $tmpl_footer;
# create root path
$keys{'ROOTPATH'} = $basedir . "/";
$keys{'ROOTPATH'} =~ s/\.\///g;
$keys{'ROOTPATH'} =~ s/^\///g;
$keys{'ROOTPATH'} = "../" . $keys{'ROOTPATH'} foreach (@file_path);
# print "root: " . $keys{'ROOTPATH'} . "\n";
# get modified -date
my @sb = stat($file_in) or die "$!: $file";
$keys{'EDITED'} = localtime($sb[10]);
# get user keys
foreach (split(/\n/, $t_tags)) {
my ($key, $val) = split(/\s*=\s*/, $_, 2);
$keys{$key} = $val;
}
# use TITLE as PAGETITLE if not set
$keys{'PAGETITLE'} = $keys{'TITLE'} if (defined($keys{'TITLE'})
&& ! defined($keys{'PAGETITLE'}));
# parse OPTPICTURE
if (defined($keys{'OPTPICTURE'})) {
my ($file, $width, $height, $alt) =
$keys{'OPTPICTURE'} =~ /(.*?) (\d+)[x*](\d+) (.*)/;
my $t = "
$file_out") or die "$!: $file_out";
print FILE "$d_header\n";
print FILE "$d_content\n";
print FILE "$d_footer\n";
close(FILE);
}