ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/ermyth/doc/genhelp
Revision: 1.6
Committed: Sun Sep 16 18:54:41 2007 UTC (19 years ago) by pippijn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +2 -2 lines
Log Message:
#defines to enum

File Contents

# User Rev Content
1 pippijn 1.1 #!/usr/bin/env perl
2    
3     use strict;
4     use warnings;
5     use utf8;
6    
7 pippijn 1.6 use constant rcsid => '$Id: genhelp,v 1.5 2007-08-28 17:08:06 pippijn Exp $';
8 pippijn 1.2
9 pippijn 1.1 BEGIN {
10     unshift @INC, "lib";
11     }
12    
13     use Template;
14     use YAML;
15     use Pod::Man;
16    
17     use PodHTML;
18     use PodHelp;
19    
20 pippijn 1.3 use Pod::POM;
21 pippijn 1.1 my $parser = new Pod::POM;
22    
23     my @servicenames = qw/ChanServ GameServ Global MemoServ NickServ OperServ SaslServ UserServ/;
24    
25     # Static variables
26     our $static = YAML::LoadFile("variables.yml");
27     my $toplevel = [];
28     my $topleveltop = [];
29     for (@servicenames) {
30     push @$toplevel, {
31     href => "../" . lc $_ . ".html",
32     title => $_,
33     };
34     push @$topleveltop, {
35     href => lc $_ . ".html",
36     title => $_,
37     };
38     }
39    
40     mkdir "tthelp";
41     mkdir "ttsvs";
42     mkdir "man";
43     mkdir "html";
44    
45     my @podfiles = <podhelp/*.pod>;
46    
47     for my $file (@podfiles) {
48     my ($name) = $file =~ /podhelp\/(.+)\.pod$/;
49     my $pom = $parser->parse ($file)
50     or die $parser->error();
51     $PodHelp::subdir = $name;
52     $PodHTML::subdir = $name;
53     $PodHTML::dir = "tthelp";
54     mkdir "tthelp/$name";
55     $pom->present ("PodHelp");
56     $pom->present ("PodHTML");
57 pippijn 1.5 $pom = $parser->parse ("podmisc/help.pod")
58 pippijn 1.1 or die $parser->error();
59     $pom->present ("PodHelp");
60     $pom->present ("PodHTML");
61     }
62    
63     @podfiles = <podsvs/*.pod>;
64    
65     for my $file (@podfiles) {
66     my ($name) = $file =~ /podsvs\/(.+)\.pod$/;
67     my $pom = $parser->parse ($file)
68     or die $parser->error();
69     $PodHTML::dir = "ttsvs";
70     $PodHTML::subdir = undef;
71     $pom->present ("PodHTML");
72     }
73    
74     my @services = <tthelp/*>;
75     my @files;
76     my %done;
77     for my $svs (@services) {
78     push @files, <$svs/*>;
79     $svs =~ s/tthelp\///;
80     mkdir "html/$svs";
81     $done{$svs} = 0;
82     }
83    
84     for my $file (@files) {
85     my @contents = do { open my $fh, "<$file" or die "$file: $!\n"; <$fh> };
86     my $name = $file;
87     $name =~ s/tthelp\/(\w+)\/\w+/$1/;
88     $name =~ s/serv/Serv/;
89     $name =~ s/\.tt$//;
90     $name = ucfirst $name;
91     my $subtitle = shift @contents;
92     chomp $subtitle;
93    
94     my $tt = Template->new({
95     INCLUDE_PATH => 'lib:.',
96     INTERPOLATE => 1,
97     POST_CHOMP => 1,
98     EVAL_PERL => 1,
99     }) or die "$Template::ERROR\n";
100    
101     my $vars = { file => sub { return do { local $/; open my $fh, "<$_[0]" or die "$_[0]: $!\n"; <$fh> } if $_[0]; } };
102    
103     my $contents = "@contents";
104     my $data = ''; # Variable to store processed templates
105     $tt->process(\$contents, $vars, \$data)
106     or die $tt->error();
107     $data =~ s/&nick&/$name/g;
108    
109     # Generate sidemenu
110     for (@$toplevel) {
111     if ($_->{title} ne $name) {
112     $_->{menu} = undef;
113     next;
114     }
115     $_->{menu} = $PodHTML::menu->{$name};
116     }
117     for (@$topleveltop) {
118     if ($_->{title} ne $name) {
119     $_->{menu} = undef;
120     next;
121     }
122     $_->{menu} = $PodHTML::menu->{$name};
123     }
124     $vars = $static;
125     # Toplevel menu
126     $vars->{menu} = [
127     {
128     href => "../index.html",
129     title => "Home",
130     },
131     @$toplevel,
132     ];
133     my $sidemenu = '';
134     $tt->process('sidemenu.tt', $vars, \$sidemenu)
135     or die $tt->error(), "\n";
136    
137     for (@$topleveltop) {
138     next unless $_->{title} eq $name;
139     for (@{ $_->{menu} }) {
140     $_->{href} =~ s/^\.\.\///;
141     }
142     }
143    
144     # Toplevel menu for top site
145     $vars->{menu} = [
146     {
147     href => "index.html",
148     title => "Home",
149     },
150     @$topleveltop,
151     ];
152     my $sidemenutop = '';
153     $tt->process('sidemenu.tt', $vars, \$sidemenutop)
154     or die $tt->error(), "\n";
155    
156     # Revert change of above
157     for (@$topleveltop) {
158     next unless $_->{title} eq $name;
159     for (@{ $_->{menu} }) {
160     $_->{href} =~ s/^/..\//;
161     }
162     }
163    
164     # Re-initialised with static variables from YAML
165     $vars->{subtitle} = $subtitle;
166     $vars->{contents} = $data;
167     $vars->{sidemenu} = $sidemenu;
168    
169     my $output = ''; # Variable to store the complete page
170     $tt->process('html.tt', $vars, \$output)
171     or die $tt->error(), "\n";
172    
173     # Save the page to a html file
174     $file =~ s/tthelp\/(.+)\.tt/html\/$1.html/;
175     open HTML, ">$file";
176     print HTML $output;
177     close HTML;
178    
179     # Do this once per service
180     unless ($done{$name}) {
181     $data = ''; # Variable to store processed templates
182     $tt->process("ttsvs/" . lc $name . ".tt", $vars, \$data)
183     or die $tt->error();
184     $data =~ s/&nick&/$name/g;
185    
186     # Re-initialised with static variables from YAML
187     $vars->{subtitle} = $subtitle;
188     $vars->{contents} = $data;
189     $vars->{sidemenu} = $sidemenutop;
190    
191     my $output = ''; # Variable to store the complete page
192     $tt->process('html.tt', $vars, \$output)
193     or die $tt->error(), "\n";
194    
195     # Save the page to a html file
196     open HTML, ">html/" . lc $name . ".html";
197     print HTML $output;
198     close HTML;
199    
200     $done{$name} = 1;
201     }
202     }
203 pippijn 1.4
204     =head1 AUTHOR
205    
206     Copyright © 2007 Pippijn van Steenhoven
207    
208     =head1 LICENSE
209    
210     This library is free software, you can redistribute it and/or modify
211 pippijn 1.6 it under the terms of the GNU General Public License as documented in COPYING.
212 pippijn 1.4
213     =cut