if ($query =~ s/^(\d+)\s+//) {
$num = $1;
}
- my $dict = '*';
- if ($query =~ s/\/(\S+)$//) {
- $dict = $1;
- }
# body.
- push(@results, &Define($socket,$query,$dict));
- #push(@results, &Define($socket,$query,'foldoc'));
- #push(@results, &Define($socket,$query,'web1913'));
+ push(@results, &Dict_Wordnet($socket,$query));
+ push(@results, &Dict_Foldoc($socket,$query));
+ push(@results, &Dict_web1913($socket,$query));
# end.
print $socket "QUIT\n";
close $socket;
- my $count=0;
- foreach (@results) {
- $count++;
- &::DEBUG("$count: $_");
- }
my $total = scalar @results;
if ($total == 0) {
$retval = "Dictionary '$query' ".$results[0];
} else {
$retval = "could not find definition for \002$query\002";
- $retval .= " in $dict" if ($dict ne '*');
}
}
&::performStrictReply($retval);
}
-sub Define {
- my ($socket, $query, $dict) = @_;
+sub Dict_Wordnet {
+ my ($socket, $query) = @_;
my @results;
- &::DEBUG("Dict: asking $dict.");
- print $socket "DEFINE $dict \"$query\"\n";
+ &::status("Dict: asking Wordnet.");
+ print $socket "DEFINE wn \"$query\"\n";
- my $def = "";
- my $term = $query;
+ my $def = "";
+ my $wordtype = "";
while (<$socket>) {
chop; # remove \n
chop; # remove \r
- &::DEBUG("$term/$dict '$_'");
- if (/^552 /) {
- # no match.
- return;
- } elsif (/^250 /) {
- # end w/ optional stats
+ &::DEBUG("got '$_'");
+ if ($_ eq ".") { # end of def.
+ push(@results, $def);
+ } elsif (/^250 /) { # stats.
last;
- } elsif (/^151 "([^"]*)" (\S+) .*/) {
- # 151 "Good Thing" jargon "Jargon File (4.3.0, 30 APR 2001)"
- $term=$1;
- $dict=$2;
- $def = '';
- &::DEBUG("term=$term dict=$dict");
- } else {
- my $line = $_;
- # some dicts put part of the definition on the same line ie: jargon
- $line =~ s/^$term//i;
- $line =~ s/^\s+/ /;
- if ($dict eq 'wn') {
- # special processing for sub defs in wordnet
- if ($line eq '.') {
- # end of def.
- $def =~ s/\s+$//;
- $def =~ s/\[[^\]]*\]//g;
- push(@results, $def);
- } elsif ($line =~ m/^\s+(\S+ )?(\d+)?: (.*)/) {
- # start of sub def.
- my $text = $3;
- $def =~ s/\s+$//;
- #&::DEBUG("def => '$def'.");
- $def =~ s/\[[^\]]*\]//g;
- push(@results, $def) if ($def ne "");
- $def = $text;
- } elsif (/^\s+(.*)/) {
- $def .= $line;
- } else {
- &::DEBUG("ignored '$line'");
- }
- } else {
- # would be nice to divide other dicts
- # but many are not always in a parsable format
- if ($line eq '.') {
- # end of def.
- next if ($def eq '');
- push(@results, $def);
- $def = '';
- } elsif ($line =~ m/^\s+(\S.*\S)\s*$/) {
- #&::DEBUG("got '$1'");
- $def .= ' ' if ($def ne '');
- $def .= $1;
- } else {
- &::DEBUG("ignored '$line'");
- }
+ } elsif (/^552 no match/) { # no match.
+ return;
+ } elsif (/^\s+(\S+ )?(\d+)?: (.*)/) { # start of sub def.
+ my $text = $3;
+ $def =~ s/\s+$//;
+### &::DEBUG("def => '$def'.");
+ push(@results, $def) if ($def ne "");
+ $def = $text;
+
+ if (0) { # old non-fLR format.
+ $def = "$query $wordtype: $text" if (defined $text);
+ $wordtype = substr($1,0,-1) if (defined $1);
+### &::DEBUG("_ => '$_'.") if (!defined $text);
}
+
+ } elsif (/^\s+(.*)/) {
+ s/^\s{2,}/ /;
+ $def .= $_;
+ $def =~ s/\[.*?\]$//g;
}
}
- &::DEBUG("Dict: $dict: found ". scalar(@results) ." defs.");
+ &::status("Dict: wordnet: found ". scalar(@results) ." defs.");
+
+ return if (!scalar @results);
+
+ return @results;
+}
+
+sub Dict_Foldoc {
+ my ($socket,$query) = @_;
+ my @results;
+
+ &::status("Dict: asking Foldoc.");
+ print $socket "DEFINE foldoc \"$query\"\n";
+
+ my $firsttime = 1;
+ my $string;
+ while (<$socket>) {
+ chomp; # remove \r\n
+
+ &::DEBUG("got '$_'");
+ return if /^552 /; # no match.
+
+ last if (/^250/ or /^\.$/); # stats; end of def.
+
+ s/^\s+|\s+$//g; # each line.
+
+ if ($_ eq "") { # sub def separator.
+ $string =~ s/^\s+|\s+$//g; # sub def.
+ $string =~ s/[{}]//g;
+
+ next if ($string eq "");
+
+ push(@results, $string);
+ $string = "";
+ }
+
+ $string .= $_." ";
+ }
+
+ &::status("Dict: foldoc: found ". scalar(@results) ." defs.");
+
+ return if (!scalar @results);
+ pop @results; # last def is date of entry.
+
+ return @results;
+}
+
+sub Dict_web1913 {
+ my ($socket,$query) = @_;
+ my @results;
+
+ &::status("Dict: asking web1913.");
+ print $socket "DEFINE web1913 \"$query\"\n";
+
+ my $string;
+ while (<$socket>) {
+ chop; # remove \n
+ chop; # remove \r
+
+ return if /^552/; # no match.
+
+ last if (/^250/); # stats; end of def.
+ next if (/^151/ or /^150/); # definition and/or retrieval
+
+ s/^\s+|\s+$//g; # each line.
+
+ if ($_ eq "" or $_ =~ /^\.$/) { # sub def separator.
+ $string =~ s/^\s+|\s+$//g; # sub def.
+ $string =~ s/[{}]//g;
+
+ next if ($string eq "");
+
+ push(@results, $string);
+ $string = "";
+ }
+
+ $string .= $_." ";
+ }
+
+ &::status("Dict: web1913: found ". scalar(@results) ." defs.");
return if (!scalar @results);
+ pop @results; # last def is date of entry.
return @results;
}