Code Duplication    Length = 2-6 lines in 8 locations

src/Russian/MiddleNamesInflection.php 1 location

@@ 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);

src/Russian/FirstNamesInflection.php 1 location

@@ 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))) {

src/Russian/LastNamesInflection.php 5 locations

@@ 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
    }

src/Russian/RussianLanguage.php 1 location

@@ 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