#! @PERL@
#+##############################################################################
#
# check_texinfo.pl: Extract texinfo commands from files
#
#    Copyright (C) 2003, 2005  Patrice Dumas <dumas@centre-cired.fr>
#                            & Derek Price <derek@ximbiot.com>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#    02110-1301  USA
#
#-##############################################################################

# This requires perl version 5 or higher
require 5.0;



use strict;
use Getopt::Long;
my $verbose;
if (!GetOptions ("verbose"  => \$verbose))
{
    die "usage: $0 [-v] file...\n";
}

die "Need file to check\n" unless @ARGV > 0;

my (%seen, %context);

while (<>)
{
    if (/\@(\*|\.|\:|\@|\{|\})/)
    {
        $seen{$&}++;
        $context{$&} .= "> $_" if $verbose;
        $_ = "$`XX$'";
        redo;
    }
    if (/\@(\w+)/)
    {
        my ($before, $match, $after);
        ($before, $match, $after) = ($`, $&, $');
        if ($before =~ /\b[-\w]+$/ && $after =~ /^[-\w.]*\b/)
        {                   # e-mail address
            $seen{'e-mail address'}++;
            $context{'e-mail address'} .= "> $_" if $verbose;
        }
        else
        {
            $seen{$match}++;
            $context{$match} .= "> $_" if $verbose;
        }
        $match =~ s/^\@/X/;
        $_ = "$before$match$after";
        redo;
    }
}

foreach (sort(keys(%seen)))
{
    if ($verbose)
    {
        print "$_\n";
        print $context{$_};
    }
    else
    {
        print "$_ ($seen{$_})\n";
    }
}


