From dd63975085ae4ccde2e6344ee931706d0b3e26ed Mon Sep 17 00:00:00 2001 From: wapmorgan Date: Wed, 30 Aug 2017 21:52:43 +0300 Subject: [PATCH] Add methods to prepend words with prepositional --- README-ru.md | 61 +++++++++++++++------------ src/Russian/RussianLanguage.php | 61 +++++++++++++++++++++++++++ src/Russian/functions.php | 16 ------- tests/Russian/FunctionsTest.php | 2 +- tests/Russian/RussianLanguageTest.php | 52 +++++++++++++++++++++++ 5 files changed, 149 insertions(+), 43 deletions(-) create mode 100644 tests/Russian/RussianLanguageTest.php diff --git a/README-ru.md b/README-ru.md index 25d7f4f..c8ad9f4 100644 --- a/README-ru.md +++ b/README-ru.md @@ -9,8 +9,8 @@ * [Количественные числительные](#Количественные-числительные) * [Порядковые числительные](#Порядковые-числительные) * [Валюты](#Валюты) -* [Окончание глаголов](#Окончание-глаголов) * [Временные интервалы](#Временные-интервалы) +* [Предлоги и окончания](#Предлоги-и-окончания) Для русского языка доступны следующие классы и функции из пространства имён `morphos\Russian\`: @@ -30,11 +30,12 @@ - для генерации текстом различных данных: - `MoneySpeller` - `TimeSpeller` +- для добавления предлогов и окончаний: + - `RussianLanguage` **Функции:** * `inflectName($fullname, $case, $gender = AUTO)` * `pluralize($count, $noun, $animateness = false)` -* `verb($verb, $gender)` ## Имена собственные @@ -340,30 +341,6 @@ MoneySpeller::spell(123.45, 'RUB', MoneySpeller::CLARIFICATION_FORMAT) => '123 ( | R | рэнд | | ₴ | гривна | -## Окончание глаголов - -Глаголы в прошедшем времени в русском языке имеют признак рода. Чтобы упростить подбор правильной формы глаголы используйте функцию: - -```php -string verb($verb, $gender) -``` - -Аргументы: -- `$verb` - глагол в мужском роде и прошедшем времени. -- `$gender` - необходимый род глагола. Если указано не `Gender::MALE`, то будет произведено преобразование в женский род. - -_Пример_ - -```php -use function morphos\Russian\verb; - -$name = 'Анастасия'; -$gender = morphos\Gender::FEMALE; - -$name.' '.verb('добавил', $gender) => 'Анастасия добавила' -$name.' '.verb('поделился', $gender).' публикацией' => 'Анастасия поделилась публикацией' -``` - ## Временные интервалы Класс `TimeSpeller` позволяет записать человеческим языком временной интервал, задаваемый объектом `DateInterval`. @@ -386,3 +363,35 @@ TimeSpeller::spellInterval(new DateInterval('P5YT2M'), TimeSpeller::DIRECTION) = TimeSpeller::spellInterval(new DateInterval('P5YT2M'), TimeSpeller::SEPARATE) => '5 лет и 2 часа' TimeSpeller::spellInterval(new DateInterval('P5YT2M'), TimeSpeller::DIRECTION | TimeSpeller::SEPARATE) => '5 лет и 2 часа назад' ``` + +## Предлоги и окончания +В классе `morphos\Russian\RussianLanguage` есть следующие методы для добавления предлогов или измениня окончаний разных слов: + +* `in($word)` - добавляет предлог `в` или `во` в зависимости от того, с каких букв начинается слово. +* `with($word)` - добавляет предлог `с` или `со` в зависимости от того, с каких букв начинается слово. +* `about($word)` - добавляет предлог `о`, `об` или `обо` в зависимости от того, с каких букв начинается слово. +* `verb($verb, $gender)` - изменяет окончание глагола в прошедшем времени в зависимости от рода. + +### Окончание глаголов + +Глаголы в прошедшем времени в русском языке имеют признак рода. Чтобы упростить подбор правильной формы глаголы используйте функцию: + +```php +string RussianLanguage::verb($verb, $gender) +``` + +Аргументы: +- `$verb` - глагол в мужском роде и прошедшем времени. +- `$gender` - необходимый род глагола. Если указано не `Gender::MALE`, то будет произведено преобразование в женский род. + +_Пример_ + +```php +use morphos\Russian\RussianLanguage; + +$name = 'Анастасия'; +$gender = morphos\Gender::FEMALE; + +$name.' '.RussianLanguage::verb('добавил', $gender) => 'Анастасия добавила' +$name.' '.RussianLanguage::verb('поделился', $gender).' публикацией' => 'Анастасия поделилась публикацией' +``` diff --git a/src/Russian/RussianLanguage.php b/src/Russian/RussianLanguage.php index b4f973c..ab10fa8 100644 --- a/src/Russian/RussianLanguage.php +++ b/src/Russian/RussianLanguage.php @@ -1,6 +1,7 @@ assertEquals($correctVerb, \morphos\Russian\verb($verb, $gender)); + $this->assertEquals($correctVerb, \morphos\Russian\RussianLanguage::verb($verb, $gender)); } public function verbsProvider() diff --git a/tests/Russian/RussianLanguageTest.php b/tests/Russian/RussianLanguageTest.php new file mode 100644 index 0000000..1157aae --- /dev/null +++ b/tests/Russian/RussianLanguageTest.php @@ -0,0 +1,52 @@ +assertEquals($correctVerb, \morphos\Russian\RussianLanguage::verb($verb, $gender)); + } + + public function verbsProvider() + { + return + [ + ['попал', Gender::MALE, 'попал'], + ['попал', Gender::FEMALE, 'попала'], + ['попался', Gender::MALE, 'попался'], + ['попался', Gender::FEMALE, 'попалась'], + ]; + } + + public function testIn() + { + $this->assertEquals('в море', RussianLanguage::in('море')); + $this->assertEquals('во Владивостоке', RussianLanguage::in('Владивостоке')); + } + + public function testWith() + { + $this->assertEquals('с пола', RussianLanguage::with('пола')); + $this->assertEquals('со шкафа', RussianLanguage::with('шкафа')); + $this->assertEquals('со щами', RussianLanguage::with('щами')); + } + + public function testAbout() + { + $this->assertEquals('о материи', RussianLanguage::about('материи')); + $this->assertEquals('об одном', RussianLanguage::about('одном')); + $this->assertEquals('обо всём', RussianLanguage::about('всём')); + } +}