#! /usr/bin/perl -w #================================================================ # mypldoc # Document generator for Perl sources #================================================================ use strict; use warnings; # main routine sub main { my($i, $err, $destdir, $ptitle, $afile, @files, $file); $err = 0; $ptitle = "Perl API"; for($i = 0; $i < scalar(@ARGV); $i++){ if($ARGV[$i] =~ m/^-d/){ $destdir = $ARGV[++$i]; } elsif($ARGV[$i] =~ m/^-t/){ $ptitle = $ARGV[++$i]; } elsif($ARGV[$i] =~ m/^-a/){ $afile = $ARGV[++$i]; } else { push(@files, $ARGV[$i]); } } (scalar(@files) > 0) || usage(); (defined($destdir)) || ($destdir = "."); (-d $destdir) || (mkdir($destdir)) || die "$1: $!\n"; foreach $file (@files){ (makedoc($destdir, $ptitle, $file)) || ($err = 1); } (makeindex($destdir, $ptitle, $afile, \@files)) || ($err = 1); return $err ? 1 : 0; } # print the usage and exit sub usage { printf(STDERR "$0: usage: $0 [-d dir] [-t str] [-a file] file ...\n"); exit(1); } # generate a document sub makedoc { my($destdir) = shift; my($ptitle) = shift; my($source) = shift; my($dest, $in, $out, $line, @group, $kbd, $i); if(!(-r $source)){ printf(STDERR "$0: $source: no such file\n"); return 0; } if(!open(IN, $source)){ printf(STDERR "$0: $source: cannot open\n"); return 0; } $in = *IN; $source =~ s/.*\///; $dest = ">$destdir/$source.html"; if(!open(OUT, $dest)){ printf(STDERR "$0: $dest: cannot open\n"); return 0; } $out = *OUT; writehead($out, $ptitle, $source); while(defined($line = <$in>)){ chomp($line); if($line =~ m/^\x23\x23/){ @group = (); while(defined($line = <$in>)){ chomp($line); ($line =~ m/^\x23/) || last; (length($line) > 1) || next; push(@group, $line); } if(scalar(@group) > 0){ printf($out "
\n"); $kbd = $group[0] =~ m/^\x23:/; for($i = 0; $i < scalar(@group); $i++){ $group[$i] =~ s/^\x23[ :]*//; $group[$i] =~ s/&/&/; $group[$i] =~ s//>/; $group[$i] =~ s/\x22/"/; } if($kbd){ printf($out "
%s
\n", $group[0]); } else { printf($out "
%s
\n", $group[0]); } if(scalar(@group) > 1){ printf($out "
\n"); for($i = 1; $i < scalar(@group); $i++){ printf($out "%s\n", $group[$i]); } printf($out "
\n"); } printf($out "
\n"); } } } printf($out "
\n"); writetail($out); close($out); close($in); return 1; } # generate the index file sub makeindex { my($destdir) = shift; my($ptitle) = shift; my($afile) = shift; my($filesref) = shift; my($line, @files, $dest, $in, $out, $file, $name); @files = @$filesref; $dest = ">$destdir/index.html"; if(!open(OUT, $dest)){ printf(STDERR "$0: $dest: cannot open\n"); return 0; } $out = *OUT; writehead($out, $ptitle); if(defined($afile)){ if(open(IN, $afile)){ while(defined($line = )){ chomp($line); printf(OUT "%s\n", $line); } close(IN); } else { printf(STDERR "$0: $afile: cannot open\n"); } printf($out "
\n"); } printf($out "

API

\n"); printf($out "\n"); printf($out "
\n"); writetail($out); close($out); return 1; } # write header sub writehead { my($out) = shift; my($ptitle) = shift; my($name) = shift; my($title, $head, $navi); if(defined($name)){ $name =~ s/\..*//; $title = "$name ($ptitle)"; $head = "API of $name"; $navi = "
[Back]
"; } else { $title = "INDEX ($ptitle)"; $head = "$ptitle"; $navi = "
Perl Source Documents
"; } print $out <<__MYEOF $title $navi

$head


__MYEOF } # write tail sub writetail { my($out) = shift; my($sec,$min,$hour,$mday,$mon,$year) = localtime(); my($datestr) = sprintf("%04d/%02d/%02d", $year + 1900, $mon + 1, $mday); print $out <<__MYEOF
Generated by $0, $datestr.
__MYEOF } # execute main $0 =~ s/.*\///; exit(main()); # END OF FILE