#!/usr/bin/env perl
use strict;
use Pod::Usage;

my $program = shift;
pod2usage(2) unless defined($program);

open ARGTEXT, "$program 2>&1 |" or die "Failed to run $program: $!";
my $inargs = 0;
my @args;
while (<ARGTEXT>) {
    chomp;
    if (/^\[NAME/) {
	$inargs = 1;
	next;
    }
    next unless $inargs;
    last if /^\s*$/;
    my ($name, $deflt, $descr) = /^(\S+)\s+(\S+)\s+(.*)$/;
    push @args, [$name, $deflt, $descr];
}
die "No arguments found!" unless @args;

while (<>) {
    if (/\.\\\" ### ARGUMENTS ###/) {
	foreach (@args) {
	    my ($name, $deflt, $descr) = @$_;
	    $name =~ s/-/\\-/g;
	    $descr =~ s/ (-\S+)/ \\fB\\$1\\fR/g;
	    print <<"EOA";
.TP
.B $name
$descr
EOA
	}
    }
    else {
	print;
    }
}

__END__

=head1 NAME

sphinx_args2man - Generate manual pages from the output of Sphinx programs

=head1 SYNOPSIS

B<sphinx_args2man> I<PROGRAM> E<lt> I<TEMPLATE> E<gt> I<OUTPUT>

=head1 DESCRIPTION

This program runs a Sphinx program I<PROGRAM>, reads a template file
from standard input, and writes a manual page in L<man(7)> format to
standard output.

The template file is a manual page in L<man(7)> format, containing a
comment line of the form:

 .\" ### ARGUMENTS ###

Which will be replaced in the output with the arguments and their
descriptions from I<PROGRAM>.

=head1 AUTHOR

David Huggins-Daines <dhdaines@gmail.com>

=head1 COPYRIGHT

Copyright (c) 2007 Carnegie Mellon University.  You may copy and
distribute this file under the same conditions as the rest of
PocketSphinx.  See the file COPYING for more information.

=cut
