mirror of
https://github.com/pragma-/pbot.git
synced 2024-12-26 12:42:49 +01:00
Add Plugins/FuncPlural.pm
This commit is contained in:
parent
cc5e31e9cf
commit
2a2f6f3a70
104
Plugins/FuncPlural.pm
Normal file
104
Plugins/FuncPlural.pm
Normal file
@ -0,0 +1,104 @@
|
||||
# File: FuncPlural.pm
|
||||
# Author: pragma-
|
||||
#
|
||||
# Purpose: Registers the plural Function
|
||||
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package Plugins::FuncPlural;
|
||||
use parent 'Plugins::Plugin';
|
||||
|
||||
use warnings; use strict;
|
||||
use feature 'unicode_strings';
|
||||
|
||||
sub initialize {
|
||||
my ($self, %conf) = @_;
|
||||
$self->{pbot}->{functions}->register(
|
||||
'plural',
|
||||
{
|
||||
desc => 'pluralizes a word or phrase',
|
||||
usage => 'plural <word>',
|
||||
subref => sub { $self->func_plural(@_) }
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
sub unload {
|
||||
my $self = shift;
|
||||
$self->{pbot}->{functions}->unregister('plural');
|
||||
}
|
||||
|
||||
sub pluralize_word {
|
||||
my ($word) = @_;
|
||||
|
||||
my @ignore = qw/trout fish tobacco music snow armor police dice caribou moose people sheep/;
|
||||
|
||||
my %endings = (
|
||||
'man' => 'men',
|
||||
'ch' => 'ches',
|
||||
'sh' => 'shes',
|
||||
'eer' => 'eer',
|
||||
'mouse' => 'mice',
|
||||
'goose' => 'geese',
|
||||
'hoof' => 'hooves',
|
||||
'wolf' => 'wolves',
|
||||
'foot' => 'feet',
|
||||
'ss' => 'sses',
|
||||
'is' => 'ises',
|
||||
'ife' => 'ives',
|
||||
'us' => 'uses',
|
||||
'x' => 'xes',
|
||||
'ium' => 'ia',
|
||||
'um' => 'a', 'stomach' => 'stomachs' , 'cactus' => 'cacti' , 'cactus' => 'cacti' , 'knoif' => 'knoives' , 'sheaf' =>
|
||||
'sheaves' , 'dwarf' => 'dwarves' ,
|
||||
'loaf' => 'loaves',
|
||||
'louse' => 'lice',
|
||||
'die' => 'dice',
|
||||
'calf' => 'calves',
|
||||
'self' => 'selves',
|
||||
'tooth' => 'teeth',
|
||||
'alumnus' => 'alumni',
|
||||
'leaf' => 'leaves',
|
||||
'ay' => 'ays',
|
||||
'ey' => 'eys',
|
||||
'child' => 'children',
|
||||
'o' => 'oes',
|
||||
);
|
||||
|
||||
$word =~ s/^an? //;
|
||||
$word =~ s/\bthat\b/those/g; $word =~ s/\bthis\b/these/g;
|
||||
|
||||
return $word if grep { /^\Q$word\E$/i } @ignore;
|
||||
|
||||
foreach my $ending (sort { length $b <=> length $a } keys %endings) {
|
||||
return $word if $word =~ s/$ending$/$endings{$ending}/;
|
||||
}
|
||||
|
||||
$word =~ s/s$/s/ || $word =~ s/y$/ies/ || $word =~ s/$/s/;
|
||||
|
||||
return $word;
|
||||
}
|
||||
|
||||
sub pluralize {
|
||||
my ($string) = @_;
|
||||
|
||||
if ($string =~ m/(.*?) (containing|packed with|with what appears to be) (.*)/) {
|
||||
my $word = pluralize_word $1;
|
||||
return "$word $2 $3";
|
||||
} elsif ($string =~ m/(.*?) of (.*)/) {
|
||||
my $word = pluralize_word $1;
|
||||
return "$word of $2";
|
||||
} else {
|
||||
return pluralize_word $string;
|
||||
}
|
||||
}
|
||||
|
||||
sub func_plural {
|
||||
my $self = shift @_;
|
||||
my $text = "@_";
|
||||
return pluralize($text);
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in New Issue
Block a user