diff options
author | Di-an Jan <dianj@freeshell.org> | 2008-11-20 12:36:30 -0800 |
---|---|---|
committer | Joel E. Denny <jdenny@ces.clemson.edu> | 2009-04-06 05:40:27 -0400 |
commit | 72183df4da75116a496099c856097f7f049b2d8a (patch) | |
tree | 0d488308b117caaaada951cc56699252473dd5de /build-aux | |
parent | e80b068ce1fabb922bf71ea2c528aba6f151280f (diff) | |
download | bison-72183df4da75116a496099c856097f7f049b2d8a.tar.gz |
Improves options in the manual.
* doc/bison.texinfo (-g, -x): Add space before argument.
(Option Cross Key): Implement FIXME: listing directives also.
* build-aux/cross-options.pl: Read from <STDIN> rather than <>.
(Short Option): Special case -d. Put arguments inside @option.
(Bison Directive): Add column, automatically extracted from
src/scan-gram.l (actual name passed as the first argument)
with special case for %define.
* doc/Makefile.am (doc/cross-options.texi): Pass src/scan-gram.l
to build-aux/cross-options.pl.
* src/getargs.c (usage): Document limitations of cross-options.pl.
* src/scan-gram.l: Likewise.
Diffstat (limited to 'build-aux')
-rwxr-xr-x | build-aux/cross-options.pl | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/build-aux/cross-options.pl b/build-aux/cross-options.pl index 58772775..8d507254 100755 --- a/build-aux/cross-options.pl +++ b/build-aux/cross-options.pl @@ -5,7 +5,10 @@ use 5.005; use strict; my %option; -while (<>) +my %directive; +my $scanner = `grep -i '"%[a-z]' $ARGV[0]`; +$scanner =~ s/"\[-_\]"/-/g; +while (<STDIN>) { if (/^\s* # Initial spaces. (?:(-\w),\s+)? # $1: $short: Possible short option. @@ -16,7 +19,10 @@ while (<>) /x) { my ($short, $long, $opt, $arg) = ($1, $2, $3, $4); - $short = defined $short ? '@option{' . $short . '}' : ''; + $short = '' if ! defined $short; + $short = '-d' if $long eq '--defines' && ! $short; + my $dir = '%' . substr($long, 2); + $dir = '' if index ($scanner, "\"$dir\"") < 0; if ($arg) { # if $opt, $arg contains the closing ]. @@ -24,6 +30,7 @@ while (<>) if $opt eq '['; $arg =~ s/^=//; $arg = lc ($arg); + my $dir_arg = $arg; # If the argument is compite (e.g., for --define[=NAME[=VALUE]]), # put each word in @var, to build @var{name}[=@var{value}], not # @var{name[=value]}]. @@ -33,19 +40,33 @@ while (<>) $long_arg = "[$long_arg]"; $arg = "[$arg]"; } - $option{"$long$long_arg"} = $short ? "$short $arg" : ''; - } - else - { - $option{"$long"} = "$short"; + # For arguments of directives: this only works if all arguments + # are strings and have the same syntax as on the command line. + if ($dir_arg eq 'name[=value]') + { + $dir_arg = '@var{name} ["@var{value}"]'; + } + else + { + $dir_arg =~ s/(\w+)/\@var{"$1"}/g; + $dir_arg = '[' . $dir_arg . ']' + if $opt eq '['; + } + $long = "$long$long_arg"; + $short = "$short $arg" if $short && $short ne '-d'; + $dir = "$dir $dir_arg" if $dir; } + $option{$long} = $short; + $directive{$long} = $dir; } } foreach my $long (sort keys %option) { # Avoid trailing spaces. - printf ("\@item %-40s \@tab%s\n", - '@option{' . $long . '}', - $option{$long} ? " $option{$long}" : ""); + print '@item @option{', $long, "}\n\@tab"; + print ' @option{', $option{$long}, '}' if $option{$long}; + print "\n\@tab"; + print ' @code{', $directive{$long}, '}' if $directive{$long}; + print "\n"; } |