ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/ermyth/doc/genhelp
Revision: 1.1
Committed: Sat Jul 21 01:25:40 2007 UTC (19 years, 2 months ago) by pippijn
Branch: MAIN
Log Message:
reworked documentation system

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