@@ 101-103 (lines=3) @@ | ||
98 | return true; |
|
99 | } elseif (S::slice($name, -1) == 'й') { |
|
100 | return true; |
|
101 | } else if (in_array(S::slice($name, -2), ['ло', 'ко'], true)) { |
|
102 | return true; |
|
103 | } |
|
104 | } else if ($gender === static::FEMALE) { |
|
105 | // soft consonant |
|
106 | if (S::lower(S::slice($name, -1)) == 'ь' && static::isConsonant(S::slice($name, -2, -1))) { |
@@ 36-38 (lines=3) @@ | ||
33 | return false; |
|
34 | } |
|
35 | ||
36 | if (in_array(S::slice($name, -1), ['а', 'я'], true)) { |
|
37 | return true; |
|
38 | } |
|
39 | ||
40 | // Несклоняемые фамилии независимо от пола (Токаревских) |
|
41 | if (in_array(S::slice($name, -2), ['их'], true)) |
|
@@ 41-42 (lines=2) @@ | ||
38 | } |
|
39 | ||
40 | // Несклоняемые фамилии независимо от пола (Токаревских) |
|
41 | if (in_array(S::slice($name, -2), ['их'], true)) |
|
42 | return false; |
|
43 | ||
44 | if ($gender == static::MALE) { |
|
45 | // Несклоняемые фамилии (Фоминых, Седых / Стецко, Писаренко) |
|
@@ 46-47 (lines=2) @@ | ||
43 | ||
44 | if ($gender == static::MALE) { |
|
45 | // Несклоняемые фамилии (Фоминых, Седых / Стецко, Писаренко) |
|
46 | if (in_array(S::slice($name, -2), ['ых', 'ко'], true)) |
|
47 | return false; |
|
48 | ||
49 | // Несклоняемые, образованные из родительного падежа личного или прозвищного имени главы семьи |
|
50 | // суффиксы: ово, аго |
|
@@ 51-52 (lines=2) @@ | ||
48 | ||
49 | // Несклоняемые, образованные из родительного падежа личного или прозвищного имени главы семьи |
|
50 | // суффиксы: ово, аго |
|
51 | if (in_array(S::slice($name, -3), ['ово', 'аго'], true)) |
|
52 | return false; |
|
53 | ||
54 | // Типичные суффикс мужских фамилий |
|
55 | if (in_array(S::slice($name, -2), ['ов', 'ев', 'ин', 'ын', 'ий', 'ой'], true)) { |
|
@@ 69-74 (lines=6) @@ | ||
66 | return true; |
|
67 | } |
|
68 | ||
69 | } else { |
|
70 | // Типичные суффиксы женских фамилий |
|
71 | if (in_array(S::slice($name, -2), ['ва', 'на', 'ая'], true)) { |
|
72 | return true; |
|
73 | } |
|
74 | } |
|
75 | ||
76 | return false; |
|
77 | } |
@@ 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); |
@@ 281-282 (lines=2) @@ | ||
278 | public static function in($word) |
|
279 | { |
|
280 | $normalized = trim(S::lower($word)); |
|
281 | if (in_array(S::slice($normalized, 0, 1), ['в', 'ф'], true)) |
|
282 | return 'во '.$word; |
|
283 | return 'в '.$word; |
|
284 | } |
|
285 |