speakingurl-rails 11.0.0 → 12.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +18 -19
  4. data/lib/speakingurl.js +1292 -1258
  5. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03da50d5de08264d7bf75bdef270be7a2da8b678
4
- data.tar.gz: d528dc0a4d845994a6d329d291ae71acf93ca878
3
+ metadata.gz: e995782b2a60fecb6b6d5d1901f84867d3ec7c33
4
+ data.tar.gz: 8c58373fef0d51eb9a53df0f79fb66e8003c5857
5
5
  SHA512:
6
- metadata.gz: 013a7d9335a3d3a827842d77fbce0191885a54e9f849d5372ec3caf9d3973a027ff3bd7d079a66d47d519975ff83b9bb80e41c80057d6c76c47b932b48978b15
7
- data.tar.gz: dd814b9904404e8274c69181efaf7977270d172ac1e2c399ac5e4d482d92b55abdb0e57e1a7bcfcba7f313b7adc4367d465867829b7d92ee23924506cf32c0a3
6
+ metadata.gz: d91f03ebfde03fd725230bb1f813e400923cb75850165f51aee794e5c52aaf4118be06d73d113aa79a4e3d9cea1958cac65e26ff0599e9c9963102f0ff16376e
7
+ data.tar.gz: 6333ce1941a3c654e7279f31810fc3ea6e1fb29cc8b5101eff03ed391b4dbd388f6ba326e73a503191cf7b152ffe8237a31951ac849fc907b359c407f9b3721a
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The BSD 3-Clause License (BSD3)
2
2
 
3
- Copyright (c) 2013-2016 Sascha Droste <pid@posteo.net>
3
+ Copyright (c) 2013-2017 Sascha Droste <pid@posteo.net>
4
4
  All rights reserved.
5
5
 
6
6
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
data/README.md CHANGED
@@ -2,22 +2,20 @@ SpeakingURL
2
2
  ===========
3
3
 
4
4
  [![Build Status](https://travis-ci.org/pid/speakingurl.svg)](https://travis-ci.org/pid/speakingurl)
5
- [![NPM version](https://badge.fury.io/js/speakingurl.svg)](http://badge.fury.io/js/speakingurl)
6
- [![Bower version](https://badge.fury.io/bo/speakingurl.svg)](http://badge.fury.io/bo/speakingurl)
7
- [![Gem Version](https://badge.fury.io/rb/speakingurl-rails.svg)](http://badge.fury.io/rb/speakingurl-rails)
5
+ [![NPM version](https://badge.fury.io/js/speakingurl.svg)](https://badge.fury.io/js/speakingurl)
6
+ [![Bower version](https://badge.fury.io/bo/speakingurl.svg)](https://badge.fury.io/bo/speakingurl)
7
+ [![Gem Version](https://badge.fury.io/rb/speakingurl-rails.svg)](https://badge.fury.io/rb/speakingurl-rails)
8
8
  [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pid/speakingurl?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
9
- [![Flattr](http://api.flattr.com/button/flattr-badge-large.png)](http://flattr.com/thing/1418477/pidspeakingurl-on-GitHub)
9
+ [![Flattr](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/thing/1418477/pidspeakingurl-on-GitHub)
10
10
 
11
11
 
12
- ====================================================================================================================================================================================================================================================================================================================================================
13
-
14
12
  > Generate a slug with a lot of options; create a so-called [Semantic URL](https://en.wikipedia.org/wiki/Semantic_URL) or 'Clean URL' or 'Pretty URL' or 'nice-looking URL' or 'Speaking URL' or 'user-friendly URL' or 'SEO-friendly URL' from a string. This module aims to transliterate the input string.
15
13
 
16
14
  For use in browser and server - no dependencies!
17
15
 
18
16
  ##### NPM Badge
19
17
 
20
- [![Module Status](https://nodei.co/npm/speakingurl.svg?downloads=true&stars=true)](https://npmjs.org/package/speakingurl)
18
+ [![Module Status](https://nodei.co/npm/speakingurl.png?downloads=true&stars=true)](https://npmjs.org/package/speakingurl)
21
19
 
22
20
  Installation
23
21
  ------------
@@ -28,22 +26,22 @@ Installation
28
26
  npm install speakingurl --save
29
27
  ```
30
28
 
31
- #### [Bower](http://bower.io)
29
+ #### [yarn](https://yarnpkg.com)
32
30
 
33
31
  ```shell
34
- bower install --save speakingurl
32
+ yarn add speakingurl --dev
35
33
  ```
36
34
 
37
- #### [Component](https://github.com/component/component)
35
+ #### [Bower](https://bower.io)
38
36
 
39
37
  ```shell
40
- component install pid/speakingurl
38
+ bower install --save speakingurl
41
39
  ```
42
40
 
43
- #### [jamjs](http://jamjs.org/)
41
+ #### [Component](https://github.com/component/component)
44
42
 
45
43
  ```shell
46
- jam install speakingurl
44
+ component install pid/speakingurl
47
45
  ```
48
46
 
49
47
  #### [Ruby on Rails](http://rubyonrails.org/)
@@ -61,14 +59,14 @@ copy the file speakingurl.min.js to your script directory
61
59
 
62
60
  available versions:
63
61
 
64
- - [www.cdnjs.com/libraries/speakingurl/](http://cdnjs.com/libraries/speakingurl/)
62
+ - [www.cdnjs.com/libraries/speakingurl/](https://cdnjs.com/libraries/speakingurl/)
65
63
  - use [//cdnjs.cloudflare.com/ajax/libs/speakingurl/10.0.0/speakingurl.min.js](https://cdnjs.cloudflare.com/ajax/libs/speakingurl/10.0.0/speakingurl.min.js)
66
64
 
67
65
  #### [CDN/maxcdn](https://www.maxcdn.com/)
68
66
 
69
67
  available versions:
70
68
 
71
- - [www.jsdelivr.com/#!speakingurl](]http://www.jsdelivr.com/#!speakingurl)
69
+ - [www.jsdelivr.com/#!speakingurl](https://www.jsdelivr.com/#!speakingurl)
72
70
  - use [//cdn.jsdelivr.net/speakingurl/10.0.0/speakingurl.min.js](https://cdn.jsdelivr.net/speakingurl/10.0.0/speakingurl.min.js)
73
71
 
74
72
  Usage
@@ -84,7 +82,7 @@ Usage
84
82
 
85
83
  - `separator` {string} default: '-'
86
84
  - char that replaces the whitespaces
87
- - `lang` {string} default: 'en' // ISO 639-1 Codes
85
+ - `lang` {string|boolean} default: 'en' // ISO 639-1 Codes
88
86
  - language specific transliteration (
89
87
  - 'ar' // Arabic
90
88
  - 'az' // Azerbaijani\*
@@ -96,6 +94,7 @@ Usage
96
94
  - 'fa' // Persian
97
95
  - 'fi' // Finnish
98
96
  - 'fr' // French
97
+ - 'ge' // Georgian
99
98
  - 'gr' // Greek\*
100
99
  - 'hu' // Hungarian
101
100
  - 'it' // Italian
@@ -384,8 +383,8 @@ $ gem push speakingurl-rails-x.x.x.gem
384
383
  References
385
384
  ----------
386
385
 
387
- - http://tools.ietf.org/html/rfc3986
388
- - http://en.wikipedia.org/wiki/Transliteration
386
+ - https://tools.ietf.org/html/rfc3986
387
+ - https://en.wikipedia.org/wiki/Transliteration
389
388
 
390
389
  Use in other environments
391
390
  -------------------------
@@ -411,7 +410,7 @@ Credits
411
410
 
412
411
  The BSD 3-Clause License (BSD3)
413
412
 
414
- Copyright (c) 2013-2016 Sascha Droste pid@posteo.net All rights reserved.
413
+ Copyright (c) 2013-2017 Sascha Droste pid@posteo.net All rights reserved.
415
414
 
416
415
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
417
416
 
@@ -1,267 +1,862 @@
1
- (function (root, undefined) {
1
+ (function (root) {
2
2
  'use strict';
3
3
 
4
4
  /**
5
- * getSlug
6
- * @param {string} input input string
7
- * @param {object|string} opts config object or separator string/char
8
- * @api public
9
- * @return {string} sluggified string
5
+ * charMap
6
+ * @type {Object}
10
7
  */
11
- var getSlug = function getSlug(input, opts) {
8
+ var charMap = {
9
+
10
+ // latin
11
+ 'À': 'A',
12
+ 'Á': 'A',
13
+ 'Â': 'A',
14
+ 'Ã': 'A',
15
+ 'Ä': 'Ae',
16
+ 'Å': 'A',
17
+ 'Æ': 'AE',
18
+ 'Ç': 'C',
19
+ 'È': 'E',
20
+ 'É': 'E',
21
+ 'Ê': 'E',
22
+ 'Ë': 'E',
23
+ 'Ì': 'I',
24
+ 'Í': 'I',
25
+ 'Î': 'I',
26
+ 'Ï': 'I',
27
+ 'Ð': 'D',
28
+ 'Ñ': 'N',
29
+ 'Ò': 'O',
30
+ 'Ó': 'O',
31
+ 'Ô': 'O',
32
+ 'Õ': 'O',
33
+ 'Ö': 'Oe',
34
+ 'Ő': 'O',
35
+ 'Ø': 'O',
36
+ 'Ù': 'U',
37
+ 'Ú': 'U',
38
+ 'Û': 'U',
39
+ 'Ü': 'Ue',
40
+ 'Ű': 'U',
41
+ 'Ý': 'Y',
42
+ 'Þ': 'TH',
43
+ 'ß': 'ss',
44
+ 'à': 'a',
45
+ 'á': 'a',
46
+ 'â': 'a',
47
+ 'ã': 'a',
48
+ 'ä': 'ae',
49
+ 'å': 'a',
50
+ 'æ': 'ae',
51
+ 'ç': 'c',
52
+ 'è': 'e',
53
+ 'é': 'e',
54
+ 'ê': 'e',
55
+ 'ë': 'e',
56
+ 'ì': 'i',
57
+ 'í': 'i',
58
+ 'î': 'i',
59
+ 'ï': 'i',
60
+ 'ð': 'd',
61
+ 'ñ': 'n',
62
+ 'ò': 'o',
63
+ 'ó': 'o',
64
+ 'ô': 'o',
65
+ 'õ': 'o',
66
+ 'ö': 'oe',
67
+ 'ő': 'o',
68
+ 'ø': 'o',
69
+ 'ù': 'u',
70
+ 'ú': 'u',
71
+ 'û': 'u',
72
+ 'ü': 'ue',
73
+ 'ű': 'u',
74
+ 'ý': 'y',
75
+ 'þ': 'th',
76
+ 'ÿ': 'y',
77
+ 'ẞ': 'SS',
78
+
79
+ // language specific
80
+
81
+ // Arabic
82
+ 'ا': 'a',
83
+ 'أ': 'a',
84
+ 'إ': 'i',
85
+ 'آ': 'aa',
86
+ 'ؤ': 'u',
87
+ 'ئ': 'e',
88
+ 'ء': 'a',
89
+ 'ب': 'b',
90
+ 'ت': 't',
91
+ 'ث': 'th',
92
+ 'ج': 'j',
93
+ 'ح': 'h',
94
+ 'خ': 'kh',
95
+ 'د': 'd',
96
+ 'ذ': 'th',
97
+ 'ر': 'r',
98
+ 'ز': 'z',
99
+ 'س': 's',
100
+ 'ش': 'sh',
101
+ 'ص': 's',
102
+ 'ض': 'dh',
103
+ 'ط': 't',
104
+ 'ظ': 'z',
105
+ 'ع': 'a',
106
+ 'غ': 'gh',
107
+ 'ف': 'f',
108
+ 'ق': 'q',
109
+ 'ك': 'k',
110
+ 'ل': 'l',
111
+ 'م': 'm',
112
+ 'ن': 'n',
113
+ 'ه': 'h',
114
+ 'و': 'w',
115
+ 'ي': 'y',
116
+ 'ى': 'a',
117
+ 'ة': 'h',
118
+ 'ﻻ': 'la',
119
+ 'ﻷ': 'laa',
120
+ 'ﻹ': 'lai',
121
+ 'ﻵ': 'laa',
122
+
123
+ // Persian additional characters than Arabic
124
+ 'گ': 'g',
125
+ 'چ': 'ch',
126
+ 'پ': 'p',
127
+ 'ژ': 'zh',
128
+ 'ک': 'k',
129
+ 'ی': 'y',
130
+
131
+ // Arabic diactrics
132
+ 'َ': 'a',
133
+ 'ً': 'an',
134
+ 'ِ': 'e',
135
+ 'ٍ': 'en',
136
+ 'ُ': 'u',
137
+ 'ٌ': 'on',
138
+ 'ْ': '',
139
+
140
+ // Arabic numbers
141
+ '٠': '0',
142
+ '١': '1',
143
+ '٢': '2',
144
+ '٣': '3',
145
+ '٤': '4',
146
+ '٥': '5',
147
+ '٦': '6',
148
+ '٧': '7',
149
+ '٨': '8',
150
+ '٩': '9',
151
+
152
+ // Persian numbers
153
+ '۰': '0',
154
+ '۱': '1',
155
+ '۲': '2',
156
+ '۳': '3',
157
+ '۴': '4',
158
+ '۵': '5',
159
+ '۶': '6',
160
+ '۷': '7',
161
+ '۸': '8',
162
+ '۹': '9',
163
+
164
+ // Burmese consonants
165
+ 'က': 'k',
166
+ 'ခ': 'kh',
167
+ 'ဂ': 'g',
168
+ 'ဃ': 'ga',
169
+ 'င': 'ng',
170
+ 'စ': 's',
171
+ 'ဆ': 'sa',
172
+ 'ဇ': 'z',
173
+ 'စျ': 'za',
174
+ 'ည': 'ny',
175
+ 'ဋ': 't',
176
+ 'ဌ': 'ta',
177
+ 'ဍ': 'd',
178
+ 'ဎ': 'da',
179
+ 'ဏ': 'na',
180
+ 'တ': 't',
181
+ 'ထ': 'ta',
182
+ 'ဒ': 'd',
183
+ 'ဓ': 'da',
184
+ 'န': 'n',
185
+ 'ပ': 'p',
186
+ 'ဖ': 'pa',
187
+ 'ဗ': 'b',
188
+ 'ဘ': 'ba',
189
+ 'မ': 'm',
190
+ 'ယ': 'y',
191
+ 'ရ': 'ya',
192
+ 'လ': 'l',
193
+ 'ဝ': 'w',
194
+ 'သ': 'th',
195
+ 'ဟ': 'h',
196
+ 'ဠ': 'la',
197
+ 'အ': 'a',
198
+ // consonant character combos
199
+ 'ြ': 'y',
200
+ 'ျ': 'ya',
201
+ 'ွ': 'w',
202
+ 'ြွ': 'yw',
203
+ 'ျွ': 'ywa',
204
+ 'ှ': 'h',
205
+ // independent vowels
206
+ 'ဧ': 'e',
207
+ '၏': '-e',
208
+ 'ဣ': 'i',
209
+ 'ဤ': '-i',
210
+ 'ဉ': 'u',
211
+ 'ဦ': '-u',
212
+ 'ဩ': 'aw',
213
+ 'သြော': 'aw',
214
+ 'ဪ': 'aw',
215
+ // numbers
216
+ '၀': '0',
217
+ '၁': '1',
218
+ '၂': '2',
219
+ '၃': '3',
220
+ '၄': '4',
221
+ '၅': '5',
222
+ '၆': '6',
223
+ '၇': '7',
224
+ '၈': '8',
225
+ '၉': '9',
226
+ // virama and tone marks which are silent in transliteration
227
+ '္': '',
228
+ '့': '',
229
+ 'း': '',
230
+
231
+ // Czech
232
+ 'č': 'c',
233
+ 'ď': 'd',
234
+ 'ě': 'e',
235
+ 'ň': 'n',
236
+ 'ř': 'r',
237
+ 'š': 's',
238
+ 'ť': 't',
239
+ 'ů': 'u',
240
+ 'ž': 'z',
241
+ 'Č': 'C',
242
+ 'Ď': 'D',
243
+ 'Ě': 'E',
244
+ 'Ň': 'N',
245
+ 'Ř': 'R',
246
+ 'Š': 'S',
247
+ 'Ť': 'T',
248
+ 'Ů': 'U',
249
+ 'Ž': 'Z',
250
+
251
+ // Dhivehi
252
+ 'ހ': 'h',
253
+ 'ށ': 'sh',
254
+ 'ނ': 'n',
255
+ 'ރ': 'r',
256
+ 'ބ': 'b',
257
+ 'ޅ': 'lh',
258
+ 'ކ': 'k',
259
+ 'އ': 'a',
260
+ 'ވ': 'v',
261
+ 'މ': 'm',
262
+ 'ފ': 'f',
263
+ 'ދ': 'dh',
264
+ 'ތ': 'th',
265
+ 'ލ': 'l',
266
+ 'ގ': 'g',
267
+ 'ޏ': 'gn',
268
+ 'ސ': 's',
269
+ 'ޑ': 'd',
270
+ 'ޒ': 'z',
271
+ 'ޓ': 't',
272
+ 'ޔ': 'y',
273
+ 'ޕ': 'p',
274
+ 'ޖ': 'j',
275
+ 'ޗ': 'ch',
276
+ 'ޘ': 'tt',
277
+ 'ޙ': 'hh',
278
+ 'ޚ': 'kh',
279
+ 'ޛ': 'th',
280
+ 'ޜ': 'z',
281
+ 'ޝ': 'sh',
282
+ 'ޞ': 's',
283
+ 'ޟ': 'd',
284
+ 'ޠ': 't',
285
+ 'ޡ': 'z',
286
+ 'ޢ': 'a',
287
+ 'ޣ': 'gh',
288
+ 'ޤ': 'q',
289
+ 'ޥ': 'w',
290
+ 'ަ': 'a',
291
+ 'ާ': 'aa',
292
+ 'ި': 'i',
293
+ 'ީ': 'ee',
294
+ 'ު': 'u',
295
+ 'ޫ': 'oo',
296
+ 'ެ': 'e',
297
+ 'ޭ': 'ey',
298
+ 'ޮ': 'o',
299
+ 'ޯ': 'oa',
300
+ 'ް': '',
301
+
302
+ // Georgian https://en.wikipedia.org/wiki/Romanization_of_Georgian
303
+ // National system (2002)
304
+ 'ა': 'a',
305
+ 'ბ': 'b',
306
+ 'გ': 'g',
307
+ 'დ': 'd',
308
+ 'ე': 'e',
309
+ 'ვ': 'v',
310
+ 'ზ': 'z',
311
+ 'თ': 't',
312
+ 'ი': 'i',
313
+ 'კ': 'k',
314
+ 'ლ': 'l',
315
+ 'მ': 'm',
316
+ 'ნ': 'n',
317
+ 'ო': 'o',
318
+ 'პ': 'p',
319
+ 'ჟ': 'zh',
320
+ 'რ': 'r',
321
+ 'ს': 's',
322
+ 'ტ': 't',
323
+ 'უ': 'u',
324
+ 'ფ': 'p',
325
+ 'ქ': 'k',
326
+ 'ღ': 'gh',
327
+ 'ყ': 'q',
328
+ 'შ': 'sh',
329
+ 'ჩ': 'ch',
330
+ 'ც': 'ts',
331
+ 'ძ': 'dz',
332
+ 'წ': 'ts',
333
+ 'ჭ': 'ch',
334
+ 'ხ': 'kh',
335
+ 'ჯ': 'j',
336
+ 'ჰ': 'h',
337
+
338
+ // Greek
339
+ 'α': 'a',
340
+ 'β': 'v',
341
+ 'γ': 'g',
342
+ 'δ': 'd',
343
+ 'ε': 'e',
344
+ 'ζ': 'z',
345
+ 'η': 'i',
346
+ 'θ': 'th',
347
+ 'ι': 'i',
348
+ 'κ': 'k',
349
+ 'λ': 'l',
350
+ 'μ': 'm',
351
+ 'ν': 'n',
352
+ 'ξ': 'ks',
353
+ 'ο': 'o',
354
+ 'π': 'p',
355
+ 'ρ': 'r',
356
+ 'σ': 's',
357
+ 'τ': 't',
358
+ 'υ': 'y',
359
+ 'φ': 'f',
360
+ 'χ': 'x',
361
+ 'ψ': 'ps',
362
+ 'ω': 'o',
363
+ 'ά': 'a',
364
+ 'έ': 'e',
365
+ 'ί': 'i',
366
+ 'ό': 'o',
367
+ 'ύ': 'y',
368
+ 'ή': 'i',
369
+ 'ώ': 'o',
370
+ 'ς': 's',
371
+ 'ϊ': 'i',
372
+ 'ΰ': 'y',
373
+ 'ϋ': 'y',
374
+ 'ΐ': 'i',
375
+ 'Α': 'A',
376
+ 'Β': 'B',
377
+ 'Γ': 'G',
378
+ 'Δ': 'D',
379
+ 'Ε': 'E',
380
+ 'Ζ': 'Z',
381
+ 'Η': 'I',
382
+ 'Θ': 'TH',
383
+ 'Ι': 'I',
384
+ 'Κ': 'K',
385
+ 'Λ': 'L',
386
+ 'Μ': 'M',
387
+ 'Ν': 'N',
388
+ 'Ξ': 'KS',
389
+ 'Ο': 'O',
390
+ 'Π': 'P',
391
+ 'Ρ': 'R',
392
+ 'Σ': 'S',
393
+ 'Τ': 'T',
394
+ 'Υ': 'Y',
395
+ 'Φ': 'F',
396
+ 'Χ': 'X',
397
+ 'Ψ': 'PS',
398
+ 'Ω': 'O',
399
+ 'Ά': 'A',
400
+ 'Έ': 'E',
401
+ 'Ί': 'I',
402
+ 'Ό': 'O',
403
+ 'Ύ': 'Y',
404
+ 'Ή': 'I',
405
+ 'Ώ': 'O',
406
+ 'Ϊ': 'I',
407
+ 'Ϋ': 'Y',
408
+
409
+ // Latvian
410
+ 'ā': 'a',
411
+ // 'č': 'c', // duplicate
412
+ 'ē': 'e',
413
+ 'ģ': 'g',
414
+ 'ī': 'i',
415
+ 'ķ': 'k',
416
+ 'ļ': 'l',
417
+ 'ņ': 'n',
418
+ // 'š': 's', // duplicate
419
+ 'ū': 'u',
420
+ // 'ž': 'z', // duplicate
421
+ 'Ā': 'A',
422
+ // 'Č': 'C', // duplicate
423
+ 'Ē': 'E',
424
+ 'Ģ': 'G',
425
+ 'Ī': 'I',
426
+ 'Ķ': 'k',
427
+ 'Ļ': 'L',
428
+ 'Ņ': 'N',
429
+ // 'Š': 'S', // duplicate
430
+ 'Ū': 'U',
431
+ // 'Ž': 'Z', // duplicate
432
+
433
+ // Macedonian
434
+ 'Ќ': 'Kj',
435
+ 'ќ': 'kj',
436
+ 'Љ': 'Lj',
437
+ 'љ': 'lj',
438
+ 'Њ': 'Nj',
439
+ 'њ': 'nj',
440
+ 'Тс': 'Ts',
441
+ 'тс': 'ts',
442
+
443
+ // Polish
444
+ 'ą': 'a',
445
+ 'ć': 'c',
446
+ 'ę': 'e',
447
+ 'ł': 'l',
448
+ 'ń': 'n',
449
+ // 'ó': 'o', // duplicate
450
+ 'ś': 's',
451
+ 'ź': 'z',
452
+ 'ż': 'z',
453
+ 'Ą': 'A',
454
+ 'Ć': 'C',
455
+ 'Ę': 'E',
456
+ 'Ł': 'L',
457
+ 'Ń': 'N',
458
+ 'Ś': 'S',
459
+ 'Ź': 'Z',
460
+ 'Ż': 'Z',
461
+
462
+ // Ukranian
463
+ 'Є': 'Ye',
464
+ 'І': 'I',
465
+ 'Ї': 'Yi',
466
+ 'Ґ': 'G',
467
+ 'є': 'ye',
468
+ 'і': 'i',
469
+ 'ї': 'yi',
470
+ 'ґ': 'g',
471
+
472
+ // Romanian
473
+ 'ă': 'a',
474
+ 'Ă': 'A',
475
+ 'ș': 's',
476
+ 'Ș': 'S',
477
+ // 'ş': 's', // duplicate
478
+ // 'Ş': 'S', // duplicate
479
+ 'ț': 't',
480
+ 'Ț': 'T',
481
+ 'ţ': 't',
482
+ 'Ţ': 'T',
483
+
484
+ // Russian https://en.wikipedia.org/wiki/Romanization_of_Russian
485
+ // ICAO
486
+
487
+ 'а': 'a',
488
+ 'б': 'b',
489
+ 'в': 'v',
490
+ 'г': 'g',
491
+ 'д': 'd',
492
+ 'е': 'e',
493
+ 'ё': 'yo',
494
+ 'ж': 'zh',
495
+ 'з': 'z',
496
+ 'и': 'i',
497
+ 'й': 'i',
498
+ 'к': 'k',
499
+ 'л': 'l',
500
+ 'м': 'm',
501
+ 'н': 'n',
502
+ 'о': 'o',
503
+ 'п': 'p',
504
+ 'р': 'r',
505
+ 'с': 's',
506
+ 'т': 't',
507
+ 'у': 'u',
508
+ 'ф': 'f',
509
+ 'х': 'kh',
510
+ 'ц': 'c',
511
+ 'ч': 'ch',
512
+ 'ш': 'sh',
513
+ 'щ': 'sh',
514
+ 'ъ': '',
515
+ 'ы': 'y',
516
+ 'ь': '',
517
+ 'э': 'e',
518
+ 'ю': 'yu',
519
+ 'я': 'ya',
520
+ 'А': 'A',
521
+ 'Б': 'B',
522
+ 'В': 'V',
523
+ 'Г': 'G',
524
+ 'Д': 'D',
525
+ 'Е': 'E',
526
+ 'Ё': 'Yo',
527
+ 'Ж': 'Zh',
528
+ 'З': 'Z',
529
+ 'И': 'I',
530
+ 'Й': 'I',
531
+ 'К': 'K',
532
+ 'Л': 'L',
533
+ 'М': 'M',
534
+ 'Н': 'N',
535
+ 'О': 'O',
536
+ 'П': 'P',
537
+ 'Р': 'R',
538
+ 'С': 'S',
539
+ 'Т': 'T',
540
+ 'У': 'U',
541
+ 'Ф': 'F',
542
+ 'Х': 'Kh',
543
+ 'Ц': 'C',
544
+ 'Ч': 'Ch',
545
+ 'Ш': 'Sh',
546
+ 'Щ': 'Sh',
547
+ 'Ъ': '',
548
+ 'Ы': 'Y',
549
+ 'Ь': '',
550
+ 'Э': 'E',
551
+ 'Ю': 'Yu',
552
+ 'Я': 'Ya',
553
+
554
+ // Serbian
555
+ 'ђ': 'dj',
556
+ 'ј': 'j',
557
+ // 'љ': 'lj', // duplicate
558
+ // 'њ': 'nj', // duplicate
559
+ 'ћ': 'c',
560
+ 'џ': 'dz',
561
+ 'Ђ': 'Dj',
562
+ 'Ј': 'j',
563
+ // 'Љ': 'Lj', // duplicate
564
+ // 'Њ': 'Nj', // duplicate
565
+ 'Ћ': 'C',
566
+ 'Џ': 'Dz',
567
+
568
+ // Slovak
569
+ 'ľ': 'l',
570
+ 'ĺ': 'l',
571
+ 'ŕ': 'r',
572
+ 'Ľ': 'L',
573
+ 'Ĺ': 'L',
574
+ 'Ŕ': 'R',
575
+
576
+ // Turkish
577
+ 'ş': 's',
578
+ 'Ş': 'S',
579
+ 'ı': 'i',
580
+ 'İ': 'I',
581
+ // 'ç': 'c', // duplicate
582
+ // 'Ç': 'C', // duplicate
583
+ // 'ü': 'u', // duplicate, see langCharMap
584
+ // 'Ü': 'U', // duplicate, see langCharMap
585
+ // 'ö': 'o', // duplicate, see langCharMap
586
+ // 'Ö': 'O', // duplicate, see langCharMap
587
+ 'ğ': 'g',
588
+ 'Ğ': 'G',
589
+
590
+ // Vietnamese
591
+ 'ả': 'a',
592
+ 'Ả': 'A',
593
+ 'ẳ': 'a',
594
+ 'Ẳ': 'A',
595
+ 'ẩ': 'a',
596
+ 'Ẩ': 'A',
597
+ 'đ': 'd',
598
+ 'Đ': 'D',
599
+ 'ẹ': 'e',
600
+ 'Ẹ': 'E',
601
+ 'ẽ': 'e',
602
+ 'Ẽ': 'E',
603
+ 'ẻ': 'e',
604
+ 'Ẻ': 'E',
605
+ 'ế': 'e',
606
+ 'Ế': 'E',
607
+ 'ề': 'e',
608
+ 'Ề': 'E',
609
+ 'ệ': 'e',
610
+ 'Ệ': 'E',
611
+ 'ễ': 'e',
612
+ 'Ễ': 'E',
613
+ 'ể': 'e',
614
+ 'Ể': 'E',
615
+ 'ọ': 'o',
616
+ 'Ọ': 'o',
617
+ 'ố': 'o',
618
+ 'Ố': 'O',
619
+ 'ồ': 'o',
620
+ 'Ồ': 'O',
621
+ 'ổ': 'o',
622
+ 'Ổ': 'O',
623
+ 'ộ': 'o',
624
+ 'Ộ': 'O',
625
+ 'ỗ': 'o',
626
+ 'Ỗ': 'O',
627
+ 'ơ': 'o',
628
+ 'Ơ': 'O',
629
+ 'ớ': 'o',
630
+ 'Ớ': 'O',
631
+ 'ờ': 'o',
632
+ 'Ờ': 'O',
633
+ 'ợ': 'o',
634
+ 'Ợ': 'O',
635
+ 'ỡ': 'o',
636
+ 'Ỡ': 'O',
637
+ 'Ở': 'o',
638
+ 'ở': 'o',
639
+ 'ị': 'i',
640
+ 'Ị': 'I',
641
+ 'ĩ': 'i',
642
+ 'Ĩ': 'I',
643
+ 'ỉ': 'i',
644
+ 'Ỉ': 'i',
645
+ 'ủ': 'u',
646
+ 'Ủ': 'U',
647
+ 'ụ': 'u',
648
+ 'Ụ': 'U',
649
+ 'ũ': 'u',
650
+ 'Ũ': 'U',
651
+ 'ư': 'u',
652
+ 'Ư': 'U',
653
+ 'ứ': 'u',
654
+ 'Ứ': 'U',
655
+ 'ừ': 'u',
656
+ 'Ừ': 'U',
657
+ 'ự': 'u',
658
+ 'Ự': 'U',
659
+ 'ữ': 'u',
660
+ 'Ữ': 'U',
661
+ 'ử': 'u',
662
+ 'Ử': 'ư',
663
+ 'ỷ': 'y',
664
+ 'Ỷ': 'y',
665
+ 'ỳ': 'y',
666
+ 'Ỳ': 'Y',
667
+ 'ỵ': 'y',
668
+ 'Ỵ': 'Y',
669
+ 'ỹ': 'y',
670
+ 'Ỹ': 'Y',
671
+ 'ạ': 'a',
672
+ 'Ạ': 'A',
673
+ 'ấ': 'a',
674
+ 'Ấ': 'A',
675
+ 'ầ': 'a',
676
+ 'Ầ': 'A',
677
+ 'ậ': 'a',
678
+ 'Ậ': 'A',
679
+ 'ẫ': 'a',
680
+ 'Ẫ': 'A',
681
+ // 'ă': 'a', // duplicate
682
+ // 'Ă': 'A', // duplicate
683
+ 'ắ': 'a',
684
+ 'Ắ': 'A',
685
+ 'ằ': 'a',
686
+ 'Ằ': 'A',
687
+ 'ặ': 'a',
688
+ 'Ặ': 'A',
689
+ 'ẵ': 'a',
690
+ 'Ẵ': 'A',
691
+
692
+ // symbols
693
+ '“': '"',
694
+ '”': '"',
695
+ '‘': "'",
696
+ '’': "'",
697
+ '∂': 'd',
698
+ 'ƒ': 'f',
699
+ '™': '(TM)',
700
+ '©': '(C)',
701
+ 'œ': 'oe',
702
+ 'Œ': 'OE',
703
+ '®': '(R)',
704
+ '†': '+',
705
+ '℠': '(SM)',
706
+ '…': '...',
707
+ '˚': 'o',
708
+ 'º': 'o',
709
+ 'ª': 'a',
710
+ '•': '*',
711
+ '၊': ',',
712
+ '။': '.',
713
+
714
+ // currency
715
+ '$': 'USD',
716
+ '€': 'EUR',
717
+ '₢': 'BRN',
718
+ '₣': 'FRF',
719
+ '£': 'GBP',
720
+ '₤': 'ITL',
721
+ '₦': 'NGN',
722
+ '₧': 'ESP',
723
+ '₩': 'KRW',
724
+ '₪': 'ILS',
725
+ '₫': 'VND',
726
+ '₭': 'LAK',
727
+ '₮': 'MNT',
728
+ '₯': 'GRD',
729
+ '₱': 'ARS',
730
+ '₲': 'PYG',
731
+ '₳': 'ARA',
732
+ '₴': 'UAH',
733
+ '₵': 'GHS',
734
+ '¢': 'cent',
735
+ '¥': 'CNY',
736
+ '元': 'CNY',
737
+ '円': 'YEN',
738
+ '﷼': 'IRR',
739
+ '₠': 'EWE',
740
+ '฿': 'THB',
741
+ '₨': 'INR',
742
+ '₹': 'INR',
743
+ '₰': 'PF',
744
+ '₺': 'TRY',
745
+ '؋': 'AFN',
746
+ '₼': 'AZN',
747
+ 'лв': 'BGN',
748
+ '៛': 'KHR',
749
+ '₡': 'CRC',
750
+ '₸': 'KZT',
751
+ 'ден': 'MKD',
752
+ 'zł': 'PLN',
753
+ '₽': 'RUB',
754
+ '₾': 'GEL'
12
755
 
13
- var separator = '-';
14
- var uricChars = [';', '?', ':', '@', '&', '=', '+', '$', ',', '/'];
15
- var uricNoSlashChars = [';', '?', ':', '@', '&', '=', '+', '$', ','];
16
- var markChars = ['.', '!', '~', '*', '\'', '(', ')'];
17
- var result = '';
18
- var diatricString = '';
19
- var convertSymbols = true;
20
- var customReplacements = {};
21
- var maintainCase;
22
- var titleCase;
23
- var truncate;
24
- var uricFlag;
25
- var uricNoSlashFlag;
26
- var markFlag;
27
- var symbol;
28
- var langChar;
29
- var lucky;
30
- var i;
31
- var ch;
32
- var l;
33
- var lastCharWasSymbol;
34
- var lastCharWasDiatric;
35
- var allowedChars;
756
+ };
36
757
 
37
- /**
38
- * charMap
39
- * @type {Object}
40
- */
41
- var charMap = {
42
-
43
- // latin
44
- 'À': 'A',
45
- 'Á': 'A',
46
- 'Â': 'A',
47
- 'Ã': 'A',
48
- 'Ä': 'Ae',
49
- 'Å': 'A',
50
- 'Æ': 'AE',
51
- 'Ç': 'C',
52
- 'È': 'E',
53
- 'É': 'E',
54
- 'Ê': 'E',
55
- 'Ë': 'E',
56
- 'Ì': 'I',
57
- 'Í': 'I',
58
- 'Î': 'I',
59
- 'Ï': 'I',
60
- 'Ð': 'D',
61
- 'Ñ': 'N',
62
- 'Ò': 'O',
63
- 'Ó': 'O',
64
- 'Ô': 'O',
65
- 'Õ': 'O',
66
- 'Ö': 'Oe',
67
- 'Ő': 'O',
68
- 'Ø': 'O',
69
- 'Ù': 'U',
70
- 'Ú': 'U',
71
- 'Û': 'U',
72
- 'Ü': 'Ue',
73
- 'Ű': 'U',
74
- 'Ý': 'Y',
75
- 'Þ': 'TH',
76
- 'ß': 'ss',
77
- 'à': 'a',
78
- 'á': 'a',
79
- 'â': 'a',
80
- 'ã': 'a',
81
- 'ä': 'ae',
82
- 'å': 'a',
83
- 'æ': 'ae',
758
+ /**
759
+ * special look ahead character array
760
+ * These characters form with consonants to become 'single'/consonant combo
761
+ * @type [Array]
762
+ */
763
+ var lookAheadCharArray = [
764
+ // burmese
765
+ '',
766
+
767
+ // Dhivehi
768
+ 'ް'
769
+ ];
770
+
771
+ /**
772
+ * diatricMap for languages where transliteration changes entirely as more diatrics are added
773
+ * @type {Object}
774
+ */
775
+ var diatricMap = {
776
+ // Burmese
777
+ // dependent vowels
778
+ '': 'a',
779
+ '': 'a',
780
+ '': 'e',
781
+ '': 'e',
782
+ '': 'i',
783
+ '': 'i',
784
+ 'ို': 'o',
785
+ '': 'u',
786
+ '': 'u',
787
+ 'ေါင်': 'aung',
788
+ 'ော': 'aw',
789
+ 'ော်': 'aw',
790
+ 'ေါ': 'aw',
791
+ 'ေါ်': 'aw',
792
+ '': '', // this is special case but the character will be converted to latin in the code
793
+ 'က်': 'et',
794
+ 'ိုက်': 'aik',
795
+ 'ောက်': 'auk',
796
+ 'င်': 'in',
797
+ 'ိုင်': 'aing',
798
+ 'ောင်': 'aung',
799
+ 'စ်': 'it',
800
+ 'ည်': 'i',
801
+ 'တ်': 'at',
802
+ 'ိတ်': 'eik',
803
+ 'ုတ်': 'ok',
804
+ 'ွတ်': 'ut',
805
+ 'ေတ်': 'it',
806
+ 'ဒ်': 'd',
807
+ 'ိုဒ်': 'ok',
808
+ 'ုဒ်': 'ait',
809
+ 'န်': 'an',
810
+ 'ာန်': 'an',
811
+ 'ိန်': 'ein',
812
+ 'ုန်': 'on',
813
+ 'ွန်': 'un',
814
+ 'ပ်': 'at',
815
+ 'ိပ်': 'eik',
816
+ 'ုပ်': 'ok',
817
+ 'ွပ်': 'ut',
818
+ 'န်ုပ်': 'nub',
819
+ 'မ်': 'an',
820
+ 'ိမ်': 'ein',
821
+ 'ုမ်': 'on',
822
+ 'ွမ်': 'un',
823
+ 'ယ်': 'e',
824
+ 'ိုလ်': 'ol',
825
+ 'ဉ်': 'in',
826
+ 'ံ': 'an',
827
+ 'ိံ': 'ein',
828
+ 'ုံ': 'on',
829
+
830
+ // Dhivehi
831
+ 'ައް': 'ah',
832
+ 'ަށް': 'ah'
833
+ };
834
+
835
+ /**
836
+ * langCharMap language specific characters translations
837
+ * @type {Object}
838
+ */
839
+ var langCharMap = {
840
+ 'en': {}, // default language
841
+
842
+ 'az': { // Azerbaijani
84
843
  'ç': 'c',
85
- 'è': 'e',
86
- 'é': 'e',
87
- 'ê': 'e',
88
- 'ë': 'e',
89
- 'ì': 'i',
90
- 'í': 'i',
91
- 'î': 'i',
92
- 'ï': 'i',
93
- 'ð': 'd',
94
- 'ñ': 'n',
95
- 'ò': 'o',
96
- 'ó': 'o',
97
- 'ô': 'o',
98
- 'õ': 'o',
99
- 'ö': 'oe',
100
- 'ő': 'o',
101
- 'ø': 'o',
102
- 'ù': 'u',
103
- 'ú': 'u',
104
- 'û': 'u',
105
- 'ü': 'ue',
106
- 'ű': 'u',
107
- 'ý': 'y',
108
- 'þ': 'th',
109
- 'ÿ': 'y',
110
- 'ẞ': 'SS',
111
-
112
- // language specific
113
-
114
- // Arabic
115
- 'ا': 'a',
116
- 'أ': 'a',
117
- 'إ': 'i',
118
- 'آ': 'aa',
119
- 'ؤ': 'u',
120
- 'ئ': 'e',
121
- 'ء': 'a',
122
- 'ب': 'b',
123
- 'ت': 't',
124
- 'ث': 'th',
125
- 'ج': 'j',
126
- 'ح': 'h',
127
- 'خ': 'kh',
128
- 'د': 'd',
129
- 'ذ': 'th',
130
- 'ر': 'r',
131
- 'ز': 'z',
132
- 'س': 's',
133
- 'ش': 'sh',
134
- 'ص': 's',
135
- 'ض': 'dh',
136
- 'ط': 't',
137
- 'ظ': 'z',
138
- 'ع': 'a',
139
- 'غ': 'gh',
140
- 'ف': 'f',
141
- 'ق': 'q',
142
- 'ك': 'k',
143
- 'ل': 'l',
144
- 'م': 'm',
145
- 'ن': 'n',
146
- 'ه': 'h',
147
- 'و': 'w',
148
- 'ي': 'y',
149
- 'ى': 'a',
150
- 'ة': 'h',
151
- 'ﻻ': 'la',
152
- 'ﻷ': 'laa',
153
- 'ﻹ': 'lai',
154
- 'ﻵ': 'laa',
155
-
156
- // Persian additional characters than Arabic
157
- 'گ': 'g',
158
- 'چ': 'ch',
159
- 'پ': 'p',
160
- 'ژ': 'zh',
161
- 'ک': 'k',
162
- 'ی': 'y',
163
-
164
- // Arabic diactrics
165
- 'َ': 'a',
166
- 'ً': 'an',
167
- 'ِ': 'e',
168
- 'ٍ': 'en',
169
- 'ُ': 'u',
170
- 'ٌ': 'on',
171
- 'ْ': '',
172
-
173
- // Arabic numbers
174
- '٠': '0',
175
- '١': '1',
176
- '٢': '2',
177
- '٣': '3',
178
- '٤': '4',
179
- '٥': '5',
180
- '٦': '6',
181
- '٧': '7',
182
- '٨': '8',
183
- '٩': '9',
184
-
185
- // Persian numbers
186
- '۰': '0',
187
- '۱': '1',
188
- '۲': '2',
189
- '۳': '3',
190
- '۴': '4',
191
- '۵': '5',
192
- '۶': '6',
193
- '۷': '7',
194
- '۸': '8',
195
- '۹': '9',
196
-
197
- // Burmese consonants
198
- 'က': 'k',
199
- 'ခ': 'kh',
200
- 'ဂ': 'g',
201
- 'ဃ': 'ga',
202
- 'င': 'ng',
203
- 'စ': 's',
204
- 'ဆ': 'sa',
205
- 'ဇ': 'z',
206
- 'စျ': 'za',
207
- 'ည': 'ny',
208
- 'ဋ': 't',
209
- 'ဌ': 'ta',
210
- 'ဍ': 'd',
211
- 'ဎ': 'da',
212
- 'ဏ': 'na',
213
- 'တ': 't',
214
- 'ထ': 'ta',
215
- 'ဒ': 'd',
216
- 'ဓ': 'da',
217
- 'န': 'n',
218
- 'ပ': 'p',
219
- 'ဖ': 'pa',
220
- 'ဗ': 'b',
221
- 'ဘ': 'ba',
222
- 'မ': 'm',
223
- 'ယ': 'y',
224
- 'ရ': 'ya',
225
- 'လ': 'l',
226
- 'ဝ': 'w',
227
- 'သ': 'th',
228
- 'ဟ': 'h',
229
- 'ဠ': 'la',
230
- 'အ': 'a',
231
- // consonant character combos
232
- 'ြ': 'y',
233
- 'ျ': 'ya',
234
- 'ွ': 'w',
235
- 'ြွ': 'yw',
236
- 'ျွ': 'ywa',
237
- 'ှ': 'h',
238
- // independent vowels
239
- 'ဧ': 'e',
240
- '၏': '-e',
241
- 'ဣ': 'i',
242
- 'ဤ': '-i',
243
- 'ဉ': 'u',
244
- 'ဦ': '-u',
245
- 'ဩ': 'aw',
246
- 'သြော': 'aw',
247
- 'ဪ': 'aw',
248
- // numbers
249
- '၀': '0',
250
- '၁': '1',
251
- '၂': '2',
252
- '၃': '3',
253
- '၄': '4',
254
- '၅': '5',
255
- '၆': '6',
256
- '၇': '7',
257
- '၈': '8',
258
- '၉': '9',
259
- // virama and tone marks which are silent in transliteration
260
- '္': '',
261
- '့': '',
262
- 'း': '',
263
-
264
- // Czech
844
+ 'ə': 'e',
845
+ 'ğ': 'g',
846
+ 'ı': 'i',
847
+ 'ö': 'o',
848
+ 'ş': 's',
849
+ 'ü': 'u',
850
+ 'Ç': 'C',
851
+ 'Ə': 'E',
852
+ 'Ğ': 'G',
853
+ 'İ': 'I',
854
+ 'Ö': 'O',
855
+ 'Ş': 'S',
856
+ 'Ü': 'U'
857
+ },
858
+
859
+ 'cs': { // Czech
265
860
  'č': 'c',
266
861
  'ď': 'd',
267
862
  'ě': 'e',
@@ -279,1017 +874,470 @@
279
874
  'Š': 'S',
280
875
  'Ť': 'T',
281
876
  'Ů': 'U',
282
- 'Ž': 'Z',
283
-
284
- // Dhivehi
285
- 'ހ': 'h',
286
- 'ށ': 'sh',
287
- 'ނ': 'n',
288
- 'ރ': 'r',
289
- 'ބ': 'b',
290
- 'ޅ': 'lh',
291
- 'ކ': 'k',
292
- 'އ': 'a',
293
- 'ވ': 'v',
294
- 'މ': 'm',
295
- 'ފ': 'f',
296
- 'ދ': 'dh',
297
- 'ތ': 'th',
298
- 'ލ': 'l',
299
- 'ގ': 'g',
300
- 'ޏ': 'gn',
301
- 'ސ': 's',
302
- 'ޑ': 'd',
303
- 'ޒ': 'z',
304
- 'ޓ': 't',
305
- 'ޔ': 'y',
306
- 'ޕ': 'p',
307
- 'ޖ': 'j',
308
- 'ޗ': 'ch',
309
- 'ޘ': 'tt',
310
- 'ޙ': 'hh',
311
- 'ޚ': 'kh',
312
- 'ޛ': 'th',
313
- 'ޜ': 'z',
314
- 'ޝ': 'sh',
315
- 'ޞ': 's',
316
- 'ޟ': 'd',
317
- 'ޠ': 't',
318
- 'ޡ': 'z',
319
- 'ޢ': 'a',
320
- 'ޣ': 'gh',
321
- 'ޤ': 'q',
322
- 'ޥ': 'w',
323
- 'ަ': 'a',
324
- 'ާ': 'aa',
325
- 'ި': 'i',
326
- 'ީ': 'ee',
327
- 'ު': 'u',
328
- 'ޫ': 'oo',
329
- 'ެ': 'e',
330
- 'ޭ': 'ey',
331
- 'ޮ': 'o',
332
- 'ޯ': 'oa',
333
- 'ް': '',
334
-
335
- // Greek
336
- 'α': 'a',
337
- 'β': 'v',
338
- 'γ': 'g',
339
- 'δ': 'd',
340
- 'ε': 'e',
341
- 'ζ': 'z',
342
- 'η': 'i',
343
- 'θ': 'th',
344
- 'ι': 'i',
345
- 'κ': 'k',
346
- 'λ': 'l',
347
- 'μ': 'm',
348
- 'ν': 'n',
349
- 'ξ': 'ks',
350
- 'ο': 'o',
351
- 'π': 'p',
352
- 'ρ': 'r',
353
- 'σ': 's',
354
- 'τ': 't',
355
- 'υ': 'y',
356
- 'φ': 'f',
357
- 'χ': 'x',
358
- 'ψ': 'ps',
359
- 'ω': 'o',
360
- 'ά': 'a',
361
- 'έ': 'e',
362
- 'ί': 'i',
363
- 'ό': 'o',
364
- 'ύ': 'y',
365
- 'ή': 'i',
366
- 'ώ': 'o',
367
- 'ς': 's',
368
- 'ϊ': 'i',
369
- 'ΰ': 'y',
370
- 'ϋ': 'y',
371
- 'ΐ': 'i',
372
- 'Α': 'A',
373
- 'Β': 'B',
374
- 'Γ': 'G',
375
- 'Δ': 'D',
376
- 'Ε': 'E',
377
- 'Ζ': 'Z',
378
- 'Η': 'I',
379
- 'Θ': 'TH',
380
- 'Ι': 'I',
381
- 'Κ': 'K',
382
- 'Λ': 'L',
383
- 'Μ': 'M',
384
- 'Ν': 'N',
385
- 'Ξ': 'KS',
386
- 'Ο': 'O',
387
- 'Π': 'P',
388
- 'Ρ': 'R',
389
- 'Σ': 'S',
390
- 'Τ': 'T',
391
- 'Υ': 'Y',
392
- 'Φ': 'F',
393
- 'Χ': 'X',
394
- 'Ψ': 'PS',
395
- 'Ω': 'O',
396
- 'Ά': 'A',
397
- 'Έ': 'E',
398
- 'Ί': 'I',
399
- 'Ό': 'O',
400
- 'Ύ': 'Y',
401
- 'Ή': 'I',
402
- 'Ώ': 'O',
403
- 'Ϊ': 'I',
404
- 'Ϋ': 'Y',
405
-
406
- // Latvian
877
+ 'Ž': 'Z'
878
+ },
879
+
880
+ 'fi': { // Finnish
881
+ // 'å': 'a', duplicate see charMap/latin
882
+ // 'Å': 'A', duplicate see charMap/latin
883
+ 'ä': 'a', // ok
884
+ 'Ä': 'A', // ok
885
+ 'ö': 'o', // ok
886
+ 'Ö': 'O' // ok
887
+ },
888
+
889
+ 'hu': { // Hungarian
890
+ 'ä': 'a', // ok
891
+ 'Ä': 'A', // ok
892
+ // 'á': 'a', duplicate see charMap/latin
893
+ // 'Á': 'A', duplicate see charMap/latin
894
+ 'ö': 'o', // ok
895
+ 'Ö': 'O', // ok
896
+ // 'ő': 'o', duplicate see charMap/latin
897
+ // 'Ő': 'O', duplicate see charMap/latin
898
+ 'ü': 'u',
899
+ 'Ü': 'U',
900
+ 'ű': 'u',
901
+ 'Ű': 'U'
902
+ },
903
+
904
+ 'lt': { // Lithuanian
905
+ 'ą': 'a',
906
+ 'č': 'c',
907
+ 'ę': 'e',
908
+ 'ė': 'e',
909
+ 'į': 'i',
910
+ 'š': 's',
911
+ 'ų': 'u',
912
+ 'ū': 'u',
913
+ 'ž': 'z',
914
+ 'Ą': 'A',
915
+ 'Č': 'C',
916
+ 'Ę': 'E',
917
+ 'Ė': 'E',
918
+ 'Į': 'I',
919
+ 'Š': 'S',
920
+ 'Ų': 'U',
921
+ 'Ū': 'U'
922
+ },
923
+
924
+ 'lv': { // Latvian
407
925
  'ā': 'a',
408
- // 'č': 'c', // duplicate
926
+ 'č': 'c',
409
927
  'ē': 'e',
410
928
  'ģ': 'g',
411
929
  'ī': 'i',
412
930
  'ķ': 'k',
413
931
  'ļ': 'l',
414
932
  'ņ': 'n',
415
- // 'š': 's', // duplicate
933
+ 'š': 's',
416
934
  'ū': 'u',
417
- // 'ž': 'z', // duplicate
935
+ 'ž': 'z',
418
936
  'Ā': 'A',
419
- // 'Č': 'C', // duplicate
937
+ 'Č': 'C',
420
938
  'Ē': 'E',
421
939
  'Ģ': 'G',
422
- 'Ī': 'I',
940
+ 'Ī': 'i',
423
941
  'Ķ': 'k',
424
942
  'Ļ': 'L',
425
943
  'Ņ': 'N',
426
- // 'Š': 'S', // duplicate
427
- 'Ū': 'U',
428
- // 'Ž': 'Z', // duplicate
429
-
430
- // Macedonian
431
- 'Ќ': 'Kj',
432
- 'ќ': 'kj',
433
- 'Љ': 'Lj',
434
- 'љ': 'lj',
435
- 'Њ': 'Nj',
436
- 'њ': 'nj',
437
- 'Тс': 'Ts',
438
- 'тс': 'ts',
944
+ 'Š': 'S',
945
+ 'Ū': 'u',
946
+ 'Ž': 'Z'
947
+ },
439
948
 
440
- // Polish
949
+ 'pl': { // Polish
441
950
  'ą': 'a',
442
951
  'ć': 'c',
443
952
  'ę': 'e',
444
953
  'ł': 'l',
445
954
  'ń': 'n',
446
- // 'ó': 'o', // duplicate
955
+ 'ó': 'o',
447
956
  'ś': 's',
448
957
  'ź': 'z',
449
958
  'ż': 'z',
450
959
  'Ą': 'A',
451
960
  'Ć': 'C',
452
- 'Ę': 'E',
961
+ 'Ę': 'e',
453
962
  'Ł': 'L',
454
963
  'Ń': 'N',
964
+ 'Ó': 'O',
455
965
  'Ś': 'S',
456
966
  'Ź': 'Z',
457
- 'Ż': 'Z',
458
-
459
- // Ukranian
460
- 'Є': 'Ye',
461
- 'І': 'I',
462
- 'Ї': 'Yi',
463
- 'Ґ': 'G',
464
- 'є': 'ye',
465
- 'і': 'i',
466
- 'ї': 'yi',
467
- 'ґ': 'g',
468
-
469
- // Romanian
470
- 'ă': 'a',
471
- 'Ă': 'A',
472
- 'ș': 's',
473
- 'Ș': 'S',
474
- // 'ş': 's', // duplicate
475
- // 'Ş': 'S', // duplicate
476
- 'ț': 't',
477
- 'Ț': 'T',
478
- 'ţ': 't',
479
- 'Ţ': 'T',
480
-
481
- // Russian https://en.wikipedia.org/wiki/Romanization_of_Russian
482
- // ICAO
483
-
484
- 'а': 'a',
485
- 'б': 'b',
486
- 'в': 'v',
487
- 'г': 'g',
488
- 'д': 'd',
489
- 'е': 'e',
490
- 'ё': 'yo',
491
- 'ж': 'zh',
492
- 'з': 'z',
493
- 'и': 'i',
494
- 'й': 'i',
495
- 'к': 'k',
496
- 'л': 'l',
497
- 'м': 'm',
498
- 'н': 'n',
499
- 'о': 'o',
500
- 'п': 'p',
501
- 'р': 'r',
502
- 'с': 's',
503
- 'т': 't',
504
- 'у': 'u',
505
- 'ф': 'f',
506
- 'х': 'kh',
507
- 'ц': 'c',
508
- 'ч': 'ch',
509
- 'ш': 'sh',
510
- 'щ': 'sh',
511
- 'ъ': '',
512
- 'ы': 'y',
513
- 'ь': '',
514
- 'э': 'e',
515
- 'ю': 'yu',
516
- 'я': 'ya',
517
- 'А': 'A',
518
- 'Б': 'B',
519
- 'В': 'V',
520
- 'Г': 'G',
521
- 'Д': 'D',
522
- 'Е': 'E',
523
- 'Ё': 'Yo',
524
- 'Ж': 'Zh',
525
- 'З': 'Z',
526
- 'И': 'I',
527
- 'Й': 'I',
528
- 'К': 'K',
529
- 'Л': 'L',
530
- 'М': 'M',
531
- 'Н': 'N',
532
- 'О': 'O',
533
- 'П': 'P',
534
- 'Р': 'R',
535
- 'С': 'S',
536
- 'Т': 'T',
537
- 'У': 'U',
538
- 'Ф': 'F',
539
- 'Х': 'Kh',
540
- 'Ц': 'C',
541
- 'Ч': 'Ch',
542
- 'Ш': 'Sh',
543
- 'Щ': 'Sh',
544
- 'Ъ': '',
545
- 'Ы': 'Y',
546
- 'Ь': '',
547
- 'Э': 'E',
548
- 'Ю': 'Yu',
549
- 'Я': 'Ya',
550
-
551
- // Serbian
552
- 'ђ': 'dj',
553
- 'ј': 'j',
554
- // 'љ': 'lj', // duplicate
555
- // 'њ': 'nj', // duplicate
556
- 'ћ': 'c',
557
- 'џ': 'dz',
558
- 'Ђ': 'Dj',
559
- 'Ј': 'j',
560
- // 'Љ': 'Lj', // duplicate
561
- // 'Њ': 'Nj', // duplicate
562
- 'Ћ': 'C',
563
- 'Џ': 'Dz',
564
-
565
- // Slovak
566
- 'ľ': 'l',
567
- 'ĺ': 'l',
568
- 'ŕ': 'r',
569
- 'Ľ': 'L',
570
- 'Ĺ': 'L',
571
- 'Ŕ': 'R',
572
-
573
- // Turkish
574
- 'ş': 's',
575
- 'Ş': 'S',
576
- 'ı': 'i',
577
- 'İ': 'I',
578
- // 'ç': 'c', // duplicate
579
- // 'Ç': 'C', // duplicate
580
- // 'ü': 'u', // duplicate, see langCharMap
581
- // 'Ü': 'U', // duplicate, see langCharMap
582
- // 'ö': 'o', // duplicate, see langCharMap
583
- // 'Ö': 'O', // duplicate, see langCharMap
584
- 'ğ': 'g',
585
- 'Ğ': 'G',
967
+ 'Ż': 'Z'
968
+ },
586
969
 
587
- // Vietnamese
588
- '': 'a',
589
- '': 'A',
590
- 'ẳ': 'a',
591
- 'Ẳ': 'A',
592
- 'ẩ': 'a',
593
- 'Ẩ': 'A',
594
- 'đ': 'd',
595
- 'Đ': 'D',
596
- 'ẹ': 'e',
597
- 'Ẹ': 'E',
598
- 'ẽ': 'e',
599
- 'Ẽ': 'E',
600
- 'ẻ': 'e',
601
- 'Ẻ': 'E',
602
- 'ế': 'e',
603
- 'Ế': 'E',
604
- 'ề': 'e',
605
- 'Ề': 'E',
606
- 'ệ': 'e',
607
- 'Ệ': 'E',
608
- 'ễ': 'e',
609
- 'Ễ': 'E',
610
- 'ể': 'e',
611
- 'Ể': 'E',
612
- 'ọ': 'o',
613
- 'Ọ': 'o',
614
- 'ố': 'o',
615
- 'Ố': 'O',
616
- 'ồ': 'o',
617
- 'Ồ': 'O',
618
- 'ổ': 'o',
619
- 'Ổ': 'O',
620
- 'ộ': 'o',
621
- 'Ộ': 'O',
622
- 'ỗ': 'o',
623
- 'Ỗ': 'O',
624
- 'ơ': 'o',
625
- 'Ơ': 'O',
626
- 'ớ': 'o',
627
- 'Ớ': 'O',
628
- 'ờ': 'o',
629
- 'Ờ': 'O',
630
- 'ợ': 'o',
631
- 'Ợ': 'O',
632
- 'ỡ': 'o',
633
- 'Ỡ': 'O',
634
- 'Ở': 'o',
635
- 'ở': 'o',
636
- 'ị': 'i',
637
- 'Ị': 'I',
638
- 'ĩ': 'i',
639
- 'Ĩ': 'I',
640
- 'ỉ': 'i',
641
- 'Ỉ': 'i',
642
- 'ủ': 'u',
643
- 'Ủ': 'U',
644
- 'ụ': 'u',
645
- 'Ụ': 'U',
646
- 'ũ': 'u',
647
- 'Ũ': 'U',
648
- 'ư': 'u',
649
- 'Ư': 'U',
650
- 'ứ': 'u',
651
- 'Ứ': 'U',
652
- 'ừ': 'u',
653
- 'Ừ': 'U',
654
- 'ự': 'u',
655
- 'Ự': 'U',
656
- 'ữ': 'u',
657
- 'Ữ': 'U',
658
- 'ử': 'u',
659
- 'Ử': 'ư',
660
- 'ỷ': 'y',
661
- 'Ỷ': 'y',
662
- 'ỳ': 'y',
663
- 'Ỳ': 'Y',
664
- 'ỵ': 'y',
665
- 'Ỵ': 'Y',
666
- 'ỹ': 'y',
667
- 'Ỹ': 'Y',
668
- 'ạ': 'a',
669
- 'Ạ': 'A',
670
- 'ấ': 'a',
671
- 'Ấ': 'A',
672
- 'ầ': 'a',
673
- 'Ầ': 'A',
674
- 'ậ': 'a',
675
- 'Ậ': 'A',
676
- 'ẫ': 'a',
677
- 'Ẫ': 'A',
678
- // 'ă': 'a', // duplicate
679
- // 'Ă': 'A', // duplicate
680
- 'ắ': 'a',
681
- 'Ắ': 'A',
682
- 'ằ': 'a',
683
- 'Ằ': 'A',
684
- 'ặ': 'a',
685
- 'Ặ': 'A',
686
- 'ẵ': 'a',
687
- 'Ẵ': 'A',
688
-
689
- // symbols
690
- '“': '"',
691
- '”': '"',
692
- '‘': '\'',
693
- '’': '\'',
694
- '∂': 'd',
695
- 'ƒ': 'f',
696
- '™': '(TM)',
697
- '©': '(C)',
698
- 'œ': 'oe',
699
- 'Œ': 'OE',
700
- '®': '(R)',
701
- '†': '+',
702
- '℠': '(SM)',
703
- '…': '...',
704
- '˚': 'o',
705
- 'º': 'o',
706
- 'ª': 'a',
707
- '•': '*',
708
- '၊': ',',
709
- '။': '.',
710
-
711
- // currency
712
- '$': 'USD',
713
- '€': 'EUR',
714
- '₢': 'BRN',
715
- '₣': 'FRF',
716
- '£': 'GBP',
717
- '₤': 'ITL',
718
- '₦': 'NGN',
719
- '₧': 'ESP',
720
- '₩': 'KRW',
721
- '₪': 'ILS',
722
- '₫': 'VND',
723
- '₭': 'LAK',
724
- '₮': 'MNT',
725
- '₯': 'GRD',
726
- '₱': 'ARS',
727
- '₲': 'PYG',
728
- '₳': 'ARA',
729
- '₴': 'UAH',
730
- '₵': 'GHS',
731
- '¢': 'cent',
732
- '¥': 'CNY',
733
- '元': 'CNY',
734
- '円': 'YEN',
735
- '﷼': 'IRR',
736
- '₠': 'EWE',
737
- '฿': 'THB',
738
- '₨': 'INR',
739
- '₹': 'INR',
740
- '₰': 'PF',
741
- '₺': 'TRY',
742
- '؋': 'AFN',
743
- '₼': 'AZN',
744
- 'лв': 'BGN',
745
- '៛': 'KHR',
746
- '₡': 'CRC',
747
- '₸': 'KZT',
748
- 'ден': 'MKD',
749
- 'zł': 'PLN',
750
- '₽': 'RUB',
751
- '₾': 'GEL'
970
+ 'sk': { // Slovak
971
+ 'ä': 'a',
972
+ 'Ä': 'A'
973
+ },
752
974
 
753
- };
975
+ 'sr': { // Serbian
976
+ 'љ': 'lj',
977
+ 'њ': 'nj',
978
+ 'Љ': 'Lj',
979
+ 'Њ': 'Nj',
980
+ 'đ': 'dj',
981
+ 'Đ': 'Dj'
982
+ },
983
+
984
+ 'tr': { // Turkish
985
+ 'Ü': 'U',
986
+ 'Ö': 'O',
987
+ 'ü': 'u',
988
+ 'ö': 'o'
989
+ }
990
+ };
754
991
 
755
- /**
756
- * special look ahead character array
757
- * These characters form with consonants to become 'single'/consonant combo
758
- * @type [Array]
759
- */
760
- var lookAheadCharArray = [
761
- // burmese
762
- '',
992
+ /**
993
+ * symbolMap language specific symbol translations
994
+ * translations must be transliterated already
995
+ * @type {Object}
996
+ */
997
+ var symbolMap = {
998
+ 'ar': {
999
+ '': 'delta',
1000
+ '∞': 'la-nihaya',
1001
+ '♥': 'hob',
1002
+ '&': 'wa',
1003
+ '|': 'aw',
1004
+ '<': 'aqal-men',
1005
+ '>': 'akbar-men',
1006
+ '∑': 'majmou',
1007
+ '¤': 'omla'
1008
+ },
1009
+
1010
+ 'az': {},
1011
+
1012
+ 'ca': {
1013
+ '∆': 'delta',
1014
+ '∞': 'infinit',
1015
+ '♥': 'amor',
1016
+ '&': 'i',
1017
+ '|': 'o',
1018
+ '<': 'menys que',
1019
+ '>': 'mes que',
1020
+ '∑': 'suma dels',
1021
+ '¤': 'moneda'
1022
+ },
1023
+
1024
+ 'cs': {
1025
+ '∆': 'delta',
1026
+ '∞': 'nekonecno',
1027
+ '♥': 'laska',
1028
+ '&': 'a',
1029
+ '|': 'nebo',
1030
+ '<': 'mensi nez',
1031
+ '>': 'vetsi nez',
1032
+ '∑': 'soucet',
1033
+ '¤': 'mena'
1034
+ },
1035
+
1036
+ 'de': {
1037
+ '∆': 'delta',
1038
+ '∞': 'unendlich',
1039
+ '♥': 'Liebe',
1040
+ '&': 'und',
1041
+ '|': 'oder',
1042
+ '<': 'kleiner als',
1043
+ '>': 'groesser als',
1044
+ '∑': 'Summe von',
1045
+ '¤': 'Waehrung'
1046
+ },
1047
+
1048
+ 'dv': {
1049
+ '∆': 'delta',
1050
+ '∞': 'kolunulaa',
1051
+ '♥': 'loabi',
1052
+ '&': 'aai',
1053
+ '|': 'noonee',
1054
+ '<': 'ah vure kuda',
1055
+ '>': 'ah vure bodu',
1056
+ '∑': 'jumula',
1057
+ '¤': 'faisaa'
1058
+ },
1059
+
1060
+ 'en': {
1061
+ '∆': 'delta',
1062
+ '∞': 'infinity',
1063
+ '♥': 'love',
1064
+ '&': 'and',
1065
+ '|': 'or',
1066
+ '<': 'less than',
1067
+ '>': 'greater than',
1068
+ '∑': 'sum',
1069
+ '¤': 'currency'
1070
+ },
1071
+
1072
+ 'es': {
1073
+ '∆': 'delta',
1074
+ '∞': 'infinito',
1075
+ '♥': 'amor',
1076
+ '&': 'y',
1077
+ '|': 'u',
1078
+ '<': 'menos que',
1079
+ '>': 'mas que',
1080
+ '∑': 'suma de los',
1081
+ '¤': 'moneda'
1082
+ },
1083
+
1084
+ 'fa': {
1085
+ '∆': 'delta',
1086
+ '∞': 'bi-nahayat',
1087
+ '♥': 'eshgh',
1088
+ '&': 'va',
1089
+ '|': 'ya',
1090
+ '<': 'kamtar-az',
1091
+ '>': 'bishtar-az',
1092
+ '∑': 'majmooe',
1093
+ '¤': 'vahed'
1094
+ },
1095
+
1096
+ 'fi': {
1097
+ '∆': 'delta',
1098
+ '∞': 'aarettomyys',
1099
+ '♥': 'rakkaus',
1100
+ '&': 'ja',
1101
+ '|': 'tai',
1102
+ '<': 'pienempi kuin',
1103
+ '>': 'suurempi kuin',
1104
+ '∑': 'summa',
1105
+ '¤': 'valuutta'
1106
+ },
1107
+
1108
+ 'fr': {
1109
+ '∆': 'delta',
1110
+ '∞': 'infiniment',
1111
+ '♥': 'Amour',
1112
+ '&': 'et',
1113
+ '|': 'ou',
1114
+ '<': 'moins que',
1115
+ '>': 'superieure a',
1116
+ '∑': 'somme des',
1117
+ '¤': 'monnaie'
1118
+ },
1119
+
1120
+ 'ge': {
1121
+ '∆': 'delta',
1122
+ '∞': 'usasruloba',
1123
+ '♥': 'siqvaruli',
1124
+ '&': 'da',
1125
+ '|': 'an',
1126
+ '<': 'naklebi',
1127
+ '>': 'meti',
1128
+ '∑': 'jami',
1129
+ '¤': 'valuta'
1130
+ },
1131
+
1132
+ 'gr': {},
1133
+
1134
+ 'hu': {
1135
+ '∆': 'delta',
1136
+ '∞': 'vegtelen',
1137
+ '♥': 'szerelem',
1138
+ '&': 'es',
1139
+ '|': 'vagy',
1140
+ '<': 'kisebb mint',
1141
+ '>': 'nagyobb mint',
1142
+ '∑': 'szumma',
1143
+ '¤': 'penznem'
1144
+ },
1145
+
1146
+ 'it': {
1147
+ '∆': 'delta',
1148
+ '∞': 'infinito',
1149
+ '♥': 'amore',
1150
+ '&': 'e',
1151
+ '|': 'o',
1152
+ '<': 'minore di',
1153
+ '>': 'maggiore di',
1154
+ '∑': 'somma',
1155
+ '¤': 'moneta'
1156
+ },
1157
+
1158
+ 'lt': {
1159
+ '∆': 'delta',
1160
+ '∞': 'begalybe',
1161
+ '♥': 'meile',
1162
+ '&': 'ir',
1163
+ '|': 'ar',
1164
+ '<': 'maziau nei',
1165
+ '>': 'daugiau nei',
1166
+ '∑': 'suma',
1167
+ '¤': 'valiuta'
1168
+ },
1169
+
1170
+ 'lv': {
1171
+ '∆': 'delta',
1172
+ '∞': 'bezgaliba',
1173
+ '♥': 'milestiba',
1174
+ '&': 'un',
1175
+ '|': 'vai',
1176
+ '<': 'mazak neka',
1177
+ '>': 'lielaks neka',
1178
+ '∑': 'summa',
1179
+ '¤': 'valuta'
1180
+ },
1181
+
1182
+ 'my': {
1183
+ '∆': 'kwahkhyaet',
1184
+ '∞': 'asaonasme',
1185
+ '♥': 'akhyait',
1186
+ '&': 'nhin',
1187
+ '|': 'tho',
1188
+ '<': 'ngethaw',
1189
+ '>': 'kyithaw',
1190
+ '∑': 'paungld',
1191
+ '¤': 'ngwekye'
1192
+ },
1193
+
1194
+ 'mk': {},
1195
+
1196
+ 'nl': {
1197
+ '∆': 'delta',
1198
+ '∞': 'oneindig',
1199
+ '♥': 'liefde',
1200
+ '&': 'en',
1201
+ '|': 'of',
1202
+ '<': 'kleiner dan',
1203
+ '>': 'groter dan',
1204
+ '∑': 'som',
1205
+ '¤': 'valuta'
1206
+ },
1207
+
1208
+ 'pl': {
1209
+ '∆': 'delta',
1210
+ '∞': 'nieskonczonosc',
1211
+ '♥': 'milosc',
1212
+ '&': 'i',
1213
+ '|': 'lub',
1214
+ '<': 'mniejsze niz',
1215
+ '>': 'wieksze niz',
1216
+ '∑': 'suma',
1217
+ '¤': 'waluta'
1218
+ },
1219
+
1220
+ 'pt': {
1221
+ '∆': 'delta',
1222
+ '∞': 'infinito',
1223
+ '♥': 'amor',
1224
+ '&': 'e',
1225
+ '|': 'ou',
1226
+ '<': 'menor que',
1227
+ '>': 'maior que',
1228
+ '∑': 'soma',
1229
+ '¤': 'moeda'
1230
+ },
1231
+
1232
+ 'ro': {
1233
+ '∆': 'delta',
1234
+ '∞': 'infinit',
1235
+ '♥': 'dragoste',
1236
+ '&': 'si',
1237
+ '|': 'sau',
1238
+ '<': 'mai mic ca',
1239
+ '>': 'mai mare ca',
1240
+ '∑': 'suma',
1241
+ '¤': 'valuta'
1242
+ },
1243
+
1244
+ 'ru': {
1245
+ '∆': 'delta',
1246
+ '∞': 'beskonechno',
1247
+ '♥': 'lubov',
1248
+ '&': 'i',
1249
+ '|': 'ili',
1250
+ '<': 'menshe',
1251
+ '>': 'bolshe',
1252
+ '∑': 'summa',
1253
+ '¤': 'valjuta'
1254
+ },
1255
+
1256
+ 'sk': {
1257
+ '∆': 'delta',
1258
+ '∞': 'nekonecno',
1259
+ '♥': 'laska',
1260
+ '&': 'a',
1261
+ '|': 'alebo',
1262
+ '<': 'menej ako',
1263
+ '>': 'viac ako',
1264
+ '∑': 'sucet',
1265
+ '¤': 'mena'
1266
+ },
1267
+
1268
+ 'sr': {},
1269
+
1270
+ 'tr': {
1271
+ '∆': 'delta',
1272
+ '∞': 'sonsuzluk',
1273
+ '♥': 'ask',
1274
+ '&': 've',
1275
+ '|': 'veya',
1276
+ '<': 'kucuktur',
1277
+ '>': 'buyuktur',
1278
+ '∑': 'toplam',
1279
+ '¤': 'para birimi'
1280
+ },
1281
+
1282
+ 'uk': {
1283
+ '∆': 'delta',
1284
+ '∞': 'bezkinechnist',
1285
+ '♥': 'lubov',
1286
+ '&': 'i',
1287
+ '|': 'abo',
1288
+ '<': 'menshe',
1289
+ '>': 'bilshe',
1290
+ '∑': 'suma',
1291
+ '¤': 'valjuta'
1292
+ },
1293
+
1294
+ 'vn': {
1295
+ '∆': 'delta',
1296
+ '∞': 'vo cuc',
1297
+ '♥': 'yeu',
1298
+ '&': 'va',
1299
+ '|': 'hoac',
1300
+ '<': 'nho hon',
1301
+ '>': 'lon hon',
1302
+ '∑': 'tong',
1303
+ '¤': 'tien te'
1304
+ }
1305
+ };
763
1306
 
764
- // Dhivehi
765
- 'ް'
766
- ];
1307
+ var uricChars = [';', '?', ':', '@', '&', '=', '+', '$', ',', '/'].join('');
767
1308
 
768
- /**
769
- * diatricMap for languages where transliteration changes entirely as more diatrics are added
770
- * @type {Object}
771
- */
772
- var diatricMap = {
773
- // Burmese
774
- // dependent vowels
775
- 'ာ': 'a',
776
- 'ါ': 'a',
777
- 'ေ': 'e',
778
- 'ဲ': 'e',
779
- 'ိ': 'i',
780
- 'ီ': 'i',
781
- 'ို': 'o',
782
- 'ု': 'u',
783
- 'ူ': 'u',
784
- 'ေါင်': 'aung',
785
- 'ော': 'aw',
786
- 'ော်': 'aw',
787
- 'ေါ': 'aw',
788
- 'ေါ်': 'aw',
789
- '်': '်', // this is special case but the character will be converted to latin in the code
790
- 'က်': 'et',
791
- 'ိုက်': 'aik',
792
- 'ောက်': 'auk',
793
- 'င်': 'in',
794
- 'ိုင်': 'aing',
795
- 'ောင်': 'aung',
796
- 'စ်': 'it',
797
- 'ည်': 'i',
798
- 'တ်': 'at',
799
- 'ိတ်': 'eik',
800
- 'ုတ်': 'ok',
801
- 'ွတ်': 'ut',
802
- 'ေတ်': 'it',
803
- 'ဒ်': 'd',
804
- 'ိုဒ်': 'ok',
805
- 'ုဒ်': 'ait',
806
- 'န်': 'an',
807
- 'ာန်': 'an',
808
- 'ိန်': 'ein',
809
- 'ုန်': 'on',
810
- 'ွန်': 'un',
811
- 'ပ်': 'at',
812
- 'ိပ်': 'eik',
813
- 'ုပ်': 'ok',
814
- 'ွပ်': 'ut',
815
- 'န်ုပ်': 'nub',
816
- 'မ်': 'an',
817
- 'ိမ်': 'ein',
818
- 'ုမ်': 'on',
819
- 'ွမ်': 'un',
820
- 'ယ်': 'e',
821
- 'ိုလ်': 'ol',
822
- 'ဉ်': 'in',
823
- 'ံ': 'an',
824
- 'ိံ': 'ein',
825
- 'ုံ': 'on',
826
-
827
- // Dhivehi
828
- 'ައް': 'ah',
829
- 'ަށް': 'ah',
830
- };
1309
+ var uricNoSlashChars = [';', '?', ':', '@', '&', '=', '+', '$', ','].join('');
831
1310
 
832
- /**
833
- * langCharMap language specific characters translations
834
- * @type {Object}
835
- */
836
- var langCharMap = {
837
-
838
- 'en': {}, // default language
839
-
840
- 'az': { // Azerbaijani
841
- 'ç': 'c',
842
- 'ə': 'e',
843
- 'ğ': 'g',
844
- 'ı': 'i',
845
- 'ö': 'o',
846
- 'ş': 's',
847
- 'ü': 'u',
848
- 'Ç': 'C',
849
- 'Ə': 'E',
850
- 'Ğ': 'G',
851
- 'İ': 'I',
852
- 'Ö': 'O',
853
- 'Ş': 'S',
854
- 'Ü': 'U'
855
- },
856
-
857
- 'cs': { // Czech
858
- 'č': 'c',
859
- 'ď': 'd',
860
- 'ě': 'e',
861
- 'ň': 'n',
862
- 'ř': 'r',
863
- 'š': 's',
864
- 'ť': 't',
865
- 'ů': 'u',
866
- 'ž': 'z',
867
- 'Č': 'C',
868
- 'Ď': 'D',
869
- 'Ě': 'E',
870
- 'Ň': 'N',
871
- 'Ř': 'R',
872
- 'Š': 'S',
873
- 'Ť': 'T',
874
- 'Ů': 'U',
875
- 'Ž': 'Z'
876
- },
877
-
878
- 'fi': { // Finnish
879
- // 'å': 'a', duplicate see charMap/latin
880
- // 'Å': 'A', duplicate see charMap/latin
881
- 'ä': 'a', // ok
882
- 'Ä': 'A', // ok
883
- 'ö': 'o', // ok
884
- 'Ö': 'O' // ok
885
- },
886
-
887
- 'hu': { // Hungarian
888
- 'ä': 'a', // ok
889
- 'Ä': 'A', // ok
890
- // 'á': 'a', duplicate see charMap/latin
891
- // 'Á': 'A', duplicate see charMap/latin
892
- 'ö': 'o', // ok
893
- 'Ö': 'O', // ok
894
- // 'ő': 'o', duplicate see charMap/latin
895
- // 'Ő': 'O', duplicate see charMap/latin
896
- 'ü': 'u',
897
- 'Ü': 'U',
898
- 'ű': 'u',
899
- 'Ű': 'U'
900
- },
901
-
902
- 'lt': { // Lithuanian
903
- 'ą': 'a',
904
- 'č': 'c',
905
- 'ę': 'e',
906
- 'ė': 'e',
907
- 'į': 'i',
908
- 'š': 's',
909
- 'ų': 'u',
910
- 'ū': 'u',
911
- 'ž': 'z',
912
- 'Ą': 'A',
913
- 'Č': 'C',
914
- 'Ę': 'E',
915
- 'Ė': 'E',
916
- 'Į': 'I',
917
- 'Š': 'S',
918
- 'Ų': 'U',
919
- 'Ū': 'U'
920
- },
921
-
922
- 'lv': { // Latvian
923
- 'ā': 'a',
924
- 'č': 'c',
925
- 'ē': 'e',
926
- 'ģ': 'g',
927
- 'ī': 'i',
928
- 'ķ': 'k',
929
- 'ļ': 'l',
930
- 'ņ': 'n',
931
- 'š': 's',
932
- 'ū': 'u',
933
- 'ž': 'z',
934
- 'Ā': 'A',
935
- 'Č': 'C',
936
- 'Ē': 'E',
937
- 'Ģ': 'G',
938
- 'Ī': 'i',
939
- 'Ķ': 'k',
940
- 'Ļ': 'L',
941
- 'Ņ': 'N',
942
- 'Š': 'S',
943
- 'Ū': 'u',
944
- 'Ž': 'Z'
945
- },
946
-
947
- 'pl': { // Polish
948
- 'ą': 'a',
949
- 'ć': 'c',
950
- 'ę': 'e',
951
- 'ł': 'l',
952
- 'ń': 'n',
953
- 'ó': 'o',
954
- 'ś': 's',
955
- 'ź': 'z',
956
- 'ż': 'z',
957
- 'Ą': 'A',
958
- 'Ć': 'C',
959
- 'Ę': 'e',
960
- 'Ł': 'L',
961
- 'Ń': 'N',
962
- 'Ó': 'O',
963
- 'Ś': 'S',
964
- 'Ź': 'Z',
965
- 'Ż': 'Z'
966
- },
967
-
968
- 'sk': { // Slovak
969
- 'ä': 'a',
970
- 'Ä': 'A'
971
- },
972
-
973
- 'sr': { // Serbian
974
- 'љ': 'lj',
975
- 'њ': 'nj',
976
- 'Љ': 'Lj',
977
- 'Њ': 'Nj',
978
- 'đ': 'dj',
979
- 'Đ': 'Dj'
980
- },
981
-
982
- 'tr': { // Turkish
983
- 'Ü': 'U',
984
- 'Ö': 'O',
985
- 'ü': 'u',
986
- 'ö': 'o'
987
- }
988
- };
1311
+ var markChars = ['.', '!', '~', '*', "'", '(', ')'].join('');
989
1312
 
990
- /**
991
- * symbolMap language specific symbol translations
992
- * translations must be transliterated already
993
- * @type {Object}
994
- */
995
- var symbolMap = {
996
-
997
- 'ar': {
998
- '∆': 'delta',
999
- '∞': 'la-nihaya',
1000
- '♥': 'hob',
1001
- '&': 'wa',
1002
- '|': 'aw',
1003
- '<': 'aqal-men',
1004
- '>': 'akbar-men',
1005
- '∑': 'majmou',
1006
- '¤': 'omla'
1007
- },
1008
-
1009
- 'az': {},
1010
-
1011
- 'ca': {
1012
- '∆': 'delta',
1013
- '∞': 'infinit',
1014
- '♥': 'amor',
1015
- '&': 'i',
1016
- '|': 'o',
1017
- '<': 'menys que',
1018
- '>': 'mes que',
1019
- '∑': 'suma dels',
1020
- '¤': 'moneda'
1021
- },
1022
-
1023
- 'cs': {
1024
- '∆': 'delta',
1025
- '∞': 'nekonecno',
1026
- '♥': 'laska',
1027
- '&': 'a',
1028
- '|': 'nebo',
1029
- '<': 'mensi nez',
1030
- '>': 'vetsi nez',
1031
- '∑': 'soucet',
1032
- '¤': 'mena'
1033
- },
1034
-
1035
- 'de': {
1036
- '∆': 'delta',
1037
- '∞': 'unendlich',
1038
- '♥': 'Liebe',
1039
- '&': 'und',
1040
- '|': 'oder',
1041
- '<': 'kleiner als',
1042
- '>': 'groesser als',
1043
- '∑': 'Summe von',
1044
- '¤': 'Waehrung'
1045
- },
1046
-
1047
- 'dv': {
1048
- '∆': 'delta',
1049
- '∞': 'kolunulaa',
1050
- '♥': 'loabi',
1051
- '&': 'aai',
1052
- '|': 'noonee',
1053
- '<': 'ah vure kuda',
1054
- '>': 'ah vure bodu',
1055
- '∑': 'jumula',
1056
- '¤': 'faisaa'
1057
- },
1058
-
1059
- 'en': {
1060
- '∆': 'delta',
1061
- '∞': 'infinity',
1062
- '♥': 'love',
1063
- '&': 'and',
1064
- '|': 'or',
1065
- '<': 'less than',
1066
- '>': 'greater than',
1067
- '∑': 'sum',
1068
- '¤': 'currency'
1069
- },
1070
-
1071
- 'es': {
1072
- '∆': 'delta',
1073
- '∞': 'infinito',
1074
- '♥': 'amor',
1075
- '&': 'y',
1076
- '|': 'u',
1077
- '<': 'menos que',
1078
- '>': 'mas que',
1079
- '∑': 'suma de los',
1080
- '¤': 'moneda'
1081
- },
1082
-
1083
- 'fa': {
1084
- '∆': 'delta',
1085
- '∞': 'bi-nahayat',
1086
- '♥': 'eshgh',
1087
- '&': 'va',
1088
- '|': 'ya',
1089
- '<': 'kamtar-az',
1090
- '>': 'bishtar-az',
1091
- '∑': 'majmooe',
1092
- '¤': 'vahed'
1093
- },
1094
-
1095
- 'fi': {
1096
- '∆': 'delta',
1097
- '∞': 'aarettomyys',
1098
- '♥': 'rakkaus',
1099
- '&': 'ja',
1100
- '|': 'tai',
1101
- '<': 'pienempi kuin',
1102
- '>': 'suurempi kuin',
1103
- '∑': 'summa',
1104
- '¤': 'valuutta'
1105
- },
1106
-
1107
- 'fr': {
1108
- '∆': 'delta',
1109
- '∞': 'infiniment',
1110
- '♥': 'Amour',
1111
- '&': 'et',
1112
- '|': 'ou',
1113
- '<': 'moins que',
1114
- '>': 'superieure a',
1115
- '∑': 'somme des',
1116
- '¤': 'monnaie'
1117
- },
1118
-
1119
- 'gr': {},
1120
-
1121
- 'hu': {
1122
- '∆': 'delta',
1123
- '∞': 'vegtelen',
1124
- '♥': 'szerelem',
1125
- '&': 'es',
1126
- '|': 'vagy',
1127
- '<': 'kisebb mint',
1128
- '>': 'nagyobb mint',
1129
- '∑': 'szumma',
1130
- '¤': 'penznem'
1131
- },
1132
-
1133
- 'it': {
1134
- '∆': 'delta',
1135
- '∞': 'infinito',
1136
- '♥': 'amore',
1137
- '&': 'e',
1138
- '|': 'o',
1139
- '<': 'minore di',
1140
- '>': 'maggiore di',
1141
- '∑': 'somma',
1142
- '¤': 'moneta'
1143
- },
1144
-
1145
- 'lt': {
1146
- '∆': 'delta',
1147
- '∞': 'begalybe',
1148
- '♥': 'meile',
1149
- '&': 'ir',
1150
- '|': 'ar',
1151
- '<': 'maziau nei',
1152
- '>': 'daugiau nei',
1153
- '∑': 'suma',
1154
- '¤': 'valiuta'
1155
- },
1156
-
1157
- 'lv': {
1158
- '∆': 'delta',
1159
- '∞': 'bezgaliba',
1160
- '♥': 'milestiba',
1161
- '&': 'un',
1162
- '|': 'vai',
1163
- '<': 'mazak neka',
1164
- '>': 'lielaks neka',
1165
- '∑': 'summa',
1166
- '¤': 'valuta'
1167
- },
1168
-
1169
- 'my': {
1170
- '∆': 'kwahkhyaet',
1171
- '∞': 'asaonasme',
1172
- '♥': 'akhyait',
1173
- '&': 'nhin',
1174
- '|': 'tho',
1175
- '<': 'ngethaw',
1176
- '>': 'kyithaw',
1177
- '∑': 'paungld',
1178
- '¤': 'ngwekye'
1179
- },
1180
-
1181
- 'mk': {},
1182
-
1183
- 'nl': {
1184
- '∆': 'delta',
1185
- '∞': 'oneindig',
1186
- '♥': 'liefde',
1187
- '&': 'en',
1188
- '|': 'of',
1189
- '<': 'kleiner dan',
1190
- '>': 'groter dan',
1191
- '∑': 'som',
1192
- '¤': 'valuta'
1193
- },
1194
-
1195
- 'pl': {
1196
- '∆': 'delta',
1197
- '∞': 'nieskonczonosc',
1198
- '♥': 'milosc',
1199
- '&': 'i',
1200
- '|': 'lub',
1201
- '<': 'mniejsze niz',
1202
- '>': 'wieksze niz',
1203
- '∑': 'suma',
1204
- '¤': 'waluta'
1205
- },
1206
-
1207
- 'pt': {
1208
- '∆': 'delta',
1209
- '∞': 'infinito',
1210
- '♥': 'amor',
1211
- '&': 'e',
1212
- '|': 'ou',
1213
- '<': 'menor que',
1214
- '>': 'maior que',
1215
- '∑': 'soma',
1216
- '¤': 'moeda'
1217
- },
1218
-
1219
- 'ro': {
1220
- '∆': 'delta',
1221
- '∞': 'infinit',
1222
- '♥': 'dragoste',
1223
- '&': 'si',
1224
- '|': 'sau',
1225
- '<': 'mai mic ca',
1226
- '>': 'mai mare ca',
1227
- '∑': 'suma',
1228
- '¤': 'valuta'
1229
- },
1230
-
1231
- 'ru': {
1232
- '∆': 'delta',
1233
- '∞': 'beskonechno',
1234
- '♥': 'lubov',
1235
- '&': 'i',
1236
- '|': 'ili',
1237
- '<': 'menshe',
1238
- '>': 'bolshe',
1239
- '∑': 'summa',
1240
- '¤': 'valjuta'
1241
- },
1242
-
1243
- 'sk': {
1244
- '∆': 'delta',
1245
- '∞': 'nekonecno',
1246
- '♥': 'laska',
1247
- '&': 'a',
1248
- '|': 'alebo',
1249
- '<': 'menej ako',
1250
- '>': 'viac ako',
1251
- '∑': 'sucet',
1252
- '¤': 'mena'
1253
- },
1254
-
1255
- 'sr': {},
1256
-
1257
- 'tr': {
1258
- '∆': 'delta',
1259
- '∞': 'sonsuzluk',
1260
- '♥': 'ask',
1261
- '&': 've',
1262
- '|': 'veya',
1263
- '<': 'kucuktur',
1264
- '>': 'buyuktur',
1265
- '∑': 'toplam',
1266
- '¤': 'para birimi'
1267
- },
1268
-
1269
- 'uk': {
1270
- '∆': 'delta',
1271
- '∞': 'bezkinechnist',
1272
- '♥': 'lubov',
1273
- '&': 'i',
1274
- '|': 'abo',
1275
- '<': 'menshe',
1276
- '>': 'bilshe',
1277
- '∑': 'suma',
1278
- '¤': 'valjuta'
1279
- },
1280
-
1281
- 'vn': {
1282
- '∆': 'delta',
1283
- '∞': 'vo cuc',
1284
- '♥': 'yeu',
1285
- '&': 'va',
1286
- '|': 'hoac',
1287
- '<': 'nho hon',
1288
- '>': 'lon hon',
1289
- '∑': 'tong',
1290
- '¤': 'tien te'
1291
- }
1292
- };
1313
+ /**
1314
+ * getSlug
1315
+ * @param {string} input input string
1316
+ * @param {object|string} opts config object or separator string/char
1317
+ * @api public
1318
+ * @return {string} sluggified string
1319
+ */
1320
+ var getSlug = function getSlug(input, opts) {
1321
+ var separator = '-';
1322
+ var result = '';
1323
+ var diatricString = '';
1324
+ var convertSymbols = true;
1325
+ var customReplacements = {};
1326
+ var maintainCase;
1327
+ var titleCase;
1328
+ var truncate;
1329
+ var uricFlag;
1330
+ var uricNoSlashFlag;
1331
+ var markFlag;
1332
+ var symbol;
1333
+ var langChar;
1334
+ var lucky;
1335
+ var i;
1336
+ var ch;
1337
+ var l;
1338
+ var lastCharWasSymbol;
1339
+ var lastCharWasDiatric;
1340
+ var allowedChars = '';
1293
1341
 
1294
1342
  if (typeof input !== 'string') {
1295
1343
  return '';
@@ -1303,7 +1351,6 @@
1303
1351
  langChar = langCharMap.en;
1304
1352
 
1305
1353
  if (typeof opts === 'object') {
1306
-
1307
1354
  maintainCase = opts.maintainCase || false;
1308
1355
  customReplacements = (opts.custom && typeof opts.custom === 'object') ? opts.custom : customReplacements;
1309
1356
  truncate = (+opts.truncate > 1 && opts.truncate) || false;
@@ -1314,15 +1361,15 @@
1314
1361
  separator = opts.separator || separator;
1315
1362
 
1316
1363
  if (uricFlag) {
1317
- allowedChars += uricChars.join('');
1364
+ allowedChars += uricChars;
1318
1365
  }
1319
1366
 
1320
1367
  if (uricNoSlashFlag) {
1321
- allowedChars += uricNoSlashChars.join('');
1368
+ allowedChars += uricNoSlashChars;
1322
1369
  }
1323
1370
 
1324
1371
  if (markFlag) {
1325
- allowedChars += markChars.join('');
1372
+ allowedChars += markChars;
1326
1373
  }
1327
1374
 
1328
1375
  symbol = (opts.lang && symbolMap[opts.lang] && convertSymbols) ?
@@ -1333,10 +1380,9 @@
1333
1380
  opts.lang === false || opts.lang === true ? {} : langCharMap.en;
1334
1381
 
1335
1382
  // if titleCase config is an Array, rewrite to object format
1336
- if (opts.titleCase && typeof opts.titleCase.length === "number" && Array.prototype.toString.call(opts.titleCase)) {
1337
-
1383
+ if (opts.titleCase && typeof opts.titleCase.length === 'number' && Array.prototype.toString.call(opts.titleCase)) {
1338
1384
  opts.titleCase.forEach(function (v) {
1339
- customReplacements[v + ""] = v + "";
1385
+ customReplacements[v + ''] = v + '';
1340
1386
  });
1341
1387
 
1342
1388
  titleCase = true;
@@ -1345,16 +1391,14 @@
1345
1391
  }
1346
1392
 
1347
1393
  // if custom config is an Array, rewrite to object format
1348
- if (opts.custom && typeof opts.custom.length === "number" && Array.prototype.toString.call(opts.custom)) {
1349
-
1394
+ if (opts.custom && typeof opts.custom.length === 'number' && Array.prototype.toString.call(opts.custom)) {
1350
1395
  opts.custom.forEach(function (v) {
1351
- customReplacements[v + ""] = v + "";
1396
+ customReplacements[v + ''] = v + '';
1352
1397
  });
1353
1398
  }
1354
1399
 
1355
1400
  // custom replacements
1356
1401
  Object.keys(customReplacements).forEach(function (v) {
1357
-
1358
1402
  var r;
1359
1403
 
1360
1404
  if (v.length > 1) {
@@ -1370,7 +1414,6 @@
1370
1414
  for (ch in customReplacements) {
1371
1415
  allowedChars += ch;
1372
1416
  }
1373
-
1374
1417
  }
1375
1418
 
1376
1419
  allowedChars += separator;
@@ -1385,7 +1428,6 @@
1385
1428
  lastCharWasDiatric = false;
1386
1429
 
1387
1430
  for (i = 0, l = input.length; i < l; i++) {
1388
-
1389
1431
  ch = input[i];
1390
1432
 
1391
1433
  if (isReplacedCustomChar(ch, customReplacements)) {
@@ -1411,8 +1453,7 @@
1411
1453
 
1412
1454
  lastCharWasSymbol = false;
1413
1455
  lastCharWasDiatric = false;
1414
- } else
1415
- if (ch in diatricMap) {
1456
+ } else if (ch in diatricMap) {
1416
1457
  diatricString += ch;
1417
1458
  ch = '';
1418
1459
  // end of string, put the whole meaningful word
@@ -1422,11 +1463,10 @@
1422
1463
  lastCharWasDiatric = true;
1423
1464
  } else if (
1424
1465
  // process symbol chars
1425
- symbol[ch] && !(uricFlag && uricChars.join('')
1426
- .indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.join('')
1427
- //.indexOf(ch) !== -1) && !(markFlag && markChars.join('')
1466
+ symbol[ch] && !(uricFlag && uricChars
1467
+ .indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars
1468
+ // .indexOf(ch) !== -1) && !(markFlag && markChars
1428
1469
  .indexOf(ch) !== -1)) {
1429
-
1430
1470
  ch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch];
1431
1471
  ch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : '';
1432
1472
 
@@ -1449,7 +1489,7 @@
1449
1489
 
1450
1490
  if (titleCase) {
1451
1491
  result = result.replace(/(\w)(\S*)/g, function (_, i, r) {
1452
- var j = i.toUpperCase() + (r !== null ? r : "");
1492
+ var j = i.toUpperCase() + (r !== null ? r : '');
1453
1493
  return (Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0) ? j : j.toLowerCase();
1454
1494
  });
1455
1495
  }
@@ -1462,7 +1502,6 @@
1462
1502
  .replace(new RegExp('(^\\' + separator + '+|\\' + separator + '+$)', 'g'), '');
1463
1503
 
1464
1504
  if (truncate && result.length > truncate) {
1465
-
1466
1505
  lucky = result.charAt(truncate) === separator;
1467
1506
  result = result.slice(0, truncate);
1468
1507
 
@@ -1500,7 +1539,6 @@
1500
1539
  * @param {string} input string
1501
1540
  */
1502
1541
  var escapeChars = function escapeChars(input) {
1503
-
1504
1542
  return input.replace(/[-\\^$*+?.()|[\]{}\/]/g, '\\$&');
1505
1543
  };
1506
1544
 
@@ -1510,7 +1548,6 @@
1510
1548
  * @param {object} customReplacements custom translation map
1511
1549
  */
1512
1550
  var isReplacedCustomChar = function (ch, customReplacements) {
1513
-
1514
1551
  for (var c in customReplacements) {
1515
1552
  if (customReplacements[c] === ch) {
1516
1553
  return true;
@@ -1523,14 +1560,12 @@
1523
1560
  // export functions for use in Node
1524
1561
  module.exports = getSlug;
1525
1562
  module.exports.createSlug = createSlug;
1526
-
1527
1563
  } else if (typeof define !== 'undefined' && define.amd) {
1528
1564
 
1529
1565
  // export function for use in AMD
1530
1566
  define([], function () {
1531
1567
  return getSlug;
1532
1568
  });
1533
-
1534
1569
  } else {
1535
1570
 
1536
1571
  // don't overwrite global if exists
@@ -1542,6 +1577,5 @@
1542
1577
  root.createSlug = createSlug;
1543
1578
  }
1544
1579
  } catch (e) {}
1545
-
1546
1580
  }
1547
1581
  })(this);