summaryrefslogtreecommitdiff
path: root/build-aux
diff options
context:
space:
mode:
authorDi-an Jan <dianj@freeshell.org>2008-11-20 12:36:30 -0800
committerJoel E. Denny <jdenny@ces.clemson.edu>2009-04-06 05:40:27 -0400
commit72183df4da75116a496099c856097f7f049b2d8a (patch)
tree0d488308b117caaaada951cc56699252473dd5de /build-aux
parente80b068ce1fabb922bf71ea2c528aba6f151280f (diff)
downloadbison-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-xbuild-aux/cross-options.pl41
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";
}