Slug::ascii()   A
last analyzed

Complexity

Conditions 4
Paths 8

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 8
c 0
b 0
f 0
nc 8
nop 2
dl 0
loc 17
rs 10
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