-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
94 lines (82 loc) · 1.39 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var options = {
а: 'a',
б: 'b',
в: 'v',
г: 'g',
ґ: 'g',
д: 'd',
е: 'e',
ё: 'e',
ж: 'zh',
з: 'z',
и: 'i',
і: 'i',
й: 'y',
к: 'k',
л: 'l',
м: 'm',
н: 'n',
о: 'o',
п: 'p',
р: 'r',
с: 's',
т: 't',
у: 'u',
ф: 'f',
х: 'h',
ц: 'c',
ч: 'ch',
ш: 'sh',
щ: 'sch',
ы: 'y',
э: 'e',
ю: 'yu',
я: 'ya',
ї: 'yi',
є: 'ye',
_: '-',
'-': '-',
' ': '-',
'. ': '-',
' - ': '-',
' – ': '-',
' — ': '-',
'/': '-',
' (': '-',
') ': '-'
};
var keys = Object.keys(options).sort(function sortObjectKeys(a, b) { return b.length - a.length; });
var safeCharacterRegExp = /[A-Za-z0-9]/;
var startsWith = function startsWith(start, str) {
for (var i = 0; i < start.length; i++) {
if (start[i] !== str[i]) {
return false;
}
}
return true;
};
var peek = function peek(str) {
for (var i = 0; i < keys.length; i++) {
if (startsWith(keys[i], str)) {
return keys[i];
}
}
return false;
};
translit = function translit(str) {
var result = '';
var process = sanitizeString(str);
while (process) {
var key = peek(process);
if (key) {
result += options[key];
process = process.slice(key.length);
} else {
if (safeCharacterRegExp.test(process[0])) {
result += process[0];
}
process = process.slice(1);
}
}
return result;
}