lotin-kirill 0.1.3 → 0.1.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Diyorbek Sadullaev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README_UZ.md ADDED
@@ -0,0 +1,158 @@
1
+ # Lotin-Kirill
2
+
3
+ [![](https://github.com/diyorbek/lotin-kirill/workflows/Build/badge.svg?branch=main)](https://github.com/diyorbek/lotin-kirill/actions)
4
+ [![](https://codecov.io/gh/diyorbek/lotin-kirill/branch/main/graph/badge.svg)](https://codecov.io/gh/diyorbek/lotin-kirill)
5
+ [![](https://img.shields.io/npm/v/lotin-kirill)](https://npmjs.com/lotin-kirill)
6
+ [![](https://img.shields.io/npm/types/lotin-kirill)](https://npmjs.com/lotin-kirill)
7
+ [![](https://img.shields.io/bundlephobia/minzip/lotin-kirill)](https://bundlephobia.com/result?p=lotin-kirill)
8
+ [![](https://img.shields.io/npm/l/lotin-kirill)](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.4",
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
- "version": "0.1.3",
5
+ "author": "Diyorbek Sadullaev <diyorbek3377@gmail.com>",
5
6
  "license": "MIT",
6
- "files": [
7
- "dist-*/",
8
- "bin/"
9
- ],
10
- "pika": true,
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
- "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"
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
- "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"
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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Diyorbek Sadullaev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/pkg/README.md ADDED
@@ -0,0 +1,158 @@
1
+ # Lotin-Kirill
2
+
3
+ [![](https://github.com/diyorbek/lotin-kirill/workflows/Build/badge.svg?branch=main)](https://github.com/diyorbek/lotin-kirill/actions)
4
+ [![](https://codecov.io/gh/diyorbek/lotin-kirill/branch/main/graph/badge.svg)](https://codecov.io/gh/diyorbek/lotin-kirill)
5
+ [![](https://img.shields.io/npm/v/lotin-kirill)](https://npmjs.com/lotin-kirill)
6
+ [![](https://img.shields.io/npm/types/lotin-kirill)](https://npmjs.com/lotin-kirill)
7
+ [![](https://img.shields.io/bundlephobia/minzip/lotin-kirill)](https://bundlephobia.com/result?p=lotin-kirill)
8
+ [![](https://img.shields.io/npm/l/lotin-kirill)](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
+ ```
@@ -146,6 +146,10 @@ const CYRILLIC_CHARACTERS = {
146
146
  ['ъ']: APOSTROPHE
147
147
  };
148
148
 
149
+ const TURNED_COMMA_MATCHER = /[og][ʻʼ’'`‘´]/gi;
150
+ const APOSTROPHE_MATCHER = /[ʻʼ’'`‘´]/gi;
151
+ const REGEXP_ESC_MATCHER = /[-\/\\^$*+?.()|[\]{}]/g;
152
+ const ROMAN_NUMBER_MATCHER = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/;
149
153
  function isLowerCase(char) {
150
154
  return char.toLowerCase() === char;
151
155
  }
@@ -167,13 +171,22 @@ function isURL(word) {
167
171
  return anchorme.list(word).length > 0;
168
172
  }
169
173
  function escapeRegex(expString) {
170
- return expString.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
174
+ return expString.replace(REGEXP_ESC_MATCHER, '\\$&');
171
175
  }
172
176
  function endsWithSoftSign(word) {
173
177
  return /ь$/i.test(word);
174
178
  }
179
+ function dropEndSoftSign(word) {
180
+ return word.replace(/ь$/i, '');
181
+ }
175
182
  function isRomanNumber(word) {
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);
183
+ return ROMAN_NUMBER_MATCHER.test(word);
184
+ }
185
+ function normalizeTurnedComma(word) {
186
+ return word.replace(TURNED_COMMA_MATCHER, matched => matched.charAt(0) + TURNED_COMMA);
187
+ }
188
+ function normalizeApostrophe(word) {
189
+ return word.replace(APOSTROPHE_MATCHER, APOSTROPHE);
177
190
  }
178
191
 
179
192
  const CH_MATCHER = /Ч/gi;
@@ -292,7 +305,10 @@ class ExceptionalsCollection {
292
305
  // TODO: Optimize for duplicates
293
306
  exceptions.forEach(pair => {
294
307
  if (pair && pair[0] && pair[1]) {
295
- this.collection.push(...this.generateWordCasingVariants(pair));
308
+ const normalizedPair = this.normalizeCharactersForLatin(pair);
309
+ this.collection.push(...this.generateWordCasingVariants(normalizedPair));
310
+ } else {
311
+ throw new Error(`Invalid exceptional pair ${pair}`);
296
312
  }
297
313
  });
298
314
  }
@@ -301,6 +317,11 @@ class ExceptionalsCollection {
301
317
  this.collection = [];
302
318
  }
303
319
 
320
+ normalizeCharactersForLatin([latin, cyrillic]) {
321
+ const normalizedLatin = normalizeTurnedComma(normalizeApostrophe(latin));
322
+ return [normalizedLatin, cyrillic];
323
+ }
324
+
304
325
  generateWordCasingVariants([latin, cyrillic]) {
305
326
  return [[latin.toLowerCase(), cyrillic.toLowerCase()], [latin.toUpperCase(), cyrillic.toUpperCase()], [capitalize(latin), capitalize(cyrillic)]];
306
327
  }
@@ -314,13 +335,6 @@ class ExceptionalsCollection {
314
335
  };
315
336
  }
316
337
 
317
- normalizeEndSoftSign(exceptional) {
318
- const {
319
- replacement
320
- } = exceptional;
321
- exceptional.replacement = replacement.substring(0, replacement.length - 1);
322
- }
323
-
324
338
  findInCollection(word, source) {
325
339
  let exceptional;
326
340
  let alternative; // If the word is typed with wrong letter-casing, default to lower-case or capitalize
@@ -338,12 +352,24 @@ class ExceptionalsCollection {
338
352
  exceptional = {
339
353
  exceptionalWord,
340
354
  replacement
341
- };
355
+ }; // Drop soft sign of exceptional if the source word is latin and has suffix
342
356
 
343
357
  if (source === 'latin' && endsWithSoftSign(replacement) && word.length !== exceptionalWord.length) {
344
- this.normalizeEndSoftSign(exceptional);
358
+ exceptional.replacement = dropEndSoftSign(replacement);
345
359
  }
346
360
 
361
+ return {
362
+ exceptional
363
+ };
364
+ } // Check for exceptional case where the source word is cyrillic with suffix
365
+ // and its soft sign is dropped
366
+
367
+
368
+ if (source === 'cyrillic' && endsWithSoftSign(exceptionalWord) && word.length !== exceptionalWord.length && word.startsWith(dropEndSoftSign(exceptionalWord))) {
369
+ exceptional = {
370
+ exceptionalWord: dropEndSoftSign(exceptionalWord),
371
+ replacement
372
+ };
347
373
  return {
348
374
  exceptional
349
375
  };
@@ -491,6 +517,10 @@ class Transliterator {
491
517
  }
492
518
 
493
519
  handleExceptional(word, source) {
520
+ if (source === 'latin') {
521
+ word = normalizeTurnedComma(normalizeApostrophe(word));
522
+ }
523
+
494
524
  const exceptional = this.exceptionalsCollection.findCase(word, source);
495
525
 
496
526
  if (exceptional) {
@@ -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';\nimport { APOSTROPHE, TURNED_COMMA } from \"./characters.js\";\nconst TURNED_COMMA_MATCHER = /[og][ʻʼ’'`‘´]/gi;\nconst APOSTROPHE_MATCHER = /[ʻʼ’'`‘´]/gi;\nconst VOVEL_MATCHER = /[аоэеиуўёюяaeiou]/i;\nconst REGEXP_ESC_MATCHER = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\nconst ROMAN_NUMBER_MATCHER = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\\.|\\))?$/;\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 VOVEL_MATCHER.test(char);\n}\nexport function isURL(word) {\n return anchorme.list(word).length > 0;\n}\nexport function escapeRegex(expString) {\n return expString.replace(REGEXP_ESC_MATCHER, '\\\\$&');\n}\nexport function endsWithSoftSign(word) {\n return /ь$/i.test(word);\n}\nexport function dropEndSoftSign(word) {\n return word.replace(/ь$/i, '');\n}\nexport function isRomanNumber(word) {\n return ROMAN_NUMBER_MATCHER.test(word);\n}\nexport function normalizeTurnedComma(word) {\n return word.replace(TURNED_COMMA_MATCHER, matched => matched.charAt(0) + TURNED_COMMA);\n}\nexport function normalizeApostrophe(word) {\n return word.replace(APOSTROPHE_MATCHER, APOSTROPHE);\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, dropEndSoftSign, endsWithSoftSign, escapeRegex, isLowerCase, normalizeApostrophe, normalizeTurnedComma } 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 const normalizedPair = this.normalizeCharactersForLatin(pair);\n this.collection.push(...this.generateWordCasingVariants(normalizedPair));\n } else {\n throw new Error(`Invalid exceptional pair ${pair}`);\n }\n });\n }\n\n purge() {\n this.collection = [];\n }\n\n normalizeCharactersForLatin([latin, cyrillic]) {\n const normalizedLatin = normalizeTurnedComma(normalizeApostrophe(latin));\n return [normalizedLatin, cyrillic];\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 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 }; // Drop soft sign of exceptional if the source word is latin and has suffix\n\n if (source === 'latin' && endsWithSoftSign(replacement) && word.length !== exceptionalWord.length) {\n exceptional.replacement = dropEndSoftSign(replacement);\n }\n\n return {\n exceptional\n };\n } // Check for exceptional case where the source word is cyrillic with suffix\n // and its soft sign is dropped\n\n\n if (source === 'cyrillic' && endsWithSoftSign(exceptionalWord) && word.length !== exceptionalWord.length && word.startsWith(dropEndSoftSign(exceptionalWord))) {\n exceptional = {\n exceptionalWord: dropEndSoftSign(exceptionalWord),\n replacement\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, normalizeApostrophe, normalizeTurnedComma } 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 if (source === 'latin') {\n word = normalizeTurnedComma(normalizeApostrophe(word));\n }\n\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","TURNED_COMMA_MATCHER","APOSTROPHE_MATCHER","REGEXP_ESC_MATCHER","ROMAN_NUMBER_MATCHER","isLowerCase","char","toLowerCase","normalizeCase","assimilateTo","toUpperCase","capitalize","word","charAt","substring","isLetter","test","isURL","anchorme","list","length","escapeRegex","expString","replace","endsWithSoftSign","dropEndSoftSign","isRomanNumber","normalizeTurnedComma","matched","normalizeApostrophe","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","normalizedPair","normalizeCharactersForLatin","collection","push","generateWordCasingVariants","Error","purge","latin","cyrillic","normalizedLatin","getCase","exceptionalPair","source","exceptionSource","exceptionTarget","exceptionalWord","replacement","findInCollection","exceptional","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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"}
@@ -1,4 +1,4 @@
1
- import { capitalize, endsWithSoftSign, escapeRegex, isLowerCase } from "./utils.js";
1
+ import { capitalize, dropEndSoftSign, endsWithSoftSign, escapeRegex, isLowerCase, normalizeApostrophe, normalizeTurnedComma } from "./utils.js";
2
2
  /*
3
3
  Exceptional word pairs works bidirectional even if
4
4
  transliteration from cyrillic to latin is usually
@@ -24,7 +24,10 @@ export class ExceptionalsCollection {
24
24
  // TODO: Optimize for duplicates
25
25
  exceptions.forEach(pair => {
26
26
  if (pair && pair[0] && pair[1]) {
27
- this.collection.push(...this.generateWordCasingVariants(pair));
27
+ const normalizedPair = this.normalizeCharactersForLatin(pair);
28
+ this.collection.push(...this.generateWordCasingVariants(normalizedPair));
29
+ } else {
30
+ throw new Error(`Invalid exceptional pair ${pair}`);
28
31
  }
29
32
  });
30
33
  }
@@ -33,6 +36,11 @@ export class ExceptionalsCollection {
33
36
  this.collection = [];
34
37
  }
35
38
 
39
+ normalizeCharactersForLatin([latin, cyrillic]) {
40
+ const normalizedLatin = normalizeTurnedComma(normalizeApostrophe(latin));
41
+ return [normalizedLatin, cyrillic];
42
+ }
43
+
36
44
  generateWordCasingVariants([latin, cyrillic]) {
37
45
  return [[latin.toLowerCase(), cyrillic.toLowerCase()], [latin.toUpperCase(), cyrillic.toUpperCase()], [capitalize(latin), capitalize(cyrillic)]];
38
46
  }
@@ -46,13 +54,6 @@ export class ExceptionalsCollection {
46
54
  };
47
55
  }
48
56
 
49
- normalizeEndSoftSign(exceptional) {
50
- const {
51
- replacement
52
- } = exceptional;
53
- exceptional.replacement = replacement.substring(0, replacement.length - 1);
54
- }
55
-
56
57
  findInCollection(word, source) {
57
58
  let exceptional;
58
59
  let alternative; // If the word is typed with wrong letter-casing, default to lower-case or capitalize
@@ -70,12 +71,24 @@ export class ExceptionalsCollection {
70
71
  exceptional = {
71
72
  exceptionalWord,
72
73
  replacement
73
- };
74
+ }; // Drop soft sign of exceptional if the source word is latin and has suffix
74
75
 
75
76
  if (source === 'latin' && endsWithSoftSign(replacement) && word.length !== exceptionalWord.length) {
76
- this.normalizeEndSoftSign(exceptional);
77
+ exceptional.replacement = dropEndSoftSign(replacement);
77
78
  }
78
79
 
80
+ return {
81
+ exceptional
82
+ };
83
+ } // Check for exceptional case where the source word is cyrillic with suffix
84
+ // and its soft sign is dropped
85
+
86
+
87
+ if (source === 'cyrillic' && endsWithSoftSign(exceptionalWord) && word.length !== exceptionalWord.length && word.startsWith(dropEndSoftSign(exceptionalWord))) {
88
+ exceptional = {
89
+ exceptionalWord: dropEndSoftSign(exceptionalWord),
90
+ replacement
91
+ };
79
92
  return {
80
93
  exceptional
81
94
  };
@@ -1,7 +1,7 @@
1
1
  import { cyrillicToLatin } from "./cyrillic.js";
2
2
  import { ExceptionalsCollection } from "./exceptionalsCollection.js";
3
3
  import { latinToCyrillic } from "./latin.js";
4
- import { isRomanNumber, isURL } from "./utils.js";
4
+ import { isRomanNumber, isURL, normalizeApostrophe, normalizeTurnedComma } from "./utils.js";
5
5
  export default class Transliterator {
6
6
  exceptionalsCollection = new ExceptionalsCollection();
7
7
 
@@ -31,6 +31,10 @@ export default class Transliterator {
31
31
  }
32
32
 
33
33
  handleExceptional(word, source) {
34
+ if (source === 'latin') {
35
+ word = normalizeTurnedComma(normalizeApostrophe(word));
36
+ }
37
+
34
38
  const exceptional = this.exceptionalsCollection.findCase(word, source);
35
39
 
36
40
  if (exceptional) {
@@ -0,0 +1,48 @@
1
+ import anchorme from 'anchorme';
2
+ import { APOSTROPHE, TURNED_COMMA } from "./characters.js";
3
+ const TURNED_COMMA_MATCHER = /[og][ʻʼ’'`‘´]/gi;
4
+ const APOSTROPHE_MATCHER = /[ʻʼ’'`‘´]/gi;
5
+ const VOVEL_MATCHER = /[аоэеиуўёюяaeiou]/i;
6
+ const REGEXP_ESC_MATCHER = /[-\/\\^$*+?.()|[\]{}]/g;
7
+ const ROMAN_NUMBER_MATCHER = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/;
8
+ export function isLowerCase(char) {
9
+ return char.toLowerCase() === char;
10
+ }
11
+ export function normalizeCase(char, assimilateTo) {
12
+ return isLowerCase(assimilateTo) ? char.toLowerCase() : char.toUpperCase();
13
+ }
14
+ export function capitalize(word) {
15
+ return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();
16
+ } // Detect only alphabetical letters, excluding apostrophe(')
17
+
18
+ export function isLetter(char) {
19
+ if (typeof char === 'string') {
20
+ return /^[a-z\u0400-\u04FF]+$/i.test(char);
21
+ }
22
+
23
+ return false;
24
+ }
25
+ export function isVovel(char) {
26
+ return VOVEL_MATCHER.test(char);
27
+ }
28
+ export function isURL(word) {
29
+ return anchorme.list(word).length > 0;
30
+ }
31
+ export function escapeRegex(expString) {
32
+ return expString.replace(REGEXP_ESC_MATCHER, '\\$&');
33
+ }
34
+ export function endsWithSoftSign(word) {
35
+ return /ь$/i.test(word);
36
+ }
37
+ export function dropEndSoftSign(word) {
38
+ return word.replace(/ь$/i, '');
39
+ }
40
+ export function isRomanNumber(word) {
41
+ return ROMAN_NUMBER_MATCHER.test(word);
42
+ }
43
+ export function normalizeTurnedComma(word) {
44
+ return word.replace(TURNED_COMMA_MATCHER, matched => matched.charAt(0) + TURNED_COMMA);
45
+ }
46
+ export function normalizeApostrophe(word) {
47
+ return word.replace(APOSTROPHE_MATCHER, APOSTROPHE);
48
+ }
@@ -9,9 +9,9 @@ export declare class ExceptionalsCollection {
9
9
  constructor(exceptions?: ExceptionalPair[]);
10
10
  extend(exceptions: ExceptionalPair[]): void;
11
11
  purge(): void;
12
+ private normalizeCharactersForLatin;
12
13
  private generateWordCasingVariants;
13
14
  private getCase;
14
- private normalizeEndSoftSign;
15
15
  private findInCollection;
16
16
  private decideMatcher;
17
17
  findCase(word: string, source: TransliterationSource): ExceptionalMatcher | undefined;
@@ -6,4 +6,7 @@ export declare function isVovel(char: string): boolean;
6
6
  export declare function isURL(word: string): boolean;
7
7
  export declare function escapeRegex(expString: string): string;
8
8
  export declare function endsWithSoftSign(word: string): boolean;
9
+ export declare function dropEndSoftSign(word: string): string;
9
10
  export declare function isRomanNumber(word: string): boolean;
11
+ export declare function normalizeTurnedComma(word: string): string;
12
+ export declare function normalizeApostrophe(word: string): string;
@@ -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 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})}));
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 i(u,A){if(u!==A)throw new TypeError("Cannot instantiate an arrow function")}function E(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,i=[],E=!0,r=!1;try{for(e=e.call(u);!(E=(t=e.next()).done)&&(i.push(t.value),!A||i.length!==A);E=!0);}catch(u){r=!0,n=u}finally{try{E||null==e.return||e.return()}finally{if(r)throw n}}return i}(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 o(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 o(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)?o(u,A):void 0}}function o(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 a(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 i,E=!0,r=!1;return{s:function(){e=e.call(u)},n:function(){var u=e.next();return E=u.done,u},e:function(u){r=!0,i=u},f:function(){try{E||null==e.return||e.return()}finally{if(r)throw i}}}}var C,O,I=(n(C={},"A","А"),n(C,"a","а"),n(C,"B","Б"),n(C,"b","б"),n(C,"D","Д"),n(C,"d","д"),n(C,"E","Е"),n(C,"e","е"),n(C,"F","Ф"),n(C,"f","ф"),n(C,"G","Г"),n(C,"g","г"),n(C,"H","Ҳ"),n(C,"h","ҳ"),n(C,"I","И"),n(C,"i","и"),n(C,"J","Ж"),n(C,"j","ж"),n(C,"K","К"),n(C,"k","к"),n(C,"L","Л"),n(C,"l","л"),n(C,"M","М"),n(C,"m","м"),n(C,"N","Н"),n(C,"n","н"),n(C,"O","О"),n(C,"o","о"),n(C,"P","П"),n(C,"p","п"),n(C,"Q","Қ"),n(C,"q","қ"),n(C,"R","Р"),n(C,"r","р"),n(C,"S","С"),n(C,"s","с"),n(C,"T","Т"),n(C,"t","т"),n(C,"U","У"),n(C,"u","у"),n(C,"V","В"),n(C,"v","в"),n(C,"X","Х"),n(C,"x","х"),n(C,"Y","Й"),n(C,"y","й"),n(C,"Z","З"),n(C,"z","з"),C),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,i={},E=!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&&(E=e(u.string,u,A.middleTruncation)),A&&A.attributes&&(i=e(u.string,u,A.attributes)),"<a "+Object.keys(i).map((function(u){return!0===i[u]?u:u+'="'+i[u]+'" '})).join(" ")+'href="'+t+u.string+'">'+(u.string.length>n?E?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]?)",i="\\[(([a-f0-9:]+:+)+[a-f0-9]+)\\]",E="(https?:|ftps?:)\\/\\/",r="((("+E+")?("+e+"|"+n+"|("+E+")("+i+"|"+("([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+"|"+i+")$","i"),A.emailRegex=new RegExp("^("+A.email+")$","i"),A.fileRegex=new RegExp("^("+A.file+")$","i"),A.urlRegex=new RegExp("^("+A.url+")$","i");var o={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=o;for(var a=["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(" "),C=null,O=0;null!==(C=A.finalRegex.exec(a));)0===O&&(o.isFile=C.lastIndexOf(C[0]),o.file.fileName=C.indexOf("filename.pdf"),o.file.protocol=C.indexOf("file:///")),1===O&&(o.isEmail=C.lastIndexOf(C[0]),o.email.protocol=C.indexOf("mailto:"),o.email.local=C.indexOf("e+_mail.me"),o.email.host=C.indexOf("sub.domain.com")),2===O&&(o.isURL=C.lastIndexOf(C[0]),o.url.protocol1=C.indexOf("http://"),o.url.protocolWithDomain=C.indexOf("http://sub.domain.co.uk:3000"),o.url.port=C.indexOf("3000"),o.url.path=C.indexOf("/p/a/t/h_(asd)/h"),o.url.query=C.indexOf("q=abc123"),o.url.fragment=C.indexOf("dfdf")),3===O&&(o.url.byProtocol=C.lastIndexOf("http://www.عربي.com"),o.url.protocol2=C.lastIndexOf("http://")),4===O&&(o.url.ipv4=C.indexOf("127.0.0.1"),o.url.ipv4Confirmation=C.indexOf("0.")),5===O&&(o.url.ipv6=C.indexOf("2a00:1450:4025:401::67"),o.url.protocol3=C.lastIndexOf("http://")),6===O&&(o.url.secondPartOfPath=C.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"),i=null;null!==(i=n.exec(A));){if(i.index+i[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,i=e[0];if("/"===u.charAt(n)&&(i+=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,i,u.charAt(n))&&(i+=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(i,u,n))return"continue";if(e[L.iidxes.isURL]){var E=(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:i,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:E,query:e[L.iidxes.url.query]||void 0,fragment:e[L.iidxes.url.fragment]||void 0})}else if(e[L.iidxes.isFile]){var N=i.substr(8);A.push({start:t,end:n,string:i,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:i,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:i})};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,i=A.extensions;if(i)for(var E=0;E<i.length;E++){var r=i[E];t=t.replace(r.test,r.transform)}var N=e(t),o="";for(E=0;E<N.length;E++)o=(o||(0===E?t.substring(0,N[E].start):""))+D.transform(N[E],n)+(N[E+1]?t.substring(N[E].end,N[E+1].start):t.substring(N[E].end));return o||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}))),f=/[og][ʻʼ’'`‘´]/gi,M=/[ʻʼ’'`‘´]/gi,G=/[-\/\\^$*+?.()|[\]{}]/g,h=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/;function U(u){return u.toLowerCase()===u}function p(u,A){return U(A)?u.toLowerCase():u.toUpperCase()}function P(u){return u.charAt(0).toUpperCase()+u.substring(1).toLowerCase()}function d(u){return"string"==typeof u&&/^[a-z\u0400-\u04FF]+$/i.test(u)}function X(u){return/ь$/i.test(u)}function H(u){return u.replace(/ь$/i,"")}function g(u){var A=this;return u.replace(f,function(u){return i(this,A),u.charAt(0)+"‘"}.bind(this))}function K(u){return u.replace(M,"ʼ")}var Y=/Ч/gi,v=/Ш/gi,m=/^Е/gi,W=/Е/gi,x=/Ё/gi,y=/Ю/gi,V=/Я/gi,b=/е{3,}/gi,J=/[ьъ]е/gi,Z=/[аоэеиуўёюяaeiou]е/gi,Q=/[аоэеиуўёюяaeiou]ц/gi,w=/ьо/gi,k=/сҳ/gi,_=/[ўғ]ъ/gi;function z(u){var A=this;return u.replace(W,function(u){return i(this,A),R[u]||u}.bind(this))}function j(u){return p("ye",u.charAt(1))}function $(u){return u.charAt(0)+p("ye",u.charAt(1))}function q(u){return p("yo",u.charAt(1))}function uu(u){return u.charAt(0)}function Au(u){return u.charAt(0)+p("ts",u.charAt(1))}function eu(u){return p("s",u.charAt(0))+"ʼ"+p("h",u.charAt(1))}function tu(u,A,e){var t=this;return u.replace(A,function(A,n){if(i(this,t),U(A))return e.toLowerCase();if(!d(u[n-1])&&!d(u[n+1]))return P(e);var E=d(u[n+1])&&u[n+1];return E&&U(E)?P(e):e.toUpperCase()}.bind(this))}function nu(u){var A,e="",t=a(function(u){return u=tu(u,Y,"CH"),u=tu(u,v,"SH"),u=tu(u,m,"YE"),u=tu(u,x,"YO"),u=tu(u,y,"YU"),(u=(u=tu(u,V,"YA")).replace(b,z)).replace(J,j).replace(Z,$).replace(w,q).replace(_,uu).replace(Q,Au).replace(k,eu)}(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 iu=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){if(i(this,A),!(u&&u[0]&&u[1]))throw new Error("Invalid exceptional pair ".concat(u));var e,t=this.normalizeCharactersForLatin(u);(e=this.collection).push.apply(e,r(this.generateWordCasingVariants(t)))}.bind(this))}},{key:"purge",value:function(){this.collection=[]}},{key:"normalizeCharactersForLatin",value:function(u){var A=E(u,2),e=A[0],t=A[1];return[g(K(e)),t]}},{key:"generateWordCasingVariants",value:function(u){var A=E(u,2),e=A[0],t=A[1];return[[e.toLowerCase(),t.toLowerCase()],[e.toUpperCase(),t.toUpperCase()],[P(e),P(t)]]}},{key:"getCase",value:function(u,A){var e="latin"===A?1:0;return{exceptionalWord:u["latin"===A?0:1],replacement:u[e]}}},{key:"findInCollection",value:function(u,A){var e,t,n,i=U(u.charAt(0))?u.toLowerCase():P(u),E=a(this.collection);try{for(E.s();!(n=E.n()).done;){var r=n.value,N=this.getCase(r,A),o=N.exceptionalWord,C=N.replacement;if(u.startsWith(o))return e={exceptionalWord:o,replacement:C},"latin"===A&&X(C)&&u.length!==o.length&&(e.replacement=H(C)),{exceptional:e};if("cyrillic"===A&&X(o)&&u.length!==o.length&&u.startsWith(H(o)))return{exceptional:e={exceptionalWord:H(o),replacement:C}};i.startsWith(o)&&(t={exceptionalWord:o,replacement:C})}}catch(u){E.e(u)}finally{E.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,i=this.decideMatcher(t,n),E=(null==t?void 0:t.replacement)||(null==n?void 0:n.replacement);if(i&&E)return{matcher:i,replacement:E}}}]),u}();function Eu(u,A,e){var t=this;return u.replace(A,function(u){return i(this,t),p(e,u[0])}.bind(this))}function ru(u){var A=this;return u=(u=u.replace(/tsi(on|ya)/gi,function(u){return i(this,A),Eu(u,/ts/i,"ц")}.bind(this))).replace(/^e|[\W]e/gi,function(u){return i(this,A),Eu(u,/e/i,"э")}.bind(this)),u=Eu(u=u.replace(/e{2}/gi,function(u){return i(this,A),u[0]+p("э",u[1])}.bind(this)),/ch/gi,"ч"),u=Eu(u,/sh/gi,"ш"),u=Eu(u,/g[ʻʼ’'`‘´]/gi,"ғ"),u=Eu(u,/o[ʻʼ’'`‘´]/gi,"ў"),u=Eu(u,/ye/gi,"е"),u=Eu(u,/yo/gi,"ё"),u=Eu(u,/yu/gi,"ю"),u=function(u){var A=this;return u.replace(/[ʻʼ’'`‘´]/g,function(e,t){i(this,A);var n=u[t+1]||u[t-1];return n?p("ъ",n):"ъ".toLowerCase()}.bind(this))}(u=(u=Eu(u,/ya/gi,"я")).replace(/s[ʻʼ’'`‘´]h/gi,function(u){return i(this,A),(I[u[0]]||u[0])+(I[u[2]]||u[2])}.bind(this)))}function Nu(u){var A,e="",t=a(ru(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 ou=function(){function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];A(this,u),n(this,"exceptionalsCollection",new iu),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?Nu:nu}},{key:"replaceExceptionals",value:function(u,A,e,t){var n=this,E=u.split(A);return(E=E.map(function(u,A){i(this,n);var r=A===E.length-1;return t(u)+(r?"":e)}.bind(this))).join("")}},{key:"handleExceptional",value:function(u,A){"latin"===A&&(u=g(K(u)));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){i(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 h.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 i(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 i(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 i(this,A),this.transliterateWord(u,"latin")}.bind(this))}},{key:"textToLatin",value:function(u){var A=this;return u.replace(/\S+/g,function(u){return i(this,A),this.transliterateWord(u,"cyrillic")}.bind(this))}}]),u}();u.cyrillicToLatin=nu,u.default=ou,u.latinToCyrillic=Nu,Object.defineProperty(u,"__esModule",{value:!0})}));
@@ -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.4",
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
+ }
@@ -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 { 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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"}
package/dist-src/utils.js DELETED
@@ -1,33 +0,0 @@
1
- import anchorme from 'anchorme';
2
- export function isLowerCase(char) {
3
- return char.toLowerCase() === char;
4
- }
5
- export function normalizeCase(char, assimilateTo) {
6
- return isLowerCase(assimilateTo) ? char.toLowerCase() : char.toUpperCase();
7
- }
8
- export function capitalize(word) {
9
- return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();
10
- } // Detect only alphabetical letters, excluding apostrophe(')
11
-
12
- export function isLetter(char) {
13
- if (typeof char === 'string') {
14
- return /^[a-z\u0400-\u04FF]+$/i.test(char);
15
- }
16
-
17
- return false;
18
- }
19
- export function isVovel(char) {
20
- return /[аоэеиуўёюяaeiou]/i.test(char);
21
- }
22
- export function isURL(word) {
23
- return anchorme.list(word).length > 0;
24
- }
25
- export function escapeRegex(expString) {
26
- return expString.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
27
- }
28
- export function endsWithSoftSign(word) {
29
- return /ь$/i.test(word);
30
- }
31
- export function isRomanNumber(word) {
32
- return /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(\.|\))?$/.test(word);
33
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes