Skip to content

Commit

Permalink
Expose more routes
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Aug 8, 2023
1 parent 240d008 commit f1be0ad
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
17 changes: 7 additions & 10 deletions README-ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,8 @@ Internals:

Чтобы просклонять все части имени можно использовать следующую функцию:

```php
string inflectName($fullname, $case, $gender = null)
```
- PHP: `string inflectName($fullname, $case, $gender = null)`
- api: `GET /ru/name?fullname=...&case=...&gender=...`

Аргументы:
- `$fullname` - имя в формате `Имя`, `Фамилия Имя` или `Фамилия Имя Отчество`.
Expand All @@ -72,7 +71,7 @@ inflectName('Базанов Иосиф', 'дательный') => 'Базано
inflectName('Иосиф', 'творительный') => 'Иосифом'
```

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

```php
array getNameCases($fullname, $gender = null)
Expand Down Expand Up @@ -100,9 +99,8 @@ getNameCases('Базанов Иосиф Валерьянович') => array(6) {

Если есть необходимость определить пол по имени, воспользуйтесь функцией:

```php
string|null detectGender($fullname)
```
- PHP: `string|null detectGender($name)`
- api: `GET /ru/detectGender?name=...`
Если удалось определить пол, будет возвращена одна из констант класса `morphos\Gender`, `null` в ином случае.

## Географические названия
Expand Down Expand Up @@ -139,9 +137,8 @@ GeographicalNamesInflection::getCases('Саратов') => array(6) {

Для склонения существительных, используемых с количеством предметов/чего-либо предназначена функция `pluralize`:

```php
pluralize($count, $noun, $animateness = false, $case = null)
```
- PHP: `pluralize($count, $noun, $animateness = false, $case = null)`
- api: `GET /ru/pluralize?count=...&noun=...&animateness=...&case=...`

Аргументы:
- `$count` - количество предметов.
Expand Down
10 changes: 6 additions & 4 deletions src/Russian/NounDeclension.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class NounDeclension extends BaseInflection implements Cases, Gender
'дождь',
'заместитель',
'зверь',
'издатель',
'любитель',
'камень',
'конь',
Expand All @@ -153,6 +154,7 @@ class NounDeclension extends BaseInflection implements Cases, Gender
'пельмень',
'пень',
'покупатель',
'пользователь',
'председатель',
'представитель',
'преподаватель',
Expand Down Expand Up @@ -370,19 +372,19 @@ public static function getDeclension($word, $animateness = false)
$word = S::lower($word);
$last = S::slice($word, -1);
if (isset(static::$abnormalExceptions[$word]) || in_array($word, static::$abnormalExceptions, true)) {
return 2;
return self::SECOND_DECLENSION;
}

if (in_array($last, ['а', 'я'], true) && S::slice($word, -2) != 'мя') {
return 1;
return self::FIRST_DECLENSION;
} elseif (RussianLanguage::isConsonant($last) || in_array($last, ['о', 'е', 'ё'], true)
|| ($last == 'ь' && RussianLanguage::isConsonant(S::slice($word, -2,
-1)) && !RussianLanguage::isHissingConsonant(S::slice($word, -2, -1))
&& (in_array($word, static::$masculineWithSoft,
true)) /*|| in_array($word, static::$masculineWithSoftAndRunAwayVowels, true)*/)) {
return 2;
return self::SECOND_DECLENSION;
} else {
return 3;
return self::THIRD_DECLENSION;
}
}

Expand Down
14 changes: 14 additions & 0 deletions web/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
$r->addRoute('GET', '/name', ['Russian', 'name']);
$r->addRoute('GET', '/detectGender', ['Russian', 'detectGender']);
$r->addRoute('GET', '/pluralize', ['Russian', 'pluralize']);
$r->addGroup('/noun', function (\FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/cases', ['Russian', 'nounCases']);
$r->addRoute('GET', '/pluralize', ['Russian', 'nounPluralize']);
});
});
});

Expand All @@ -41,6 +45,16 @@ public function pluralize(array $args)
{
return \morphos\Russian\pluralize($args['count'], $args['word'], $args['animateness'] ?? false, $args['case'] ?? null);
}

public function nounCases(array $args)
{
return \morphos\Russian\NounDeclension::getCases($args['word'], $args['animateness'] ?? false);
}

public function nounPluralize(array $args)
{
return \morphos\Russian\NounPluralization::getCases($args['word'], $args['animateness'] ?? false);
}
}

$handlers = [];
Expand Down

0 comments on commit f1be0ad

Please sign in to comment.