| @@ 37-39 (lines=3) @@ | ||
| 34 | public static function isMutable($name, $gender = null) |
|
| 35 | { |
|
| 36 | $name = S::lower($name); |
|
| 37 | if (in_array(S::slice($name, -2), ['ич', 'на'], true)) { |
|
| 38 | return true; |
|
| 39 | } |
|
| 40 | ||
| 41 | // it's foreign middle name, inflect it as a first name |
|
| 42 | return FirstNamesInflection::isMutable($name, $gender); |
|
| @@ 108-110 (lines=3) @@ | ||
| 105 | return true; |
|
| 106 | } elseif (S::slice($name, -1) == 'й') { |
|
| 107 | return true; |
|
| 108 | } else if (in_array(S::slice($name, -2), ['ло', 'ко'], true)) { |
|
| 109 | return true; |
|
| 110 | } |
|
| 111 | } else if ($gender === static::FEMALE) { |
|
| 112 | // soft consonant |
|
| 113 | if (S::lower(S::slice($name, -1)) == 'ь' && static::isConsonant(S::slice($name, -2, -1))) { |
|
| @@ 38-40 (lines=3) @@ | ||
| 35 | return false; |
|
| 36 | } |
|
| 37 | ||
| 38 | if (in_array(S::slice($name, -1), ['а', 'я'], true)) { |
|
| 39 | return true; |
|
| 40 | } |
|
| 41 | ||
| 42 | // Несклоняемые фамилии независимо от пола (Токаревских) |
|
| 43 | if (in_array(S::slice($name, -2), ['их'], true)) |
|
| @@ 43-44 (lines=2) @@ | ||
| 40 | } |
|
| 41 | ||
| 42 | // Несклоняемые фамилии независимо от пола (Токаревских) |
|
| 43 | if (in_array(S::slice($name, -2), ['их'], true)) |
|
| 44 | return false; |
|
| 45 | ||
| 46 | if ($gender == static::MALE) { |
|
| 47 | // Несклоняемые фамилии (Фоминых, Седых / Стецко, Писаренко) |
|
| @@ 48-49 (lines=2) @@ | ||
| 45 | ||
| 46 | if ($gender == static::MALE) { |
|
| 47 | // Несклоняемые фамилии (Фоминых, Седых / Стецко, Писаренко) |
|
| 48 | if (in_array(S::slice($name, -2), ['ых', 'ко'], true)) |
|
| 49 | return false; |
|
| 50 | ||
| 51 | // Несклоняемые, образованные из родительного падежа личного или прозвищного имени главы семьи |
|
| 52 | // суффиксы: ово, аго |
|
| @@ 53-54 (lines=2) @@ | ||
| 50 | ||
| 51 | // Несклоняемые, образованные из родительного падежа личного или прозвищного имени главы семьи |
|
| 52 | // суффиксы: ово, аго |
|
| 53 | if (in_array(S::slice($name, -3), ['ово', 'аго'], true)) |
|
| 54 | return false; |
|
| 55 | ||
| 56 | // Типичные суффикс мужских фамилий |
|
| 57 | if (in_array(S::slice($name, -2), ['ов', 'ев', 'ин', 'ын', 'ий', 'ой'], true)) { |
|
| @@ 71-76 (lines=6) @@ | ||
| 68 | return true; |
|
| 69 | } |
|
| 70 | ||
| 71 | } else { |
|
| 72 | // Типичные суффиксы женских фамилий |
|
| 73 | if (in_array(S::slice($name, -2), ['ва', 'на', 'ая'], true)) { |
|
| 74 | return true; |
|
| 75 | } |
|
| 76 | } |
|
| 77 | ||
| 78 | return false; |
|
| 79 | } |
|
| @@ 288-289 (lines=2) @@ | ||
| 285 | public static function in($word) |
|
| 286 | { |
|
| 287 | $normalized = trim(S::lower($word)); |
|
| 288 | if (in_array(S::slice($normalized, 0, 1), ['в', 'ф'], true)) |
|
| 289 | return 'во '.$word; |
|
| 290 | return 'в '.$word; |
|
| 291 | } |
|
| 292 | ||