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

File Contents

# Content
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5 use utf8;
6
7 use constant rcsid => '$Id: genhelp,v 1.5 2007-08-28 17:08:06 pippijn Exp $';
8
9 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 use Pod::POM;
21 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 $pom = $parser->parse ("podmisc/help.pod")
58 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
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 it under the terms of the GNU General Public License as documented in COPYING.
212
213 =cut