while (<$fh>) {
my $s = $_;
$s =~ s/\\\s*$//;
- $s =~ s/#.*$//;
+ #$s =~ s/#.*$//;
push @line, $s;
last unless (/\\\s*$/);
}
my @line = split("\n", $text);
$text = join('',
map {
- s/^\s*//;
- s/"//g;
+ s/^\s*"//;
+ s/"\s*$//;
s/%/%%/g;
s/\$/\\\$/g;
- eval qq[ sprintf(qq#$_#) ]
+ eval qq[ sprintf(qq{$_}) ]
} @line
);
return $text;
}
my $full = join("\n", @f1);
- # prepare notes if they exists
+ # prepare notes if they exist
my $notes = (defined $usage->{notes})
? "$usage->{notes}\n\n"
: "";
- # prepare example if one exists
+ # prepare examples if they exist
my $example = (defined $usage->{example})
- ? "Example:\n\n$usage->{example}\n\n"
+ ?
+ "Example:\n\n" .
+ join ("\n",
+ map { "\t$_" }
+ split("\n", $usage->{example})) . "\n\n"
: "";
return
- "=item I<$name>".
+ "=item B<$name>".
"\n\n" .
"$name $trivial".
"\n\n" .
# {
# trivial => "...",
# full => "...",
+# notes => "...",
# example => "...",
# }
my %docs;
=head1 SYNOPSIS
-autodocifier.pl usage.h > something
+autodocifier.pl [OPTION]... [FILE]...
+
+Example:
+
+ ( cat docs/busybox_header.pod; \
+ docs/autodocifier.pl usage.h; \
+ cat docs/busybox_footer.pod ) > docs/busybox.pod
=head1 DESCRIPTION
The purpose of this script is to automagically generate documentation
for busybox using its usage.h as the original source for content.
-Currently, the same content has to be duplicated in 3 places in
+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 is tedious, so Perl has come to the rescue.
+F<docs/busybox.sgml>. 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.
-This script was based on a script by Erik Andersen (andersen@lineo.com).
+F<autodocifier.pl> is one such script.
+It was based on a script by Erik Andersen <andersen@lineo.com>
+which was in turn based on a script by Mark Whitley <markw@lineo.com>
=head1 OPTIONS
=over 4
-=item --help
+=item B<--help>
This displays the help message.
-=item --pod
+=item B<--pod>
Generate POD (this is the default)
-=item --sgml
+=item B<--sgml>
Generate SGML
-=item --verbose
+=item B<--verbose>
Be verbose (not implemented)
=back
+=head1 FORMAT
+
+The following is an example of some data this script might parse.
+
+ #define length_trivial_usage \
+ "STRING"
+ #define length_full_usage \
+ "Prints out the length of the specified STRING."
+ #define length_example_usage \
+ "$ length Hello\n" \
+ "5\n"
+
+Each entry is a cpp macro that defines a string. The macros are
+named systematically in the form:
+
+ $name_$type_usage
+
+$name is the name of the applet. $type can be "trivial", "full", "notes",
+or "example". Every documentation macro must end with "_usage".
+
+The definition of the types is as follows:
+
+=over 4
+
+=item B<trivial>
+
+This should be a brief, one-line description of parameters that
+the command expects. This will be displayed when B<-h> is issued to
+a command. I<REQUIRED>
+
+=item B<full>
+
+This should contain descriptions of each option. This will also
+be displayed along with the trivial help if CONFIG_FEATURE_TRIVIAL_HELP
+is disabled. I<REQUIRED>
+
+=item B<notes>
+
+This is documentation that is intended to go in the POD or SGML, but
+not be printed when a B<-h> is given to a command. To see an example
+of notes being used, see init_notes_usage in F<usage.h>. I<OPTIONAL>
+
+=item B<example>
+
+This should be an example of how the command is actually used.
+This will not be printed when a B<-h> is given to a command -- it
+will only be included in the POD or SGML documentation. I<OPTIONAL>
+
+=back
+
=head1 FILES
F<usage.h>
=head1 AUTHOR
-John BEPPU <beppu@lineo.com>
+John BEPPU <b@ax9.org>
=cut
-# $Id: autodocifier.pl,v 1.15 2001/03/15 18:14:25 andersen Exp $
+# $Id: autodocifier.pl,v 1.23 2001/10/31 04:29:18 beppu Exp $