Lingua-Zompist-Cadhinor
view release on metacpan or search on metacpan
Cadhinor.pm view on Meta::CPAN
present past pastanterior), 'past anterior') {
$verb{$tense} = $verb{static}{definite}{$tense};
}
for $tense (qw(befel imperative)) {
$verb{$tense} = $verb{static}{remote}{$tense};
}
}
# Verbs borrowed form other languages, and thus not subject to
# stem-changing rules
my %borrowed = (
'DEBUTAN' => 1, # Mark says these two don't change;
'NACITAN' => 1, # however, I don't know why not.
'ONOTER' => 'Cuêzi o:inote',
);
# Fricativised versions of consonants
my %fric = (
'T' => 'TH',
'D' => 'DH',
'P' => 'F',
);
my $far = qr/^FAR$/;
my $kes = qr/^KES$/;
my $nen = qr/^NEN$/;
my @persons = qw(SEO LET TU TAS MUKH CAI);
my @cases = qw(nom gen acc dat abl);
my @numbers = qw(sing pl);
my %present = (
EC => [ qw( AO EOS ES OM OUS ONT ) ],
AN => [ qw( AI EIS ET AM US ONT ) ],
EN => [ qw( AI EIS ET EM ES ENT ) ],
ER => [ qw( U EUS ET UM US UNT ) ],
IR => [ qw( U EUS IT UM US INT ) ],
dyn => [ qw( UI UIS UT IM IS INT ) ],
);
my %past = (
EC => [ qw( I IUS U UM US IUNT ) ],
AN => [ qw( IO IOS AE UOM UOS IONT ) ],
EN => [ qw( IO IOS AE UOM UES IONT ) ],
ER => [ qw( IE IES E EM ES IENT ) ],
IR => [ qw( IE IES AE EM ES IENT ) ],
);
my %demeric = (
ESAN => [ qw( SAI SEIS ES ESAM ESOS SONT ) ],
EPESAN => [ qw( EUSAI EUSEIS EPES EPESAM EPESOS EUSONT ) ],
CTANEN => [ qw( CTAI CTES CTET CTANAM CTANUS CTANONT ) ],
# FAR => [ qw( FAEO FAES FAET FASCOM FASCOUS FASCONT ) ],
FAR => [ qw( FAEU FAES FAET FASCOM FASCOUS FASCONT ) ],
IUSIR => [ qw( IUSU IUS IUT IUSUM IUSUS IUINT ) ],
LIUBEC => [ qw( LIUO LIUOS LIUS LIUBOM LIUBOUS LIUBONT ) ],
KETHEN => [ qw( KETHUI KETHUS KETHUT KETHEM KETHES KENT ) ],
CULLIR => [ qw( CULLU CULS CULT CULLUM CULLUS CULLINT ) ],
OHIR => [ qw( OHU UIS UIT OHUM OHUS OHINT ) ],
SCRIFEC => [ qw( SCRIFAO SCRIS SCRIT SCRIFOM SCRIFOUS SCRIFONT ) ],
NEN => [ qw( NEI NIS NIT NESEM NESES NENT ) ],
KES => [ qw( KEAI KIES KIET KEHAM KEHUS KEHONT ) ],
# VOLIR => [ qw( VULU VUIS VUIT VOLUM VOLUS VOLINT ) ],
VOLIR => [ qw( VULU VULS VULT VOLUM VOLUS VOLINT ) ],
FAUCIR => [ qw( FAU FEUS FEUT FAUCUM FAUCUS FAUCINT ) ],
FAILIR => [ qw( FAILU FELS FELT FAILUM FAILUS FAILINT ) ],
);
sub demeric {
my $verb = shift;
my $stem = $verb;
my $table;
return $demeric{$verb} if exists $demeric{$verb};
ENDING:
for my $ending ( keys %present ) {
if(substr($stem, -2, 2) eq $ending) {
substr($stem, -2, 2) = '';
$table = [ map "$stem$_", @{$present{$ending}} ];
last ENDING;
}
}
# Stem change
if($verb =~ /[AEIOU][TDP][IE]R$/ && !exists $borrowed{$verb} &&
($verb !~ /ATIR$/ || $verb eq 'CLATIR')) {
for(@$table) {
s/([TDP])(U(?:[MS]|NT)?)$/$fric{$1}$2/;
}
}
return $table;
}
my %scrifel = (
ESAN => [ qw( FUIO FUIOS FUAE FUOM FUOS FUNT ) ],
EPESAN => [ qw( EUSIO EUSIOS EPAE EUSUOM EUSUOS EUSIONT ) ],
# KETHEN => [ qw( KIO/KETHIO KETHIOS KIAE KETHUOM KETHUES KIONT ) ],
KETHEN => [ qw( KIO/KETHIO KETHIOS KIAE KETHUOM KETHUES KETHIONT ) ],
NEN => [ qw( NIO NIOS NAE NESUOM NESUES NIONT ) ],
# semi-regular: FAR is like FASCEC, KES like KAIVAN
FAR => [ qw( FASCI FASCIUS FASCU FASCUM FASCUS FASCIUNT ) ],
KES => [ qw( KAIVIO KAIVIOS KAIVAE KAIVUOM KAIVUOS KAIVIONT ) ],
);
sub scrifel {
my $verb = shift;
my $stem = $verb;
my $table;
return $scrifel{$verb} if exists $scrifel{$verb};
ENDING:
for my $ending ( keys %past ) {
( run in 0.746 second using v1.01-cache-2.11-cpan-364913b4093 )