X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=docs%2Fautodocifier.pl;h=c39260acbf3e2b5e43850bf870490f97b437b625;hb=277eb6bb444dd0f348079d7d37487f224c9abe39;hp=7c3aa50bc94c10a28f65a42a5d637e44fe11581f;hpb=af9e533a5419084ec9260c3c55cd2799122cc7e1;p=oweals%2Fbusybox.git diff --git a/docs/autodocifier.pl b/docs/autodocifier.pl index 7c3aa50bc..c39260acb 100755 --- a/docs/autodocifier.pl +++ b/docs/autodocifier.pl @@ -3,7 +3,7 @@ use strict; use Getopt::Long; -# collect lines continued with a '\' into an array +# collect lines continued with a '\' into an array sub continuation { my $fh = shift; my @line; @@ -11,7 +11,7 @@ sub continuation { while (<$fh>) { my $s = $_; $s =~ s/\\\s*$//; - $s =~ s/#.*$//; + #$s =~ s/#.*$//; push @line, $s; last unless (/\\\s*$/); } @@ -21,17 +21,17 @@ 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('', - map { - s/^\s*//; - s/"//g; + map { + s/^\s*"//; + s/"\s*$//; s/%/%%/g; s/\$/\\\$/g; - eval qq[ sprintf(qq#$_#) ] + eval qq[ sprintf(qq{$_}) ] } @line ); return $text; @@ -42,12 +42,23 @@ sub pod_for_usage { my $name = shift; my $usage = shift; + # Sigh. Fixup the known odd-name applets. + $name =~ s/dpkg_deb/dpkg-deb/g; + $name =~ s/fsck_minix/fsck.minix/g; + $name =~ s/mkfs_minix/mkfs.minix/g; + $name =~ s/run_parts/run-parts/g; + $name =~ s/start_stop_daemon/start-stop-daemon/g; + # make options bold my $trivial = $usage->{trivial}; - $trivial =~ s/(?/sxg; - my @f0 = + if (!defined $usage->{trivial}) { + $trivial = ""; + } else { + $trivial =~ s/(?/sxg; + } + my @f0 = map { $_ !~ /^\s/ && s/(?/g; $_ } - split("\n", $usage->{full}); + split("\n", (defined $usage->{full} ? $usage->{full} : "")); # add "\n" prior to certain lines to make indented # lines look right @@ -62,52 +73,44 @@ sub pod_for_usage { } 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}) - ? $usage->{example} + ? + "Example:\n\n" . + join ("\n", + map { "\t$_" } + split("\n", $usage->{example})) . "\n\n" : ""; - $example = - "Example:\n\n" . - join ("\n", - map { " $_" } - split("\n", $example)) . "\n\n"; - return - "=item I<$name>". - "\n\n" . - "$name $trivial". - "\n\n" . - $full . - "\n\n" . - $notes . - $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; + } -# FIXME | generate SGML for an applet -sub sgml_for_usage { - my $name = shift; - my $usage = shift; return - "\n". - " $name\n". - "\n" + "=item B<$name>". + "\n\n$name $trivial\n\n". + "$full\n\n" . + "$notes" . + "$example" . + "\n\n" ; } -# the keys are applet names, and +# the keys are applet names, and # the values will contain hashrefs of the form: # # { # trivial => "...", # full => "...", +# notes => "...", # example => "...", # } my %docs; @@ -120,7 +123,6 @@ my %opt; GetOptions( \%opt, "help|h", - "sgml|s", "pod|p", "verbose|v", ); @@ -129,7 +131,6 @@ if (defined $opt{help}) { print "$0 [OPTION]... [FILE]...\n", "\t--help\n", - "\t--sgml\n", "\t--pod\n", "\t--verbose\n", ; @@ -159,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]; + +print "\n\n=head1 COMMAND DESCRIPTIONS\n"; +print "\n=over 4\n\n"; -foreach my $applet (sort keys %docs) { +foreach my $applet (@names) { print $generator->($applet, $docs{$applet}); } @@ -177,37 +189,94 @@ autodocifier.pl - generate docs for busybox based on usage.h =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 -slightly different formats -- F, F, and -F. This is tedious, so Perl has come to the rescue. +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, +F. This was tedious and error-prone, so it was +decided that F 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 is one such script. It is based on a script by +Erik Andersen which was in turn based on a +script by Mark Whitley =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<--verbose> + +Be verbose (not implemented) + +=back -Generate SGML +=head1 FORMAT -=item --verbose +The following is an example of some data this script might parse. -Be verbose (not implemented) + #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 + +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 + +=item B + +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 + +=item B + +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. I + +=item B + +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 =back @@ -223,8 +292,8 @@ terms as Perl itself. =head1 AUTHOR -John BEPPU +John BEPPU =cut -# $Id: autodocifier.pl,v 1.16 2001/03/15 20:49:25 beppu Exp $ +# $Id: autodocifier.pl,v 1.26 2004/04/06 15:26:25 andersen Exp $