diff --git a/src/Russian/GeographicalNamesInflection.php b/src/Russian/GeographicalNamesInflection.php index 08029cd..8f94924 100644 --- a/src/Russian/GeographicalNamesInflection.php +++ b/src/Russian/GeographicalNamesInflection.php @@ -148,6 +148,30 @@ public static function getCases($name) self::PREDLOJ => $prefix . 'ой', ]; + // Россошь + case 'шь': + $prefix = S::name(S::slice($name, 0, -1)); + return [ + self::IMENIT => $prefix.'ь', + self::RODIT => $prefix.'и', + self::DAT => $prefix.'и', + self::VINIT => $prefix.'ь', + self::TVORIT => $prefix.'ью', + self::PREDLOJ => $prefix.'и', + ]; + + // Орёл + case 'ел': + $prefix = S::name(S::slice($name, 0, -2)); + return [ + self::IMENIT => $prefix.'ёл', + self::RODIT => $prefix.'ла', + self::DAT => $prefix.'лу', + self::VINIT => $prefix.'ла', + self::TVORIT => $prefix.'лом', + self::PREDLOJ => $prefix.'ле', + ]; + // Грозный, Благодарный case 'ый': $prefix = S::name(S::slice($name, 0, -2)); @@ -160,7 +184,7 @@ public static function getCases($name) self::PREDLOJ => $prefix . 'ом', ]; - // Ставрополь, Ярославль + // Ставрополь, Ярославль, Электросталь case 'ль': $prefix = S::name(S::slice($name, 0, -1)); return [ @@ -169,7 +193,7 @@ public static function getCases($name) self::DAT => $prefix . 'ю', self::VINIT => $prefix . 'ь', self::TVORIT => $prefix . 'ем', - self::PREDLOJ => $prefix . 'е', + self::PREDLOJ => $prefix.(S::name(S::slice($name == 'электросталь', -1)) ? 'и' : 'е'), ]; // Тверь, Анадырь @@ -272,8 +296,31 @@ public static function getCases($name) switch (S::slice($name, -1)) { - // Азия + case 'р': + // Бор + $prefix = S::name(S::slice($name, 0, -1)); + return [ + self::IMENIT => $prefix.'р', + self::RODIT => $prefix.'ра', + self::DAT => $prefix.'ру', + self::VINIT => $prefix.'р', + self::TVORIT => $prefix.'ром', + self::PREDLOJ => $prefix.'ру', + ]; + case 'ы': + // Чебоксары, Шахты + $prefix = S::name(S::slice($name, 0, -1)); + return [ + self::IMENIT => $prefix.'ы', + self::RODIT => $prefix.(self::isVelarConsonant(S::slice($name, -1, -1)) == ' '), + self::DAT => $prefix.'ам', + self::VINIT => $prefix.'ы', + self::TVORIT => $prefix.'ами', + self::PREDLOJ => $prefix.'ах', + ]; + case 'я': + // Азия $prefix = S::name(S::slice($name, 0, -1)); return [ self::IMENIT => S::name($name), @@ -328,6 +375,9 @@ public static function getCases($name) // ово, ёво, ... if (in_array(S::slice($name, -3, -1), $suffixes, true)) { $prefix = S::name(S::slice($name, 0, -1)); + return [ + self::PREDLOJ => $prefix.'о', + ]; } // ов, её, ... elseif (in_array(S::slice($name, -2), $suffixes, true)) { @@ -363,4 +413,4 @@ public static function getCase($name, $case) $forms = self::getCases($name); return $forms[$case]; } -} +} \ No newline at end of file