]>
Commit | Line | Data |
---|---|---|
1 | #! /usr/bin/env perl | |
2 | ||
3 | use warnings; | |
4 | use 5.005; | |
5 | use strict; | |
6 | ||
7 | my %option; | |
8 | while (<>) | |
9 | { | |
10 | if (/^\s* # Initial spaces. | |
11 | (?:(-\w),\s+)? # $1: $short: Possible short option. | |
12 | (--[-\w]+) # $2: $long: Long option. | |
13 | (\[?) # $3: $opt: '[' iff the argument is optional. | |
14 | (?:=(\S+))? # $4: $arg: Possible argument name. | |
15 | \s # Spaces. | |
16 | /x) | |
17 | { | |
18 | my ($short, $long, $opt, $arg) = ($1, $2, $3, $4); | |
19 | $short = defined $short ? '@option{' . $short . '}' : ''; | |
20 | if ($arg) | |
21 | { | |
22 | # if $opt, $arg contains the closing ]. | |
23 | substr ($arg, -1) = '' | |
24 | if $opt eq '['; | |
25 | $arg =~ s/^=//; | |
26 | $arg = lc ($arg); | |
27 | # If the argument is compite (e.g., for --define[=NAME[=VALUE]]), | |
28 | # put each word in @var, to build @var{name}[=@var{value}], not | |
29 | # @var{name[=value]}]. | |
30 | $arg =~ s/(\w+)/\@var{$1}/g; | |
31 | $arg = '[' . $arg . ']' | |
32 | if $opt eq '['; | |
33 | $option{"$long=$arg"} = $short ? "$short $arg" : ''; | |
34 | } | |
35 | else | |
36 | { | |
37 | $option{"$long"} = "$short"; | |
38 | } | |
39 | } | |
40 | } | |
41 | ||
42 | foreach my $long (sort keys %option) | |
43 | { | |
44 | # Avoid trailing spaces. | |
45 | printf ("\@item %-40s \@tab%s\n", | |
46 | '@option{' . $long . '}', | |
47 | $option{$long} ? " $option{$long}" : ""); | |
48 | } |