Basic POD to twiki converter
authorJamie Cameron <jcameron@webmin.com>
Wed, 25 Mar 2009 06:57:28 +0000 (06:57 +0000)
committerJamie Cameron <jcameron@webmin.com>
Wed, 25 Mar 2009 06:57:28 +0000 (06:57 +0000)
upload-pod-docs.pl [new file with mode: 0644]

diff --git a/upload-pod-docs.pl b/upload-pod-docs.pl
new file mode 100644 (file)
index 0000000..72c1d5d
--- /dev/null
@@ -0,0 +1,103 @@
+#!/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(<ORIGFILE>) {
+                       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 = <OUT>;
+       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";