Skip to content

Commit

Permalink
Remove 'о' from all inflections
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Sep 20, 2017
1 parent ff1acaf commit 5d0befd
Show file tree
Hide file tree
Showing 22 changed files with 505 additions and 508 deletions.
39 changes: 29 additions & 10 deletions README-ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ inflectName('Базанов Иосиф Валерьянович') => array(6) {
'dative' => 'Базанову Иосифу Валерьяновичу',
'accusative' => 'Базанова Иосифа Валерьяновича',
'ablative' => 'Базановым Иосифом Валерьяновичем',
'prepositional' => 'о Базанове Иосифе Валерьяновиче'
'prepositional' => 'Базанове Иосифе Валерьяновиче'
}
```

Expand Down Expand Up @@ -111,7 +111,7 @@ FirstNamesInflection::getCases($user_name) => array(6) {
"dative" => "Ивану",
"accusative" => "Ивана",
"ablative" => "Иваном",
"prepositional" => "об Иване"
"prepositional" => "Иване"
}
```

Expand All @@ -129,7 +129,7 @@ MiddleNamesInflection::getCases($user_name) => array(6) {
"dative" => "Сергеевичу",
"accusative" => "Сергеевича",
"ablative" => "Сергеевичем",
"prepositional" => "о Сергеевиче"
"prepositional" => "Сергеевиче"
}
```

Expand All @@ -149,7 +149,7 @@ LastNamesInflection::getCases($user_last_name) => array(6) {
"dative" => "Иванову",
"accusative" => "Иванова",
"ablative" => "Ивановым",
"prepositional" => "об Иванове"
"prepositional" => "Иванове"
}
```

Expand All @@ -161,6 +161,12 @@ LastNamesInflection::getCases($user_last_name) => array(6) {
- `string getCase($name, $case)` - склоняет имя и возвращает результат.`$case` - это одна из констант `morphos\Cases` или `morphos\Russian\Cases`.
- `array getCases($word)` - склоняет имя во всех падежах и возвращает результат в виде массива.

Что склоняется:
- название города с приставкой или без - `Москва`, `город Санкт-Петербург`
- название области: `Ростовская область`
- название края: `Краснодарский край`
- страны: `Россия`, `Франция`, `Украина`

_Пример_

```php
Expand All @@ -174,7 +180,7 @@ GeographicalNamesInflection::getCases('Саратов') => array(6) {
"dative" => "Саратову",
"accusative" => "Саратов",
"ablative" => "Саратовом",
"prepositional" => "о Саратове"
"prepositional" => "Саратове"
}
```

Expand Down Expand Up @@ -203,7 +209,7 @@ NounDeclension::getCases('линейка') => array(6) {
"dative" => "линейке",
"accusative" => "линейку",
"ablative" => "линейкой",
"prepositional" => "о линейке"
"prepositional" => "линейке"
}
```

Expand Down Expand Up @@ -231,7 +237,7 @@ NounPluralization::getCases('поле') => array(6) {
"dative" => "полям",
"accusative" => "поля",
"ablative" => "полями",
"prepositional" => "о полях"
"prepositional" => "полях"
}

$count = 10;
Expand Down Expand Up @@ -269,7 +275,7 @@ CardinalNumeralGenerator::getCases($number) => array(6) {
"dative" => "четырем тысячам тремстам пятидесяти одному",
"accusative" => "четыре тысячи триста пятьдесят один",
"ablative" => "четырьмя тысячами тремястами пятьюдесятью одним",
"prepositional" => "о четырех тысячах трехстах пятидесяти одном"
"prepositional" => "четырех тысячах трехстах пятидесяти одном"
}
```

Expand All @@ -294,7 +300,7 @@ OrdinalNumeralGenerator::getCases($number) => array(6) {
"dative" => "шестьдесят семь тысяч девятьсот сорок пятому",
"accusative" => "шестьдесят семь тысяч девятьсот сорок пятый",
"ablative" => "шестьдесят семь тысяч девятьсот сорок пятым",
"prepositional" => "о шестьдесят семь тысяч девятьсот сорок пятом"
"prepositional" => "шестьдесят семь тысяч девятьсот сорок пятом"
}
```

Expand Down Expand Up @@ -372,8 +378,21 @@ TimeSpeller::spellInterval(new DateInterval('P5YT2M'), TimeSpeller::DIRECTION |
* `about($word)` - добавляет предлог `о`, `об` или `обо` в зависимости от того, с каких букв начинается слово.
* `verb($verb, $gender)` - изменяет окончание глагола в прошедшем времени в зависимости от рода.

### Предлоги

Чтобы добавить предлог `о` или `об` в зависимости от того, с чего начинается следующее слово, используйте метод `about()`:
```php
use morphos\Russian\FirstNamesInflection;
use morphos\Russian\RussianLanguage;

RussianLanguage::about('Иване') => 'об Иване'
// или комбинируйте с другими функциями склонения
$name = 'Андрей';
RussianLanguage::about(FirstNamesInflection::getCase($name, 'п')) => 'об Андрее'
```

### Окончание глаголов

Глаголы в прошедшем времени в русском языке имеют признак рода. Чтобы упростить подбор правильной формы глаголы используйте функцию:

```php
Expand Down
18 changes: 0 additions & 18 deletions src/BaseInflection.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,4 @@ public static function getCases($name)
public static function getCase($name, $case)
{
}

/**
* Составляет один массив с падежами из нескольких массивов падежей разных слов
* @param array $words Двумерный массив слов и их падежей
* @param string $delimiter Разделитель между падежами слов
* @return array Одномерный массив падежей
*/
public static function composeCasesFromWords(array $words, $delimiter = ' ') {
$cases = [];
foreach (CasesHelper::getAllCases() as $case) {
$composed_case = [];
foreach ($words as $wordCases) {
$composed_case[] = $wordCases[$case];
}
$cases[$case] = implode($delimiter, $composed_case);
}
return $cases;
}
}
18 changes: 18 additions & 0 deletions src/CasesHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,22 @@ public static function getAllCases()
Cases::PREPOSITIONAL,
];
}

/**
* Составляет один массив с падежами из нескольких массивов падежей разных слов
* @param array $words Двумерный массив слов и их падежей
* @param string $delimiter Разделитель между падежами слов
* @return array Одномерный массив падежей
*/
public static function composeCasesFromWords(array $words, $delimiter = ' ') {
$cases = [];
foreach (CasesHelper::getAllCases() as $case) {
$composed_case = [];
foreach ($words as $wordCases) {
$composed_case[] = $wordCases[$case];
}
$cases[$case] = implode($delimiter, $composed_case);
}
return $cases;
}
}
37 changes: 17 additions & 20 deletions src/Russian/CardinalNumeralGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,23 +66,23 @@ class CardinalNumeralGenerator extends NumeralGenerator implements Cases
self::DAT => 'одному',
self::VINIT => 'один',
self::TVORIT => 'одним',
self::PREDLOJ => 'об одном',
self::PREDLOJ => 'одном',
),
self::FEMALE => array(
self::IMENIT => 'одна',
self::RODIT => 'одной',
self::DAT => 'одной',
self::VINIT => 'одну',
self::TVORIT => 'одной',
self::PREDLOJ => 'об одной',
self::PREDLOJ => 'одной',
),
self::NEUTER => array(
self::IMENIT => 'одно',
self::RODIT => 'одного',
self::DAT => 'одному',
self::VINIT => 'одно',
self::TVORIT => 'одним',
self::PREDLOJ => 'об одном',
self::PREDLOJ => 'одном',
),
),
'два' => array(
Expand All @@ -92,23 +92,23 @@ class CardinalNumeralGenerator extends NumeralGenerator implements Cases
self::DAT => 'двум',
self::VINIT => 'два',
self::TVORIT => 'двумя',
self::PREDLOJ => 'о двух',
self::PREDLOJ => 'двух',
),
self::FEMALE => array(
self::IMENIT => 'две',
self::RODIT => 'двух',
self::DAT => 'двум',
self::VINIT => 'две',
self::TVORIT => 'двумя',
self::PREDLOJ => 'о двух',
self::PREDLOJ => 'двух',
),
self::NEUTER => array(
self::IMENIT => 'два',
self::RODIT => 'двух',
self::DAT => 'двум',
self::VINIT => 'два',
self::TVORIT => 'двумя',
self::PREDLOJ => 'о двух',
self::PREDLOJ => 'двух',
),
),
'три' => array(
Expand All @@ -117,39 +117,39 @@ class CardinalNumeralGenerator extends NumeralGenerator implements Cases
self::DAT => 'трем',
self::VINIT => 'три',
self::TVORIT => 'тремя',
self::PREDLOJ => 'о трех',
self::PREDLOJ => 'трех',
),
'четыре' => array(
self::IMENIT => 'четыре',
self::RODIT => 'четырех',
self::DAT => 'четырем',
self::VINIT => 'четыре',
self::TVORIT => 'четырьмя',
self::PREDLOJ => 'о четырех',
self::PREDLOJ => 'четырех',
),
'двести' => array(
self::IMENIT => 'двести',
self::RODIT => 'двухсот',
self::DAT => 'двумстам',
self::VINIT => 'двести',
self::TVORIT => 'двумястами',
self::PREDLOJ => 'о двухстах',
self::PREDLOJ => 'двухстах',
),
'восемьсот' => array(
self::IMENIT => 'восемьсот',
self::RODIT => 'восьмисот',
self::DAT => 'восьмистам',
self::VINIT => 'восемьсот',
self::TVORIT => 'восьмистами',
self::PREDLOJ => 'о восьмистах',
self::PREDLOJ => 'восьмистах',
),
'тысяча' => array(
self::IMENIT => 'тысяча',
self::RODIT => 'тысяч',
self::DAT => 'тысячам',
self::VINIT => 'тысяч',
self::TVORIT => 'тысячей',
self::PREDLOJ => 'о тысячах',
self::PREDLOJ => 'тысячах',
),
);

Expand All @@ -172,7 +172,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => $prefix.'и',
self::VINIT => $word,
self::TVORIT => $prefix.'ью',
self::PREDLOJ => self::choosePrepositionByFirstLetter($prefix, 'об', 'о').' '.$prefix.'и',
self::PREDLOJ => $prefix.'и',
);
} elseif (in_array($number, array(40, 90, 100))) {
$prefix = $number == 40 ? $word : S::slice($word, 0, -1);
Expand All @@ -182,7 +182,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => $prefix.'а',
self::VINIT => $word,
self::TVORIT => $prefix.'а',
self::PREDLOJ => self::choosePrepositionByFirstLetter($prefix, 'об', 'о').' '.$prefix.'а',
self::PREDLOJ => $prefix.'а',
);
} elseif (($number >= 50 && $number <= 80)) {
$prefix = S::slice($word, 0, -6);
Expand All @@ -192,7 +192,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => $prefix.'идесяти',
self::VINIT => $prefix.'ьдесят',
self::TVORIT => $prefix.'ьюдесятью',
self::PREDLOJ => self::choosePrepositionByFirstLetter($word, 'об', 'о').' '.$prefix.'идесяти',
self::PREDLOJ => $prefix.'идесяти',
);
} elseif (in_array($number, array(300, 400))) {
$prefix = S::slice($word, 0, -4);
Expand All @@ -202,7 +202,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => $prefix.'емстам',
self::VINIT => $word,
self::TVORIT => $prefix.($number == 300 ? 'е' : 'ь').'мястами',
self::PREDLOJ => self::choosePrepositionByFirstLetter($word, 'об', 'о').' '.$prefix.'ехстах',
self::PREDLOJ => $prefix.'ехстах',
);
} elseif ($number >= 500 && $number <= 900) {
$prefix = S::slice($word, 0, -4);
Expand All @@ -212,7 +212,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => $prefix.'истам',
self::VINIT => $word,
self::TVORIT => $prefix.'ьюстами',
self::PREDLOJ => self::choosePrepositionByFirstLetter($word, 'об', 'о').' '.$prefix.'истах',
self::PREDLOJ => $prefix.'истах',
);
} elseif (isset(self::$exponents[$number])) {
return NounDeclension::getCases($word, false);
Expand All @@ -224,7 +224,7 @@ public static function getCases($number, $gender = self::MALE)
self::DAT => 'нолю',
self::VINIT => 'ноль',
self::TVORIT => 'нолём',
self::PREDLOJ => 'о ноле',
self::PREDLOJ => 'ноле',
);
}
// compound numeral
Expand Down Expand Up @@ -270,9 +270,6 @@ public static function getCases($number, $gender = self::MALE)
foreach (array(self::IMENIT, self::RODIT, self::DAT, self::VINIT, self::TVORIT, self::PREDLOJ) as $case) {
$result[$case] = array();
foreach ($parts as $partN => $part) {
if ($case == self::PREDLOJ && $partN > 0) {
list(, $part[$case]) = explode(' ', $part[$case], 2);
}
$result[$case][] = $part[$case];
}
$result[$case] = implode(' ', $result[$case]);
Expand Down
Loading

0 comments on commit 5d0befd

Please sign in to comment.