Skip to content

Commit

Permalink
Update russian GeographicalNamesInflection::isMutable() and fix 'Респ…
Browse files Browse the repository at this point in the history
…ублика' case
  • Loading branch information
wapmorgan committed Jul 28, 2018
1 parent 58101ed commit 6227400
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
9 changes: 7 additions & 2 deletions src/Russian/GeographicalNamesInflection.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ public static function isMutable($name)
}

if (strpos($name, ' ') !== false) {
list($first_part, $last_part) = explode(' ', $name, 2);
// explode() is not applicable because Geographical unit may have few words
$first_part = S::slice($name, 0, S::findFirstPosition($name, ' '));
$last_part = S::slice($name,
S::findLastPosition($name, ' ') + 1);

// город N, село N, хутор N, район N, поселок N, округ N, республика N
// N область, N край
Expand Down Expand Up @@ -90,7 +93,9 @@ public static function getCases($name)
if (in_array($first_part, ['город', 'село', 'хутор', 'пгт', 'район', 'поселок', 'округ', 'республика'], true)) {
if ($first_part !== 'пгт')
return self::composeCasesFromWords([
NounDeclension::getCases($first_part),
$first_part !== 'республика'
? NounDeclension::getCases($first_part)
: array_map(['\\morphos\\S', 'name'], NounDeclension::getCases($first_part)),
array_fill_keys(self::getAllCases(), S::name(S::slice($name, S::length($first_part) + 1)))
]);
else
Expand Down
2 changes: 1 addition & 1 deletion tests/Russian/GeographicalNamesInflectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public function wordsProvider()
['село Привольное', 'села Привольное', 'селу Привольное', 'село Привольное', 'селом Привольное', 'селе Привольное'],

// республика N
['республика Крым', 'республики Крым', 'республике Крым', 'республику Крым', 'республикой Крым', 'республике Крым'],
['Республика Крым', 'Республики Крым', 'Республике Крым', 'Республику Крым', 'Республикой Крым', 'Республике Крым'],

// исключения
['Великие Луки', 'Великих Лук', 'Великим Лукам', 'Великие Луки', 'Великими Луками', 'Великих Луках'],
Expand Down

0 comments on commit 6227400

Please sign in to comment.