public function getForms($name, $gender)
{
$name = lower($name);
if ($gender == self::MAN) {
if (in_array(upper(slice($name, -1)), array_diff(self::$consonants, array('Й')))) {
// hard consonant
$prefix = name($name);
// special cases for Лев, Павел
if ($name == 'лев') {
return $this->getFormsForLev();
} else {
if ($name == 'павел') {
return $this->getFormsForPavel();
} else {
return array(self::IMENIT_1 => $prefix, self::RODIT_2 => $prefix . 'а', self::DAT_3 => $prefix . 'у', self::VINIT_4 => $prefix . 'а', self::TVORIT_5 => $this->isHissingConsonant(slice($name, -1)) || slice($name, -1) == 'ц' ? $prefix . 'ем' : $prefix . 'ом', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
}
}
} else {
if (slice($name, -1) == 'ь' && in_array(upper(slice($name, -2, -1)), self::$consonants)) {
// soft consonant
$prefix = name(slice($name, 0, -1));
return array(self::IMENIT_1 => $prefix . 'ь', self::RODIT_2 => $prefix . 'я', self::DAT_3 => $prefix . 'ю', self::VINIT_4 => $prefix . 'я', self::TVORIT_5 => $prefix . 'ем', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
} else {
if (in_array(slice($name, -2), array('ай', 'ей', 'ой', 'уй', 'яй', 'юй', 'ий'))) {
$prefix = name(slice($name, 0, -1));
$postfix = slice($name, -2) == 'ий' ? 'и' : 'е';
return array(self::IMENIT_1 => $prefix . 'й', self::RODIT_2 => $prefix . 'я', self::DAT_3 => $prefix . 'ю', self::VINIT_4 => $prefix . 'я', self::TVORIT_5 => $prefix . 'ем', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . $postfix : 'о ' . $prefix . $postfix);
} else {
if (slice($name, -1) == 'а' && ($before = slice($name, -2, -1)) && $this->isConsonant($before) && !in_array($before, array('ц'))) {
$prefix = name(slice($name, 0, -1));
$postfix = $this->isHissingConsonant($before) || in_array($before, array('г', 'к', 'х')) ? 'и' : 'ы';
return array(self::IMENIT_1 => $prefix . 'а', self::RODIT_2 => $prefix . $postfix, self::DAT_3 => $prefix . 'е', self::VINIT_4 => $prefix . 'у', self::TVORIT_5 => $prefix . 'ой', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
} else {
if (slice($name, -2) == 'ия') {
$prefix = name(slice($name, 0, -1));
return array(self::IMENIT_1 => $prefix . 'я', self::RODIT_2 => $prefix . 'и', self::DAT_3 => $prefix . 'и', self::VINIT_4 => $prefix . 'ю', self::TVORIT_5 => $prefix . 'ей', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'и' : 'о ' . $prefix . 'и');
} else {
if (slice($name, -2) == 'ло' || slice($name, -2) == 'ко') {
$prefix = name(slice($name, 0, -1));
$postfix = slice($name, -2, -1) == 'к' ? 'и' : 'ы';
return array(self::IMENIT_1 => $prefix . 'о', self::RODIT_2 => $prefix . $postfix, self::DAT_3 => $prefix . 'е', self::VINIT_4 => $prefix . 'у', self::TVORIT_5 => $prefix . 'ой', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
} else {
return false;
}
}
}
}
}
}
} else {
if (slice($name, -1) == 'а' && ($before = slice($name, -2, -1))) {
$prefix = name(slice($name, 0, -1));
if ($before != 'ц') {
$postfix = $this->isHissingConsonant($before) || in_array($before, array('г', 'к', 'х')) ? 'и' : 'ы';
return array(self::IMENIT_1 => $prefix . 'а', self::RODIT_2 => $prefix . $postfix, self::DAT_3 => $prefix . 'е', self::VINIT_4 => $prefix . 'у', self::TVORIT_5 => $prefix . 'ой', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
} else {
return array(self::IMENIT_1 => $prefix . 'а', self::RODIT_2 => $prefix . 'ы', self::DAT_3 => $prefix . 'е', self::VINIT_4 => $prefix . 'у', self::TVORIT_5 => $prefix . 'ей', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
}
} else {
if (slice($name, -1) == 'я' and slice($name, -2, -1) != 'и') {
$prefix = name(slice($name, 0, -1));
return array(self::IMENIT_1 => $prefix . 'я', self::RODIT_2 => $prefix . 'и', self::DAT_3 => $prefix . 'е', self::VINIT_4 => $prefix . 'ю', self::TVORIT_5 => $prefix . 'ей', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'е' : 'о ' . $prefix . 'е');
} else {
if (slice($name, -2) == 'ия') {
$prefix = name(slice($name, 0, -1));
return array(self::IMENIT_1 => $prefix . 'я', self::RODIT_2 => $prefix . 'и', self::DAT_3 => $prefix . 'и', self::VINIT_4 => $prefix . 'ю', self::TVORIT_5 => $prefix . 'ей', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'и' : 'о ' . $prefix . 'и');
} else {
if (slice($name, -1) == 'ь' && $this->isConsonant(slice($name, -2, -1))) {
$prefix = name(slice($name, 0, -1));
return array(self::IMENIT_1 => $prefix . 'ь', self::RODIT_2 => $prefix . 'и', self::DAT_3 => $prefix . 'и', self::VINIT_4 => $prefix . 'ь', self::TVORIT_5 => $prefix . 'ью', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'и' : 'о ' . $prefix . 'и');
} else {
if ($this->isHissingConsonant(slice($name, -1))) {
$prefix = name($name);
return array(self::IMENIT_1 => $prefix, self::RODIT_2 => $prefix . 'и', self::DAT_3 => $prefix . 'и', self::VINIT_4 => $prefix, self::TVORIT_5 => $prefix . 'ью', self::PREDLOJ_6 => in_array(upper(slice($name, 0, 1)), self::$vowels) ? 'об ' . $prefix . 'и' : 'о ' . $prefix . 'и');
} else {
return false;
}
}
}
}
}
}
}