lotin-kirill 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/README_UZ.md +158 -0
- package/package.json +52 -19
- package/pkg/README.md +158 -0
- package/{dist-node → pkg/dist-node}/index.js +52 -9
- package/pkg/dist-node/index.js.map +1 -0
- package/{dist-src → pkg/dist-src}/characters.js +0 -0
- package/pkg/dist-src/cyrillic.js +92 -0
- package/{dist-src → pkg/dist-src}/exceptionalsCollection.js +0 -0
- package/{dist-src → pkg/dist-src}/index.js +0 -0
- package/{dist-src → pkg/dist-src}/latin.js +0 -0
- package/{dist-src → pkg/dist-src}/utils.js +0 -0
- package/{dist-types → pkg/dist-types}/characters.d.ts +0 -0
- package/{dist-types → pkg/dist-types}/cyrillic.d.ts +0 -0
- package/{dist-types → pkg/dist-types}/exceptionalsCollection.d.ts +0 -0
- package/{dist-types → pkg/dist-types}/index.d.ts +0 -0
- package/{dist-types → pkg/dist-types}/latin.d.ts +0 -0
- package/{dist-types → pkg/dist-types}/utils.d.ts +0 -0
- package/{dist-umd → pkg/dist-umd}/index.min.js +1 -1
- package/pkg/package.json +54 -0
- package/dist-node/index.js.map +0 -1
- package/dist-src/cyrillic.js +0 -50
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ const cyrillicWord = transliterator.toCyrillic("e'lon");
|
|
|
67
67
|
console.log(cyrillicWord); // -> 'эълон'
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
### Text (multiple words)
|
|
70
|
+
### Text (multiple words) transliteration:
|
|
71
71
|
|
|
72
72
|
`textToLatin(text: string): string`
|
|
73
73
|
|
|
@@ -85,7 +85,7 @@ console.log(cyrillicText); // -> 'Жуда узун лотинча текст.'
|
|
|
85
85
|
|
|
86
86
|
### Exceptional words
|
|
87
87
|
|
|
88
|
-
You can initialize the transliterator object with exceptional words list:
|
|
88
|
+
You can initialize the transliterator object with an exceptional words list:
|
|
89
89
|
|
|
90
90
|
```js
|
|
91
91
|
import Transliterator from 'lotin-kirill';
|
|
@@ -125,21 +125,21 @@ const latinWord = transliterator.toLatin('октябрда');
|
|
|
125
125
|
console.log(latinWord); // -> 'oktabrda' (not 'oktyabrda')
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
You can extend the exceptionals list after initialization of the transliterator.
|
|
128
|
+
You can extend the exceptionals list after the initialization of the transliterator.
|
|
129
129
|
|
|
130
130
|
```js
|
|
131
131
|
transliterator.extendExceptionals([['nol', 'ноль']]);
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
Or purge all of the exceptionals added to
|
|
134
|
+
Or purge all of the exceptionals added to transliterator.
|
|
135
135
|
|
|
136
136
|
```js
|
|
137
137
|
transliterator.purgeExceptionals();
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
### Pure
|
|
140
|
+
### Pure transliterator functions
|
|
141
141
|
|
|
142
|
-
There are pure transliterator functions which
|
|
142
|
+
There are pure transliterator functions which operate only on basic transliteration rules. These functions don't look up words in exceptionals list.
|
|
143
143
|
|
|
144
144
|
`cyrillicToLatin(word: string): string`
|
|
145
145
|
|
package/README_UZ.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Lotin-Kirill
|
|
2
|
+
|
|
3
|
+
[](https://github.com/diyorbek/lotin-kirill/actions)
|
|
4
|
+
[](https://codecov.io/gh/diyorbek/lotin-kirill)
|
|
5
|
+
[](https://npmjs.com/lotin-kirill)
|
|
6
|
+
[](https://npmjs.com/lotin-kirill)
|
|
7
|
+
[](https://bundlephobia.com/result?p=lotin-kirill)
|
|
8
|
+
[](https://npmjs.com/lotin-kirill)
|
|
9
|
+
|
|
10
|
+
O‘zbek tilidagi so‘zlarni yuqori aniqlikda transliteratsiya qiluvchi kutubxona. So‘zlarni lotin alifbosidan kirillga va aksincha o‘girish.
|
|
11
|
+
|
|
12
|
+
### [Read in English](https://github.com/diyorbek/lotin-kirill/blob/master/README.md)
|
|
13
|
+
|
|
14
|
+
## O‘rnatish
|
|
15
|
+
|
|
16
|
+
NPM
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
npm install lotin-kirill --save
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Yarn
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
yarn add lotin-kirill
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
UNPKG
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<script src="https://unpkg.com/lotin-kirill/dist-umd/index.min.js"></script>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Foydalanish
|
|
35
|
+
|
|
36
|
+
Initsializatsiya:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
import Transliterator from 'lotin-kirill';
|
|
40
|
+
|
|
41
|
+
const transliterator = new Transliterator();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
UNPKG orqali ulaganda:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<script src="https://unpkg.com/lotin-kirill/dist-umd/index.min.js"></script>
|
|
48
|
+
<script>
|
|
49
|
+
const Transliterator = lotinKirill.default;
|
|
50
|
+
const transliterator = new Transliterator();
|
|
51
|
+
</script>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### So‘zma-so‘z o‘girish:
|
|
55
|
+
|
|
56
|
+
`toLatin(word: string): string`
|
|
57
|
+
|
|
58
|
+
`toCyrillic(word: string): string`
|
|
59
|
+
|
|
60
|
+
Naʼmuna
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
const latinWord = transliterator.toLatin('мотивация');
|
|
64
|
+
console.log(latinWord); // -> 'motivatsiya'
|
|
65
|
+
|
|
66
|
+
const cyrillicWord = transliterator.toCyrillic("e'lon");
|
|
67
|
+
console.log(cyrillicWord); // -> 'эълон'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Tekstni (bir necha so‘zdan iborat) o‘girish:
|
|
71
|
+
|
|
72
|
+
`textToLatin(text: string): string`
|
|
73
|
+
|
|
74
|
+
`textToCyrillic(text: string): string`
|
|
75
|
+
|
|
76
|
+
Naʼmuna
|
|
77
|
+
|
|
78
|
+
```js
|
|
79
|
+
const latinText = transliterator.textToLatin('Жуда узун кириллча текст.');
|
|
80
|
+
console.log(latinText); // -> 'Juda uzun kirillcha tekst.'
|
|
81
|
+
|
|
82
|
+
const cyrillicText = transliterator.textToCyrillic('Juda uzun lotincha tekst.');
|
|
83
|
+
console.log(cyrillicText); // -> 'Жуда узун лотинча текст.'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Istisno so‘zlar
|
|
87
|
+
|
|
88
|
+
Transliterator obyektini istisno so‘zlar ro‘yhati bilan initsializatsiya qilishingiz mumkin:
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
import Transliterator from 'lotin-kirill';
|
|
92
|
+
|
|
93
|
+
const transliterator = new Transliterator([
|
|
94
|
+
// [lotincha, kirillcha]
|
|
95
|
+
['oktabr', 'октябрь'],
|
|
96
|
+
['Google', 'Google'],
|
|
97
|
+
]);
|
|
98
|
+
|
|
99
|
+
const cyrillicWord = transliterator.toCyrillic('oktabr');
|
|
100
|
+
console.log(cyrillicWord); // -> 'октябрь' ('октабр' emas)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Bir istisno juftligi kirill va lotin transliteratsiyasi uchun yetarli.
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
// Bu ham ishlaydi
|
|
107
|
+
const latinWord = transliterator.toLatin('октябрь');
|
|
108
|
+
console.log(latinWord); // -> 'oktabr' (not 'oktyabr')
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Agar istisno jusfligi bir xil so‘zlardan iborat bo‘lsa, o‘sha so‘z o‘girilmaydi.
|
|
112
|
+
|
|
113
|
+
```js
|
|
114
|
+
const cyrillicWord = transliterator.toCyrillic('Google');
|
|
115
|
+
console.log(cyrillicWord); // -> 'Google'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Istisnoli so‘zlar qo‘shimcha qo‘shilgan holatida ham to‘g‘ri o‘giriladi.
|
|
119
|
+
|
|
120
|
+
**Faqat old qo'shimchalar bundan mustasno!** So‘zning old qo‘shimcha qo‘shilgan varianti alohida istisno sifatida qo‘shilishi kerak.
|
|
121
|
+
|
|
122
|
+
```js
|
|
123
|
+
// Bu ham ishlaydi
|
|
124
|
+
const latinWord = transliterator.toLatin('октябрда');
|
|
125
|
+
console.log(latinWord); // -> 'oktabrda' ('oktyabrda' emas)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Istisno ro‘yhatini initsializatsiyadan keyin ham kengaytirish mumkin.
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
transliterator.extendExceptionals([['nol', 'ноль']]);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Yoki ro‘yhatni butunlay tozalash mumkin.
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
transliterator.purgeExceptionals();
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Asl transliteratsiya funksiyalari
|
|
141
|
+
|
|
142
|
+
Kutubxonada so‘zlarni transliteratsiyaning faqat fundamental qoidalari asosoida ishlovchi asl transliteratsiya funksiyalari mavjud. Bu funksiyalar berilgan so‘zni istisno ro‘yhati bilan solishtirmaydi.
|
|
143
|
+
|
|
144
|
+
`cyrillicToLatin(word: string): string`
|
|
145
|
+
|
|
146
|
+
`latinToCyrillic(word: string): string`
|
|
147
|
+
|
|
148
|
+
```js
|
|
149
|
+
import Transliterator, { cyrillicToLatin, latinToCyrillic } from 'lotin-kirill';
|
|
150
|
+
|
|
151
|
+
const transliterator = new Transliterator([['oktabr', 'октябрь']]);
|
|
152
|
+
|
|
153
|
+
console.log(transliterator.toLatin('октябрь')); // -> 'oktabr'
|
|
154
|
+
console.log(cyrillicToLatin('октябрь')); // -> 'oktyabr'
|
|
155
|
+
|
|
156
|
+
console.log(transliterator.toCyrillic('oktabr')); // -> 'октябрь'
|
|
157
|
+
console.log(latinToCyrillic('oktabr')); // -> 'октабр'
|
|
158
|
+
```
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lotin-kirill",
|
|
3
|
+
"version": "0.1.2",
|
|
3
4
|
"description": "Transform Uzbek latin characters into Uzbek-cyrillic characters or vice versa. O'zbekcha so'zlarni lotin alifbosidan kirill alifbosiga (yoki aksincha) o'girish.",
|
|
4
|
-
"
|
|
5
|
+
"author": "Diyorbek Sadullaev <diyorbek3377@gmail.com>",
|
|
5
6
|
"license": "MIT",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"sideEffects": false,
|
|
7
|
+
"homepage": "https://github.com/diyorbek/lotin-kirill",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/diyorbek/lotin-kirill.git"
|
|
11
|
+
},
|
|
12
12
|
"keywords": [
|
|
13
13
|
"lotin",
|
|
14
14
|
"kirill",
|
|
@@ -17,13 +17,19 @@
|
|
|
17
17
|
"transliteratsiya",
|
|
18
18
|
"o'zbekcha"
|
|
19
19
|
],
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
20
|
+
"files": [
|
|
21
|
+
"./pkg"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "pika build",
|
|
25
|
+
"typecheck": "tsc --noEmit --skipLibCheck",
|
|
26
|
+
"format": "prettier --write .",
|
|
27
|
+
"lint": "eslint . --ext .ts",
|
|
28
|
+
"test": "jest --coverage",
|
|
29
|
+
"preversion": "yarn typecheck && yarn lint",
|
|
30
|
+
"version": "yarn build",
|
|
31
|
+
"postversion": "git push && git push --tags",
|
|
32
|
+
"prepublishOnly": "yarn typecheck && yarn lint && yarn build"
|
|
27
33
|
},
|
|
28
34
|
"devDependencies": {
|
|
29
35
|
"@pika/pack": "^0.5.0",
|
|
@@ -46,9 +52,36 @@
|
|
|
46
52
|
"ts-jest": "^26.5.3",
|
|
47
53
|
"typescript": "^4.2.3"
|
|
48
54
|
},
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"anchorme": "^2.1.2"
|
|
57
|
+
},
|
|
58
|
+
"@pika/pack": {
|
|
59
|
+
"pipeline": [
|
|
60
|
+
[
|
|
61
|
+
"@pika/plugin-standard-pkg",
|
|
62
|
+
{
|
|
63
|
+
"exclude": [
|
|
64
|
+
"__tests__/**/*"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
"@pika/plugin-build-node"
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"@pika/plugin-build-types"
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
"pika-plugin-build-legacy-browser",
|
|
76
|
+
{
|
|
77
|
+
"name": "lotinKirill",
|
|
78
|
+
"sourcemap": false,
|
|
79
|
+
"entrypoint": [
|
|
80
|
+
"unpkg",
|
|
81
|
+
"jsdelivr"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
]
|
|
86
|
+
}
|
|
54
87
|
}
|
package/pkg/README.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Lotin-Kirill
|
|
2
|
+
|
|
3
|
+
[](https://github.com/diyorbek/lotin-kirill/actions)
|
|
4
|
+
[](https://codecov.io/gh/diyorbek/lotin-kirill)
|
|
5
|
+
[](https://npmjs.com/lotin-kirill)
|
|
6
|
+
[](https://npmjs.com/lotin-kirill)
|
|
7
|
+
[](https://bundlephobia.com/result?p=lotin-kirill)
|
|
8
|
+
[](https://npmjs.com/lotin-kirill)
|
|
9
|
+
|
|
10
|
+
Transliterator for Uzbek words with high accuracy (from latin alphabet to cyrillic and vice versa). Used at [transliterator.uz](https://transliterator.uz/)
|
|
11
|
+
|
|
12
|
+
### [O‘zbek tilida o‘qish](https://github.com/diyorbek/lotin-kirill/blob/master/README_UZ.md)
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
NPM
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
npm install lotin-kirill --save
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Yarn
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
yarn add lotin-kirill
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
UNPKG
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<script src="https://unpkg.com/lotin-kirill/dist-umd/index.min.js"></script>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
Initialize the engine:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
import Transliterator from 'lotin-kirill';
|
|
40
|
+
|
|
41
|
+
const transliterator = new Transliterator();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
When using UNPKG distribution:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<script src="https://unpkg.com/lotin-kirill/dist-umd/index.min.js"></script>
|
|
48
|
+
<script>
|
|
49
|
+
const Transliterator = lotinKirill.default;
|
|
50
|
+
const transliterator = new Transliterator();
|
|
51
|
+
</script>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Single word transliteration:
|
|
55
|
+
|
|
56
|
+
`toLatin(word: string): string`
|
|
57
|
+
|
|
58
|
+
`toCyrillic(word: string): string`
|
|
59
|
+
|
|
60
|
+
Example
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
const latinWord = transliterator.toLatin('мотивация');
|
|
64
|
+
console.log(latinWord); // -> 'motivatsiya'
|
|
65
|
+
|
|
66
|
+
const cyrillicWord = transliterator.toCyrillic("e'lon");
|
|
67
|
+
console.log(cyrillicWord); // -> 'эълон'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Text (multiple words) transliteration:
|
|
71
|
+
|
|
72
|
+
`textToLatin(text: string): string`
|
|
73
|
+
|
|
74
|
+
`textToCyrillic(text: string): string`
|
|
75
|
+
|
|
76
|
+
Example
|
|
77
|
+
|
|
78
|
+
```js
|
|
79
|
+
const latinText = transliterator.textToLatin('Жуда узун кириллча текст.');
|
|
80
|
+
console.log(latinText); // -> 'Juda uzun kirillcha tekst.'
|
|
81
|
+
|
|
82
|
+
const cyrillicText = transliterator.textToCyrillic('Juda uzun lotincha tekst.');
|
|
83
|
+
console.log(cyrillicText); // -> 'Жуда узун лотинча текст.'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Exceptional words
|
|
87
|
+
|
|
88
|
+
You can initialize the transliterator object with an exceptional words list:
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
import Transliterator from 'lotin-kirill';
|
|
92
|
+
|
|
93
|
+
const transliterator = new Transliterator([
|
|
94
|
+
// [latinWord, cyrillicWord]
|
|
95
|
+
['oktabr', 'октябрь'],
|
|
96
|
+
['Google', 'Google'],
|
|
97
|
+
]);
|
|
98
|
+
|
|
99
|
+
const cyrillicWord = transliterator.toCyrillic('oktabr');
|
|
100
|
+
console.log(cyrillicWord); // -> 'октябрь' (not 'октабр')
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
One exceptional pair is enough for both cyrilllic and latin transliterations.
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
// This also works
|
|
107
|
+
const latinWord = transliterator.toLatin('октябрь');
|
|
108
|
+
console.log(latinWord); // -> 'oktabr' (not 'oktyabr')
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If exceptional pair is a pair of same words, the word is not transliterated.
|
|
112
|
+
|
|
113
|
+
```js
|
|
114
|
+
const cyrillicWord = transliterator.toCyrillic('Google');
|
|
115
|
+
console.log(cyrillicWord); // -> 'Google'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Exceptional words with sufixes are also detected.
|
|
119
|
+
|
|
120
|
+
**Variants of a word with prefixes should be added as separate exceptionals!**
|
|
121
|
+
|
|
122
|
+
```js
|
|
123
|
+
// This also works
|
|
124
|
+
const latinWord = transliterator.toLatin('октябрда');
|
|
125
|
+
console.log(latinWord); // -> 'oktabrda' (not 'oktyabrda')
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
You can extend the exceptionals list after the initialization of the transliterator.
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
transliterator.extendExceptionals([['nol', 'ноль']]);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Or purge all of the exceptionals added to transliterator.
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
transliterator.purgeExceptionals();
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Pure transliterator functions
|
|
141
|
+
|
|
142
|
+
There are pure transliterator functions which operate only on basic transliteration rules. These functions don't look up words in exceptionals list.
|
|
143
|
+
|
|
144
|
+
`cyrillicToLatin(word: string): string`
|
|
145
|
+
|
|
146
|
+
`latinToCyrillic(word: string): string`
|
|
147
|
+
|
|
148
|
+
```js
|
|
149
|
+
import Transliterator, { cyrillicToLatin, latinToCyrillic } from 'lotin-kirill';
|
|
150
|
+
|
|
151
|
+
const transliterator = new Transliterator([['oktabr', 'октябрь']]);
|
|
152
|
+
|
|
153
|
+
console.log(transliterator.toLatin('октябрь')); // -> 'oktabr'
|
|
154
|
+
console.log(cyrillicToLatin('октябрь')); // -> 'oktyabr'
|
|
155
|
+
|
|
156
|
+
console.log(transliterator.toCyrillic('oktabr')); // -> 'октябрь'
|
|
157
|
+
console.log(latinToCyrillic('oktabr')); // -> 'октабр'
|
|
158
|
+
```
|
|
@@ -176,6 +176,49 @@ function isRomanNumber(word) {
|
|
|
176
176
|
return /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/.test(word);
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
const CH_MATCHER = /Ч/gi;
|
|
180
|
+
const SH_MATCHER = /Ш/gi;
|
|
181
|
+
const YE_START_MATCHER = /^Е/gi;
|
|
182
|
+
const YE_MATCHER = /Е/gi;
|
|
183
|
+
const YO_MATCHER = /Ё/gi;
|
|
184
|
+
const YU_MATCHER = /Ю/gi;
|
|
185
|
+
const YA_MATCHER = /Я/gi;
|
|
186
|
+
const YE_REPETITIVE = /е{3,}/gi;
|
|
187
|
+
const YE_AFTER_SOFT_MATCHER = /[ьъ]е/gi;
|
|
188
|
+
const YE_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]е/gi;
|
|
189
|
+
const TS_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]ц/gi;
|
|
190
|
+
const O_AFTER_SOFT_MATCHER = /ьо/gi;
|
|
191
|
+
const S_H_MATCHER = /сҳ/gi;
|
|
192
|
+
const APOSTROPHE_COLLISION_MATCHER = /[ўғ]ъ/gi;
|
|
193
|
+
|
|
194
|
+
function normalizeYeRepetitive(matchString) {
|
|
195
|
+
return matchString.replace(YE_MATCHER, str => CYRILLIC_CHARACTERS[str] || str);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function normalizeYeAfterSoft(matchString) {
|
|
199
|
+
return normalizeCase('ye', matchString.charAt(1));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function normalizeYeAfterVowel(matchString) {
|
|
203
|
+
return matchString.charAt(0) + normalizeCase('ye', matchString.charAt(1));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function normalizeYoAfterSoft(matchString) {
|
|
207
|
+
return normalizeCase('yo', matchString.charAt(1));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function normalizeApostropheCollision(matchString) {
|
|
211
|
+
return matchString.charAt(0);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function normalizeTsAfterVowel(matchString) {
|
|
215
|
+
return matchString.charAt(0) + normalizeCase('ts', matchString.charAt(1));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function normalizeS_H(matchString) {
|
|
219
|
+
return normalizeCase('s', matchString.charAt(0)) + APOSTROPHE + normalizeCase('h', matchString.charAt(1));
|
|
220
|
+
}
|
|
221
|
+
|
|
179
222
|
function normalizeBigramCasing(word, matcher, latinBigram) {
|
|
180
223
|
return word.replace(matcher, (matchString, index) => {
|
|
181
224
|
if (isLowerCase(matchString)) {
|
|
@@ -198,15 +241,15 @@ function normalizeBigramCasing(word, matcher, latinBigram) {
|
|
|
198
241
|
}
|
|
199
242
|
|
|
200
243
|
function replaceSpecials(word) {
|
|
201
|
-
word = normalizeBigramCasing(word,
|
|
202
|
-
word = normalizeBigramCasing(word,
|
|
203
|
-
word = normalizeBigramCasing(word,
|
|
204
|
-
word = normalizeBigramCasing(word,
|
|
205
|
-
word = normalizeBigramCasing(word,
|
|
206
|
-
word = normalizeBigramCasing(word,
|
|
207
|
-
|
|
208
|
-
word = word.replace(
|
|
209
|
-
return word.replace(
|
|
244
|
+
word = normalizeBigramCasing(word, CH_MATCHER, 'CH');
|
|
245
|
+
word = normalizeBigramCasing(word, SH_MATCHER, 'SH');
|
|
246
|
+
word = normalizeBigramCasing(word, YE_START_MATCHER, 'YE');
|
|
247
|
+
word = normalizeBigramCasing(word, YO_MATCHER, 'YO');
|
|
248
|
+
word = normalizeBigramCasing(word, YU_MATCHER, 'YU');
|
|
249
|
+
word = normalizeBigramCasing(word, YA_MATCHER, 'YA'); // Don't split into bigram if repetitive sequence of `e`s is 3+
|
|
250
|
+
|
|
251
|
+
word = word.replace(YE_REPETITIVE, normalizeYeRepetitive);
|
|
252
|
+
return word.replace(YE_AFTER_SOFT_MATCHER, normalizeYeAfterSoft).replace(YE_AFTER_VOWEL_MATCHER, normalizeYeAfterVowel).replace(O_AFTER_SOFT_MATCHER, normalizeYoAfterSoft).replace(APOSTROPHE_COLLISION_MATCHER, normalizeApostropheCollision).replace(TS_AFTER_VOWEL_MATCHER, normalizeTsAfterVowel).replace(S_H_MATCHER, normalizeS_H);
|
|
210
253
|
}
|
|
211
254
|
|
|
212
255
|
function cyrillicToLatin(word) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../dist-src/characters.js","../dist-src/utils.js","../dist-src/cyrillic.js","../dist-src/exceptionalsCollection.js","../dist-src/latin.js","../dist-src/index.js"],"sourcesContent":["export const APOSTROPHE = '\\u02bc';\nexport const TURNED_COMMA = '\\u2018';\nexport const LATIN_CHARACTERS = {\n ['A']: 'А',\n ['a']: 'а',\n ['B']: 'Б',\n ['b']: 'б',\n ['D']: 'Д',\n ['d']: 'д',\n ['E']: 'Е',\n ['e']: 'е',\n ['F']: 'Ф',\n ['f']: 'ф',\n ['G']: 'Г',\n ['g']: 'г',\n ['H']: 'Ҳ',\n ['h']: 'ҳ',\n ['I']: 'И',\n ['i']: 'и',\n ['J']: 'Ж',\n ['j']: 'ж',\n ['K']: 'К',\n ['k']: 'к',\n ['L']: 'Л',\n ['l']: 'л',\n ['M']: 'М',\n ['m']: 'м',\n ['N']: 'Н',\n ['n']: 'н',\n ['O']: 'О',\n ['o']: 'о',\n ['P']: 'П',\n ['p']: 'п',\n ['Q']: 'Қ',\n ['q']: 'қ',\n ['R']: 'Р',\n ['r']: 'р',\n ['S']: 'С',\n ['s']: 'с',\n ['T']: 'Т',\n ['t']: 'т',\n ['U']: 'У',\n ['u']: 'у',\n ['V']: 'В',\n ['v']: 'в',\n ['X']: 'Х',\n ['x']: 'х',\n ['Y']: 'Й',\n ['y']: 'й',\n ['Z']: 'З',\n ['z']: 'з'\n};\nexport const CYRILLIC_CHARACTERS = {\n ['А']: 'A',\n ['а']: 'a',\n ['Б']: 'B',\n ['б']: 'b',\n ['Д']: 'D',\n ['д']: 'd',\n ['Е']: 'E',\n ['е']: 'e',\n ['Ф']: 'F',\n ['ф']: 'f',\n ['Г']: 'G',\n ['г']: 'g',\n ['Ҳ']: 'H',\n ['ҳ']: 'h',\n ['И']: 'I',\n ['и']: 'i',\n ['Ж']: 'J',\n ['ж']: 'j',\n ['К']: 'K',\n ['к']: 'k',\n ['Л']: 'L',\n ['л']: 'l',\n ['М']: 'M',\n ['м']: 'm',\n ['Н']: 'N',\n ['н']: 'n',\n ['О']: 'O',\n ['о']: 'o',\n ['П']: 'P',\n ['п']: 'p',\n ['Қ']: 'Q',\n ['қ']: 'q',\n ['Р']: 'R',\n ['р']: 'r',\n ['С']: 'S',\n ['с']: 's',\n ['Т']: 'T',\n ['т']: 't',\n ['У']: 'U',\n ['у']: 'u',\n ['В']: 'V',\n ['в']: 'v',\n ['Х']: 'X',\n ['х']: 'x',\n ['Й']: 'Y',\n ['й']: 'y',\n ['З']: 'Z',\n ['з']: 'z',\n ['Ў']: `O${TURNED_COMMA}`,\n ['ў']: `o${TURNED_COMMA}`,\n ['Ғ']: `G${TURNED_COMMA}`,\n ['ғ']: `g${TURNED_COMMA}`,\n ['Ш']: 'Sh',\n ['ш']: 'sh',\n ['Ч']: 'Ch',\n ['ч']: 'ch',\n ['Ё']: 'Yo',\n ['ё']: 'yo',\n ['Ц']: 'S',\n ['ц']: 's',\n ['Ь']: '',\n ['ь']: '',\n ['Э']: 'E',\n ['э']: 'e',\n ['Ю']: 'Yu',\n ['ю']: 'yu',\n ['Я']: 'Ya',\n ['я']: 'ya',\n ['Ъ']: APOSTROPHE,\n ['ъ']: APOSTROPHE\n};\nexport const CYRILLIC_LETTER = `\\u0400-\\u04FF`;\nexport const CYRILLIC_VOVEL = `аоэеиуўёюя`;\nexport const LATIN_LETTER = `a-z`;\nexport const LATIN_VOVEL = `aeiou`;","import anchorme from 'anchorme';\nexport function isLowerCase(char) {\n return char.toLowerCase() === char;\n}\nexport function normalizeCase(char, assimilateTo) {\n return isLowerCase(assimilateTo) ? char.toLowerCase() : char.toUpperCase();\n}\nexport function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n} // Detect only alphabetical letters, excluding apostrophe(')\n\nexport function isLetter(char) {\n if (typeof char === 'string') {\n return /^[a-z\\u0400-\\u04FF]+$/i.test(char);\n }\n\n return false;\n}\nexport function isVovel(char) {\n return /[аоэеиуўёюяaeiou]/i.test(char);\n}\nexport function isURL(word) {\n return anchorme.list(word).length > 0;\n}\nexport function escapeRegex(expString) {\n return expString.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\nexport function endsWithSoftSign(word) {\n return /ь$/i.test(word);\n}\nexport function isRomanNumber(word) {\n return /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\\.|\\))?$/.test(word);\n}","import { APOSTROPHE, CYRILLIC_CHARACTERS } from \"./characters.js\";\nimport { capitalize, isLetter, isLowerCase, normalizeCase } from \"./utils.js\";\nconst CH_MATCHER = /Ч/gi;\nconst SH_MATCHER = /Ш/gi;\nconst YE_START_MATCHER = /^Е/gi;\nconst YE_MATCHER = /Е/gi;\nconst YO_MATCHER = /Ё/gi;\nconst YU_MATCHER = /Ю/gi;\nconst YA_MATCHER = /Я/gi;\nconst YE_REPETITIVE = /е{3,}/gi;\nconst YE_AFTER_SOFT_MATCHER = /[ьъ]е/gi;\nconst YE_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]е/gi;\nconst TS_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]ц/gi;\nconst O_AFTER_SOFT_MATCHER = /ьо/gi;\nconst S_H_MATCHER = /сҳ/gi;\nconst APOSTROPHE_COLLISION_MATCHER = /[ўғ]ъ/gi;\n\nfunction normalizeYeRepetitive(matchString) {\n return matchString.replace(YE_MATCHER, str => CYRILLIC_CHARACTERS[str] || str);\n}\n\nfunction normalizeYeAfterSoft(matchString) {\n return normalizeCase('ye', matchString.charAt(1));\n}\n\nfunction normalizeYeAfterVowel(matchString) {\n return matchString.charAt(0) + normalizeCase('ye', matchString.charAt(1));\n}\n\nfunction normalizeYoAfterSoft(matchString) {\n return normalizeCase('yo', matchString.charAt(1));\n}\n\nfunction normalizeApostropheCollision(matchString) {\n return matchString.charAt(0);\n}\n\nfunction normalizeTsAfterVowel(matchString) {\n return matchString.charAt(0) + normalizeCase('ts', matchString.charAt(1));\n}\n\nfunction normalizeS_H(matchString) {\n return normalizeCase('s', matchString.charAt(0)) + APOSTROPHE + normalizeCase('h', matchString.charAt(1));\n}\n\nfunction normalizeBigramCasing(word, matcher, latinBigram) {\n return word.replace(matcher, (matchString, index) => {\n if (isLowerCase(matchString)) {\n return latinBigram.toLowerCase();\n }\n\n if (!isLetter(word[index - 1]) && !isLetter(word[index + 1])) {\n return capitalize(latinBigram);\n } // Assimilate to the next letter\n\n\n const assimilator = isLetter(word[index + 1]) && word[index + 1];\n\n if (assimilator) {\n return isLowerCase(assimilator) ? capitalize(latinBigram) : latinBigram.toUpperCase();\n }\n\n return latinBigram.toUpperCase();\n });\n}\n\nfunction replaceSpecials(word) {\n word = normalizeBigramCasing(word, CH_MATCHER, 'CH');\n word = normalizeBigramCasing(word, SH_MATCHER, 'SH');\n word = normalizeBigramCasing(word, YE_START_MATCHER, 'YE');\n word = normalizeBigramCasing(word, YO_MATCHER, 'YO');\n word = normalizeBigramCasing(word, YU_MATCHER, 'YU');\n word = normalizeBigramCasing(word, YA_MATCHER, 'YA'); // Don't split into bigram if repetitive sequence of `e`s is 3+\n\n word = word.replace(YE_REPETITIVE, normalizeYeRepetitive);\n return word.replace(YE_AFTER_SOFT_MATCHER, normalizeYeAfterSoft).replace(YE_AFTER_VOWEL_MATCHER, normalizeYeAfterVowel).replace(O_AFTER_SOFT_MATCHER, normalizeYoAfterSoft).replace(APOSTROPHE_COLLISION_MATCHER, normalizeApostropheCollision).replace(TS_AFTER_VOWEL_MATCHER, normalizeTsAfterVowel).replace(S_H_MATCHER, normalizeS_H);\n}\n\nexport function cyrillicToLatin(word) {\n const escapedWord = replaceSpecials(word);\n let out = '';\n\n for (const char of escapedWord) {\n if (char in CYRILLIC_CHARACTERS) {\n out += CYRILLIC_CHARACTERS[char];\n } else {\n out += char;\n }\n }\n\n return out;\n}","import { capitalize, endsWithSoftSign, escapeRegex, isLowerCase } from \"./utils.js\";\n/*\n Exceptional word pairs works bidirectional even if\n transliteration from cyrillic to latin is usually\n possible without exceptions list. Sepatating list \n into 2 (one for latin, the other for cyrillc) make\n things complicated. \n \n Proposal can be introducing optional 3rd item to \n `ExceptionalWordPair` which will indicate \n bidirectional, only `latin->cyrillic` or only \n `cyrillic->latin` transliteration. This way look-ups \n in exceptionals list can be avoided where unecessary.\n*/\n\nexport class ExceptionalsCollection {\n collection = [];\n\n constructor(exceptions = []) {\n this.extend(exceptions);\n }\n\n extend(exceptions) {\n // TODO: Optimize for duplicates\n exceptions.forEach(pair => {\n if (pair && pair[0] && pair[1]) {\n this.collection.push(...this.generateWordCasingVariants(pair));\n }\n });\n }\n\n purge() {\n this.collection = [];\n }\n\n generateWordCasingVariants([latin, cyrillic]) {\n return [[latin.toLowerCase(), cyrillic.toLowerCase()], [latin.toUpperCase(), cyrillic.toUpperCase()], [capitalize(latin), capitalize(cyrillic)]];\n }\n\n getCase(exceptionalPair, source) {\n const exceptionSource = source === 'latin' ? 0 : 1;\n const exceptionTarget = source === 'latin' ? 1 : 0;\n return {\n exceptionalWord: exceptionalPair[exceptionSource],\n replacement: exceptionalPair[exceptionTarget]\n };\n }\n\n normalizeEndSoftSign(exceptional) {\n const {\n replacement\n } = exceptional;\n exceptional.replacement = replacement.substring(0, replacement.length - 1);\n }\n\n findInCollection(word, source) {\n let exceptional;\n let alternative; // If the word is typed with wrong letter-casing, default to lower-case or capitalize\n\n const shouldDefaultToLowerCase = isLowerCase(word.charAt(0));\n const altCasingMatch = shouldDefaultToLowerCase ? word.toLowerCase() : capitalize(word);\n\n for (const exceptionalPair of this.collection) {\n const {\n exceptionalWord,\n replacement\n } = this.getCase(exceptionalPair, source);\n\n if (word.startsWith(exceptionalWord)) {\n exceptional = {\n exceptionalWord,\n replacement\n };\n\n if (source === 'latin' && endsWithSoftSign(replacement) && word.length !== exceptionalWord.length) {\n this.normalizeEndSoftSign(exceptional);\n }\n\n return {\n exceptional\n };\n }\n\n if (altCasingMatch.startsWith(exceptionalWord)) {\n alternative = {\n exceptionalWord,\n replacement\n };\n }\n }\n\n return {\n alternative\n };\n }\n\n decideMatcher(exceptional, alternative) {\n if (exceptional !== undefined) {\n return exceptional.exceptionalWord;\n }\n\n if (alternative !== undefined) {\n // Using RegExp in \"case-insensetive\" mode to match exceptional\n // with its alternative casing\n return new RegExp(escapeRegex(alternative.exceptionalWord), 'gi');\n }\n }\n\n findCase(word, source) {\n const {\n exceptional,\n alternative\n } = this.findInCollection(word, source);\n const matcher = this.decideMatcher(exceptional, alternative);\n const replacement = exceptional?.replacement || alternative?.replacement;\n\n if (matcher && replacement) {\n return {\n matcher,\n replacement\n };\n }\n }\n\n}","import { LATIN_CHARACTERS } from \"./characters.js\";\nimport { normalizeCase } from \"./utils.js\";\n\nfunction transliterateBigram(word, matcher, cyrillicBigram) {\n return word.replace(matcher, matchString => {\n return normalizeCase(cyrillicBigram, matchString[0]);\n });\n}\n\nfunction transliterateApostrophe(word) {\n const apostrophe = 'ъ';\n return word.replace(/[ʻʼ’'`‘´]/g, (_, index) => {\n // Prioritize assimilation to the next letter\n const assimilator = word[index + 1] || word[index - 1];\n\n if (assimilator) {\n return normalizeCase(apostrophe, assimilator);\n }\n\n return apostrophe.toLowerCase();\n });\n}\n\nfunction transliterateSpecialLetters(word) {\n word = word.replace(/tsi(on|ya)/gi, matchString => {\n return transliterateBigram(matchString, /ts/i, 'ц');\n });\n /* \n Replace with 'Э' if:\n 1. word starts with 'E'\n 2. 'E' comes after non-letter symbol\n 3. cyrillic letter \n */\n\n word = word.replace(/^e|[\\W]e/gi, matchString => {\n return transliterateBigram(matchString, /e/i, 'э');\n });\n word = word.replace(/e{2}/gi, matchString => {\n return matchString[0] + normalizeCase('э', matchString[1]);\n });\n word = transliterateBigram(word, /ch/gi, 'ч');\n word = transliterateBigram(word, /sh/gi, 'ш');\n word = transliterateBigram(word, /g[ʻʼ’'`‘´]/gi, 'ғ');\n word = transliterateBigram(word, /o[ʻʼ’'`‘´]/gi, 'ў');\n word = transliterateBigram(word, /ye/gi, 'е');\n word = transliterateBigram(word, /yo/gi, 'ё');\n word = transliterateBigram(word, /yu/gi, 'ю');\n word = transliterateBigram(word, /ya/gi, 'я'); // handle non-bigram \"S'H\" => \"СҲ\" combination\n\n word = word.replace(/s[ʻʼ’'`‘´]h/gi, matchString => {\n const s = LATIN_CHARACTERS[matchString[0]] || matchString[0];\n const h = LATIN_CHARACTERS[matchString[2]] || matchString[2];\n return s + h;\n });\n word = transliterateApostrophe(word);\n return word;\n}\n\nexport function latinToCyrillic(word) {\n const escapedWord = transliterateSpecialLetters(word);\n let out = '';\n\n for (const char of escapedWord) {\n if (char in LATIN_CHARACTERS) {\n out += LATIN_CHARACTERS[char];\n } else {\n out += char;\n }\n }\n\n return out;\n}","import { cyrillicToLatin } from \"./cyrillic.js\";\nimport { ExceptionalsCollection } from \"./exceptionalsCollection.js\";\nimport { latinToCyrillic } from \"./latin.js\";\nimport { isRomanNumber, isURL } from \"./utils.js\";\nexport default class Transliterator {\n exceptionalsCollection = new ExceptionalsCollection();\n\n constructor(exceptions = []) {\n this.extendExceptionals(exceptions);\n }\n\n extendExceptionals(exceptions) {\n this.exceptionalsCollection.extend(exceptions);\n }\n\n purgeExceptionals() {\n this.exceptionalsCollection.purge();\n }\n\n getTransliterator(source) {\n return source === 'latin' ? latinToCyrillic : cyrillicToLatin;\n }\n\n replaceExceptionals(word, exceptional, replacement, transliterator) {\n let chunks = word.split(exceptional);\n chunks = chunks.map((chunk, i) => {\n const isLastChunk = i === chunks.length - 1;\n return transliterator(chunk) + (isLastChunk ? '' : replacement);\n });\n return chunks.join('');\n }\n\n handleExceptional(word, source) {\n const exceptional = this.exceptionalsCollection.findCase(word, source);\n\n if (exceptional) {\n return this.replaceExceptionals(word, exceptional.matcher, exceptional.replacement, this.getTransliterator(source));\n }\n }\n\n transliteratePureWord(word, source) {\n const transliterator = this.getTransliterator(source);\n return word.replace(/[ʻʼ’'`´‘a-z\\u0400-\\u04FF\\-]+/gi, pureWord => {\n const exceptionalWord = this.handleExceptional(pureWord, source);\n\n if (exceptionalWord) {\n return exceptionalWord;\n }\n\n return transliterator(pureWord);\n });\n }\n\n transliterateWord(word, source) {\n if (isURL(word)) {\n return word;\n }\n\n if (isRomanNumber(word)) {\n return word;\n }\n\n const exceptionalWord = this.handleExceptional(word, source);\n\n if (exceptionalWord) {\n return exceptionalWord;\n }\n\n return this.transliteratePureWord(word, source);\n }\n\n toCyrillic(word) {\n if (word instanceof Array) {\n return word.map(w => this.transliterateWord(w, 'latin'));\n } else if (typeof word === 'string') {\n return this.transliterateWord(word, 'latin');\n }\n }\n\n toLatin(word) {\n if (word instanceof Array) {\n return word.map(w => this.transliterateWord(w, 'cyrillic'));\n } else if (typeof word === 'string') {\n return this.transliterateWord(word, 'cyrillic');\n }\n }\n\n textToCyrillic(text) {\n return text.replace(/\\S+/g, word => this.transliterateWord(word, 'latin'));\n }\n\n textToLatin(text) {\n return text.replace(/\\S+/g, word => this.transliterateWord(word, 'cyrillic'));\n }\n\n}\nexport { cyrillicToLatin, latinToCyrillic };"],"names":["APOSTROPHE","TURNED_COMMA","LATIN_CHARACTERS","CYRILLIC_CHARACTERS","isLowerCase","char","toLowerCase","normalizeCase","assimilateTo","toUpperCase","capitalize","word","charAt","substring","isLetter","test","isURL","anchorme","list","length","escapeRegex","expString","replace","endsWithSoftSign","isRomanNumber","CH_MATCHER","SH_MATCHER","YE_START_MATCHER","YE_MATCHER","YO_MATCHER","YU_MATCHER","YA_MATCHER","YE_REPETITIVE","YE_AFTER_SOFT_MATCHER","YE_AFTER_VOWEL_MATCHER","TS_AFTER_VOWEL_MATCHER","O_AFTER_SOFT_MATCHER","S_H_MATCHER","APOSTROPHE_COLLISION_MATCHER","normalizeYeRepetitive","matchString","str","normalizeYeAfterSoft","normalizeYeAfterVowel","normalizeYoAfterSoft","normalizeApostropheCollision","normalizeTsAfterVowel","normalizeS_H","normalizeBigramCasing","matcher","latinBigram","index","assimilator","replaceSpecials","cyrillicToLatin","escapedWord","out","ExceptionalsCollection","constructor","exceptions","extend","forEach","pair","collection","push","generateWordCasingVariants","purge","latin","cyrillic","getCase","exceptionalPair","source","exceptionSource","exceptionTarget","exceptionalWord","replacement","normalizeEndSoftSign","exceptional","findInCollection","alternative","shouldDefaultToLowerCase","altCasingMatch","startsWith","decideMatcher","undefined","RegExp","findCase","transliterateBigram","cyrillicBigram","transliterateApostrophe","apostrophe","_","transliterateSpecialLetters","s","h","latinToCyrillic","Transliterator","extendExceptionals","exceptionalsCollection","purgeExceptionals","getTransliterator","replaceExceptionals","transliterator","chunks","split","map","chunk","i","isLastChunk","join","handleExceptional","transliteratePureWord","pureWord","transliterateWord","toCyrillic","Array","w","toLatin","textToCyrillic","text","textToLatin"],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { APOSTROPHE, CYRILLIC_CHARACTERS } from "./characters.js";
|
|
2
|
+
import { capitalize, isLetter, isLowerCase, normalizeCase } from "./utils.js";
|
|
3
|
+
const CH_MATCHER = /Ч/gi;
|
|
4
|
+
const SH_MATCHER = /Ш/gi;
|
|
5
|
+
const YE_START_MATCHER = /^Е/gi;
|
|
6
|
+
const YE_MATCHER = /Е/gi;
|
|
7
|
+
const YO_MATCHER = /Ё/gi;
|
|
8
|
+
const YU_MATCHER = /Ю/gi;
|
|
9
|
+
const YA_MATCHER = /Я/gi;
|
|
10
|
+
const YE_REPETITIVE = /е{3,}/gi;
|
|
11
|
+
const YE_AFTER_SOFT_MATCHER = /[ьъ]е/gi;
|
|
12
|
+
const YE_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]е/gi;
|
|
13
|
+
const TS_AFTER_VOWEL_MATCHER = /[аоэеиуўёюяaeiou]ц/gi;
|
|
14
|
+
const O_AFTER_SOFT_MATCHER = /ьо/gi;
|
|
15
|
+
const S_H_MATCHER = /сҳ/gi;
|
|
16
|
+
const APOSTROPHE_COLLISION_MATCHER = /[ўғ]ъ/gi;
|
|
17
|
+
|
|
18
|
+
function normalizeYeRepetitive(matchString) {
|
|
19
|
+
return matchString.replace(YE_MATCHER, str => CYRILLIC_CHARACTERS[str] || str);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function normalizeYeAfterSoft(matchString) {
|
|
23
|
+
return normalizeCase('ye', matchString.charAt(1));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function normalizeYeAfterVowel(matchString) {
|
|
27
|
+
return matchString.charAt(0) + normalizeCase('ye', matchString.charAt(1));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function normalizeYoAfterSoft(matchString) {
|
|
31
|
+
return normalizeCase('yo', matchString.charAt(1));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function normalizeApostropheCollision(matchString) {
|
|
35
|
+
return matchString.charAt(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function normalizeTsAfterVowel(matchString) {
|
|
39
|
+
return matchString.charAt(0) + normalizeCase('ts', matchString.charAt(1));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function normalizeS_H(matchString) {
|
|
43
|
+
return normalizeCase('s', matchString.charAt(0)) + APOSTROPHE + normalizeCase('h', matchString.charAt(1));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function normalizeBigramCasing(word, matcher, latinBigram) {
|
|
47
|
+
return word.replace(matcher, (matchString, index) => {
|
|
48
|
+
if (isLowerCase(matchString)) {
|
|
49
|
+
return latinBigram.toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!isLetter(word[index - 1]) && !isLetter(word[index + 1])) {
|
|
53
|
+
return capitalize(latinBigram);
|
|
54
|
+
} // Assimilate to the next letter
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
const assimilator = isLetter(word[index + 1]) && word[index + 1];
|
|
58
|
+
|
|
59
|
+
if (assimilator) {
|
|
60
|
+
return isLowerCase(assimilator) ? capitalize(latinBigram) : latinBigram.toUpperCase();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return latinBigram.toUpperCase();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function replaceSpecials(word) {
|
|
68
|
+
word = normalizeBigramCasing(word, CH_MATCHER, 'CH');
|
|
69
|
+
word = normalizeBigramCasing(word, SH_MATCHER, 'SH');
|
|
70
|
+
word = normalizeBigramCasing(word, YE_START_MATCHER, 'YE');
|
|
71
|
+
word = normalizeBigramCasing(word, YO_MATCHER, 'YO');
|
|
72
|
+
word = normalizeBigramCasing(word, YU_MATCHER, 'YU');
|
|
73
|
+
word = normalizeBigramCasing(word, YA_MATCHER, 'YA'); // Don't split into bigram if repetitive sequence of `e`s is 3+
|
|
74
|
+
|
|
75
|
+
word = word.replace(YE_REPETITIVE, normalizeYeRepetitive);
|
|
76
|
+
return word.replace(YE_AFTER_SOFT_MATCHER, normalizeYeAfterSoft).replace(YE_AFTER_VOWEL_MATCHER, normalizeYeAfterVowel).replace(O_AFTER_SOFT_MATCHER, normalizeYoAfterSoft).replace(APOSTROPHE_COLLISION_MATCHER, normalizeApostropheCollision).replace(TS_AFTER_VOWEL_MATCHER, normalizeTsAfterVowel).replace(S_H_MATCHER, normalizeS_H);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function cyrillicToLatin(word) {
|
|
80
|
+
const escapedWord = replaceSpecials(word);
|
|
81
|
+
let out = '';
|
|
82
|
+
|
|
83
|
+
for (const char of escapedWord) {
|
|
84
|
+
if (char in CYRILLIC_CHARACTERS) {
|
|
85
|
+
out += CYRILLIC_CHARACTERS[char];
|
|
86
|
+
} else {
|
|
87
|
+
out += char;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(u,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((u="undefined"!=typeof globalThis?globalThis:u||self).lotinKirill={})}(this,(function(u){"use strict";function A(u,A){if(!(u instanceof A))throw new TypeError("Cannot call a class as a function")}function t(u,A){for(var t=0;t<A.length;t++){var e=A[t];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(u,e.key,e)}}function e(u,A,e){return A&&t(u.prototype,A),e&&t(u,e),u}function n(u,A,t){return A in u?Object.defineProperty(u,A,{value:t,enumerable:!0,configurable:!0,writable:!0}):u[A]=t,u}function E(u,A){if(u!==A)throw new TypeError("Cannot instantiate an arrow function")}function i(u,A){return function(u){if(Array.isArray(u))return u}(u)||function(u,A){var t=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null==t)return;var e,n,E=[],i=!0,r=!1;try{for(t=t.call(u);!(i=(e=t.next()).done)&&(E.push(e.value),!A||E.length!==A);i=!0);}catch(u){r=!0,n=u}finally{try{i||null==t.return||t.return()}finally{if(r)throw n}}return E}(u,A)||N(u,A)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(u){return function(u){if(Array.isArray(u))return C(u)}(u)||function(u){if("undefined"!=typeof Symbol&&null!=u[Symbol.iterator]||null!=u["@@iterator"])return Array.from(u)}(u)||N(u)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(u,A){if(u){if("string"==typeof u)return C(u,A);var t=Object.prototype.toString.call(u).slice(8,-1);return"Object"===t&&u.constructor&&(t=u.constructor.name),"Map"===t||"Set"===t?Array.from(u):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?C(u,A):void 0}}function C(u,A){(null==A||A>u.length)&&(A=u.length);for(var t=0,e=new Array(A);t<A;t++)e[t]=u[t];return e}function o(u,A){var t="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!t){if(Array.isArray(u)||(t=N(u))||A&&u&&"number"==typeof u.length){t&&(u=t);var e=0,n=function(){};return{s:n,n:function(){return e>=u.length?{done:!0}:{done:!1,value:u[e++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var E,i=!0,r=!1;return{s:function(){t=t.call(u)},n:function(){var u=t.next();return i=u.done,u},e:function(u){r=!0,E=u},f:function(){try{i||null==t.return||t.return()}finally{if(r)throw E}}}}var a,O,I=(n(a={},"A","А"),n(a,"a","а"),n(a,"B","Б"),n(a,"b","б"),n(a,"D","Д"),n(a,"d","д"),n(a,"E","Е"),n(a,"e","е"),n(a,"F","Ф"),n(a,"f","ф"),n(a,"G","Г"),n(a,"g","г"),n(a,"H","Ҳ"),n(a,"h","ҳ"),n(a,"I","И"),n(a,"i","и"),n(a,"J","Ж"),n(a,"j","ж"),n(a,"K","К"),n(a,"k","к"),n(a,"L","Л"),n(a,"l","л"),n(a,"M","М"),n(a,"m","м"),n(a,"N","Н"),n(a,"n","н"),n(a,"O","О"),n(a,"o","о"),n(a,"P","П"),n(a,"p","п"),n(a,"Q","Қ"),n(a,"q","қ"),n(a,"R","Р"),n(a,"r","р"),n(a,"S","С"),n(a,"s","с"),n(a,"T","Т"),n(a,"t","т"),n(a,"U","У"),n(a,"u","у"),n(a,"V","В"),n(a,"v","в"),n(a,"X","Х"),n(a,"x","х"),n(a,"Y","Й"),n(a,"y","й"),n(a,"Z","З"),n(a,"z","з"),a),R=(n(O={},"А","A"),n(O,"а","a"),n(O,"Б","B"),n(O,"б","b"),n(O,"Д","D"),n(O,"д","d"),n(O,"Е","E"),n(O,"е","e"),n(O,"Ф","F"),n(O,"ф","f"),n(O,"Г","G"),n(O,"г","g"),n(O,"Ҳ","H"),n(O,"ҳ","h"),n(O,"И","I"),n(O,"и","i"),n(O,"Ж","J"),n(O,"ж","j"),n(O,"К","K"),n(O,"к","k"),n(O,"Л","L"),n(O,"л","l"),n(O,"М","M"),n(O,"м","m"),n(O,"Н","N"),n(O,"н","n"),n(O,"О","O"),n(O,"о","o"),n(O,"П","P"),n(O,"п","p"),n(O,"Қ","Q"),n(O,"қ","q"),n(O,"Р","R"),n(O,"р","r"),n(O,"С","S"),n(O,"с","s"),n(O,"Т","T"),n(O,"т","t"),n(O,"У","U"),n(O,"у","u"),n(O,"В","V"),n(O,"в","v"),n(O,"Х","X"),n(O,"х","x"),n(O,"Й","Y"),n(O,"й","y"),n(O,"З","Z"),n(O,"з","z"),n(O,"Ў","O".concat("‘")),n(O,"ў","o".concat("‘")),n(O,"Ғ","G".concat("‘")),n(O,"ғ","g".concat("‘")),n(O,"Ш","Sh"),n(O,"ш","sh"),n(O,"Ч","Ch"),n(O,"ч","ch"),n(O,"Ё","Yo"),n(O,"ё","yo"),n(O,"Ц","S"),n(O,"ц","s"),n(O,"Ь",""),n(O,"ь",""),n(O,"Э","E"),n(O,"э","e"),n(O,"Ю","Yu"),n(O,"ю","yu"),n(O,"Я","Ya"),n(O,"я","ya"),n(O,"Ъ","ʼ"),n(O,"ъ","ʼ"),O),S="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function T(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}function l(u,A){return u(A={exports:{}},A.exports),A.exports}var s=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.TLDs="(AAA|AARP|ABARTH|ABB|ABBOTT|ABBVIE|ABC|ABLE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFAMILYCOMPANY|AFL|AFRICA|AG|AGAKHAN|AGENCY|AI|AIG|AIGO|AIRBUS|AIRFORCE|AIRTEL|AKDN|AL|ALFAROMEO|ALIBABA|ALIPAY|ALLFINANZ|ALLSTATE|ALLY|ALSACE|ALSTOM|AM|AMERICANEXPRESS|AMERICANFAMILY|AMEX|AMFAM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|ANZ|AO|AOL|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAB|ARAMCO|ARCHI|ARMY|ARPA|ART|ARTE|AS|ASDA|ASIA|ASSOCIATES|AT|ATHLETA|ATTORNEY|AU|AUCTION|AUDI|AUDIBLE|AUDIO|AUSPOST|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BANAMEX|BANANAREPUBLIC|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BASKETBALL|BAUHAUS|BAYERN|BB|BBC|BBT|BBVA|BCG|BCN|BD|BE|BEATS|BEAUTY|BEER|BENTLEY|BERLIN|BEST|BESTBUY|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOCKBUSTER|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOFA|BOM|BOND|BOO|BOOK|BOOKING|BOSCH|BOSTIK|BOSTON|BOT|BOUTIQUE|BOX|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CALVINKLEIN|CAM|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAPITALONE|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CASA|CASE|CASEIH|CASH|CASINO|CAT|CATERING|CATHOLIC|CBA|CBN|CBRE|CBS|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHARITY|CHASE|CHAT|CHEAP|CHINTAI|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITADEL|CITI|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMCAST|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOKINGCHANNEL|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CPA|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISE|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATA|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEAL|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DISCOVER|DISH|DIY|DJ|DK|DM|DNP|DO|DOCS|DOCTOR|DOG|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DUCK|DUNLOP|DUPONT|DURBAN|DVAG|DVR|DZ|EARTH|EAT|EC|ECO|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERICSSON|ERNI|ES|ESQ|ESTATE|ESURANCE|ET|ETISALAT|EU|EUROVISION|EUS|EVENTS|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FARMERS|FASHION|FAST|FEDEX|FEEDBACK|FERRARI|FERRERO|FI|FIAT|FIDELITY|FIDO|FILM|FINAL|FINANCE|FINANCIAL|FIRE|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLY|FM|FO|FOO|FOOD|FOODNETWORK|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FREE|FRESENIUS|FRL|FROGANS|FRONTDOOR|FRONTIER|FTR|FUJITSU|FUJIXEROX|FUN|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GAP|GARDEN|GAY|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GEORGE|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLADE|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GODADDY|GOLD|GOLDPOINT|GOLF|GOO|GOODYEAR|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROCERY|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAIR|HAMBURG|HANGOUT|HAUS|HBO|HDFC|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HGTV|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMEGOODS|HOMES|HOMESENSE|HONDA|HORSE|HOSPITAL|HOST|HOSTING|HOT|HOTELES|HOTELS|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HU|HUGHES|HYATT|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IEEE|IFM|IKANO|IL|IM|IMAMAT|IMDB|IMMO|IMMOBILIEN|IN|INC|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTEL|INTERNATIONAL|INTUIT|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISMAILI|IST|ISTANBUL|IT|ITAU|ITV|IVECO|JAGUAR|JAVA|JCB|JCP|JE|JEEP|JETZT|JEWELRY|JIO|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|JUNIPER|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KINDLE|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KOSHER|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LANCIA|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATINO|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEFRAK|LEGAL|LEGO|LEXUS|LGBT|LI|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LILLY|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LLC|LLP|LOAN|LOANS|LOCKER|LOCUS|LOFT|LOL|LONDON|LOTTE|LOTTO|LOVE|LPL|LPLFINANCIAL|LR|LS|LT|LTD|LTDA|LU|LUNDBECK|LUPIN|LUXE|LUXURY|LV|LY|MA|MACYS|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MAP|MARKET|MARKETING|MARKETS|MARRIOTT|MARSHALLS|MASERATI|MATTEL|MBA|MC|MCKINSEY|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MERCKMSD|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MINT|MIT|MITSUBISHI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILE|MODA|MOE|MOI|MOM|MONASH|MONEY|MONSTER|MORMON|MORTGAGE|MOSCOW|MOTO|MOTORCYCLES|MOV|MOVIE|MP|MQ|MR|MS|MSD|MT|MTN|MTR|MU|MUSEUM|MUTUAL|MV|MW|MX|MY|MZ|NA|NAB|NAGOYA|NAME|NATIONWIDE|NATURA|NAVY|NBA|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWHOLLAND|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NFL|NG|NGO|NHK|NI|NICO|NIKE|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOW|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OBSERVER|OFF|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLDNAVY|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|ONYOURSIDE|OOO|OPEN|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PANASONIC|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PAY|PCCW|PE|PET|PF|PFIZER|PG|PH|PHARMACY|PHD|PHILIPS|PHONE|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|PNC|POHL|POKER|POLITIE|PORN|POST|PR|PRAMERICA|PRAXI|PRESS|PRIME|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PRU|PRUDENTIAL|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|QVC|RACING|RADIO|RAID|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|RELIANCE|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIGHTATHOME|RIL|RIO|RIP|RMIT|RO|ROCHER|ROCKS|RODEO|ROGERS|ROOM|RS|RSVP|RU|RUGBY|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSCLUB|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SARL|SAS|SAVE|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCJOHNSON|SCOR|SCOT|SD|SE|SEARCH|SEAT|SECURE|SECURITY|SEEK|SELECT|SENER|SERVICES|SES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHANGRILA|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOPPING|SHOUJI|SHOW|SHOWTIME|SHRIRAM|SI|SILK|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SLING|SM|SMART|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPORT|SPOT|SPREADBETTING|SR|SRL|SS|ST|STADA|STAPLES|STAR|STATEBANK|STATEFARM|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWIFTCOVER|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TARGET|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TDK|TEAM|TECH|TECHNOLOGY|TEL|TEMASEK|TENNIS|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TIAA|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TJMAXX|TJX|TK|TKMAXX|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELCHANNEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBANK|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VANGUARD|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISA|VISION|VIVA|VIVO|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOLVO|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALMART|WALTER|WANG|WANGGOU|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WINNERS|WME|WOLTERSKLUWER|WOODSIDE|WORK|WORKS|WORLD|WOW|WS|WTC|WTF|XBOX|XEROX|XFINITY|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3HCRJ9C|XN--3OQ18VL8PN36A|XN--3PXU8K|XN--42C2D9A|XN--45BR5CYL|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--54B7FTA0CC|XN--55QW42G|XN--55QX5D|XN--5SU34J936BGSG|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80AQECDR1A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AE|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--GK3AT1E|XN--H2BREG3EVE|XN--H2BRJ9C|XN--H2BRJ9C8C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAKC7DVF|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBAYH7GPA|XN--MGBBH1A|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBCPQ6GPA1A|XN--MGBERP4A5D4AR|XN--MGBGU82A|XN--MGBI4ECEXP|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NGBRX|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--OTU796D|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q7CE6A|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXA6A|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--RVC1E0AM3E|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--TIQ49XQYJ|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW|TEST)"}));T(s),s.TLDs;var B=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.openingParenthesis="([\"'{",A.closingParenthesis=")]\"'}",A.parenthesis=A.openingParenthesis.split("").map((function(u,t){return""+u+A.closingParenthesis.charAt(t)})),A.htmlAttributes=["src","data","href","cite","formaction","icon","manifest","poster","codebase","background","profile","usemap","itemtype","action","longdesc","classid","archive"],A.nonLatinAlphabetRanges="\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC",A.TLDs=s.TLDs}));T(B),B.openingParenthesis,B.closingParenthesis,B.parenthesis,B.htmlAttributes,B.nonLatinAlphabetRanges,B.TLDs;var D=l((function(u,A){function t(u,A,t){return"function"==typeof t?t(u,A):t}Object.defineProperty(A,"__esModule",{value:!0}),A.transform=function(u,A){var e="",n=1/0,E={},i=!1;if(A&&A.specialTransform)for(var r=0;r<A.specialTransform.length;r++){var N=A.specialTransform[r];if(N.test.test(u.string))return N.transform(u.string,u)}return A&&A.exclude&&t(u.string,u,A.exclude)?u.string:(A&&A.protocol&&(e=t(u.string,u,A.protocol)),u.protocol?e="":e||(e=u.isEmail?"mailto:":u.isFile?"file:///":"http://"),A&&A.truncate&&(n=t(u.string,u,A.truncate)),A&&A.middleTruncation&&(i=t(u.string,u,A.middleTruncation)),A&&A.attributes&&(E=t(u.string,u,A.attributes)),"<a "+Object.keys(E).map((function(u){return!0===E[u]?u:u+'="'+E[u]+'" '})).join(" ")+'href="'+e+u.string+'">'+(u.string.length>n?i?u.string.substring(0,Math.floor(n/2))+"…"+u.string.substring(u.string.length-Math.ceil(n/2),u.string.length):u.string.substring(0,n)+"…":u.string)+"</a>")}}));T(D),D.transform;var L=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0});var t="([a-z0-9]+(-+[a-z0-9]+)*\\.)+("+B.TLDs+")",e="a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()",n="((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",E="\\[(([a-f0-9:]+:+)+[a-f0-9]+)\\]",i="(https?:|ftps?:)\\/\\/",r="((("+i+")?("+t+"|"+n+"|("+i+")("+E+"|"+("([a-z0-9]+(-+[a-z0-9]+)*\\.)+([a-z0-9][a-z0-9-]{0,"+(Math.max.apply(S,B.TLDs.split("|").map((function(u){return u.length})))-2)+"}[a-z0-9])")+"))(?!@\\w)(:(\\d{1,5}))?)|(((https?:|ftps?:)\\/\\/)\\S+))",N=r+"((((\\/((["+e+"]+(\\/["+e+B.nonLatinAlphabetRanges+"]*)*))?)?)((\\?(["+e+"\\/?]*))?)((\\#(["+e+"\\/?]*))?))?\\b(((["+e+"\\/"+B.nonLatinAlphabetRanges+"][a-zA-Z\\d\\-_~+=\\/"+B.nonLatinAlphabetRanges+"]+)?))+)";A.email="\\b(mailto:)?([a-z0-9!#$%&'*+=?^_`{|}~-]+(\\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*)@("+t+"|"+n+")\\b",A.url="("+N+")|(\\b"+r+"(((\\/(([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()]+(\\/[a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()]*)*))?)?)((\\?([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()\\/?]*))?)((\\#([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()\\/?]*))?))?\\b(([\\/]?))+)",A.file="(file:\\/\\/\\/)([a-z]+:(\\/|\\\\)+)?([\\w.]+([\\/\\\\]?)+)+",A.final="("+A.url+")|("+A.email+")|("+A.file+")",A.finalRegex=new RegExp(A.final,"gi"),A.ipRegex=new RegExp("^("+n+"|"+E+")$","i"),A.emailRegex=new RegExp("^("+A.email+")$","i"),A.fileRegex=new RegExp("^("+A.file+")$","i"),A.urlRegex=new RegExp("^("+A.url+")$","i");var C={isURL:0,isEmail:0,isFile:0,file:{fileName:0,protocol:0},email:{protocol:0,local:0,host:0},url:{ipv4:0,ipv6:0,ipv4Confirmation:0,byProtocol:0,port:0,protocol1:0,protocol2:0,protocol3:0,protocolWithDomain:0,path:0,secondPartOfPath:0,query:0,fragment:0}};A.iidxes=C;for(var o=["file:///some/file/path/filename.pdf","mailto:e+_mail.me@sub.domain.com","http://sub.domain.co.uk:3000/p/a/t/h_(asd)/h?q=abc123#dfdf","http://www.عربي.com","http://127.0.0.1:3000/p/a/t_(asd)/h?q=abc123#dfdf","http://[2a00:1450:4025:401::67]/k/something","a.org/abc/ი_გგ"].join(" "),a=null,O=0;null!==(a=A.finalRegex.exec(o));)0===O&&(C.isFile=a.lastIndexOf(a[0]),C.file.fileName=a.indexOf("filename.pdf"),C.file.protocol=a.indexOf("file:///")),1===O&&(C.isEmail=a.lastIndexOf(a[0]),C.email.protocol=a.indexOf("mailto:"),C.email.local=a.indexOf("e+_mail.me"),C.email.host=a.indexOf("sub.domain.com")),2===O&&(C.isURL=a.lastIndexOf(a[0]),C.url.protocol1=a.indexOf("http://"),C.url.protocolWithDomain=a.indexOf("http://sub.domain.co.uk:3000"),C.url.port=a.indexOf("3000"),C.url.path=a.indexOf("/p/a/t/h_(asd)/h"),C.url.query=a.indexOf("q=abc123"),C.url.fragment=a.indexOf("dfdf")),3===O&&(C.url.byProtocol=a.lastIndexOf("http://www.عربي.com"),C.url.protocol2=a.lastIndexOf("http://")),4===O&&(C.url.ipv4=a.indexOf("127.0.0.1"),C.url.ipv4Confirmation=a.indexOf("0.")),5===O&&(C.url.ipv6=a.indexOf("2a00:1450:4025:401::67"),C.url.protocol3=a.lastIndexOf("http://")),6===O&&(C.url.secondPartOfPath=a.indexOf("გგ")),O++}));T(L),L.email,L.url,L.file,L.finalRegex,L.ipRegex,L.emailRegex,L.fileRegex,L.urlRegex,L.iidxes;var F=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.checkParenthesis=function(u,A,t,e){return e===A&&(t.split(u).length-t.split(A).length==1||u===A&&t.split(u).length%2==0||void 0)},A.maximumAttrLength=B.htmlAttributes.sort((function(u,A){return A.length-u.length}))[0].length,A.isInsideAttribute=function(u){return/\s[a-z0-9-]+=('|")$/i.test(u)||/: ?url\(('|")?$/i.test(u)},A.isInsideAnchorTag=function(u,A,t){for(var e=u.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),n=new RegExp("(?=(<a))(?!([\\s\\S]*)(<\\/a>)("+e+"))[\\s\\S]*?("+e+")(?!\"|')","gi"),E=null;null!==(E=n.exec(A));){if(E.index+E[0].length===t)return!0}return!1}}));T(F),F.checkParenthesis,F.maximumAttrLength,F.isInsideAttribute,F.isInsideAnchorTag;var c=T(l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0});var t=function(u){for(var A=[],t=null,e=function(){var e=t.index,n=e+t[0].length,E=t[0];if("/"===u.charAt(n)&&(E+=u.charAt(n),n++),B.closingParenthesis.indexOf(u.charAt(n))>-1&&B.parenthesis.forEach((function(A){var t=A.charAt(0),e=A.charAt(1);F.checkParenthesis(t,e,E,u.charAt(n))&&(E+=u.charAt(n),n++)})),-1!==['""',"''","()"].indexOf(u.charAt(e-1)+u.charAt(n))&&F.isInsideAttribute(u.substring(e-F.maximumAttrLength-15,e)))return"continue";if(u.substring(n,u.length).indexOf("</a>")>-1&&u.substring(0,e).indexOf("<a")>-1&&F.isInsideAnchorTag(E,u,n))return"continue";if(t[L.iidxes.isURL]){var i=(t[L.iidxes.url.path]||"")+(t[L.iidxes.url.secondPartOfPath]||"")||void 0,r=t[L.iidxes.url.protocol1]||t[L.iidxes.url.protocol2]||t[L.iidxes.url.protocol3];A.push({start:e,end:n,string:E,isURL:!0,protocol:r,port:t[L.iidxes.url.port],ipv4:t[L.iidxes.url.ipv4Confirmation]?t[L.iidxes.url.ipv4]:void 0,ipv6:t[L.iidxes.url.ipv6],host:t[L.iidxes.url.byProtocol]?void 0:(t[L.iidxes.url.protocolWithDomain]||"").substr((r||"").length),confirmedByProtocol:!!t[L.iidxes.url.byProtocol],path:t[L.iidxes.url.byProtocol]?void 0:i,query:t[L.iidxes.url.query]||void 0,fragment:t[L.iidxes.url.fragment]||void 0})}else if(t[L.iidxes.isFile]){var N=E.substr(8);A.push({start:e,end:n,string:E,isFile:!0,protocol:t[L.iidxes.file.protocol],filename:t[L.iidxes.file.fileName],filePath:N,fileDirectory:N.substr(0,N.length-t[L.iidxes.file.fileName].length)})}else t[L.iidxes.isEmail]?A.push({start:e,end:n,string:E,isEmail:!0,local:t[L.iidxes.email.local],protocol:t[L.iidxes.email.protocol],host:t[L.iidxes.email.host]}):A.push({start:e,end:n,string:E})};null!==(t=L.finalRegex.exec(u));)e();return A},e=function(u){var A="string"==typeof u?{input:u,options:void 0,extensions:void 0}:u,e=A.input,n=A.options,E=A.extensions;if(E)for(var i=0;i<E.length;i++){var r=E[i];e=e.replace(r.test,r.transform)}var N=t(e),C="";for(i=0;i<N.length;i++)C=(C||(0===i?e.substring(0,N[i].start):""))+D.transform(N[i],n)+(N[i+1]?e.substring(N[i].end,N[i+1].start):e.substring(N[i].end));return C||e};e.list=function(u){return t(u)},e.validate={ip:function(u){return L.ipRegex.test(u)},email:function(u){return L.emailRegex.test(u)},file:function(u){return L.fileRegex.test(u)},url:function(u){return L.urlRegex.test(u)||L.ipRegex.test(u)}},A.default=e})));function f(u){return u.toLowerCase()===u}function M(u,A){return f(A)?u.toLowerCase():u.toUpperCase()}function G(u){return u.charAt(0).toUpperCase()+u.substring(1).toLowerCase()}function h(u){return"string"==typeof u&&/^[a-z\u0400-\u04FF]+$/i.test(u)}function U(u){return/ь$/i.test(u)}function d(u,A,t){var e=this;return u.replace(A,function(A,n){if(E(this,e),f(A))return t.toLowerCase();if(!h(u[n-1])&&!h(u[n+1]))return G(t);var i=h(u[n+1])&&u[n+1];return i&&f(i)?G(t):t.toUpperCase()}.bind(this))}function P(u){var A,t="",e=o(function(u){var A=this;return u=d(u,/Ч/gi,"CH"),u=d(u,/Ш/gi,"SH"),u=d(u,/^Е/gi,"YE"),u=d(u,/Ё/gi,"YO"),u=d(u,/Ю/gi,"YU"),(u=(u=d(u,/Я/gi,"YA")).replace(/е{3,}/gi,function(u){var t=this;return E(this,A),u.replace(/е/gi,function(u){return E(this,t),R[u]||u}.bind(this))}.bind(this))).replace(/[ьъ]е/gi,function(u){return E(this,A),M("ye",u.charAt(1))}.bind(this)).replace(/[аоэеиуўёюяaeiou]е/gi,function(u){return E(this,A),u.charAt(0)+M("ye",u.charAt(1))}.bind(this)).replace(/ьо/gi,function(u){return E(this,A),M("yo",u.charAt(1))}.bind(this)).replace(/[ўғ]ъ/gi,function(u){return E(this,A),u.charAt(0)}.bind(this)).replace(/[аоэеиуўёюяaeiou]ц/gi,function(u){return E(this,A),u.charAt(0)+M("ts",u.charAt(1))}.bind(this))}(u));try{for(e.s();!(A=e.n()).done;){var n=A.value;t+=n in R?R[n]:n}}catch(u){e.e(u)}finally{e.f()}return t}var p=function(){function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];A(this,u),n(this,"collection",[]),this.extend(t)}return e(u,[{key:"extend",value:function(u){var A=this;u.forEach(function(u){var t;(E(this,A),u&&u[0]&&u[1])&&(t=this.collection).push.apply(t,r(this.generateWordCasingVariants(u)))}.bind(this))}},{key:"purge",value:function(){this.collection=[]}},{key:"generateWordCasingVariants",value:function(u){var A=i(u,2),t=A[0],e=A[1];return[[t.toLowerCase(),e.toLowerCase()],[t.toUpperCase(),e.toUpperCase()],[G(t),G(e)]]}},{key:"getCase",value:function(u,A){var t="latin"===A?1:0;return{exceptionalWord:u["latin"===A?0:1],replacement:u[t]}}},{key:"normalizeEndSoftSign",value:function(u){var A=u.replacement;u.replacement=A.substring(0,A.length-1)}},{key:"findInCollection",value:function(u,A){var t,e,n,E=f(u.charAt(0))?u.toLowerCase():G(u),i=o(this.collection);try{for(i.s();!(n=i.n()).done;){var r=n.value,N=this.getCase(r,A),C=N.exceptionalWord,a=N.replacement;if(u.startsWith(C))return t={exceptionalWord:C,replacement:a},"latin"===A&&U(a)&&u.length!==C.length&&this.normalizeEndSoftSign(t),{exceptional:t};E.startsWith(C)&&(e={exceptionalWord:C,replacement:a})}}catch(u){i.e(u)}finally{i.f()}return{alternative:e}}},{key:"decideMatcher",value:function(u,A){return void 0!==u?u.exceptionalWord:void 0!==A?new RegExp(A.exceptionalWord.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"gi"):void 0}},{key:"findCase",value:function(u,A){var t=this.findInCollection(u,A),e=t.exceptional,n=t.alternative,E=this.decideMatcher(e,n),i=(null==e?void 0:e.replacement)||(null==n?void 0:n.replacement);if(E&&i)return{matcher:E,replacement:i}}}]),u}();function X(u,A,t){var e=this;return u.replace(A,function(u){return E(this,e),M(t,u[0])}.bind(this))}function H(u){var A=this;return u=(u=u.replace(/tsi(on|ya)/gi,function(u){return E(this,A),X(u,/ts/i,"ц")}.bind(this))).replace(/^e|[\W]e/gi,function(u){return E(this,A),X(u,/e/i,"э")}.bind(this)),u=X(u=u.replace(/e{2}/gi,function(u){return E(this,A),u[0]+M("э",u[1])}.bind(this)),/ch/gi,"ч"),u=X(u,/sh/gi,"ш"),u=X(u,/g[ʻʼ’'`‘´]/gi,"ғ"),u=X(u,/o[ʻʼ’'`‘´]/gi,"ў"),u=X(u,/ye/gi,"е"),u=X(u,/yo/gi,"ё"),u=X(u,/yu/gi,"ю"),u=function(u){var A=this;return u.replace(/[ʻʼ’'`‘´]/g,function(t,e){E(this,A);var n=u[e+1]||u[e-1];return n?M("ъ",n):"ъ".toLowerCase()}.bind(this))}(u=(u=X(u,/ya/gi,"я")).replace(/s[ʻʼ’'`‘´]h/gi,function(u){return E(this,A),(I[u[0]]||u[0])+(I[u[2]]||u[2])}.bind(this)))}function g(u){var A,t="",e=o(H(u));try{for(e.s();!(A=e.n()).done;){var n=A.value;t+=n in I?I[n]:n}}catch(u){e.e(u)}finally{e.f()}return t}var K=function(){function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];A(this,u),n(this,"exceptionalsCollection",new p),this.extendExceptionals(t)}return e(u,[{key:"extendExceptionals",value:function(u){this.exceptionalsCollection.extend(u)}},{key:"purgeExceptionals",value:function(){this.exceptionalsCollection.purge()}},{key:"getTransliterator",value:function(u){return"latin"===u?g:P}},{key:"replaceExceptionals",value:function(u,A,t,e){var n=this,i=u.split(A);return(i=i.map(function(u,A){E(this,n);var r=A===i.length-1;return e(u)+(r?"":t)}.bind(this))).join("")}},{key:"handleExceptional",value:function(u,A){var t=this.exceptionalsCollection.findCase(u,A);if(t)return this.replaceExceptionals(u,t.matcher,t.replacement,this.getTransliterator(A))}},{key:"transliteratePureWord",value:function(u,A){var t=this,e=this.getTransliterator(A);return u.replace(/[ʻʼ’'`´‘a-z\u0400-\u04FF\-]+/gi,function(u){E(this,t);var n=this.handleExceptional(u,A);return n||e(u)}.bind(this))}},{key:"transliterateWord",value:function(u,A){if(function(u){return c.list(u).length>0}(u))return u;if(function(u){return/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/.test(u)}(u))return u;var t=this.handleExceptional(u,A);return t||this.transliteratePureWord(u,A)}},{key:"toCyrillic",value:function(u){var A=this;return u instanceof Array?u.map(function(u){return E(this,A),this.transliterateWord(u,"latin")}.bind(this)):"string"==typeof u?this.transliterateWord(u,"latin"):void 0}},{key:"toLatin",value:function(u){var A=this;return u instanceof Array?u.map(function(u){return E(this,A),this.transliterateWord(u,"cyrillic")}.bind(this)):"string"==typeof u?this.transliterateWord(u,"cyrillic"):void 0}},{key:"textToCyrillic",value:function(u){var A=this;return u.replace(/\S+/g,function(u){return E(this,A),this.transliterateWord(u,"latin")}.bind(this))}},{key:"textToLatin",value:function(u){var A=this;return u.replace(/\S+/g,function(u){return E(this,A),this.transliterateWord(u,"cyrillic")}.bind(this))}}]),u}();u.cyrillicToLatin=P,u.default=K,u.latinToCyrillic=g,Object.defineProperty(u,"__esModule",{value:!0})}));
|
|
1
|
+
!function(u,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((u="undefined"!=typeof globalThis?globalThis:u||self).lotinKirill={})}(this,(function(u){"use strict";function A(u,A){if(!(u instanceof A))throw new TypeError("Cannot call a class as a function")}function e(u,A){for(var e=0;e<A.length;e++){var t=A[e];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(u,t.key,t)}}function t(u,A,t){return A&&e(u.prototype,A),t&&e(u,t),u}function n(u,A,e){return A in u?Object.defineProperty(u,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):u[A]=e,u}function E(u,A){if(u!==A)throw new TypeError("Cannot instantiate an arrow function")}function i(u,A){return function(u){if(Array.isArray(u))return u}(u)||function(u,A){var e=null==u?null:"undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(null==e)return;var t,n,E=[],i=!0,r=!1;try{for(e=e.call(u);!(i=(t=e.next()).done)&&(E.push(t.value),!A||E.length!==A);i=!0);}catch(u){r=!0,n=u}finally{try{i||null==e.return||e.return()}finally{if(r)throw n}}return E}(u,A)||N(u,A)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(u){return function(u){if(Array.isArray(u))return C(u)}(u)||function(u){if("undefined"!=typeof Symbol&&null!=u[Symbol.iterator]||null!=u["@@iterator"])return Array.from(u)}(u)||N(u)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(u,A){if(u){if("string"==typeof u)return C(u,A);var e=Object.prototype.toString.call(u).slice(8,-1);return"Object"===e&&u.constructor&&(e=u.constructor.name),"Map"===e||"Set"===e?Array.from(u):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?C(u,A):void 0}}function C(u,A){(null==A||A>u.length)&&(A=u.length);for(var e=0,t=new Array(A);e<A;e++)t[e]=u[e];return t}function o(u,A){var e="undefined"!=typeof Symbol&&u[Symbol.iterator]||u["@@iterator"];if(!e){if(Array.isArray(u)||(e=N(u))||A&&u&&"number"==typeof u.length){e&&(u=e);var t=0,n=function(){};return{s:n,n:function(){return t>=u.length?{done:!0}:{done:!1,value:u[t++]}},e:function(u){throw u},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var E,i=!0,r=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return i=u.done,u},e:function(u){r=!0,E=u},f:function(){try{i||null==e.return||e.return()}finally{if(r)throw E}}}}var a,O,I=(n(a={},"A","А"),n(a,"a","а"),n(a,"B","Б"),n(a,"b","б"),n(a,"D","Д"),n(a,"d","д"),n(a,"E","Е"),n(a,"e","е"),n(a,"F","Ф"),n(a,"f","ф"),n(a,"G","Г"),n(a,"g","г"),n(a,"H","Ҳ"),n(a,"h","ҳ"),n(a,"I","И"),n(a,"i","и"),n(a,"J","Ж"),n(a,"j","ж"),n(a,"K","К"),n(a,"k","к"),n(a,"L","Л"),n(a,"l","л"),n(a,"M","М"),n(a,"m","м"),n(a,"N","Н"),n(a,"n","н"),n(a,"O","О"),n(a,"o","о"),n(a,"P","П"),n(a,"p","п"),n(a,"Q","Қ"),n(a,"q","қ"),n(a,"R","Р"),n(a,"r","р"),n(a,"S","С"),n(a,"s","с"),n(a,"T","Т"),n(a,"t","т"),n(a,"U","У"),n(a,"u","у"),n(a,"V","В"),n(a,"v","в"),n(a,"X","Х"),n(a,"x","х"),n(a,"Y","Й"),n(a,"y","й"),n(a,"Z","З"),n(a,"z","з"),a),R=(n(O={},"А","A"),n(O,"а","a"),n(O,"Б","B"),n(O,"б","b"),n(O,"Д","D"),n(O,"д","d"),n(O,"Е","E"),n(O,"е","e"),n(O,"Ф","F"),n(O,"ф","f"),n(O,"Г","G"),n(O,"г","g"),n(O,"Ҳ","H"),n(O,"ҳ","h"),n(O,"И","I"),n(O,"и","i"),n(O,"Ж","J"),n(O,"ж","j"),n(O,"К","K"),n(O,"к","k"),n(O,"Л","L"),n(O,"л","l"),n(O,"М","M"),n(O,"м","m"),n(O,"Н","N"),n(O,"н","n"),n(O,"О","O"),n(O,"о","o"),n(O,"П","P"),n(O,"п","p"),n(O,"Қ","Q"),n(O,"қ","q"),n(O,"Р","R"),n(O,"р","r"),n(O,"С","S"),n(O,"с","s"),n(O,"Т","T"),n(O,"т","t"),n(O,"У","U"),n(O,"у","u"),n(O,"В","V"),n(O,"в","v"),n(O,"Х","X"),n(O,"х","x"),n(O,"Й","Y"),n(O,"й","y"),n(O,"З","Z"),n(O,"з","z"),n(O,"Ў","O".concat("‘")),n(O,"ў","o".concat("‘")),n(O,"Ғ","G".concat("‘")),n(O,"ғ","g".concat("‘")),n(O,"Ш","Sh"),n(O,"ш","sh"),n(O,"Ч","Ch"),n(O,"ч","ch"),n(O,"Ё","Yo"),n(O,"ё","yo"),n(O,"Ц","S"),n(O,"ц","s"),n(O,"Ь",""),n(O,"ь",""),n(O,"Э","E"),n(O,"э","e"),n(O,"Ю","Yu"),n(O,"ю","yu"),n(O,"Я","Ya"),n(O,"я","ya"),n(O,"Ъ","ʼ"),n(O,"ъ","ʼ"),O),S="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function T(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}function l(u,A){return u(A={exports:{}},A.exports),A.exports}var B=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.TLDs="(AAA|AARP|ABARTH|ABB|ABBOTT|ABBVIE|ABC|ABLE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFAMILYCOMPANY|AFL|AFRICA|AG|AGAKHAN|AGENCY|AI|AIG|AIGO|AIRBUS|AIRFORCE|AIRTEL|AKDN|AL|ALFAROMEO|ALIBABA|ALIPAY|ALLFINANZ|ALLSTATE|ALLY|ALSACE|ALSTOM|AM|AMERICANEXPRESS|AMERICANFAMILY|AMEX|AMFAM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|ANZ|AO|AOL|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAB|ARAMCO|ARCHI|ARMY|ARPA|ART|ARTE|AS|ASDA|ASIA|ASSOCIATES|AT|ATHLETA|ATTORNEY|AU|AUCTION|AUDI|AUDIBLE|AUDIO|AUSPOST|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BANAMEX|BANANAREPUBLIC|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BASKETBALL|BAUHAUS|BAYERN|BB|BBC|BBT|BBVA|BCG|BCN|BD|BE|BEATS|BEAUTY|BEER|BENTLEY|BERLIN|BEST|BESTBUY|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOCKBUSTER|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOFA|BOM|BOND|BOO|BOOK|BOOKING|BOSCH|BOSTIK|BOSTON|BOT|BOUTIQUE|BOX|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CALVINKLEIN|CAM|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAPITALONE|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CASA|CASE|CASEIH|CASH|CASINO|CAT|CATERING|CATHOLIC|CBA|CBN|CBRE|CBS|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHARITY|CHASE|CHAT|CHEAP|CHINTAI|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITADEL|CITI|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMCAST|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOKINGCHANNEL|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CPA|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISE|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATA|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEAL|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DISCOVER|DISH|DIY|DJ|DK|DM|DNP|DO|DOCS|DOCTOR|DOG|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DUCK|DUNLOP|DUPONT|DURBAN|DVAG|DVR|DZ|EARTH|EAT|EC|ECO|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERICSSON|ERNI|ES|ESQ|ESTATE|ESURANCE|ET|ETISALAT|EU|EUROVISION|EUS|EVENTS|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FARMERS|FASHION|FAST|FEDEX|FEEDBACK|FERRARI|FERRERO|FI|FIAT|FIDELITY|FIDO|FILM|FINAL|FINANCE|FINANCIAL|FIRE|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLY|FM|FO|FOO|FOOD|FOODNETWORK|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FREE|FRESENIUS|FRL|FROGANS|FRONTDOOR|FRONTIER|FTR|FUJITSU|FUJIXEROX|FUN|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GAP|GARDEN|GAY|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GEORGE|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLADE|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GODADDY|GOLD|GOLDPOINT|GOLF|GOO|GOODYEAR|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROCERY|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAIR|HAMBURG|HANGOUT|HAUS|HBO|HDFC|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HGTV|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMEGOODS|HOMES|HOMESENSE|HONDA|HORSE|HOSPITAL|HOST|HOSTING|HOT|HOTELES|HOTELS|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HU|HUGHES|HYATT|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IEEE|IFM|IKANO|IL|IM|IMAMAT|IMDB|IMMO|IMMOBILIEN|IN|INC|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTEL|INTERNATIONAL|INTUIT|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISMAILI|IST|ISTANBUL|IT|ITAU|ITV|IVECO|JAGUAR|JAVA|JCB|JCP|JE|JEEP|JETZT|JEWELRY|JIO|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|JUNIPER|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KINDLE|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KOSHER|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LANCIA|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATINO|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEFRAK|LEGAL|LEGO|LEXUS|LGBT|LI|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LILLY|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LLC|LLP|LOAN|LOANS|LOCKER|LOCUS|LOFT|LOL|LONDON|LOTTE|LOTTO|LOVE|LPL|LPLFINANCIAL|LR|LS|LT|LTD|LTDA|LU|LUNDBECK|LUPIN|LUXE|LUXURY|LV|LY|MA|MACYS|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MAP|MARKET|MARKETING|MARKETS|MARRIOTT|MARSHALLS|MASERATI|MATTEL|MBA|MC|MCKINSEY|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MERCKMSD|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MINT|MIT|MITSUBISHI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILE|MODA|MOE|MOI|MOM|MONASH|MONEY|MONSTER|MORMON|MORTGAGE|MOSCOW|MOTO|MOTORCYCLES|MOV|MOVIE|MP|MQ|MR|MS|MSD|MT|MTN|MTR|MU|MUSEUM|MUTUAL|MV|MW|MX|MY|MZ|NA|NAB|NAGOYA|NAME|NATIONWIDE|NATURA|NAVY|NBA|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWHOLLAND|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NFL|NG|NGO|NHK|NI|NICO|NIKE|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOW|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OBSERVER|OFF|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLDNAVY|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|ONYOURSIDE|OOO|OPEN|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PANASONIC|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PAY|PCCW|PE|PET|PF|PFIZER|PG|PH|PHARMACY|PHD|PHILIPS|PHONE|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|PNC|POHL|POKER|POLITIE|PORN|POST|PR|PRAMERICA|PRAXI|PRESS|PRIME|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PRU|PRUDENTIAL|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|QVC|RACING|RADIO|RAID|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|RELIANCE|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIGHTATHOME|RIL|RIO|RIP|RMIT|RO|ROCHER|ROCKS|RODEO|ROGERS|ROOM|RS|RSVP|RU|RUGBY|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSCLUB|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SARL|SAS|SAVE|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCJOHNSON|SCOR|SCOT|SD|SE|SEARCH|SEAT|SECURE|SECURITY|SEEK|SELECT|SENER|SERVICES|SES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHANGRILA|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOPPING|SHOUJI|SHOW|SHOWTIME|SHRIRAM|SI|SILK|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SLING|SM|SMART|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPORT|SPOT|SPREADBETTING|SR|SRL|SS|ST|STADA|STAPLES|STAR|STATEBANK|STATEFARM|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWIFTCOVER|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TARGET|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TDK|TEAM|TECH|TECHNOLOGY|TEL|TEMASEK|TENNIS|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TIAA|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TJMAXX|TJX|TK|TKMAXX|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELCHANNEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBANK|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VANGUARD|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISA|VISION|VIVA|VIVO|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOLVO|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALMART|WALTER|WANG|WANGGOU|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WINNERS|WME|WOLTERSKLUWER|WOODSIDE|WORK|WORKS|WORLD|WOW|WS|WTC|WTF|XBOX|XEROX|XFINITY|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3HCRJ9C|XN--3OQ18VL8PN36A|XN--3PXU8K|XN--42C2D9A|XN--45BR5CYL|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--54B7FTA0CC|XN--55QW42G|XN--55QX5D|XN--5SU34J936BGSG|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80AQECDR1A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AE|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--GK3AT1E|XN--H2BREG3EVE|XN--H2BRJ9C|XN--H2BRJ9C8C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAKC7DVF|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBAYH7GPA|XN--MGBBH1A|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBCPQ6GPA1A|XN--MGBERP4A5D4AR|XN--MGBGU82A|XN--MGBI4ECEXP|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NGBRX|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--OTU796D|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q7CE6A|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXA6A|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--RVC1E0AM3E|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--TIQ49XQYJ|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW|TEST)"}));T(B),B.TLDs;var s=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.openingParenthesis="([\"'{",A.closingParenthesis=")]\"'}",A.parenthesis=A.openingParenthesis.split("").map((function(u,e){return""+u+A.closingParenthesis.charAt(e)})),A.htmlAttributes=["src","data","href","cite","formaction","icon","manifest","poster","codebase","background","profile","usemap","itemtype","action","longdesc","classid","archive"],A.nonLatinAlphabetRanges="\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC",A.TLDs=B.TLDs}));T(s),s.openingParenthesis,s.closingParenthesis,s.parenthesis,s.htmlAttributes,s.nonLatinAlphabetRanges,s.TLDs;var D=l((function(u,A){function e(u,A,e){return"function"==typeof e?e(u,A):e}Object.defineProperty(A,"__esModule",{value:!0}),A.transform=function(u,A){var t="",n=1/0,E={},i=!1;if(A&&A.specialTransform)for(var r=0;r<A.specialTransform.length;r++){var N=A.specialTransform[r];if(N.test.test(u.string))return N.transform(u.string,u)}return A&&A.exclude&&e(u.string,u,A.exclude)?u.string:(A&&A.protocol&&(t=e(u.string,u,A.protocol)),u.protocol?t="":t||(t=u.isEmail?"mailto:":u.isFile?"file:///":"http://"),A&&A.truncate&&(n=e(u.string,u,A.truncate)),A&&A.middleTruncation&&(i=e(u.string,u,A.middleTruncation)),A&&A.attributes&&(E=e(u.string,u,A.attributes)),"<a "+Object.keys(E).map((function(u){return!0===E[u]?u:u+'="'+E[u]+'" '})).join(" ")+'href="'+t+u.string+'">'+(u.string.length>n?i?u.string.substring(0,Math.floor(n/2))+"…"+u.string.substring(u.string.length-Math.ceil(n/2),u.string.length):u.string.substring(0,n)+"…":u.string)+"</a>")}}));T(D),D.transform;var L=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0});var e="([a-z0-9]+(-+[a-z0-9]+)*\\.)+("+s.TLDs+")",t="a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()",n="((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",E="\\[(([a-f0-9:]+:+)+[a-f0-9]+)\\]",i="(https?:|ftps?:)\\/\\/",r="((("+i+")?("+e+"|"+n+"|("+i+")("+E+"|"+("([a-z0-9]+(-+[a-z0-9]+)*\\.)+([a-z0-9][a-z0-9-]{0,"+(Math.max.apply(S,s.TLDs.split("|").map((function(u){return u.length})))-2)+"}[a-z0-9])")+"))(?!@\\w)(:(\\d{1,5}))?)|(((https?:|ftps?:)\\/\\/)\\S+))",N=r+"((((\\/((["+t+"]+(\\/["+t+s.nonLatinAlphabetRanges+"]*)*))?)?)((\\?(["+t+"\\/?]*))?)((\\#(["+t+"\\/?]*))?))?\\b(((["+t+"\\/"+s.nonLatinAlphabetRanges+"][a-zA-Z\\d\\-_~+=\\/"+s.nonLatinAlphabetRanges+"]+)?))+)";A.email="\\b(mailto:)?([a-z0-9!#$%&'*+=?^_`{|}~-]+(\\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*)@("+e+"|"+n+")\\b",A.url="("+N+")|(\\b"+r+"(((\\/(([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()]+(\\/[a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()]*)*))?)?)((\\?([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()\\/?]*))?)((\\#([a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()\\/?]*))?))?\\b(([\\/]?))+)",A.file="(file:\\/\\/\\/)([a-z]+:(\\/|\\\\)+)?([\\w.]+([\\/\\\\]?)+)+",A.final="("+A.url+")|("+A.email+")|("+A.file+")",A.finalRegex=new RegExp(A.final,"gi"),A.ipRegex=new RegExp("^("+n+"|"+E+")$","i"),A.emailRegex=new RegExp("^("+A.email+")$","i"),A.fileRegex=new RegExp("^("+A.file+")$","i"),A.urlRegex=new RegExp("^("+A.url+")$","i");var C={isURL:0,isEmail:0,isFile:0,file:{fileName:0,protocol:0},email:{protocol:0,local:0,host:0},url:{ipv4:0,ipv6:0,ipv4Confirmation:0,byProtocol:0,port:0,protocol1:0,protocol2:0,protocol3:0,protocolWithDomain:0,path:0,secondPartOfPath:0,query:0,fragment:0}};A.iidxes=C;for(var o=["file:///some/file/path/filename.pdf","mailto:e+_mail.me@sub.domain.com","http://sub.domain.co.uk:3000/p/a/t/h_(asd)/h?q=abc123#dfdf","http://www.عربي.com","http://127.0.0.1:3000/p/a/t_(asd)/h?q=abc123#dfdf","http://[2a00:1450:4025:401::67]/k/something","a.org/abc/ი_გგ"].join(" "),a=null,O=0;null!==(a=A.finalRegex.exec(o));)0===O&&(C.isFile=a.lastIndexOf(a[0]),C.file.fileName=a.indexOf("filename.pdf"),C.file.protocol=a.indexOf("file:///")),1===O&&(C.isEmail=a.lastIndexOf(a[0]),C.email.protocol=a.indexOf("mailto:"),C.email.local=a.indexOf("e+_mail.me"),C.email.host=a.indexOf("sub.domain.com")),2===O&&(C.isURL=a.lastIndexOf(a[0]),C.url.protocol1=a.indexOf("http://"),C.url.protocolWithDomain=a.indexOf("http://sub.domain.co.uk:3000"),C.url.port=a.indexOf("3000"),C.url.path=a.indexOf("/p/a/t/h_(asd)/h"),C.url.query=a.indexOf("q=abc123"),C.url.fragment=a.indexOf("dfdf")),3===O&&(C.url.byProtocol=a.lastIndexOf("http://www.عربي.com"),C.url.protocol2=a.lastIndexOf("http://")),4===O&&(C.url.ipv4=a.indexOf("127.0.0.1"),C.url.ipv4Confirmation=a.indexOf("0.")),5===O&&(C.url.ipv6=a.indexOf("2a00:1450:4025:401::67"),C.url.protocol3=a.lastIndexOf("http://")),6===O&&(C.url.secondPartOfPath=a.indexOf("გგ")),O++}));T(L),L.email,L.url,L.file,L.finalRegex,L.ipRegex,L.emailRegex,L.fileRegex,L.urlRegex,L.iidxes;var c=l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0}),A.checkParenthesis=function(u,A,e,t){return t===A&&(e.split(u).length-e.split(A).length==1||u===A&&e.split(u).length%2==0||void 0)},A.maximumAttrLength=s.htmlAttributes.sort((function(u,A){return A.length-u.length}))[0].length,A.isInsideAttribute=function(u){return/\s[a-z0-9-]+=('|")$/i.test(u)||/: ?url\(('|")?$/i.test(u)},A.isInsideAnchorTag=function(u,A,e){for(var t=u.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),n=new RegExp("(?=(<a))(?!([\\s\\S]*)(<\\/a>)("+t+"))[\\s\\S]*?("+t+")(?!\"|')","gi"),E=null;null!==(E=n.exec(A));){if(E.index+E[0].length===e)return!0}return!1}}));T(c),c.checkParenthesis,c.maximumAttrLength,c.isInsideAttribute,c.isInsideAnchorTag;var F=T(l((function(u,A){Object.defineProperty(A,"__esModule",{value:!0});var e=function(u){for(var A=[],e=null,t=function(){var t=e.index,n=t+e[0].length,E=e[0];if("/"===u.charAt(n)&&(E+=u.charAt(n),n++),s.closingParenthesis.indexOf(u.charAt(n))>-1&&s.parenthesis.forEach((function(A){var e=A.charAt(0),t=A.charAt(1);c.checkParenthesis(e,t,E,u.charAt(n))&&(E+=u.charAt(n),n++)})),-1!==['""',"''","()"].indexOf(u.charAt(t-1)+u.charAt(n))&&c.isInsideAttribute(u.substring(t-c.maximumAttrLength-15,t)))return"continue";if(u.substring(n,u.length).indexOf("</a>")>-1&&u.substring(0,t).indexOf("<a")>-1&&c.isInsideAnchorTag(E,u,n))return"continue";if(e[L.iidxes.isURL]){var i=(e[L.iidxes.url.path]||"")+(e[L.iidxes.url.secondPartOfPath]||"")||void 0,r=e[L.iidxes.url.protocol1]||e[L.iidxes.url.protocol2]||e[L.iidxes.url.protocol3];A.push({start:t,end:n,string:E,isURL:!0,protocol:r,port:e[L.iidxes.url.port],ipv4:e[L.iidxes.url.ipv4Confirmation]?e[L.iidxes.url.ipv4]:void 0,ipv6:e[L.iidxes.url.ipv6],host:e[L.iidxes.url.byProtocol]?void 0:(e[L.iidxes.url.protocolWithDomain]||"").substr((r||"").length),confirmedByProtocol:!!e[L.iidxes.url.byProtocol],path:e[L.iidxes.url.byProtocol]?void 0:i,query:e[L.iidxes.url.query]||void 0,fragment:e[L.iidxes.url.fragment]||void 0})}else if(e[L.iidxes.isFile]){var N=E.substr(8);A.push({start:t,end:n,string:E,isFile:!0,protocol:e[L.iidxes.file.protocol],filename:e[L.iidxes.file.fileName],filePath:N,fileDirectory:N.substr(0,N.length-e[L.iidxes.file.fileName].length)})}else e[L.iidxes.isEmail]?A.push({start:t,end:n,string:E,isEmail:!0,local:e[L.iidxes.email.local],protocol:e[L.iidxes.email.protocol],host:e[L.iidxes.email.host]}):A.push({start:t,end:n,string:E})};null!==(e=L.finalRegex.exec(u));)t();return A},t=function(u){var A="string"==typeof u?{input:u,options:void 0,extensions:void 0}:u,t=A.input,n=A.options,E=A.extensions;if(E)for(var i=0;i<E.length;i++){var r=E[i];t=t.replace(r.test,r.transform)}var N=e(t),C="";for(i=0;i<N.length;i++)C=(C||(0===i?t.substring(0,N[i].start):""))+D.transform(N[i],n)+(N[i+1]?t.substring(N[i].end,N[i+1].start):t.substring(N[i].end));return C||t};t.list=function(u){return e(u)},t.validate={ip:function(u){return L.ipRegex.test(u)},email:function(u){return L.emailRegex.test(u)},file:function(u){return L.fileRegex.test(u)},url:function(u){return L.urlRegex.test(u)||L.ipRegex.test(u)}},A.default=t})));function f(u){return u.toLowerCase()===u}function M(u,A){return f(A)?u.toLowerCase():u.toUpperCase()}function G(u){return u.charAt(0).toUpperCase()+u.substring(1).toLowerCase()}function U(u){return"string"==typeof u&&/^[a-z\u0400-\u04FF]+$/i.test(u)}function h(u){return/ь$/i.test(u)}var P=/Ч/gi,d=/Ш/gi,p=/^Е/gi,X=/Е/gi,H=/Ё/gi,g=/Ю/gi,K=/Я/gi,Y=/е{3,}/gi,v=/[ьъ]е/gi,m=/[аоэеиуўёюяaeiou]е/gi,W=/[аоэеиуўёюяaeiou]ц/gi,y=/ьо/gi,x=/сҳ/gi,V=/[ўғ]ъ/gi;function b(u){var A=this;return u.replace(X,function(u){return E(this,A),R[u]||u}.bind(this))}function J(u){return M("ye",u.charAt(1))}function Z(u){return u.charAt(0)+M("ye",u.charAt(1))}function Q(u){return M("yo",u.charAt(1))}function w(u){return u.charAt(0)}function k(u){return u.charAt(0)+M("ts",u.charAt(1))}function _(u){return M("s",u.charAt(0))+"ʼ"+M("h",u.charAt(1))}function z(u,A,e){var t=this;return u.replace(A,function(A,n){if(E(this,t),f(A))return e.toLowerCase();if(!U(u[n-1])&&!U(u[n+1]))return G(e);var i=U(u[n+1])&&u[n+1];return i&&f(i)?G(e):e.toUpperCase()}.bind(this))}function j(u){var A,e="",t=o(function(u){return u=z(u,P,"CH"),u=z(u,d,"SH"),u=z(u,p,"YE"),u=z(u,H,"YO"),u=z(u,g,"YU"),(u=(u=z(u,K,"YA")).replace(Y,b)).replace(v,J).replace(m,Z).replace(y,Q).replace(V,w).replace(W,k).replace(x,_)}(u));try{for(t.s();!(A=t.n()).done;){var n=A.value;e+=n in R?R[n]:n}}catch(u){t.e(u)}finally{t.f()}return e}var $=function(){function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];A(this,u),n(this,"collection",[]),this.extend(e)}return t(u,[{key:"extend",value:function(u){var A=this;u.forEach(function(u){var e;(E(this,A),u&&u[0]&&u[1])&&(e=this.collection).push.apply(e,r(this.generateWordCasingVariants(u)))}.bind(this))}},{key:"purge",value:function(){this.collection=[]}},{key:"generateWordCasingVariants",value:function(u){var A=i(u,2),e=A[0],t=A[1];return[[e.toLowerCase(),t.toLowerCase()],[e.toUpperCase(),t.toUpperCase()],[G(e),G(t)]]}},{key:"getCase",value:function(u,A){var e="latin"===A?1:0;return{exceptionalWord:u["latin"===A?0:1],replacement:u[e]}}},{key:"normalizeEndSoftSign",value:function(u){var A=u.replacement;u.replacement=A.substring(0,A.length-1)}},{key:"findInCollection",value:function(u,A){var e,t,n,E=f(u.charAt(0))?u.toLowerCase():G(u),i=o(this.collection);try{for(i.s();!(n=i.n()).done;){var r=n.value,N=this.getCase(r,A),C=N.exceptionalWord,a=N.replacement;if(u.startsWith(C))return e={exceptionalWord:C,replacement:a},"latin"===A&&h(a)&&u.length!==C.length&&this.normalizeEndSoftSign(e),{exceptional:e};E.startsWith(C)&&(t={exceptionalWord:C,replacement:a})}}catch(u){i.e(u)}finally{i.f()}return{alternative:t}}},{key:"decideMatcher",value:function(u,A){return void 0!==u?u.exceptionalWord:void 0!==A?new RegExp(A.exceptionalWord.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"gi"):void 0}},{key:"findCase",value:function(u,A){var e=this.findInCollection(u,A),t=e.exceptional,n=e.alternative,E=this.decideMatcher(t,n),i=(null==t?void 0:t.replacement)||(null==n?void 0:n.replacement);if(E&&i)return{matcher:E,replacement:i}}}]),u}();function q(u,A,e){var t=this;return u.replace(A,function(u){return E(this,t),M(e,u[0])}.bind(this))}function uu(u){var A=this;return u=(u=u.replace(/tsi(on|ya)/gi,function(u){return E(this,A),q(u,/ts/i,"ц")}.bind(this))).replace(/^e|[\W]e/gi,function(u){return E(this,A),q(u,/e/i,"э")}.bind(this)),u=q(u=u.replace(/e{2}/gi,function(u){return E(this,A),u[0]+M("э",u[1])}.bind(this)),/ch/gi,"ч"),u=q(u,/sh/gi,"ш"),u=q(u,/g[ʻʼ’'`‘´]/gi,"ғ"),u=q(u,/o[ʻʼ’'`‘´]/gi,"ў"),u=q(u,/ye/gi,"е"),u=q(u,/yo/gi,"ё"),u=q(u,/yu/gi,"ю"),u=function(u){var A=this;return u.replace(/[ʻʼ’'`‘´]/g,function(e,t){E(this,A);var n=u[t+1]||u[t-1];return n?M("ъ",n):"ъ".toLowerCase()}.bind(this))}(u=(u=q(u,/ya/gi,"я")).replace(/s[ʻʼ’'`‘´]h/gi,function(u){return E(this,A),(I[u[0]]||u[0])+(I[u[2]]||u[2])}.bind(this)))}function Au(u){var A,e="",t=o(uu(u));try{for(t.s();!(A=t.n()).done;){var n=A.value;e+=n in I?I[n]:n}}catch(u){t.e(u)}finally{t.f()}return e}var eu=function(){function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];A(this,u),n(this,"exceptionalsCollection",new $),this.extendExceptionals(e)}return t(u,[{key:"extendExceptionals",value:function(u){this.exceptionalsCollection.extend(u)}},{key:"purgeExceptionals",value:function(){this.exceptionalsCollection.purge()}},{key:"getTransliterator",value:function(u){return"latin"===u?Au:j}},{key:"replaceExceptionals",value:function(u,A,e,t){var n=this,i=u.split(A);return(i=i.map(function(u,A){E(this,n);var r=A===i.length-1;return t(u)+(r?"":e)}.bind(this))).join("")}},{key:"handleExceptional",value:function(u,A){var e=this.exceptionalsCollection.findCase(u,A);if(e)return this.replaceExceptionals(u,e.matcher,e.replacement,this.getTransliterator(A))}},{key:"transliteratePureWord",value:function(u,A){var e=this,t=this.getTransliterator(A);return u.replace(/[ʻʼ’'`´‘a-z\u0400-\u04FF\-]+/gi,function(u){E(this,e);var n=this.handleExceptional(u,A);return n||t(u)}.bind(this))}},{key:"transliterateWord",value:function(u,A){if(function(u){return F.list(u).length>0}(u))return u;if(function(u){return/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/.test(u)}(u))return u;var e=this.handleExceptional(u,A);return e||this.transliteratePureWord(u,A)}},{key:"toCyrillic",value:function(u){var A=this;return u instanceof Array?u.map(function(u){return E(this,A),this.transliterateWord(u,"latin")}.bind(this)):"string"==typeof u?this.transliterateWord(u,"latin"):void 0}},{key:"toLatin",value:function(u){var A=this;return u instanceof Array?u.map(function(u){return E(this,A),this.transliterateWord(u,"cyrillic")}.bind(this)):"string"==typeof u?this.transliterateWord(u,"cyrillic"):void 0}},{key:"textToCyrillic",value:function(u){var A=this;return u.replace(/\S+/g,function(u){return E(this,A),this.transliterateWord(u,"latin")}.bind(this))}},{key:"textToLatin",value:function(u){var A=this;return u.replace(/\S+/g,function(u){return E(this,A),this.transliterateWord(u,"cyrillic")}.bind(this))}}]),u}();u.cyrillicToLatin=j,u.default=eu,u.latinToCyrillic=Au,Object.defineProperty(u,"__esModule",{value:!0})}));
|
package/pkg/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lotin-kirill",
|
|
3
|
+
"description": "Transform Uzbek latin characters into Uzbek-cyrillic characters or vice versa. O'zbekcha so'zlarni lotin alifbosidan kirill alifbosiga (yoki aksincha) o'girish.",
|
|
4
|
+
"version": "0.1.2",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist-*/",
|
|
8
|
+
"bin/"
|
|
9
|
+
],
|
|
10
|
+
"pika": true,
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"keywords": [
|
|
13
|
+
"lotin",
|
|
14
|
+
"kirill",
|
|
15
|
+
"lotin-kirill",
|
|
16
|
+
"alifbo",
|
|
17
|
+
"transliteratsiya",
|
|
18
|
+
"o'zbekcha"
|
|
19
|
+
],
|
|
20
|
+
"homepage": "https://github.com/diyorbek/lotin-kirill",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/diyorbek/lotin-kirill.git"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"anchorme": "^2.1.2"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@pika/pack": "^0.5.0",
|
|
30
|
+
"@pika/plugin-build-node": "^0.9.2",
|
|
31
|
+
"@pika/plugin-build-types": "^0.9.2",
|
|
32
|
+
"@pika/plugin-standard-pkg": "^0.9.2",
|
|
33
|
+
"@types/jest": "^26.0.20",
|
|
34
|
+
"@typescript-eslint/eslint-plugin": "^3.0.2",
|
|
35
|
+
"@typescript-eslint/parser": "^3.0.2",
|
|
36
|
+
"eslint": "^7.1.0",
|
|
37
|
+
"eslint-config-prettier": "^6.11.0",
|
|
38
|
+
"eslint-plugin-jest": "^23.17.1",
|
|
39
|
+
"eslint-plugin-prettier": "^3.1.3",
|
|
40
|
+
"husky": "^6.0.0",
|
|
41
|
+
"jest": "^26.6.3",
|
|
42
|
+
"np": "^7.5.0",
|
|
43
|
+
"pika-plugin-build-legacy-browser": "^0.0.3",
|
|
44
|
+
"prettier": "^2.2.1",
|
|
45
|
+
"prettier-plugin-organize-imports": "^2.1.0",
|
|
46
|
+
"ts-jest": "^26.5.3",
|
|
47
|
+
"typescript": "^4.2.3"
|
|
48
|
+
},
|
|
49
|
+
"esnext": "dist-src/index.js",
|
|
50
|
+
"main": "dist-node/index.js",
|
|
51
|
+
"types": "dist-types/index.d.ts",
|
|
52
|
+
"unpkg": "dist-umd/index.min.js",
|
|
53
|
+
"jsdelivr": "dist-umd/index.min.js"
|
|
54
|
+
}
|
package/dist-node/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../dist-src/characters.js","../dist-src/utils.js","../dist-src/cyrillic.js","../dist-src/exceptionalsCollection.js","../dist-src/latin.js","../dist-src/index.js"],"sourcesContent":["export const APOSTROPHE = '\\u02bc';\nexport const TURNED_COMMA = '\\u2018';\nexport const LATIN_CHARACTERS = {\n ['A']: 'А',\n ['a']: 'а',\n ['B']: 'Б',\n ['b']: 'б',\n ['D']: 'Д',\n ['d']: 'д',\n ['E']: 'Е',\n ['e']: 'е',\n ['F']: 'Ф',\n ['f']: 'ф',\n ['G']: 'Г',\n ['g']: 'г',\n ['H']: 'Ҳ',\n ['h']: 'ҳ',\n ['I']: 'И',\n ['i']: 'и',\n ['J']: 'Ж',\n ['j']: 'ж',\n ['K']: 'К',\n ['k']: 'к',\n ['L']: 'Л',\n ['l']: 'л',\n ['M']: 'М',\n ['m']: 'м',\n ['N']: 'Н',\n ['n']: 'н',\n ['O']: 'О',\n ['o']: 'о',\n ['P']: 'П',\n ['p']: 'п',\n ['Q']: 'Қ',\n ['q']: 'қ',\n ['R']: 'Р',\n ['r']: 'р',\n ['S']: 'С',\n ['s']: 'с',\n ['T']: 'Т',\n ['t']: 'т',\n ['U']: 'У',\n ['u']: 'у',\n ['V']: 'В',\n ['v']: 'в',\n ['X']: 'Х',\n ['x']: 'х',\n ['Y']: 'Й',\n ['y']: 'й',\n ['Z']: 'З',\n ['z']: 'з'\n};\nexport const CYRILLIC_CHARACTERS = {\n ['А']: 'A',\n ['а']: 'a',\n ['Б']: 'B',\n ['б']: 'b',\n ['Д']: 'D',\n ['д']: 'd',\n ['Е']: 'E',\n ['е']: 'e',\n ['Ф']: 'F',\n ['ф']: 'f',\n ['Г']: 'G',\n ['г']: 'g',\n ['Ҳ']: 'H',\n ['ҳ']: 'h',\n ['И']: 'I',\n ['и']: 'i',\n ['Ж']: 'J',\n ['ж']: 'j',\n ['К']: 'K',\n ['к']: 'k',\n ['Л']: 'L',\n ['л']: 'l',\n ['М']: 'M',\n ['м']: 'm',\n ['Н']: 'N',\n ['н']: 'n',\n ['О']: 'O',\n ['о']: 'o',\n ['П']: 'P',\n ['п']: 'p',\n ['Қ']: 'Q',\n ['қ']: 'q',\n ['Р']: 'R',\n ['р']: 'r',\n ['С']: 'S',\n ['с']: 's',\n ['Т']: 'T',\n ['т']: 't',\n ['У']: 'U',\n ['у']: 'u',\n ['В']: 'V',\n ['в']: 'v',\n ['Х']: 'X',\n ['х']: 'x',\n ['Й']: 'Y',\n ['й']: 'y',\n ['З']: 'Z',\n ['з']: 'z',\n ['Ў']: `O${TURNED_COMMA}`,\n ['ў']: `o${TURNED_COMMA}`,\n ['Ғ']: `G${TURNED_COMMA}`,\n ['ғ']: `g${TURNED_COMMA}`,\n ['Ш']: 'Sh',\n ['ш']: 'sh',\n ['Ч']: 'Ch',\n ['ч']: 'ch',\n ['Ё']: 'Yo',\n ['ё']: 'yo',\n ['Ц']: 'S',\n ['ц']: 's',\n ['Ь']: '',\n ['ь']: '',\n ['Э']: 'E',\n ['э']: 'e',\n ['Ю']: 'Yu',\n ['ю']: 'yu',\n ['Я']: 'Ya',\n ['я']: 'ya',\n ['Ъ']: APOSTROPHE,\n ['ъ']: APOSTROPHE\n};\nexport const CYRILLIC_LETTER = `\\u0400-\\u04FF`;\nexport const CYRILLIC_VOVEL = `аоэеиуўёюя`;\nexport const LATIN_LETTER = `a-z`;\nexport const LATIN_VOVEL = `aeiou`;","import anchorme from 'anchorme';\nexport function isLowerCase(char) {\n return char.toLowerCase() === char;\n}\nexport function normalizeCase(char, assimilateTo) {\n return isLowerCase(assimilateTo) ? char.toLowerCase() : char.toUpperCase();\n}\nexport function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n} // Detect only alphabetical letters, excluding apostrophe(')\n\nexport function isLetter(char) {\n if (typeof char === 'string') {\n return /^[a-z\\u0400-\\u04FF]+$/i.test(char);\n }\n\n return false;\n}\nexport function isVovel(char) {\n return /[аоэеиуўёюяaeiou]/i.test(char);\n}\nexport function isURL(word) {\n return anchorme.list(word).length > 0;\n}\nexport function escapeRegex(expString) {\n return expString.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\nexport function endsWithSoftSign(word) {\n return /ь$/i.test(word);\n}\nexport function isRomanNumber(word) {\n return /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\\.|\\))?$/.test(word);\n}","import { CYRILLIC_CHARACTERS } from \"./characters.js\";\nimport { capitalize, isLetter, isLowerCase, normalizeCase } from \"./utils.js\";\n\nfunction normalizeBigramCasing(word, matcher, latinBigram) {\n return word.replace(matcher, (matchString, index) => {\n if (isLowerCase(matchString)) {\n return latinBigram.toLowerCase();\n }\n\n if (!isLetter(word[index - 1]) && !isLetter(word[index + 1])) {\n return capitalize(latinBigram);\n } // Assimilate to the next letter\n\n\n const assimilator = isLetter(word[index + 1]) && word[index + 1];\n\n if (assimilator) {\n return isLowerCase(assimilator) ? capitalize(latinBigram) : latinBigram.toUpperCase();\n }\n\n return latinBigram.toUpperCase();\n });\n}\n\nfunction replaceSpecials(word) {\n word = normalizeBigramCasing(word, /Ч/gi, 'CH');\n word = normalizeBigramCasing(word, /Ш/gi, 'SH');\n word = normalizeBigramCasing(word, /^Е/gi, 'YE');\n word = normalizeBigramCasing(word, /Ё/gi, 'YO');\n word = normalizeBigramCasing(word, /Ю/gi, 'YU');\n word = normalizeBigramCasing(word, /Я/gi, 'YA'); // Don't split into bigram if repetitive sequence of `e`s is 3+\n\n word = word.replace(/е{3,}/gi, matchString => matchString.replace(/е/gi, str => CYRILLIC_CHARACTERS[str] || str));\n return word.replace(/[ьъ]е/gi, str => normalizeCase('ye', str.charAt(1))).replace(/[аоэеиуўёюяaeiou]е/gi, str => str.charAt(0) + normalizeCase('ye', str.charAt(1))).replace(/ьо/gi, matchString => normalizeCase('yo', matchString.charAt(1))).replace(/[ўғ]ъ/gi, matchString => matchString.charAt(0)).replace(/[аоэеиуўёюяaeiou]ц/gi, str => str.charAt(0) + normalizeCase('ts', str.charAt(1)));\n}\n\nexport function cyrillicToLatin(word) {\n const escapedWord = replaceSpecials(word);\n let out = '';\n\n for (const char of escapedWord) {\n if (char in CYRILLIC_CHARACTERS) {\n out += CYRILLIC_CHARACTERS[char];\n } else {\n out += char;\n }\n }\n\n return out;\n}","import { capitalize, endsWithSoftSign, escapeRegex, isLowerCase } from \"./utils.js\";\n/*\n Exceptional word pairs works bidirectional even if\n transliteration from cyrillic to latin is usually\n possible without exceptions list. Sepatating list \n into 2 (one for latin, the other for cyrillc) make\n things complicated. \n \n Proposal can be introducing optional 3rd item to \n `ExceptionalWordPair` which will indicate \n bidirectional, only `latin->cyrillic` or only \n `cyrillic->latin` transliteration. This way look-ups \n in exceptionals list can be avoided where unecessary.\n*/\n\nexport class ExceptionalsCollection {\n collection = [];\n\n constructor(exceptions = []) {\n this.extend(exceptions);\n }\n\n extend(exceptions) {\n // TODO: Optimize for duplicates\n exceptions.forEach(pair => {\n if (pair && pair[0] && pair[1]) {\n this.collection.push(...this.generateWordCasingVariants(pair));\n }\n });\n }\n\n purge() {\n this.collection = [];\n }\n\n generateWordCasingVariants([latin, cyrillic]) {\n return [[latin.toLowerCase(), cyrillic.toLowerCase()], [latin.toUpperCase(), cyrillic.toUpperCase()], [capitalize(latin), capitalize(cyrillic)]];\n }\n\n getCase(exceptionalPair, source) {\n const exceptionSource = source === 'latin' ? 0 : 1;\n const exceptionTarget = source === 'latin' ? 1 : 0;\n return {\n exceptionalWord: exceptionalPair[exceptionSource],\n replacement: exceptionalPair[exceptionTarget]\n };\n }\n\n normalizeEndSoftSign(exceptional) {\n const {\n replacement\n } = exceptional;\n exceptional.replacement = replacement.substring(0, replacement.length - 1);\n }\n\n findInCollection(word, source) {\n let exceptional;\n let alternative; // If the word is typed with wrong letter-casing, default to lower-case or capitalize\n\n const shouldDefaultToLowerCase = isLowerCase(word.charAt(0));\n const altCasingMatch = shouldDefaultToLowerCase ? word.toLowerCase() : capitalize(word);\n\n for (const exceptionalPair of this.collection) {\n const {\n exceptionalWord,\n replacement\n } = this.getCase(exceptionalPair, source);\n\n if (word.startsWith(exceptionalWord)) {\n exceptional = {\n exceptionalWord,\n replacement\n };\n\n if (source === 'latin' && endsWithSoftSign(replacement) && word.length !== exceptionalWord.length) {\n this.normalizeEndSoftSign(exceptional);\n }\n\n return {\n exceptional\n };\n }\n\n if (altCasingMatch.startsWith(exceptionalWord)) {\n alternative = {\n exceptionalWord,\n replacement\n };\n }\n }\n\n return {\n alternative\n };\n }\n\n decideMatcher(exceptional, alternative) {\n if (exceptional !== undefined) {\n return exceptional.exceptionalWord;\n }\n\n if (alternative !== undefined) {\n // Using RegExp in \"case-insensetive\" mode to match exceptional\n // with its alternative casing\n return new RegExp(escapeRegex(alternative.exceptionalWord), 'gi');\n }\n }\n\n findCase(word, source) {\n const {\n exceptional,\n alternative\n } = this.findInCollection(word, source);\n const matcher = this.decideMatcher(exceptional, alternative);\n const replacement = exceptional?.replacement || alternative?.replacement;\n\n if (matcher && replacement) {\n return {\n matcher,\n replacement\n };\n }\n }\n\n}","import { LATIN_CHARACTERS } from \"./characters.js\";\nimport { normalizeCase } from \"./utils.js\";\n\nfunction transliterateBigram(word, matcher, cyrillicBigram) {\n return word.replace(matcher, matchString => {\n return normalizeCase(cyrillicBigram, matchString[0]);\n });\n}\n\nfunction transliterateApostrophe(word) {\n const apostrophe = 'ъ';\n return word.replace(/[ʻʼ’'`‘´]/g, (_, index) => {\n // Prioritize assimilation to the next letter\n const assimilator = word[index + 1] || word[index - 1];\n\n if (assimilator) {\n return normalizeCase(apostrophe, assimilator);\n }\n\n return apostrophe.toLowerCase();\n });\n}\n\nfunction transliterateSpecialLetters(word) {\n word = word.replace(/tsi(on|ya)/gi, matchString => {\n return transliterateBigram(matchString, /ts/i, 'ц');\n });\n /* \n Replace with 'Э' if:\n 1. word starts with 'E'\n 2. 'E' comes after non-letter symbol\n 3. cyrillic letter \n */\n\n word = word.replace(/^e|[\\W]e/gi, matchString => {\n return transliterateBigram(matchString, /e/i, 'э');\n });\n word = word.replace(/e{2}/gi, matchString => {\n return matchString[0] + normalizeCase('э', matchString[1]);\n });\n word = transliterateBigram(word, /ch/gi, 'ч');\n word = transliterateBigram(word, /sh/gi, 'ш');\n word = transliterateBigram(word, /g[ʻʼ’'`‘´]/gi, 'ғ');\n word = transliterateBigram(word, /o[ʻʼ’'`‘´]/gi, 'ў');\n word = transliterateBigram(word, /ye/gi, 'е');\n word = transliterateBigram(word, /yo/gi, 'ё');\n word = transliterateBigram(word, /yu/gi, 'ю');\n word = transliterateBigram(word, /ya/gi, 'я'); // handle non-bigram \"S'H\" => \"СҲ\" combination\n\n word = word.replace(/s[ʻʼ’'`‘´]h/gi, matchString => {\n const s = LATIN_CHARACTERS[matchString[0]] || matchString[0];\n const h = LATIN_CHARACTERS[matchString[2]] || matchString[2];\n return s + h;\n });\n word = transliterateApostrophe(word);\n return word;\n}\n\nexport function latinToCyrillic(word) {\n const escapedWord = transliterateSpecialLetters(word);\n let out = '';\n\n for (const char of escapedWord) {\n if (char in LATIN_CHARACTERS) {\n out += LATIN_CHARACTERS[char];\n } else {\n out += char;\n }\n }\n\n return out;\n}","import { cyrillicToLatin } from \"./cyrillic.js\";\nimport { ExceptionalsCollection } from \"./exceptionalsCollection.js\";\nimport { latinToCyrillic } from \"./latin.js\";\nimport { isRomanNumber, isURL } from \"./utils.js\";\nexport default class Transliterator {\n exceptionalsCollection = new ExceptionalsCollection();\n\n constructor(exceptions = []) {\n this.extendExceptionals(exceptions);\n }\n\n extendExceptionals(exceptions) {\n this.exceptionalsCollection.extend(exceptions);\n }\n\n purgeExceptionals() {\n this.exceptionalsCollection.purge();\n }\n\n getTransliterator(source) {\n return source === 'latin' ? latinToCyrillic : cyrillicToLatin;\n }\n\n replaceExceptionals(word, exceptional, replacement, transliterator) {\n let chunks = word.split(exceptional);\n chunks = chunks.map((chunk, i) => {\n const isLastChunk = i === chunks.length - 1;\n return transliterator(chunk) + (isLastChunk ? '' : replacement);\n });\n return chunks.join('');\n }\n\n handleExceptional(word, source) {\n const exceptional = this.exceptionalsCollection.findCase(word, source);\n\n if (exceptional) {\n return this.replaceExceptionals(word, exceptional.matcher, exceptional.replacement, this.getTransliterator(source));\n }\n }\n\n transliteratePureWord(word, source) {\n const transliterator = this.getTransliterator(source);\n return word.replace(/[ʻʼ’'`´‘a-z\\u0400-\\u04FF\\-]+/gi, pureWord => {\n const exceptionalWord = this.handleExceptional(pureWord, source);\n\n if (exceptionalWord) {\n return exceptionalWord;\n }\n\n return transliterator(pureWord);\n });\n }\n\n transliterateWord(word, source) {\n if (isURL(word)) {\n return word;\n }\n\n if (isRomanNumber(word)) {\n return word;\n }\n\n const exceptionalWord = this.handleExceptional(word, source);\n\n if (exceptionalWord) {\n return exceptionalWord;\n }\n\n return this.transliteratePureWord(word, source);\n }\n\n toCyrillic(word) {\n if (word instanceof Array) {\n return word.map(w => this.transliterateWord(w, 'latin'));\n } else if (typeof word === 'string') {\n return this.transliterateWord(word, 'latin');\n }\n }\n\n toLatin(word) {\n if (word instanceof Array) {\n return word.map(w => this.transliterateWord(w, 'cyrillic'));\n } else if (typeof word === 'string') {\n return this.transliterateWord(word, 'cyrillic');\n }\n }\n\n textToCyrillic(text) {\n return text.replace(/\\S+/g, word => this.transliterateWord(word, 'latin'));\n }\n\n textToLatin(text) {\n return text.replace(/\\S+/g, word => this.transliterateWord(word, 'cyrillic'));\n }\n\n}\nexport { cyrillicToLatin, latinToCyrillic };"],"names":["APOSTROPHE","TURNED_COMMA","LATIN_CHARACTERS","CYRILLIC_CHARACTERS","isLowerCase","char","toLowerCase","normalizeCase","assimilateTo","toUpperCase","capitalize","word","charAt","substring","isLetter","test","isURL","anchorme","list","length","escapeRegex","expString","replace","endsWithSoftSign","isRomanNumber","normalizeBigramCasing","matcher","latinBigram","matchString","index","assimilator","replaceSpecials","str","cyrillicToLatin","escapedWord","out","ExceptionalsCollection","constructor","exceptions","extend","forEach","pair","collection","push","generateWordCasingVariants","purge","latin","cyrillic","getCase","exceptionalPair","source","exceptionSource","exceptionTarget","exceptionalWord","replacement","normalizeEndSoftSign","exceptional","findInCollection","alternative","shouldDefaultToLowerCase","altCasingMatch","startsWith","decideMatcher","undefined","RegExp","findCase","transliterateBigram","cyrillicBigram","transliterateApostrophe","apostrophe","_","transliterateSpecialLetters","s","h","latinToCyrillic","Transliterator","extendExceptionals","exceptionalsCollection","purgeExceptionals","getTransliterator","replaceExceptionals","transliterator","chunks","split","map","chunk","i","isLastChunk","join","handleExceptional","transliteratePureWord","pureWord","transliterateWord","toCyrillic","Array","w","toLatin","textToCyrillic","text","textToLatin"],"mappings":"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"}
|
package/dist-src/cyrillic.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { CYRILLIC_CHARACTERS } from "./characters.js";
|
|
2
|
-
import { capitalize, isLetter, isLowerCase, normalizeCase } from "./utils.js";
|
|
3
|
-
|
|
4
|
-
function normalizeBigramCasing(word, matcher, latinBigram) {
|
|
5
|
-
return word.replace(matcher, (matchString, index) => {
|
|
6
|
-
if (isLowerCase(matchString)) {
|
|
7
|
-
return latinBigram.toLowerCase();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
if (!isLetter(word[index - 1]) && !isLetter(word[index + 1])) {
|
|
11
|
-
return capitalize(latinBigram);
|
|
12
|
-
} // Assimilate to the next letter
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const assimilator = isLetter(word[index + 1]) && word[index + 1];
|
|
16
|
-
|
|
17
|
-
if (assimilator) {
|
|
18
|
-
return isLowerCase(assimilator) ? capitalize(latinBigram) : latinBigram.toUpperCase();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return latinBigram.toUpperCase();
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function replaceSpecials(word) {
|
|
26
|
-
word = normalizeBigramCasing(word, /Ч/gi, 'CH');
|
|
27
|
-
word = normalizeBigramCasing(word, /Ш/gi, 'SH');
|
|
28
|
-
word = normalizeBigramCasing(word, /^Е/gi, 'YE');
|
|
29
|
-
word = normalizeBigramCasing(word, /Ё/gi, 'YO');
|
|
30
|
-
word = normalizeBigramCasing(word, /Ю/gi, 'YU');
|
|
31
|
-
word = normalizeBigramCasing(word, /Я/gi, 'YA'); // Don't split into bigram if repetitive sequence of `e`s is 3+
|
|
32
|
-
|
|
33
|
-
word = word.replace(/е{3,}/gi, matchString => matchString.replace(/е/gi, str => CYRILLIC_CHARACTERS[str] || str));
|
|
34
|
-
return word.replace(/[ьъ]е/gi, str => normalizeCase('ye', str.charAt(1))).replace(/[аоэеиуўёюяaeiou]е/gi, str => str.charAt(0) + normalizeCase('ye', str.charAt(1))).replace(/ьо/gi, matchString => normalizeCase('yo', matchString.charAt(1))).replace(/[ўғ]ъ/gi, matchString => matchString.charAt(0)).replace(/[аоэеиуўёюяaeiou]ц/gi, str => str.charAt(0) + normalizeCase('ts', str.charAt(1)));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function cyrillicToLatin(word) {
|
|
38
|
-
const escapedWord = replaceSpecials(word);
|
|
39
|
-
let out = '';
|
|
40
|
-
|
|
41
|
-
for (const char of escapedWord) {
|
|
42
|
-
if (char in CYRILLIC_CHARACTERS) {
|
|
43
|
-
out += CYRILLIC_CHARACTERS[char];
|
|
44
|
-
} else {
|
|
45
|
-
out += char;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return out;
|
|
50
|
-
}
|