#!/usr/local/bin/perl

#
# This program counts the number of words in documents by Madison, Hamilton, or both
#
local $/=undef;
@Madison = (10, 14, 37 .. 48);
@Hamilton =(1, 6 .. 9, 11, 12, 24, 26, 36, 59, 65, 66, 70 .. 72, 74, 77);

@files = (@Madison, @Hamilton);
#@files = @Madison;
#@files = @Hamilton;
#@files = (10, 14, 37);

print "Federalist Paper\tword count\ttriggers\n";
for (@files) {
    open FILE, "../federalist_papers/federalist$_.txt" or die "Couldn't open file: $!";
    $data = <FILE>;
    close FILE;

    print "$_\t\t\t";
    
#@words = parse_ws(); #split on whitespace
    @words = parse_punc(); #split on punc, ws, ignore caps, force lower case
    $count =0;
    for (@words) { 
	#print; print "\n";
	if (/while|whilst|upon|enough/)
	{   $count++;}
    }
    print scalar @words, "\t\t", $count, "\n";
}
#split on whitespace
sub parse_ws {
    $data =~ s/\s+/ /g; #collapse internal whitespace
	$data =~ s/^\s+|\s+$//; #discard leading and trailing whitespace
    return sort split /\s/, lc $data;
}

# split words on punctuation [.,:;!?()-+] and whitespace, 
# ignore capitalization, force to lower case, ignore references [.*?]
sub  parse_punc {
    $data =~ s/\s+/ /g; #collapse internal whitespace
    $data =~ s/^\s+|\s+$//; #discard leading and trailing whitespace
    $data =~ s/[
		\s+\.,!\?\(\)\:\;]  # puctuation
		| \[.*?\]           # references (minimal match)
		| _+ | \W-+\W       # words like this: ---- or _____
		/ /gx;
    $data =~ s/\s+/ /g; #collapse internal whitespace
    return sort split /\s/, lc $data;
}
