Skip to content

Commit

Permalink
Add verb() function to Russian language
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Jul 12, 2017
1 parent 3f09732 commit 583fed0
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 3 deletions.
24 changes: 21 additions & 3 deletions src/Russian/functions.php
Expand Up @@ -3,7 +3,8 @@

use morphos\S;

function name($fullname, $case = null, $gender = null) {
function name($fullname, $case = null, $gender = null)
{
if (in_array($case, array('m', 'f'))) {
$gender = $case;
$case = null;
Expand Down Expand Up @@ -48,7 +49,8 @@ function name($fullname, $case = null, $gender = null) {
return implode(' ', $name);
}

function detectGender($fullname) {
function detectGender($fullname)
{
static $first, $middle, $last;
$name = explode(' ', S::lower($fullname));
if (count($name) < 2 || count($name) > 3)
Expand All @@ -59,6 +61,22 @@ function detectGender($fullname) {
LastNamesDeclension::detectGender($name[0]);
}

function pluralize($word, $count = 2, $animateness = false) {
function pluralize($word, $count = 2, $animateness = false)
{
return Plurality::pluralize($word, $count, $animateness);
}

/**
* @param string $verb Verb to modificate if gender is female
* @param string $gender If not `m`, verb will be modificated
* @return string Correct verb
*/
function verb($verb, $gender)
{
// возвратный глагол
if (S::slice($verb, -2) == 'ся')
return ($gender == 'm' ? $verb : mb_substr($verb, 0, -2).'ась');

// обычный глагол
return ($gender == 'm' ? $verb : $verb.'а');
}
41 changes: 41 additions & 0 deletions tests/Russian/FunctionsTest.php
@@ -0,0 +1,41 @@
<?php
namespace morphos\test\Russian;
require __DIR__.'/../../vendor/autoload.php';

use morphos\Gender;
use morphos\NumeralCreation;
use morphos\Russian\Cases;
use morphos\Russian\CardinalNumeral;

class FunctionsTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider verbsProvider()
*/
public function testVerb($verb, $gender, $correctVerb)
{
$this->assertEquals($correctVerb, \morphos\Russian\verb($verb, $gender));
}

public function verbsProvider()
{
return
[
['попал', Gender::MALE, 'попал'],
['попал', Gender::FEMALE, 'попала'],
['попался', Gender::MALE, 'попался'],
['попался', Gender::FEMALE, 'попалась'],
];
}

public function testDetectGender()
{
$this->assertEquals(Gender::MALE, \morphos\Russian\detectGender('Иванов Петр'));
$this->assertEquals(Gender::FEMALE, \morphos\Russian\detectGender('Мирова Анастасия'));
}

public function testPluralize()
{
$this->assertEquals('сообщений', \morphos\Russian\pluralize('сообщение', 10));
}
}

0 comments on commit 583fed0

Please sign in to comment.