From 210f741551c409cd17eecba82eecc461e0cde1de Mon Sep 17 00:00:00 2001 From: wapmorgan Date: Thu, 29 Nov 2018 22:35:59 +0300 Subject: [PATCH] Fix declension of animated words. fix #44, #43 --- src/Russian/NounDeclension.php | 22 +++++++++++++--------- tests/Russian/NounDeclensionTest.php | 6 ++++-- tests/Russian/NounPluralizationTest.php | 2 ++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/Russian/NounDeclension.php b/src/Russian/NounDeclension.php index 91e32fa..d64c62d 100644 --- a/src/Russian/NounDeclension.php +++ b/src/Russian/NounDeclension.php @@ -35,25 +35,28 @@ class NounDeclension extends \morphos\BaseInflection implements Cases, Gender ]; protected static $masculineWithSoft = [ - 'олень', - 'конь', 'ячмень', 'путь', - 'зверь', 'шкворень', 'пельмень', - 'тюлень', - 'выхухоль', 'табель', 'рояль', 'шампунь', - 'конь', - 'лось', 'гвоздь', - 'медведь', 'рубль', 'дождь', + 'зверь', 'юань', + 'олень', + 'конь', + 'конь', + 'лось', + 'тюлень', + 'выхухоль', + 'медведь', + 'председатель', + 'руководитель', + 'заместитель', ]; protected static $masculineWithSoftAndRunAwayVowels = [ @@ -123,9 +126,10 @@ public static function detectGender($word) /** * Определение склонения (по школьной программе) существительного. * @param $word + * @param bool $animateness * @return int */ - public static function getDeclension($word) + public static function getDeclension($word, $animateness = false) { $word = S::lower($word); $last = S::slice($word, -1); diff --git a/tests/Russian/NounDeclensionTest.php b/tests/Russian/NounDeclensionTest.php index 35a1b57..368dda7 100644 --- a/tests/Russian/NounDeclensionTest.php +++ b/tests/Russian/NounDeclensionTest.php @@ -47,8 +47,6 @@ public function wordsProvider() ['дом', false, 2, ['дом', 'дома', 'дому', 'дом', 'домом', 'доме']], ['поле', false, 2, ['поле', 'поля', 'полю', 'поле', 'полем', 'поле']], ['кирпич', false, 2, ['кирпич', 'кирпича', 'кирпичу', 'кирпич', 'кирпичем', 'кирпиче']], - ['гений', true, 2, ['гений', 'гения', 'гению', 'гения', 'гением', 'гении']], - ['ястреб', true, 2, ['ястреб', 'ястреба', 'ястребу', 'ястреба', 'ястребом', 'ястребе']], ['склон', false, 2, ['склон', 'склона', 'склону', 'склон', 'склоном', 'склоне']], ['сообщение', false, 2, ['сообщение', 'сообщения', 'сообщению', 'сообщение', 'сообщением', 'сообщении']], ['общение', false, 2, ['общение', 'общения', 'общению', 'общение', 'общением', 'общении']], @@ -65,6 +63,10 @@ public function wordsProvider() ['путь', false, 2, ['путь', 'пути', 'пути', 'путь', 'путем', 'пути']], ['поселок', false, 2, ['поселок', 'поселка', 'поселку', 'поселок', 'поселком', 'поселке']], ['пирсинг', false, 2, ['пирсинг', 'пирсинга', 'пирсингу', 'пирсинг', 'пирсингом', 'пирсинге']], + ['гений', true, 2, ['гений', 'гения', 'гению', 'гения', 'гением', 'гении']], + ['ястреб', true, 2, ['ястреб', 'ястреба', 'ястребу', 'ястреба', 'ястребом', 'ястребе']], + ['руководитель', true, 2, ['руководитель', 'руководителя', 'руководителю', 'руководителя', 'руководителем', 'руководителе']], + ['председатель', true, 2, ['председатель', 'председателя', 'председателю', 'председателя', 'председателем', 'председателе']], // сущ мужского рода с мягким окончанием ['гвоздь', false, 2, ['гвоздь', 'гвоздя', 'гвоздю', 'гвоздь', 'гвоздем', 'гвозде']], ['день', false, 2, ['день', 'дня', 'дню', 'день', 'днем', 'дне']], diff --git a/tests/Russian/NounPluralizationTest.php b/tests/Russian/NounPluralizationTest.php index 7a3f495..23ee86d 100644 --- a/tests/Russian/NounPluralizationTest.php +++ b/tests/Russian/NounPluralizationTest.php @@ -98,6 +98,8 @@ public function pluralWordsProvider() ['новость', false, ['новости', 'новостей', 'новостям', 'новости', 'новостями', 'новостях']], ['тень', false, ['тени', 'теней', 'теням', 'тени', 'тенями', 'тенях']], + ['руководитель', true, ['руководителя', 'руководителей', 'руководителям', 'руководителей', 'руководителями', 'руководителях']], + // Адъективное склонение // мужской род ['выходной', false, ['выходные', 'выходных', 'выходным', 'выходные', 'выходными', 'выходных']],