aboutsummaryrefslogtreecommitdiff
path: root/docs/autodocifier.pl
diff options
context:
space:
mode:
Diffstat (limited to 'docs/autodocifier.pl')
-rwxr-xr-xdocs/autodocifier.pl88
1 files changed, 88 insertions, 0 deletions
diff --git a/docs/autodocifier.pl b/docs/autodocifier.pl
new file mode 100755
index 000000000..2ce1edd75
--- /dev/null
+++ b/docs/autodocifier.pl
@@ -0,0 +1,88 @@
+#!/usr/bin/perl -w
+#
+# autodocufier.pl - extracts usage messages from busybox usage.c and
+# pretty-prints them to stdout.
+
+use strict;
+
+my $line;
+my $applet;
+my $count;
+my $full_usage;
+
+open(USAGE, 'usage.h') or die "usage.h: $!";
+
+while (defined($line = <USAGE>)) {
+ $count=0;
+ if ($line =~ /^#define (\w+)_trivial_usage/) {
+ # grab the applet name
+ $applet = $1;
+ print "\n$applet:\n";
+
+ while (defined($line = <USAGE>)) {
+ if ( $count==0 ) {
+ $count++;
+ print "\t$applet ";
+ } else { print "\t"; }
+ $full_usage = $applet . "_full_usage";
+ last if ( $line =~ /$full_usage/ );
+ # Skip preprocessor stuff
+ next if $line =~ /^\s*#/;
+ # Strip the continuation char
+ $line =~ s/\\$//;
+ # strip quotes off
+ $line =~ s/^\s*"//;
+ $line =~ s/"\s*$//;
+ # substitute escape sequences
+ # (there's probably a better way to do this...)
+ $line =~ s/\\t/ /g;
+ $line =~ s/\\n//g;
+ # fix up preprocessor macros
+ $line =~ s/USAGE_\w+\([\s]*?(".*?").*?\)/$1/sg;
+ # Strip any empty quotes out
+ $line =~ s/"[\s]*"//sg;
+ # strip line end quotes, again
+ $line =~ s/^\s*"//;
+ $line =~ s/"\s*$//;
+
+ # Finally, print it
+ print "$line\n";
+ }
+ printf("\n");
+ while (defined($line = <USAGE>)) {
+ if ( $count==0 ) {
+ $count++;
+ print "\t$applet ";
+ } else { print "\t"; }
+ # we're done if we hit a line lacking a '\' at the end
+ #last if ! $line !~ /\\$/;
+ if ( $line !~ /\\$/ ) {
+ #print "Got one at $line\n";
+ last;
+ }
+ # Skip preprocessor stuff
+ next if $line =~ /^\s*#/;
+ # Strip the continuation char
+ $line =~ s/\\$//;
+ # strip quotes off
+ $line =~ s/^\s*"//;
+ $line =~ s/"\s*$//;
+ # substitute escape sequences
+ # (there's probably a better way to do this...)
+ $line =~ s/\\t/ /g;
+ $line =~ s/\\n//g;
+ # Automagically #define all preprocessor lines
+ #$line =~ s/USAGE_\w+\([\s]*?(".*?")\s,\s".*"\s\)/$1/sg;
+ $line =~ s/USAGE_\w+\(\s*?(".*").*\)/$1/sg;
+ # Strip any empty quotes out
+ $line =~ s/"[\s]*"//sg;
+ # strip line end quotes, again
+ $line =~ s/^\s*"//;
+ $line =~ s/"\s*$//;
+
+ # Finally, print it
+ print "$line\n";
+ }
+ printf("\n\n");
+ }
+}