#!/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" ] ] ); foreach my $mi (glob("*/module.info")) { # XXX add non-core modules 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 @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 ]); } } # 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 $parser = Pod::Simple::Wiki->new('twiki'); my $wikiname = $m->[1] eq "." ? "ApiWebminCore" : "Api".join("", map { ucfirst($_) } split(/\-/, $m->[1])); my $outfile = "$temp_pod_dir/$wikiname.txt"; open(OUTFILE, ">$outfile"); if ($m->[1] eq ".") { print OUTFILE "---+ Core Webmin API\n\n"; } else { print OUTFILE "---+ Functions from module $m->[1]\n\n"; } 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"; my $infile = "/tmp/pod2twiki.in"; open(INFILE, ">$infile"); open(ORIGFILE, "$m->[1]/$f"); while() { if (/^=item\s+([^\*].*)/) { print INFILE "=item * $1\n"; } else { print INFILE $_; } } close(ORIGFILE); close(INFILE); # Do the conversion open(INFILE, $infile); $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"); foreach my $l (@lines) { last if ($l =~ /POD\s+ERRORS/); print OUT $l; } close(OUT); } # 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";