Skip to content

Commit

Permalink
Fix rules for words ending with '-йка'
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Feb 3, 2017
1 parent e424f31 commit cc2a70a
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/Russian/Plurality.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public function getForms($word, $animateness = false) {

$forms = array();

if ($last == 'ч' || slice($word, -2) == 'чь' || ($this->isVowel($last) && slice($word, -2, -1) == 'ч'))
if ($last == 'ч' || slice($word, -2) == 'чь' || ($this->isVowel($last) && in_array(slice($word, -2, -1), array('ч', 'к')))) // before ч, чь, ч+vowel, к+vowel
$forms[Cases::IMENIT_1] = $prefix.'и';
else if ($last == 'н')
$forms[Cases::IMENIT_1] = $prefix.'ы';
Expand All @@ -81,9 +81,9 @@ public function getForms($word, $animateness = false) {
else
$forms[Cases::RODIT_2] = $prefix;
}
else if (slice($word, -2) == 'ка') {
// чашка, вилка, ложка, тарелка
else if (slice($word, -2) == 'ка') { // words ending with -ка: чашка, вилка, ложка, тарелка, копейка, батарейка
if (slice($word, -3, -2) == 'л') $forms[Cases::RODIT_2] = slice($word, 0, -2).'ок';
else if (slice($word, -3, -2) == 'й') $forms[Cases::RODIT_2] = slice($word, 0, -3).'ек';
else $forms[Cases::RODIT_2] = slice($word, 0, -2).'ек';
}
else if (in_array($last, array('а'))) // обида, ябеда
Expand Down
2 changes: 2 additions & 0 deletions tests/Russian/GeneralDeclensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public function wordsProvider() {
array('пустыня', false, 2, array('пустыня', 'пустыни', 'пустыне', 'пустыню', 'пустыней', 'о пустыне')),
array('вилка', false, 2, array('вилка', 'вилки', 'вилке', 'вилку', 'вилкой', 'о вилке')),
array('тысяча', false, 2, array('тысяча', 'тысячи', 'тысяче', 'тысячу', 'тысячей', 'о тысяче')),
array('копейка', false, 2, array('копейка', 'копейки', 'копейке', 'копейку', 'копейкой', 'о копейке')),
array('батарейка', false, 2, array('батарейка', 'батарейки', 'батарейке', 'батарейку', 'батарейкой', 'о батарейке')),
array('ночь', false, 3, array('ночь', 'ночи', 'ночи', 'ночь', 'ночью', 'о ночи')),
array('новость', false, 3, array('новость', 'новости', 'новости', 'новость', 'новостью', 'о новости')),
);
Expand Down
2 changes: 2 additions & 0 deletions tests/Russian/PluralityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ public function pluralWordsProvider() {
array('молния', false, array('молния', 'молний', 'молниям', 'молния', 'молниями', 'о молниях')),
array('тысяча', false, array('тысячи', 'тысяч', 'тысячам', 'тысячи', 'тысячами', 'о тысячах')),
array('сообщение', false, array('сообщения', 'сообщений', 'сообщениям', 'сообщения', 'сообщениями', 'о сообщениях')),
array('копейка', false, array('копейки', 'копеек', 'копейкам', 'копейки', 'копейками', 'о копейках')),
array('батарейка', false, array('батарейки', 'батареек', 'батарейкам', 'батарейки', 'батарейками', 'о батарейках')),
);
}
}

0 comments on commit cc2a70a

Please sign in to comment.