#! /usr/bin/env perl

use warnings;
use 5.005;
use strict;

my %option;
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.
        (--[-\w]+)        # $2: $long:  Long option.
        (\[?)             # $3: $opt:   '[' iff the argument is optional.
        (?:=(\S+))?       # $4: $arg:   Possible argument name.
        \s                # Spaces.
        /x)
    {
	my ($short, $long, $opt, $arg) = ($1, $2, $3, $4);
	$short = '' if ! defined $short;
	$short = '-d' if $long eq '--defines' && ! $short;
	my $dir = '%' . substr($long, 2);
	if (index ($scanner, "\"$dir\"") < 0)
	{
	  if ($long eq '--force-define') { $dir = '%define'; }
	  else { $dir = ''; }
	}
	if ($arg)
	{
            # if $opt, $arg contains the closing ].
            substr ($arg, -1) = ''
                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]}].
	    $arg =~ s/(\w+)/\@var{$1}/g;
	    my $long_arg = "=$arg";
	    if ($opt eq '[') {
	      $long_arg = "[$long_arg]";
	      $arg = "[$arg]";
	    }
	    # 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;
    }
}

my $sep = '';
foreach my $long (sort keys %option)
{
    # Avoid trailing spaces.
    print $sep;
    $sep = "\n";
    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";
}
