6 # collect lines continued with a '\' into an array
16 last unless (/\\\s*$/);
21 # regex && eval away unwanted strings from documentation
24 $text =~ s/USAGE_NOT\w+\(.*?"\s*\)//sxg;
25 $text =~ s/USAGE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg;
27 my @line = split("\n", $text);
34 eval qq[ sprintf(qq{$_}) ]
40 # generate POD for an applet
46 my $trivial = $usage->{trivial};
47 $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg;
49 map { $_ !~ /^\s/ && s/(?<!\w)(-\w+)/B<$1>/g; $_ }
50 split("\n", $usage->{full});
52 # add "\n" prior to certain lines to make indented
56 for (my $i = 0; $i < $len; $i++) {
58 if (($i+1) != $len && $f0[$i] !~ /^\s/ && $f0[$i+1] =~ /^\s/) {
59 next if ($f0[$i] =~ /^$/);
60 push(@f1, "") unless ($f0[$i+1] =~ /^\s*$/s);
63 my $full = join("\n", @f1);
65 # prepare notes if they exist
66 my $notes = (defined $usage->{notes})
67 ? "$usage->{notes}\n\n"
70 # prepare examples if they exist
71 my $example = (defined $usage->{example})
76 split("\n", $usage->{example})) . "\n\n"
88 "-------------------------------".
93 # FIXME | generate SGML for an applet
104 # the keys are applet names, and
105 # the values will contain hashrefs of the form:
116 # get command-line options
128 if (defined $opt{help}) {
130 "$0 [OPTION]... [FILE]...\n",
140 # collect documenation into %docs
143 open(USAGE, $_) || die("$0: $_: $!");
145 my ($applet, $type, @line);
147 if (/^#define (\w+)_(\w+)_usage/) {
150 @line = continuation($fh);
151 my $doc = $docs{$applet} ||= { };
152 my $text = join("\n", @line);
153 $doc->{$type} = beautify($text);
159 # generate structured documentation
161 my $generator = \&pod_for_usage;
162 if (defined $opt{sgml}) {
163 $generator = \&sgml_for_usage;
166 foreach my $applet (sort keys %docs) {
167 print $generator->($applet, $docs{$applet});
176 autodocifier.pl - generate docs for busybox based on usage.h
180 autodocifier.pl [OPTION]... [FILE]...
184 ( cat docs/busybox_header.pod; \
185 docs/autodocifier.pl usage.h; \
186 cat docs/busybox_footer.pod ) > docs/busybox.pod
190 The purpose of this script is to automagically generate documentation
191 for busybox using its usage.h as the original source for content.
192 Currently, the same content has to be duplicated in 3 places in
193 slightly different formats -- F<usage.h>, F<docs/busybox.pod>, and
194 F<docs/busybox.sgml>. This is tedious, so Perl has come to the rescue.
196 This script was based on a script by Erik Andersen <andersen@lineo.com>
197 which was in turn based on a script by Mark Whitley <markw@lineo.com>
205 This displays the help message.
209 Generate POD (this is the default)
217 Be verbose (not implemented)
223 The following is an example of some data this script might parse.
225 #define length_trivial_usage \
227 #define length_full_usage \
228 "Prints out the length of the specified STRING."
229 #define length_example_usage \
233 Each entry is a cpp macro that defines a string. The macros are
234 named systematically in the form:
238 $name is the name of the applet. $type can be "trivial", "full", "notes",
239 or "example". Every documentation macro must end with "_usage".
241 The definition of the types is as follows:
247 This should be a brief, one-line description of parameters that
248 the command expects. This will be displayed when B<-h> is issued to
249 a command. I<REQUIRED>
253 This should contain descriptions of each option. This will also
254 be displayed along with the trivial help if BB_FEATURE_TRIVIAL_HELP
255 is disabled. I<REQUIRED>
259 This is documentation that is intended to go in the POD or SGML, but
260 not be printed when a B<-h> is given to a command. To see an example
261 of notes being used, see init_notes_usage. I<OPTIONAL>
265 This should be an example of how the command is acutally used.
266 This will not be printed when a B<-h> is given to a command -- it
267 is inteded only for the POD or SGML documentation. I<OPTIONAL>
277 Copyright (c) 2001 John BEPPU. All rights reserved. This program is
278 free software; you can redistribute it and/or modify it under the same
279 terms as Perl itself.
283 John BEPPU <beppu@lineo.com>
287 # $Id: autodocifier.pl,v 1.21 2001/04/17 17:09:34 beppu Exp $