1/* the slugify code is adapted from the urlify code of django, 2 * django/contrib/admin/static/admin/js/urlify.js. 3 */ 4 5const LATIN_MAP = { 6 'Ã': 'A', 7 'Ã': 'A', 8 'Ã': 'A', 9 'Ã': 'A', 10 'Ã': 'A', 11 'à ': 'A', 12 'Ã': 'AE', 13 'Ã': 'C', 14 'Ã': 'E', 15 'Ã': 'E', 16 'Ã': 'E', 17 'Ã': 'E', 18 'Ã': 'I', 19 'Ã': 'I', 20 'Ã': 'I', 21 'Ã': 'I', 22 'Ã': 'D', 23 'Ã': 'N', 24 'Ã': 'O', 25 'Ã': 'O', 26 'Ã': 'O', 27 'Ã': 'O', 28 'Ã': 'O', 29 'Å': 'O', 30 'Ã': 'O', 31 'Ã': 'U', 32 'Ã': 'U', 33 'Ã': 'U', 34 'Ã': 'U', 35 'Ű': 'U', 36 'Ã': 'Y', 37 'Ã': 'TH', 38 'Ÿ': 'Y', 39 'Ã': 'ss', 40 'à ': 'a', 41 'á': 'a', 42 'â': 'a', 43 'ã': 'a', 44 'ä': 'a', 45 'Ã¥': 'a', 46 'æ': 'ae', 47 'ç': 'c', 48 'è': 'e', 49 'é': 'e', 50 'ê': 'e', 51 'ë': 'e', 52 'ì': 'i', 53 'Ã': 'i', 54 'î': 'i', 55 'ï': 'i', 56 'ð': 'd', 57 'ñ': 'n', 58 'ò': 'o', 59 'ó': 'o', 60 'ô': 'o', 61 'õ': 'o', 62 'ö': 'o', 63 'Å': 'o', 64 'ø': 'o', 65 'ù': 'u', 66 'ú': 'u', 67 'û': 'u', 68 'ü': 'u', 69 'ű': 'u', 70 'ý': 'y', 71 'þ': 'th', 72 'ÿ': 'y', 73} 74const LATIN_SYMBOLS_MAP = { 75 '©': 'c', 'â¬': 'eur', 76} 77const GREEK_MAP = { 78 'α': 'a', 79 'β': 'b', 80 'γ': 'g', 81 'δ': 'd', 82 'ε': 'e', 83 'ζ': 'z', 84 'η': 'h', 85 'θ': '8', 86 'ι': 'i', 87 'κ': 'k', 88 'λ': 'l', 89 'μ': 'm', 90 'ν': 'n', 91 'ξ': '3', 92 'ο': 'o', 93 'Ï': 'p', 94 'Ï': 'r', 95 'Ï': 's', 96 'Ï': 't', 97 'Ï ': 'y', 98 'Ï': 'f', 99 'Ï': 'x', 100 'Ï': 'ps', 101 'Ï': 'w', 102 'ά': 'a', 103 'Î': 'e', 104 'ί': 'i', 105 'Ï': 'o', 106 'Ï': 'y', 107 'ή': 'h', 108 'Ï': 'w', 109 'Ï': 's', 110 'Ï': 'i', 111 'ΰ': 'y', 112 'Ï': 'y', 113 'Î': 'i', 114 'Î': 'A', 115 'Î': 'B', 116 'Î': 'G', 117 'Î': 'D', 118 'Î': 'E', 119 'Î': 'Z', 120 'Î': 'H', 121 'Î': '8', 122 'Î': 'I', 123 'Î': 'K', 124 'Î': 'L', 125 'Î': 'M', 126 'Î': 'N', 127 'Î': '3', 128 'Î': 'O', 129 'Î ': 'P', 130 'Ρ': 'R', 131 'Σ': 'S', 132 'Τ': 'T', 133 'Î¥': 'Y', 134 'Φ': 'F', 135 'Χ': 'X', 136 'Ψ': 'PS', 137 'Ω': 'W', 138 'Î': 'A', 139 'Î': 'E', 140 'Î': 'I', 141 'Î': 'O', 142 'Î': 'Y', 143 'Î': 'H', 144 'Î': 'W', 145 'Ϊ': 'I', 146 'Ϋ': 'Y', 147} 148const TURKISH_MAP = { 149 'Å': 's', 150 'Å': 'S', 151 'ı': 'i', 152 'İ': 'I', 153 'ç': 'c', 154 'Ã': 'C', 155 'ü': 'u', 156 'Ã': 'U', 157 'ö': 'o', 158 'Ã': 'O', 159 'Ä': 'g', 160 'Ä': 'G', 161} 162const RUSSIAN_MAP = { 163 'а': 'a', 164 'б': 'b', 165 'в': 'v', 166 'г': 'g', 167 'д': 'd', 168 'е': 'e', 169 'Ñ': 'yo', 170 'ж': 'zh', 171 'з': 'z', 172 'и': 'i', 173 'й': 'j', 174 'к': 'k', 175 'л': 'l', 176 'м': 'm', 177 'н': 'n', 178 'о': 'o', 179 'п': 'p', 180 'Ñ': 'r', 181 'Ñ': 's', 182 'Ñ': 't', 183 'Ñ': 'u', 184 'Ñ': 'f', 185 'Ñ ': 'h', 186 'Ñ': 'c', 187 'Ñ': 'ch', 188 'Ñ': 'sh', 189 'Ñ': 'sh', 190 'Ñ': '', 191 'Ñ': 'y', 192 'Ñ': '', 193 'Ñ': 'e', 194 'Ñ': 'yu', 195 'Ñ': 'ya', 196 'Ð': 'A', 197 'Ð': 'B', 198 'Ð': 'V', 199 'Ð': 'G', 200 'Ð': 'D', 201 'Ð': 'E', 202 'Ð': 'Yo', 203 'Ð': 'Zh', 204 'Ð': 'Z', 205 'Ð': 'I', 206 'Ð': 'J', 207 'Ð': 'K', 208 'Ð': 'L', 209 'Ð': 'M', 210 'Ð': 'N', 211 'Ð': 'O', 212 'Ð': 'P', 213 'Ð ': 'R', 214 'С': 'S', 215 'Т': 'T', 216 'У': 'U', 217 'Ф': 'F', 218 'Ð¥': 'H', 219 'Ц': 'C', 220 'Ч': 'Ch', 221 'Ш': 'Sh', 222 'Щ': 'Sh', 223 'Ъ': '', 224 'Ы': 'Y', 225 'Ь': '', 226 'Ð': 'E', 227 'Ю': 'Yu', 228 'Я': 'Ya', 229} 230const UKRAINIAN_MAP = { 231 'Ð': 'Ye', 'Ð': 'I', 'Ð': 'Yi', 'Ò': 'G', 'Ñ': 'ye', 'Ñ': 'i', 'Ñ': 'yi', 'Ò': 'g', 232} 233const CZECH_MAP = { 234 'Ä': 'c', 235 'Ä': 'd', 236 'Ä': 'e', 237 'Å': 'n', 238 'Å': 'r', 239 'Å¡': 's', 240 'Å¥': 't', 241 'ů': 'u', 242 'ž': 'z', 243 'Ä': 'C', 244 'Ä': 'D', 245 'Ä': 'E', 246 'Å': 'N', 247 'Å': 'R', 248 'Å ': 'S', 249 'Ť': 'T', 250 'Å®': 'U', 251 'Ž': 'Z', 252} 253const POLISH_MAP = { 254 'Ä ': 'a', 255 'Ä': 'c', 256 'Ä': 'e', 257 'Å': 'l', 258 'Å': 'n', 259 'ó': 'o', 260 'Å': 's', 261 'ź': 'z', 262 'ż': 'z', 263 'Ä': 'A', 264 'Ä': 'C', 265 'Ä': 'E', 266 'Å': 'L', 267 'Å': 'N', 268 'Ã': 'O', 269 'Å': 'S', 270 'Ź': 'Z', 271 'Å»': 'Z', 272} 273const LATVIAN_MAP = { 274 'Ä': 'a', 275 'Ä': 'c', 276 'Ä': 'e', 277 'Ä£': 'g', 278 'Ä«': 'i', 279 'Ä·': 'k', 280 'ļ': 'l', 281 'Å': 'n', 282 'Å¡': 's', 283 'Å«': 'u', 284 'ž': 'z', 285 'Ä': 'A', 286 'Ä': 'C', 287 'Ä': 'E', 288 'Ä¢': 'G', 289 'Ī': 'I', 290 'Ķ': 'K', 291 'Ä»': 'L', 292 'Å ': 'N', 293 'Å ': 'S', 294 'Ū': 'U', 295 'Ž': 'Z', 296} 297const ARABIC_MAP = { 298 'Ø£': 'a', 299 'ب': 'b', 300 'ت': 't', 301 'Ø«': 'th', 302 'ج': 'g', 303 'Ø': 'h', 304 'Ø®': 'kh', 305 'د': 'd', 306 'ذ': 'th', 307 'ر': 'r',
308 'ز': 'z', 309 'س': 's', 310 'Ø´': 'sh', 311 'ص': 's', 312 'ض': 'd', 313 'Ø·': 't', 314 'ظ': 'th', 315 'ع': 'aa', 316 'غ': 'gh', 317 'Ù': 'f', 318 'Ù': 'k', 319 'Ù': 'k', 320 'Ù': 'l', 321 'Ù ': 'm', 322 'Ù': 'n', 323 'Ù': 'h', 324 'Ù': 'o', 325 'Ù': 'y', 326} 327const LITHUANIAN_MAP = { 328 'Ä ': 'a', 329 'Ä': 'c', 330 'Ä': 'e', 331 'Ä': 'e', 332 'į': 'i', 333 'Å¡': 's', 334 'ų': 'u', 335 'Å«': 'u', 336 'ž': 'z', 337 'Ä': 'A', 338 'Ä': 'C', 339 'Ä': 'E', 340 'Ä': 'E', 341 'Ä®': 'I', 342 'Å ': 'S', 343 'Ų': 'U', 344 'Ū': 'U', 345 'Ž': 'Z', 346} 347const SERBIAN_MAP = { 348 'Ñ': 'dj', 349 'Ñ': 'j', 350 'Ñ': 'lj', 351 'Ñ': 'nj', 352 'Ñ': 'c', 353 'Ñ': 'dz', 354 'Ä': 'dj', 355 'Ð': 'Dj', 356 'Ð': 'j', 357 'Ð': 'Lj', 358 'Ð': 'Nj', 359 'Ð': 'C', 360 'Ð': 'Dz', 361 'Ä': 'Dj', 362} 363const AZERBAIJANI_MAP = { 364 'ç': 'c', 365 'É': 'e', 366 'Ä': 'g', 367 'ı': 'i', 368 'ö': 'o', 369 'Å': 's', 370 'ü': 'u', 371 'Ã': 'C', 372 'Æ': 'E', 373 'Ä': 'G', 374 'İ': 'I', 375 'Ã': 'O', 376 'Å': 'S', 377 'Ã': 'U', 378} 379 380const ALL_DOWNCODE_MAPS = [ 381 LATIN_MAP, 382 LATIN_SYMBOLS_MAP, 383 GREEK_MAP, 384 TURKISH_MAP, 385 RUSSIAN_MAP, 386 UKRAINIAN_MAP, 387 CZECH_MAP, 388 POLISH_MAP, 389 LATVIAN_MAP, 390 ARABIC_MAP, 391 LITHUANIAN_MAP, 392 SERBIAN_MAP, 393 AZERBAIJANI_MAP, 394] 395 396const Downcoder = { 397 'Initialize': function () { 398 if (Downcoder.map) { // already made 399 return 400 } 401 let k; let c 402 Downcoder.map = {} 403 Downcoder.chars = [] 404 for (let i = 0; i < ALL_DOWNCODE_MAPS.length; i++) { 405 const lookup = ALL_DOWNCODE_MAPS[i] 406 for (c in lookup) { 407 if (Object.prototype.hasOwnProperty.call(lookup, c)) { 408 Downcoder.map[c] = lookup[c] 409 } 410 } 411 } 412 for (k in Downcoder.map) { 413 if (Object.prototype.hasOwnProperty.call(Downcoder.map, k)) { 414 Downcoder.chars.push(k) 415 } 416 } 417 Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g') 418 }, 419} 420 421export function slugify (value) { 422 Downcoder.Initialize() 423 let s = value.replace(Downcoder.regex, function (m) { return Downcoder.map[m] }) 424 s = s.replace(/('|â)/g, ' ') // keep quotes as spaces 425 s = s.replace(/[^-\w\s]/g, '') // remove unneeded chars 426 s = s.trim() // trim leading/trailing spaces 427 s = s.replace(/[-\s]+/g, '-') // convert spaces to hyphens 428 s = s.toLowerCase() // convert to lowercase 429 return s 430}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.