mirror of
https://github.com/pragma-/pbot.git
synced 2024-12-23 11:12:42 +01:00
Improve handling of -t for dict command
This commit is contained in:
parent
b23f025a12
commit
81abdbec29
@ -67,7 +67,7 @@ if (@ARGV > 0)
|
|||||||
}
|
}
|
||||||
=cut
|
=cut
|
||||||
} else {
|
} else {
|
||||||
print "Usage: dict [-d database] [-n start from definition number] [-t first letter of word class type (n]oun, v]erb, etc)] [-search <regex> for definitions matching <regex>] <word>\n";
|
print "Usage: dict [-d database] [-n start from definition number] [-t abbreviation of word class type (n]oun, v]erb, adv]erb, adj]ective, etc)] [-search <regex> for definitions matching <regex>] <word>\n";
|
||||||
exit 0;
|
exit 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,60 +82,80 @@ exit 0;
|
|||||||
#=======================================================================
|
#=======================================================================
|
||||||
sub define_word
|
sub define_word
|
||||||
{
|
{
|
||||||
my $word = shift;
|
my $word = shift;
|
||||||
my $eref;
|
my $eref;
|
||||||
my $entry;
|
my $entry;
|
||||||
my ($db, $def);
|
my ($db, $def);
|
||||||
|
|
||||||
|
|
||||||
$eref = $dict->define($word);
|
$eref = $dict->define($word);
|
||||||
|
|
||||||
if (@$eref == 0)
|
if (@$eref == 0)
|
||||||
|
{
|
||||||
|
_no_definitions($word);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach $entry (@$eref)
|
||||||
{
|
{
|
||||||
_no_definitions($word);
|
($db, $def) = @$entry;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach $entry (@$eref)
|
|
||||||
{
|
|
||||||
($db, $def) = @$entry;
|
|
||||||
|
|
||||||
my $defs = dict_hash($def);
|
my $defs = dict_hash($def);
|
||||||
print "$defs->{word}: ";
|
print "$defs->{word}: ";
|
||||||
|
|
||||||
my $comma = '';
|
my $comma = '';
|
||||||
my $def_type = $config->def_type;
|
my $def_type = $config->def_type;
|
||||||
my $def_contains = $config->def_contains;
|
my $def_contains = $config->def_contains;
|
||||||
|
|
||||||
# normalize '*' to '.*'
|
# normalize '*' to '.*'
|
||||||
$def_type =~ s/\.\*/*/g;
|
$def_type =~ s/\.\*/*/g;
|
||||||
$def_type =~ s/\*/.*/g;
|
$def_type =~ s/\*/.*/g;
|
||||||
|
|
||||||
# normalize '*' to '.*'
|
# normalize '*' to '.*'
|
||||||
$def_contains =~ s/\.\*/*/g;
|
$def_contains =~ s/\.\*/*/g;
|
||||||
$def_contains =~ s/\*/.*/g;
|
$def_contains =~ s/\*/.*/g;
|
||||||
|
|
||||||
eval {
|
my $defined = 0;
|
||||||
foreach my $type (keys %$defs) {
|
|
||||||
next if $type eq 'word';
|
|
||||||
next unless $type =~ m/$def_type/i;
|
|
||||||
print "$comma$type: " if length $type;
|
|
||||||
foreach my $number (sort { $a <=> $b } keys %{ $defs->{$type} }) {
|
|
||||||
next unless $number >= $config->def_number;
|
|
||||||
next unless $defs->{$type}{$number} =~ m/$def_contains/i;
|
|
||||||
print "$comma" unless $number == 1;
|
|
||||||
print "$number) $defs->{$type}{$number}";
|
|
||||||
$comma = ",\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if($@) {
|
eval {
|
||||||
print "Error in -t parameter. Use v, n, *, etc.\n";
|
foreach my $type (keys %$defs) {
|
||||||
exit 0;
|
next if $type eq 'word';
|
||||||
}
|
next unless $type =~ m/$def_type/i;
|
||||||
|
print "$comma$type: " if length $type;
|
||||||
|
foreach my $number (sort { $a <=> $b } keys %{ $defs->{$type} }) {
|
||||||
|
next unless $number >= $config->def_number;
|
||||||
|
next unless $defs->{$type}{$number} =~ m/$def_contains/i;
|
||||||
|
print "$comma" unless $number == 1;
|
||||||
|
print "$number) $defs->{$type}{$number}";
|
||||||
|
$comma = ",\n\n";
|
||||||
|
$defined = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if($@) {
|
||||||
|
print "Error in -t parameter. Use v, n, *, etc.\n";
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not $defined && $def_type ne '*') {
|
||||||
|
my $types = '';
|
||||||
|
$comma = '';
|
||||||
|
foreach my $type (sort keys %$defs) {
|
||||||
|
next if $type eq 'word';
|
||||||
|
$types .= "$comma$type";
|
||||||
|
$comma = ', ';
|
||||||
|
}
|
||||||
|
if (length $types) {
|
||||||
|
print "no `$def_type` definition found; available definitions: $types.\n";
|
||||||
|
} else {
|
||||||
|
print "no definition found.\n";
|
||||||
|
}
|
||||||
|
} elsif (not $defined) {
|
||||||
|
print "no definition found.\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub dict_hash {
|
sub dict_hash {
|
||||||
@ -155,7 +175,7 @@ sub dict_hash {
|
|||||||
$line =~ s/\s+$//;
|
$line =~ s/\s+$//;
|
||||||
$line =~ s/\s+/ /g;
|
$line =~ s/\s+/ /g;
|
||||||
|
|
||||||
if($line =~ m/^([a-z]) (\d+): (.*)/i) {
|
if($line =~ m/^([a-z]+) (\d+): (.*)/i) {
|
||||||
($type, $number, $text) = ($1, $2, $3);
|
($type, $number, $text) = ($1, $2, $3);
|
||||||
}
|
}
|
||||||
elsif($line =~ m/^(\d+): (.*)/i) {
|
elsif($line =~ m/^(\d+): (.*)/i) {
|
||||||
@ -354,7 +374,7 @@ sub initialise
|
|||||||
=cut
|
=cut
|
||||||
|
|
||||||
if(not $config->args(\@ARGV)) {
|
if(not $config->args(\@ARGV)) {
|
||||||
print "Usage : dict [-d database] [-n start from definition number] [-t first letter of word class type (n]oun, v]erb, etc)] [-search <regex> for definitions matching <regex>] <word>\n";
|
print "Usage : dict [-d database] [-n start from definition number] [-t abbreviation of word class type (n]oun, v]erb, adv]erb, adj]ective, etc)] [-search <regex> for definitions matching <regex>] <word>\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user