5 # Add here the pages of the documentation generated by a @page doxygen macro
6 my @extra_files = qw(html/index.html html/faq.html html/history.html html/contrib.html html/people.html
7 html/publis.html html/publis__core.html html/publis__extern.html html/publis__intra.html
8 html/pages.html html/modules.html index.php
12 map {push @extra_files, "html/GRAS_tut_$_.html"} qw (intro
13 tour tour_install tour_setup tour_simpleexchange tour_args tour_callbacks tour_globals
14 tour_logs tour_timers tour_exceptions tour_rpc);
17 map {push @extra_files, "html/GRAS_ex_$_.html"} qw (ping mmrpc token timer);
20 $debug{'parse'} = 0; # show how we parse the module tree
21 $debug{'input'} = 0; # display the resulting tree
22 $debug{'handle'}= 0; # Be verbose on the post-processing
23 $debug{'rename'}= 0; # do not overwrite the files (allows several debuging runs without rerunning doxygen)
27 ### Get the module definitions
30 open IN, "html/modules.html" || die "Cannot parse html/modules.html. Did you really run doxygen?\n";
34 last if /group__SimGrid__API.html/;
42 # $current->{'label'}="ROOT";
43 # push @{$top->{'down'}},$current;
44 # print "Push $current '".($current->{'label'})."' as child of $top '".($top->{'label'})."'\n" if $debug{'parse'};
46 $top->{'label'}="ROOT";
47 print "Create ROOT $top\n" if $debug{'parse'};
51 # Read the whole data to postprocess it a bit
56 $in =~ s/<ul>/\n<ul>\n/sg;
57 foreach $_ (split(/\n/,$in)) {
58 next unless length($_);
59 next if ($_ =~ m|^</li>$|);
60 print " Seen '$_'\n" if $debug{'parse'};
62 print "DOWN: $current '$current->{'label'}' -> " if $debug{'parse'};
63 $current = $current->{'down'}[scalar @{$current->{'down'}} - 1];
64 print "$current '$current->{'label'}'\n" if $debug{'parse'};
68 $current = $current->{'up'};
69 print "UP to $current '$current->{'label'}'\n" if $debug{'parse'};
76 m|href="([^"]*)">([^<]*)</a>|; #"
79 $entry->{'file'} = $1;
80 $entry->{'label'} = $2;
81 $entry->{'up'} = $current;
82 push @{$current->{'down'}},$entry;
83 print "Push file:$1 label:'$2' as child of $current '$current->{'label'}'\n" if $debug{'parse'};
84 push @allfiles,"html/$1";
88 # Check each file for extra information (short name, extra childs)
92 if (defined($current->{'file'})) {
93 open IN, "html/$current->{'file'}";
95 if (/DOXYGEN_NAVBAR_LABEL/) {
96 if (/DOXYGEN_NAVBAR_LABEL="([^"]*)"/) {#"
97 print "Extra info from $current->{'file'}: label=$1, not $current->{'label'}\n" if $debug{'parse'};
98 $current->{'label'}=$1;
100 die "Malformated DOXYGEN_NAVBAR_LABEL line in $current->{'file'}";
103 if (/DOXYGEN_NAVBAR_CHILD/) {
104 if (/DOXYGEN_NAVBAR_CHILD *"([^"]*)"=([^ ]*)/) {#"
106 $entry->{'label'} = $1;
107 $entry->{'file'} = $2;
108 chomp($entry->{'file'});
109 $entry->{'up'} = $current;
110 push @{$current->{'down'}},$entry;
111 print "Extra info from $current->{'file'}: New child $entry->{'label'}=$entry->{'file'}\n" if $debug{'parse'};
113 die "Malformated DOXYGEN_NAVBAR_CHILD line in $current->{'file'}";
119 foreach my $entry (@{$current->{'down'}}) {
130 print "$current: ".$current->{'label'}." ($current->{'file'})\n";
131 foreach my $entry (@{$current->{'down'}}) {
132 display($entry,$level+1);
136 display($top,0) if $debug{'input'};
139 ### Generate the navbar
142 # the root deserves some special handling
143 open IN,"html/modules.html" || die;
144 open OUT,">html/modules.new.html" || die;
146 while ($line = <IN>) {
147 last if $line =~ /<h1>SimGrid Modules</;
151 print OUT "<div class=\"tabs\">\n <ul>\n";
152 foreach $current (@{ ${$top->{'down'}}[0]->{'down'} }) {
153 print OUT " <li><a href=\"$current->{'file'}\"><span>$current->{'label'}</span></a></li>\n";
155 print OUT " </ul></div>\n";
163 rename("html/modules.new.html","html/modules.html") unless $debug{'rename'};
165 # the publication pages deserves some special handling too
166 my %pub_tabs = ("publis.html" =>"Reference publications",
167 "publis__core.html" =>"Other publication about SimGrid",
168 "publis__extern.html"=>"External papers using SimGrid",
169 "publis__intra.html"=>"Internal papers using SimGrid");
171 my @pub_titles = ("publis.html", "publis__core.html", "publis__extern.html", "publis__intra.html");
174 my $newname = $oldname;
175 $newname =~ s/\.html$/.new.html/;
177 # print "Handle_pub($oldname -> $newname)\n";
179 open IN,"html/$oldname" || die "Cannot open $oldname";
180 open OUT,">html/$newname" || die "Cannot open $newname";
182 while ($line = <IN>) {
183 last if $line =~ /<h1>/;
187 print OUT "<div class=\"tabs\">\n <ul>\n";
188 foreach my $page (@pub_titles) {
189 print OUT " <li".($page eq $oldname? " class=\"current\"":"" )."> <a href=\"$page\"><span>".($pub_tabs{$page})."</span></a></li>\n";
192 print OUT " </ul></div>\n";
194 while ($line = <IN>) {
199 rename("html/$newname","html/$oldname") unless $debug{'rename'};
201 map {handle_pub($_)} @pub_titles;
204 # Operate the recursion
209 print "Handle $current->{'file'} at level $level\n" if $debug{'handle'};
211 # we generate the tabs bottom up begining from where we are in the tree
212 # and display them top down, as it should in a file
215 if (defined ($current->{'label'}) and $current->{'label'} ne 'ROOT') {
216 # print "handle $current->{'file'}, at level $level\n";
218 my $iterator = $current;
220 while ($lvl_it >= 0) {
221 my $father = $iterator->{'up'};
222 $tabs[$lvl_it] = "<div class=\"tabs\">\n <ul>\n";
223 foreach my $bro (@{$father->{'down'}}) {
224 $tabs[$lvl_it] .= " <li".($bro==$iterator?" class=\"current\"":"")."> <a href=\"$bro->{'file'}\"><span>$bro->{'label'}</span></a></li>\n";
226 $tabs[$lvl_it] .= " </ul></div>\n";
230 if (defined $current->{'down'}) { # there's some kid. Display them too
231 $tabs[$level+1] = "<div class=\"tabs\">\n <ul>\n";
232 foreach my $kid (@{$current->{'down'}}) {
233 $tabs[$level+1] .= " <li> <a href=\"$kid->{'file'}\"><span>$kid->{'label'}</span></a></li>\n";
235 $tabs[$level+1] .= " </ul></div>\n";
239 open FROM,"html/$current->{'file'}" || die;
240 my $newname="html/$current->{'file'}";
241 $newname =~ s/.html/.handlepage.html/;
242 open TO,">$newname" || die;
243 # print "XXX Deal with html/$current->{'file'} -> $newname\n";
246 # add "current" to the module API granfather page
247 s|<li><a href="modules.html"><span>[^<]*</span></a></li>|<li class="current"><a href="modules.html"><span>Modules API</span></a></li>|;
248 # print "++Write $_";
253 print TO "\n<!-- POST-PROCESSED TABS -->\n";
258 print TO "\n<!-- END OF POST-PROCESSED TABS -->\n";
260 if ($current->{'file'} =~ m/^class/) {
267 if (m/POST-PROCESSED TABS/) {
269 last if (m/END OF POST-PROCESSED TABS/);
274 if (m/The documentation for/) {
283 rename("$newname","html/$current->{'file'}") unless $debug{'rename'};
287 foreach my $entry (@{$current->{'down'}}) {
288 handle_page($entry,$level+1);
293 ### Launch the modules navbar reworking
295 handle_page($top,-2);# skip roots (we have 2 roots) in level counting
299 ### Post-processsing common to all pages
301 map {push @allfiles,$_} @extra_files;
302 print "All files: ".(join(", ",@allfiles))."\n" if $debug{'parse'};
304 foreach my $file (@allfiles) {
305 $file =~ s/.html/.handlepage.html/ if $debug{'rename'}; # Take right name if debugging
307 open FROM,"$file" || die;
308 my $outfile = "$file";
309 $outfile =~ s/.(html|php)$/.new.$1/;
310 open TO,">$outfile" || die;
311 # print "POSTPROCESSING $file (tmp=$outfile)\n";
313 # Add the simgrid css, just in case
314 print TO '<link href="simgrid.css" rel="stylesheet" type="text/css">'."\n"
318 if (m,<li><a href="(doc/)?index.html"><span>Main\ Page</span></a></li>,) {
319 print TO ' <li'.($file =~ m,(doc/)?index.html, ? " class='current'" :"").'><a href="'.$1.'index.html"><span>Overview</span></a></li>'."\n";
320 print TO ' <li'.($file =~ m,(doc/)?faq.html, ? " class='current'" :"").'><a href="'.$1.'faq.html"><span>FAQ</span></a></li>'."\n";
323 if (m,<li><a href="(doc/)?annotated.html"><span>Data\ Structures</span></a></li>,) {
324 print TO ' <li'.($file =~ m,(doc/)?publis(_[^.]*)?.html, ? " class='current'" :"").'><a href="'.$1.'publis.html"><span>Publications</span></a></li>'."\n";
325 print TO ' <li'.($file =~ m,(doc/)?people.html, ? " class='current'" :"").'><a href="'.$1.'people.html"><span>People</span></a></li>'."\n";
326 print TO ' <li'.($file =~ m,(doc/)?history.html, ? " class='current'" :"").'><a href="'.$1.'history.html"><span>History</span></a></li>'."\n";
327 print TO ' <li'.($file =~ m,(doc/)?contrib.html, ? " class='current'" :"").'><a href="'.$1.'contrib.html"><span>Contrib</span></a></li>'."\n";
330 s|<span>Modules</span>|<span>Modules API</span>|g;
331 s|<span>Related Pages</span>|<span>Site Plan</span>|g;
337 rename("$outfile", "$file") unless $debug{'rename'};