#!/usr/bin/env perl ## Copyright © 2010 by Daniel Friesel <derf@finalrewind.org> ## License: WTFPL <http://sam.zoy.org/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 =~ /\{"(?<long>[\w-]+)"\s*,.*,\s*(?:'(?<short>.)'|(?<short>\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 =~ /^ (?:\-(?<short>.), |\s*)--(?<long>[\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 (?:-(?<short>.) , )?--(?<long>[\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"; } }