#!/usr/bin/env perl ## Copyright © 2010 by Daniel Friesel ## License: WTFPL use strict; use warnings; my $options; open(my $c_fh, '<', 'src/options.c') or die("Can't read options.c: $!"); while (my $line = <$c_fh>) { if ($line =~ /\{"(?[\w-]+)"\s*,.*,\s*(?:'(?.)'|(?\d+))\}/o) { push(@{$options->{$+{long}}}, ['source', $+{short}]); } } close($c_fh); open(my $h_fh, '<', 'src/help.raw') or die("Can't read help.raw: $!"); while (my $line = <$h_fh>) { if ($line =~ /^ (?:\-(?.), |\s*)--(?[\w-]+) /) { push(@{$options->{$+{long}}}, ['help', $+{short}]); } } close($h_fh); open(my $man_fh, '<', 'man/feh.1') or die("Can't read feh.1: $!"); while (my $line = <$man_fh>) { if ($line =~ /^\.It Cm (?:-(?.) , )?--(?[\w-]+)/) { push(@{$options->{$+{long}}}, ['manual', $+{short}]); } } close($man_fh); foreach my $option (keys %{$options}) { my $last; my $count = 0; if ($option =~ / ^ action\d | help /x) { next; } foreach my $source (@{$options->{$option}}) { my $name = $source->[0]; my $short = $source->[1] // ''; $short = '' if ($short =~ /^\d+$/); if (not defined $last) { $last = $short; } if ($last ne $short) { last; } $last = $short; $count++; } if ($count == 3) { next; } foreach my $source (@{$options->{$option}}) { my $name = $source->[0]; my $short = $source->[1] // ''; print "$option: $name ($short)\n"; } }