#! /usr/bin/perl
use 5.014;
use strict;
use warnings;
use List::MoreUtils qw(uniq);

my $what = shift // die "$0: Usage {main} [spec.xfpt]\n";

@ARGV = "$ENV{HOME}/src/exim/doc/doc-docbook/spec.xfpt"
  if not @ARGV;

my $pattern = do {
    given ($what) {
        when ('main')  { qr/^\.option\s(")?(?<item>\S+)(?(1)\1)\smain/ }
        when ('vars')  { qr/^\.vitem\s&(?<item>\$\w+)/ }
        when ('ops')   { qr/^\.vitem\s&\*(?<item>\$\{\w+:)/ }
        when ('conds') { qr/^\.vitem\s&\*(?<item>\w+)\&~\{/ }
        when ('funcs') { qr/^\.vitem\s(")?&\*(?<item>\$\{\w+)\{/ }
        default        { die "$0: unknown search pattern\n" }
    }
};

say join "\n", sort uniq map { /$pattern/ ? $+{item} : () } <>;
