Slug::charsArray()   B
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 308
Code Lines 282

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 282
nc 2
nop 1
dl 0
loc 308
rs 8
c 1
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Mostafaznv\Larupload\Helpers;
4
5
/**
6
 * Slug Helper
7
 * some functions used from https://github.com/spatie/laravel-sluggable
8
 */
9
class Slug
10
{
11
    protected string $lang;
12
13
    /**
14
     * Slug constructor
15
     *
16
     * @param string|null $lang
17
     */
18
    public function __construct(?string $lang = null)
19
    {
20
        $this->setLang($lang);
21
    }
22
23
    /**
24
     * Make an instance of Slug class
25
     *
26
     * @param string|null $lang
27
     * @return Slug
28
     */
29
    public static function make(?string $lang = null): Slug
30
    {
31
        return new static($lang);
32
    }
33
34
    /**
35
     * Set slug language
36
     *
37
     * @param string|null $lang
38
     * @return void
39
     */
40
    protected function setLang(?string $lang = null): void
41
    {
42
        if ($lang) {
43
            $this->lang = $lang;
44
            return;
45
        }
46
47
        $this->lang = config('app.locale');
48
    }
49
50
    /**
51
     * Removes unsafe characters from file name and convert none english words to english (configurable)
52
     *
53
     * @param string $string Path unsafe file name
54
     * @param string $separator
55
     * @return string Path Safe file name
56
     *
57
     */
58
    public function generate(string $string, string $separator = '-'): string
59
    {
60
        $string = $this->ascii($string, $this->lang);
61
62
        // convert all dashes/underscores into separator
63
        $flip = $separator == '-' ? '_' : '-';
64
        $string = preg_replace('![' . preg_quote($flip) . ']+!u', $separator, $string);
65
66
        // replace @ with the word 'at'
67
        $string = str_replace('@', $separator . 'at' . $separator, $string);
68
69
        // remove all characters that are not the separator, letters, numbers, or whitespace.
70
        $string = preg_replace('![^' . preg_quote($separator) . '\pL\pN\s]+!u', '', mb_strtolower($string));
71
72
        // replace all separator characters and whitespace by a single separator
73
        $string = preg_replace('![' . preg_quote($separator) . '\s]+!u', $separator, $string);
74
75
        return trim($string, $separator);
76
    }
77
78
    /**
79
     * Transliterate a UTF-8 value to ASCII
80
     * Note: Adapted from laravel/framework with some customizations to support farsi and arabic.
81
     *
82
     * @see https://github.com/laravel/framework/blob/5.6/README.md
83
     *
84
     * @param string $value
85
     * @param string $language
86
     * @return string
87
     */
88
    protected function ascii(string $value, string $language = 'en'): string
89
    {
90
        $languageSpecific = $this->languageSpecificCharsArray($language);
91
92
        if (count($languageSpecific)) {
93
            $value = str_replace($languageSpecific[0], $languageSpecific[1], $value);
94
        }
95
96
        foreach ($this->charsArray($language) as $key => $val) {
97
            $value = str_replace($val, $key, $value);
98
        }
99
100
        if (in_array($language, ['fa', 'ar'])) {
101
            return $this->faRegex($value);
102
        }
103
104
        return preg_replace('/[^\x20-\x7E]/u', '', $value);
105
    }
106
107
    /**
108
     * Remove unsafe characters except farsi and arabic characters
109
     *
110
     * @param $value
111
     * @return mixed
112
     */
113
    protected function faRegex(string $value): string
114
    {
115
        return preg_replace('/[^!(|۰|۱|۲|۳|۴|۵|۶|۷|۸|۹|٤|٥|٦|ا|أ|ب|د|ض|إ|ف|گ|ح|ه|ی|i|ج|ج|ق|ك|ک|ل|م|ن|و|پ|ر|س|ص|ت|ط|ي|ز|آ|ع|چ|غ|خ|ؤ|ش|ث|ذ|ظ|هٔ|ة|ئ|اً|ژ|ء|)\x20-\x7E]/u', '', $value);
116
    }
117
118
    /**
119
     * Returns the language specific replacements for the ascii method
120
     * Note: Adapted from Stringy\Stringy
121
     *
122
     * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt
123
     *
124
     * @param string $language
125
     * @return array
126
     */
127
    protected function languageSpecificCharsArray(string $language): array
128
    {
129
        static $languageSpecific;
130
131
        if (!isset($languageSpecific)) {
132
            $languageSpecific = [
133
                'bg' => [
134
                    ['х', 'Х', 'щ', 'Щ', 'ъ', 'Ъ', 'ь', 'Ь'],
135
                    ['h', 'H', 'sht', 'SHT', 'a', 'А', 'y', 'Y'],
136
                ],
137
                'de' => [
138
                    ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'],
139
                    ['ae', 'oe', 'ue', 'AE', 'OE', 'UE'],
140
                ],
141
            ];
142
        }
143
144
        return $languageSpecific[$language] ?? [];
145
    }
146
147
    /**
148
     * Returns the replacements for the ascii method
149
     * Note: Adapted from Stringy\Stringy with some customizations to support farsi and arabic
150
     *
151
     * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt
152
     *
153
     * @param string $language
154
     * @return array
155
     */
156
    protected function charsArray(string $language): array
157
    {
158
        if (in_array($language, ['fa', 'ar'])) {
159
            return [
160
                '0'    => ['°', '₀', '0'],
161
                '1'    => ['¹', '₁', '1'],
162
                '2'    => ['²', '₂', '2'],
163
                '3'    => ['³', '₃', '3'],
164
                '4'    => ['⁴', '₄', '4'],
165
                '5'    => ['⁵', '₅', '5'],
166
                '6'    => ['⁶', '₆', '6'],
167
                '7'    => ['⁷', '₇', '7'],
168
                '8'    => ['⁸', '₈', '8'],
169
                '9'    => ['⁹', '₉', '9'],
170
                'a'    => [
171
                    'à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å',
172
                    'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά',
173
                    'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'အ', 'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'a', 'ä'
174
                ],
175
                'b'    => ['б', 'β', 'ဗ', 'ბ', 'b'],
176
                'c'    => ['ç', 'ć', 'č', 'ĉ', 'ċ', 'c'],
177
                'd'    => ['ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д', 'δ', 'ဍ', 'ဒ', 'დ', 'd'],
178
                'e'    => [
179
                    'é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ',
180
                    'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э', 'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'e'
181
                ],
182
                'f'    => ['ф', 'φ', 'ƒ', 'ფ', 'f'],
183
                'g'    => ['ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'g'],
184
                'h'    => ['ĥ', 'ħ', 'η', 'ή', 'ဟ', 'ှ', 'ჰ', 'h'],
185
                'i'    => [
186
                    'í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į', 'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ',
187
                    'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ',
188
                    'ი', 'इ', 'i'
189
                ],
190
                'j'    => ['ĵ', 'ј', 'Ј', 'ჯ', 'j'],
191
                'k'    => ['ķ', 'ĸ', 'к', 'κ', 'Ķ', 'က', 'კ', 'ქ', 'k'],
192
                'l'    => ['ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'လ', 'ლ', 'l'],
193
                'm'    => ['м', 'μ', 'မ', 'მ', 'm'],
194
                'n'    => ['ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'န', 'ნ', 'n'],
195
                'o'    => [
196
                    'ó', 'ò', 'ỏ', 'õ', 'ọ', 'ô', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő',
197
                    'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'о', 'θ', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ', 'o', 'ö'
198
                ],
199
                'p'    => ['п', 'π', 'ပ', 'პ', 'p'],
200
                'q'    => ['ყ', 'q'],
201
                'r'    => ['ŕ', 'ř', 'ŗ', 'р', 'ρ', 'რ', 'r'],
202
                's'    => ['ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'စ', 'ſ', 'ს', 's'],
203
                't'    => ['ť', 'ţ', 'т', 'τ', 'ț', 'ဋ', 'တ', 'ŧ', 'თ', 'ტ', 't'],
204
                'u'    => [
205
                    'ú', 'ù', 'ủ', 'ũ', 'ụ', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у', 'ဉ',
206
                    'ု', 'ူ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'უ', 'उ', 'u', 'ў', 'ü'
207
                ],
208
                'v'    => ['в', 'ვ', 'ϐ', 'v'],
209
                'w'    => ['ŵ', 'ω', 'ώ', 'ဝ', 'ွ', 'w'],
210
                'x'    => ['χ', 'ξ', 'x'],
211
                'y'    => ['ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ', 'ϋ', 'ύ', 'ΰ', 'ယ', 'y'],
212
                'z'    => ['ź', 'ž', 'ż', 'з', 'ζ', 'ဇ', 'ზ', 'z'],
213
                'aa'   => ['आ'],
214
                'ae'   => ['æ', 'ǽ'],
215
                'ai'   => ['ऐ'],
216
                'ch'   => ['ч', 'ჩ', 'ჭ'],
217
                'dj'   => ['ђ', 'đ'],
218
                'dz'   => ['џ', 'ძ'],
219
                'ei'   => ['ऍ'],
220
                'gh'   => ['ღ'],
221
                'ii'   => ['ई'],
222
                'ij'   => ['ij'],
223
                'kh'   => ['х', 'ხ'],
224
                'lj'   => ['љ'],
225
                'nj'   => ['њ'],
226
                'oe'   => ['ö', 'œ'],
227
                'oi'   => ['ऑ'],
228
                'oii'  => ['ऒ'],
229
                'ps'   => ['ψ'],
230
                'sh'   => ['ш', 'შ'],
231
                'shch' => ['щ'],
232
                'ss'   => ['ß'],
233
                'sx'   => ['ŝ'],
234
                'th'   => ['þ', 'ϑ'],
235
                'ts'   => ['ц', 'ც', 'წ'],
236
                'ue'   => ['ü'],
237
                'uu'   => ['ऊ'],
238
                'ya'   => ['я'],
239
                'yu'   => ['ю'],
240
                'zh'   => ['ж', 'ჟ'],
241
                '(c)'  => ['©'],
242
                'A'    => [
243
                    'Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą',
244
                    'Α', 'Ά', 'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ',
245
                    'Ὰ', 'Ά', 'ᾼ', 'А', 'Ǻ', 'Ǎ', 'A', 'Ä'
246
                ],
247
                'B'    => ['Б', 'Β', 'ब', 'B'],
248
                'C'    => ['Ç', 'Ć', 'Č', 'Ĉ', 'Ċ', 'C'],
249
                'D'    => ['Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ', 'D'],
250
                'E'    => [
251
                    'É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ',
252
                    'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є', 'Ə', 'E'
253
                ],
254
                'F'    => ['Ф', 'Φ', 'F'],
255
                'G'    => ['Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ', 'Γ', 'G'],
256
                'H'    => ['Η', 'Ή', 'Ħ', 'H'],
257
                'I'    => [
258
                    'Í', 'Ì', 'Ỉ', 'Ĩ', 'Ị', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ',
259
                    'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί', 'И', 'І', 'Ї', 'Ǐ', 'ϒ', 'I'
260
                ],
261
                'J'    => ['J'],
262
                'K'    => ['К', 'Κ', 'K'],
263
                'L'    => ['Ĺ', 'Ł', 'Л', 'Λ', 'Ļ', 'Ľ', 'Ŀ', 'ल', 'L'],
264
                'M'    => ['М', 'Μ', 'M'],
265
                'N'    => ['Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н', 'Ν', 'N'],
266
                'O'    => [
267
                    'Ó', 'Ò', 'Ỏ', 'Õ', 'Ọ', 'Ô', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ơ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ø', 'Ō', 'Ő',
268
                    'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О', 'Θ', 'Ө', 'Ǒ', 'Ǿ', 'O', 'Ö'
269
                ],
270
                'P'    => ['П', 'Π', 'P'],
271
                'Q'    => ['Q'],
272
                'R'    => ['Ř', 'Ŕ', 'Р', 'Ρ', 'Ŗ', 'R'],
273
                'S'    => ['Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С', 'Σ', 'S'],
274
                'T'    => ['Ť', 'Ţ', 'Ŧ', 'Ț', 'Т', 'Τ', 'T'],
275
                'U'    => [
276
                    'Ú', 'Ù', 'Ủ', 'Ũ', 'Ụ', 'Ư', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У', 'Ǔ', 'Ǖ',
277
                    'Ǘ', 'Ǚ', 'Ǜ', 'U', 'Ў', 'Ü'
278
                ],
279
                'V'    => ['В', 'V'],
280
                'W'    => ['Ω', 'Ώ', 'Ŵ', 'W'],
281
                'X'    => ['Χ', 'Ξ', 'X'],
282
                'Y'    => ['Ý', 'Ỳ', 'Ỷ', 'Ỹ', 'Ỵ', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й', 'Υ', 'Ϋ', 'Ŷ', 'Y'],
283
                'Z'    => ['Ź', 'Ž', 'Ż', 'З', 'Ζ', 'Z'],
284
                'AE'   => ['Æ', 'Ǽ'],
285
                'Ch'   => ['Ч'],
286
                'Dj'   => ['Ђ'],
287
                'Dz'   => ['Џ'],
288
                'Gx'   => ['Ĝ'],
289
                'Hx'   => ['Ĥ'],
290
                'Ij'   => ['IJ'],
291
                'Jx'   => ['Ĵ'],
292
                'Kh'   => ['Х'],
293
                'Lj'   => ['Љ'],
294
                'Nj'   => ['Њ'],
295
                'Oe'   => ['Œ'],
296
                'Ps'   => ['Ψ'],
297
                'Sh'   => ['Ш'],
298
                'Shch' => ['Щ'],
299
                'Ss'   => ['ẞ'],
300
                'Th'   => ['Þ'],
301
                'Ts'   => ['Ц'],
302
                'Ya'   => ['Я'],
303
                'Yu'   => ['Ю'],
304
                'Zh'   => ['Ж'],
305
                ' '    => [
306
                    "\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84",
307
                    "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A",
308
                    "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80", "\xEF\xBE\xA0"
309
                ],
310
            ];
311
        }
312
313
        return [
314
            '0'    => ['۰', '٠', '°', '₀', '0'],
315
            '1'    => ['۱', '١', '¹', '₁', '1'],
316
            '2'    => ['۲', '٢', '²', '₂', '2'],
317
            '3'    => ['۳', '٣', '³', '₃', '3'],
318
            '4'    => ['۴', '٤', '⁴', '₄', '٤', '4'],
319
            '5'    => ['۵', '٥', '⁵', '₅', '٥', '5'],
320
            '6'    => ['۶', '٦', '⁶', '₆', '٦', '6'],
321
            '7'    => ['۷', '٧', '⁷', '₇', '7'],
322
            '8'    => ['۸', '٨', '⁸', '₈', '8'],
323
            '9'    => ['۹', '٩', '⁹', '₉', '9'],
324
            'a'    => [
325
                'à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å',
326
                'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά',
327
                'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'أ', 'အ', 'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'ا', 'a', 'ä'
328
            ],
329
            'b'    => ['б', 'β', 'ب', 'ဗ', 'ბ', 'b'],
330
            'c'    => ['ç', 'ć', 'č', 'ĉ', 'ċ', 'c'],
331
            'd'    => ['ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д', 'δ', 'د', 'ض', 'ဍ', 'ဒ', 'დ', 'd'],
332
            'e'    => [
333
                'é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ',
334
                'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э', 'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'إ', 'ئ', 'e'
335
            ],
336
            'f'    => ['ф', 'φ', 'ف', 'ƒ', 'ფ', 'f'],
337
            'g'    => ['ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'گ', 'g'],
338
            'h'    => ['ĥ', 'ħ', 'η', 'ή', 'ح', 'ه', 'ဟ', 'ှ', 'ჰ', 'h'],
339
            'i'    => [
340
                'í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į', 'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ',
341
                'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ',
342
                'ი', 'इ', 'ی', 'i'
343
            ],
344
            'j'    => ['ĵ', 'ј', 'Ј', 'ჯ', 'ج', 'j'],
345
            'k'    => ['ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ', 'ک', 'k'],
346
            'l'    => ['ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'ل', 'လ', 'ლ', 'l'],
347
            'm'    => ['м', 'μ', 'م', 'မ', 'მ', 'm'],
348
            'n'    => ['ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'ن', 'န', 'ნ', 'n'],
349
            'o'    => [
350
                'ó', 'ò', 'ỏ', 'õ', 'ọ', 'ô', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő',
351
                'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'о', 'و', 'θ', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ',
352
                'o', 'ö'
353
            ],
354
            'p'    => ['п', 'π', 'ပ', 'პ', 'پ', 'p'],
355
            'q'    => ['ყ', 'q'],
356
            'r'    => ['ŕ', 'ř', 'ŗ', 'р', 'ρ', 'ر', 'რ', 'r'],
357
            's'    => ['ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'س', 'ص', 'စ', 'ſ', 'ს', 's'],
358
            't'    => ['ť', 'ţ', 'т', 'τ', 'ț', 'ت', 'ط', 'ဋ', 'တ', 'ŧ', 'თ', 'ტ', 't'],
359
            'u'    => [
360
                'ú', 'ù', 'ủ', 'ũ', 'ụ', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у', 'ဉ',
361
                'ု', 'ူ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'უ', 'उ', 'u', 'ў', 'ü'
362
            ],
363
            'v'    => ['в', 'ვ', 'ϐ', 'v'],
364
            'w'    => ['ŵ', 'ω', 'ώ', 'ဝ', 'ွ', 'w'],
365
            'x'    => ['χ', 'ξ', 'x'],
366
            'y'    => ['ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ', 'ϋ', 'ύ', 'ΰ', 'ي', 'ယ', 'y'],
367
            'z'    => ['ź', 'ž', 'ż', 'з', 'ζ', 'ز', 'ဇ', 'ზ', 'z'],
368
            'aa'   => ['ع', 'आ', 'آ'],
369
            'ae'   => ['æ', 'ǽ'],
370
            'ai'   => ['ऐ'],
371
            'ch'   => ['ч', 'ჩ', 'ჭ', 'چ'],
372
            'dj'   => ['ђ', 'đ'],
373
            'dz'   => ['џ', 'ძ'],
374
            'ei'   => ['ऍ'],
375
            'gh'   => ['غ', 'ღ'],
376
            'ii'   => ['ई'],
377
            'ij'   => ['ij'],
378
            'kh'   => ['х', 'خ', 'ხ'],
379
            'lj'   => ['љ'],
380
            'nj'   => ['њ'],
381
            'oe'   => ['ö', 'œ', 'ؤ'],
382
            'oi'   => ['ऑ'],
383
            'oii'  => ['ऒ'],
384
            'ps'   => ['ψ'],
385
            'sh'   => ['ш', 'შ', 'ش'],
386
            'shch' => ['щ'],
387
            'ss'   => ['ß'],
388
            'sx'   => ['ŝ'],
389
            'th'   => ['þ', 'ϑ', 'ث', 'ذ', 'ظ'],
390
            'ts'   => ['ц', 'ც', 'წ'],
391
            'ue'   => ['ü'],
392
            'uu'   => ['ऊ'],
393
            'ya'   => ['я'],
394
            'yu'   => ['ю'],
395
            'zh'   => ['ж', 'ჟ', 'ژ'],
396
            '(c)'  => ['©'],
397
            'A'    => [
398
                'Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą',
399
                'Α', 'Ά', 'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ',
400
                'Ὰ', 'Ά', 'ᾼ', 'А', 'Ǻ', 'Ǎ', 'A', 'Ä'
401
            ],
402
            'B'    => ['Б', 'Β', 'ब', 'B'],
403
            'C'    => ['Ç', 'Ć', 'Č', 'Ĉ', 'Ċ', 'C'],
404
            'D'    => ['Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ', 'D'],
405
            'E'    => [
406
                'É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ',
407
                'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є', 'Ə', 'E'
408
            ],
409
            'F'    => ['Ф', 'Φ', 'F'],
410
            'G'    => ['Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ', 'Γ', 'G'],
411
            'H'    => ['Η', 'Ή', 'Ħ', 'H'],
412
            'I'    => [
413
                'Í', 'Ì', 'Ỉ', 'Ĩ', 'Ị', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ',
414
                'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί', 'И', 'І', 'Ї', 'Ǐ', 'ϒ', 'I'
415
            ],
416
            'J'    => ['J'],
417
            'K'    => ['К', 'Κ', 'K'],
418
            'L'    => ['Ĺ', 'Ł', 'Л', 'Λ', 'Ļ', 'Ľ', 'Ŀ', 'ल', 'L'],
419
            'M'    => ['М', 'Μ', 'M'],
420
            'N'    => ['Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н', 'Ν', 'N'],
421
            'O'    => [
422
                'Ó', 'Ò', 'Ỏ', 'Õ', 'Ọ', 'Ô', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ơ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ø', 'Ō', 'Ő',
423
                'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О', 'Θ', 'Ө', 'Ǒ', 'Ǿ', 'O', 'Ö'
424
            ],
425
            'P'    => ['П', 'Π', 'P'],
426
            'Q'    => ['Q'],
427
            'R'    => ['Ř', 'Ŕ', 'Р', 'Ρ', 'Ŗ', 'R'],
428
            'S'    => ['Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С', 'Σ', 'S'],
429
            'T'    => ['Ť', 'Ţ', 'Ŧ', 'Ț', 'Т', 'Τ', 'T'],
430
            'U'    => [
431
                'Ú', 'Ù', 'Ủ', 'Ũ', 'Ụ', 'Ư', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У', 'Ǔ', 'Ǖ',
432
                'Ǘ', 'Ǚ', 'Ǜ', 'U', 'Ў', 'Ü'
433
            ],
434
            'V'    => ['В', 'V'],
435
            'W'    => ['Ω', 'Ώ', 'Ŵ', 'W'],
436
            'X'    => ['Χ', 'Ξ', 'X'],
437
            'Y'    => ['Ý', 'Ỳ', 'Ỷ', 'Ỹ', 'Ỵ', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й', 'Υ', 'Ϋ', 'Ŷ', 'Y'],
438
            'Z'    => ['Ź', 'Ž', 'Ż', 'З', 'Ζ', 'Z'],
439
            'AE'   => ['Æ', 'Ǽ'],
440
            'Ch'   => ['Ч'],
441
            'Dj'   => ['Ђ'],
442
            'Dz'   => ['Џ'],
443
            'Gx'   => ['Ĝ'],
444
            'Hx'   => ['Ĥ'],
445
            'Ij'   => ['IJ'],
446
            'Jx'   => ['Ĵ'],
447
            'Kh'   => ['Х'],
448
            'Lj'   => ['Љ'],
449
            'Nj'   => ['Њ'],
450
            'Oe'   => ['Œ'],
451
            'Ps'   => ['Ψ'],
452
            'Sh'   => ['Ш'],
453
            'Shch' => ['Щ'],
454
            'Ss'   => ['ẞ'],
455
            'Th'   => ['Þ'],
456
            'Ts'   => ['Ц'],
457
            'Ya'   => ['Я'],
458
            'Yu'   => ['Ю'],
459
            'Zh'   => ['Ж'],
460
            ' '    => [
461
                "\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84",
462
                "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A",
463
                "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80", "\xEF\xBE\xA0"
464
            ],
465
        ];
466
    }
467
}
468