I touched perl. I feel dirty.
[oweals/busybox.git] / docs / autodocifier.pl
index e1101d9d0e5632779427b8815b4a6b2655844ae4..c39260acbf3e2b5e43850bf870490f97b437b625 100755 (executable)
@@ -21,8 +21,8 @@ sub continuation {
 # regex && eval away unwanted strings from documentation
 sub beautify {
        my $text = shift;
-       $text =~ s/USAGE_NOT\w+\(.*?"\s*\)//sxg;
-       $text =~ s/USAGE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg;
+       $text =~ s/SKIP_\w+\(.*?"\s*\)//sxg;
+       $text =~ s/USE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg;
        $text =~ s/"\s*"//sg;
        my @line = split("\n", $text);
        $text = join('',
@@ -51,10 +51,14 @@ sub pod_for_usage {
 
        # make options bold
        my $trivial = $usage->{trivial};
-       $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg;
+       if (!defined $usage->{trivial}) {
+               $trivial = "";
+       } else {
+               $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg;
+       }
        my @f0 =
                map { $_ !~ /^\s/ && s/(?<!\w)(-\w+)/B<$1>/g; $_ }
-               split("\n", $usage->{full});
+               split("\n", (defined $usage->{full} ? $usage->{full} : ""));
 
        # add "\n" prior to certain lines to make indented
        # lines look right
@@ -83,28 +87,23 @@ sub pod_for_usage {
                        split("\n", $usage->{example})) . "\n\n"
                : "";
 
+       # Pad the name so that the applet name gets a line
+       # by itself in BusyBox.txt
+       my $spaces = 10 - length($name);
+       if ($spaces > 0) {
+               $name .= " " x $spaces;
+       }
+
        return
                "=item B<$name>".
                "\n\n$name $trivial\n\n".
                "$full\n\n"   .
                "$notes"  .
                "$example" .
-               "-------------------------------".
                "\n\n"
        ;
 }
 
-# FIXME | generate SGML for an applet
-sub sgml_for_usage {
-       my $name  = shift;
-       my $usage = shift;
-       return
-               "<fixme>\n".
-               "  $name\n".
-               "</fixme>\n"
-       ;
-}
-
 # the keys are applet names, and
 # the values will contain hashrefs of the form:
 #
@@ -124,7 +123,6 @@ my %opt;
 GetOptions(
        \%opt,
        "help|h",
-       "sgml|s",
        "pod|p",
        "verbose|v",
 );
@@ -133,7 +131,6 @@ if (defined $opt{help}) {
        print
                "$0 [OPTION]... [FILE]...\n",
                "\t--help\n",
-               "\t--sgml\n",
                "\t--pod\n",
                "\t--verbose\n",
        ;
@@ -163,11 +160,22 @@ foreach (@ARGV) {
 # generate structured documentation
 
 my $generator = \&pod_for_usage;
-if (defined $opt{sgml}) {
-       $generator = \&sgml_for_usage;
+
+my @names = sort keys %docs;
+my $line = "\t[, [[, ";
+for (my $i = 0; $i < $#names; $i++) {
+       if (length ($line.$names[$i]) >= 65) {
+               print "$line\n\t";
+               $line = "";
+       }
+       $line .= "$names[$i], ";
 }
+print $line . $names[-1];
 
-foreach my $applet (sort keys %docs) {
+print "\n\n=head1 COMMAND DESCRIPTIONS\n";
+print "\n=over 4\n\n";
+
+foreach my $applet (@names) {
        print $generator->($applet, $docs{$applet});
 }
 
@@ -191,18 +199,18 @@ Example:
 
 =head1 DESCRIPTION
 
-The purpose of this script is to automagically generate documentation
-for busybox using its usage.h as the original source for content.
-It used to be that same content has to be duplicated in 3 places in
-slightly different formats -- F<usage.h>, F<docs/busybox.pod>, and
-F<docs/busybox.sgml>.  This was tedious and error-prone, so it was
+The purpose of this script is to automagically generate
+documentation for busybox using its usage.h as the original source
+for content.  It used to be that same content has to be duplicated
+in 3 places in slightly different formats -- F<usage.h>,
+F<docs/busybox.pod>.  This was tedious and error-prone, so it was
 decided that F<usage.h> would contain all the text in a
 machine-readable form, and scripts could be used to transform this
 text into other forms if necessary.
 
-F<autodocifier.pl> is one such script.
-It was based on a script by Erik Andersen <andersen@codepoet.org>
-which was in turn based on a script by Mark Whitley <markw@codepoet.org>
+F<autodocifier.pl> is one such script.  It is based on a script by
+Erik Andersen <andersen@codepoet.org> which was in turn based on a
+script by Mark Whitley <markw@codepoet.org>
 
 =head1 OPTIONS
 
@@ -216,10 +224,6 @@ This displays the help message.
 
 Generate POD (this is the default)
 
-=item B<--sgml>
-
-Generate SGML
-
 =item B<--verbose>
 
 Be verbose (not implemented)
@@ -292,4 +296,4 @@ John BEPPU <b@ax9.org>
 
 =cut
 
-# $Id: autodocifier.pl,v 1.25 2004/03/13 08:32:14 andersen Exp $
+# $Id: autodocifier.pl,v 1.26 2004/04/06 15:26:25 andersen Exp $