#!/usr/local/bin/perl # Upload all Webmin API docs in TWiki format to doxfer.com use Pod::Simple::Wiki; $doxfer_host = "doxfer.com"; $doxfer_dir = "/home/doxfer/public_html/twiki/data/Webmin"; $temp_pod_dir = "/tmp/doxfer-wiki"; if ($0 =~ /^(.*\/)[^\/]+$/) { chdir($1); } chop($pwd = `pwd`); # Build list of modules @mods = ( [ "WebminCore", ".", [ "web-lib-funcs.pl", "web-lib.pl", "ui-lib.pl" ], "Core Webmin API" ] ); foreach my $mi (glob("*/module.info")) { my $mod; ($mod = $mi) =~ s/\/module.info//; next if (-l $mod); my $midata = `cat $mi`; my @modlibs; if ($midata =~ /library=(.*)/) { @modlibs = split(/\s+/, $1); } else { @modlibs = ( $mod."-lib.pl" ); } my $desc = $midata =~ /desc=(.*)/ ? $1 : $mod; $desc .= " module"; my @podlibs; foreach my $f (@modlibs) { if (-r "$mod/$f") { my $data = `cat $mod/$f`; if ($data =~ /=head1/) { push(@podlibs, $f); } } } if (@podlibs) { push(@mods, [ "Module $mod", $mod, \@podlibs, $desc ]); } } # For each, run Pod to Wiki conversion system("rm -rf $temp_pod_dir ; mkdir $temp_pod_dir"); foreach $m (@mods) { print STDERR "Doing module $m->[0]\n"; my $wikiname = $m->[1] eq "." ? "ApiWebminCore" : "Api".join("", map { ucfirst($_) } split(/\-/, $m->[1])); push(@$m, $wikiname); my $infile = "/tmp/pod2twiki.in"; open(INFILE, ">$infile"); foreach $f (@{$m->[2]}) { # Replace un-decorated =item with =item * # This is kosher according to the POD docs, but Pod2wiki doesn't # seem to like it print STDERR "Doing file $f\n"; open(ORIGFILE, "$m->[1]/$f"); while() { if (/^=item\s+([^\*].*)/) { print INFILE "=item * $1\n"; } else { print INFILE $_; } } close(ORIGFILE); } close(INFILE); # Do the conversion my $outfile = "$temp_pod_dir/$wikiname.txt"; open(OUTFILE, ">$outfile"); print OUTFILE "%TOC%\n\n"; if ($m->[1] eq ".") { print OUTFILE "---+ Core Webmin API\n\n"; } else { print OUTFILE "---+ Functions from module $m->[1]\n\n"; } open(INFILE, $infile); my $parser = Pod::Simple::Wiki->new('twiki'); $parser->output_fh(*OUTFILE); $parser->parse_file(*INFILE); close(INFILE); close(OUTFILE); # Remove errors block open(OUT, $outfile); my @lines = ; close(OUT); open(OUT, ">$outfile"); my $verbatim = 0; foreach my $l (@lines) { last if ($l =~ /POD\s+ERRORS/); if ($l =~ //) { $verbatim = 1; } elsif ($l =~ /<\/verbatim>/) { $verbatim = 0; } elsif (!$verbatim) { $l = &html_escape($l); } print OUT $l; } close(OUT); } # Create summary page open(SUMM, ">$temp_pod_dir/TheWebminAPI.txt"); print SUMM "---+ The Webmin API\n\n"; print SUMM <[4]][$m->[3]]]\n"; } close(SUMM); # Upload to doxfer print STDERR "Uploading to $doxfer_host\n"; system("scp $temp_pod_dir/*.txt doxfer\@$doxfer_host:/home/doxfer/public_html/twiki/data/Webmin/"); print STDERR "done\n"; sub html_escape { my ($tmp) = @_; $tmp =~ s/&/&/g; $tmp =~ s//>/g; $tmp =~ s/\"/"/g; $tmp =~ s/\'/'/g; $tmp =~ s/=/=/g; return $tmp; }