#!/usr/bin/env perl use strict; use warnings; use utf8; use constant rcsid => '$Id: genhelp,v 1.6 2007/09/16 18:54:41 pippijn Exp $'; BEGIN { unshift @INC, "lib"; } use Template; use YAML; use Pod::Man; use PodHTML; use PodHelp; use Pod::POM; my $parser = new Pod::POM; my @servicenames = qw/ChanServ GameServ Global MemoServ NickServ OperServ SaslServ UserServ/; # Static variables our $static = YAML::LoadFile("variables.yml"); my $toplevel = []; my $topleveltop = []; for (@servicenames) { push @$toplevel, { href => "../" . lc $_ . ".html", title => $_, }; push @$topleveltop, { href => lc $_ . ".html", title => $_, }; } mkdir "tthelp"; mkdir "ttsvs"; mkdir "man"; mkdir "html"; my @podfiles = ; for my $file (@podfiles) { my ($name) = $file =~ /podhelp\/(.+)\.pod$/; my $pom = $parser->parse ($file) or die $parser->error(); $PodHelp::subdir = $name; $PodHTML::subdir = $name; $PodHTML::dir = "tthelp"; mkdir "tthelp/$name"; $pom->present ("PodHelp"); $pom->present ("PodHTML"); $pom = $parser->parse ("podmisc/help.pod") or die $parser->error(); $pom->present ("PodHelp"); $pom->present ("PodHTML"); } @podfiles = ; for my $file (@podfiles) { my ($name) = $file =~ /podsvs\/(.+)\.pod$/; my $pom = $parser->parse ($file) or die $parser->error(); $PodHTML::dir = "ttsvs"; $PodHTML::subdir = undef; $pom->present ("PodHTML"); } my @services = ; my @files; my %done; for my $svs (@services) { push @files, <$svs/*>; $svs =~ s/tthelp\///; mkdir "html/$svs"; $done{$svs} = 0; } for my $file (@files) { my @contents = do { open my $fh, "<$file" or die "$file: $!\n"; <$fh> }; my $name = $file; $name =~ s/tthelp\/(\w+)\/\w+/$1/; $name =~ s/serv/Serv/; $name =~ s/\.tt$//; $name = ucfirst $name; my $subtitle = shift @contents; chomp $subtitle; my $tt = Template->new({ INCLUDE_PATH => 'lib:.', INTERPOLATE => 1, POST_CHOMP => 1, EVAL_PERL => 1, }) or die "$Template::ERROR\n"; my $vars = { file => sub { return do { local $/; open my $fh, "<$_[0]" or die "$_[0]: $!\n"; <$fh> } if $_[0]; } }; my $contents = "@contents"; my $data = ''; # Variable to store processed templates $tt->process(\$contents, $vars, \$data) or die $tt->error(); $data =~ s/&nick&/$name/g; # Generate sidemenu for (@$toplevel) { if ($_->{title} ne $name) { $_->{menu} = undef; next; } $_->{menu} = $PodHTML::menu->{$name}; } for (@$topleveltop) { if ($_->{title} ne $name) { $_->{menu} = undef; next; } $_->{menu} = $PodHTML::menu->{$name}; } $vars = $static; # Toplevel menu $vars->{menu} = [ { href => "../index.html", title => "Home", }, @$toplevel, ]; my $sidemenu = ''; $tt->process('sidemenu.tt', $vars, \$sidemenu) or die $tt->error(), "\n"; for (@$topleveltop) { next unless $_->{title} eq $name; for (@{ $_->{menu} }) { $_->{href} =~ s/^\.\.\///; } } # Toplevel menu for top site $vars->{menu} = [ { href => "index.html", title => "Home", }, @$topleveltop, ]; my $sidemenutop = ''; $tt->process('sidemenu.tt', $vars, \$sidemenutop) or die $tt->error(), "\n"; # Revert change of above for (@$topleveltop) { next unless $_->{title} eq $name; for (@{ $_->{menu} }) { $_->{href} =~ s/^/..\//; } } # Re-initialised with static variables from YAML $vars->{subtitle} = $subtitle; $vars->{contents} = $data; $vars->{sidemenu} = $sidemenu; my $output = ''; # Variable to store the complete page $tt->process('html.tt', $vars, \$output) or die $tt->error(), "\n"; # Save the page to a html file $file =~ s/tthelp\/(.+)\.tt/html\/$1.html/; open HTML, ">$file"; print HTML $output; close HTML; # Do this once per service unless ($done{$name}) { $data = ''; # Variable to store processed templates $tt->process("ttsvs/" . lc $name . ".tt", $vars, \$data) or die $tt->error(); $data =~ s/&nick&/$name/g; # Re-initialised with static variables from YAML $vars->{subtitle} = $subtitle; $vars->{contents} = $data; $vars->{sidemenu} = $sidemenutop; my $output = ''; # Variable to store the complete page $tt->process('html.tt', $vars, \$output) or die $tt->error(), "\n"; # Save the page to a html file open HTML, ">html/" . lc $name . ".html"; print HTML $output; close HTML; $done{$name} = 1; } } =head1 AUTHOR Copyright © 2007 Pippijn van Steenhoven =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the terms of the GNU General Public License as documented in COPYING. =cut