all files / common/core/diacritics/ diacritics.ts

95% Statements 19/20
85.71% Branches 6/7
66.67% Functions 2/3
94.74% Lines 18/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45                                  6039× 6039× 6039× 6039× 6039× 285080× 285080× 285080×   285076×     6039×         6039×      
/*
 *  @license
 *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.
 *
 *  Use of this source code is governed by an Apache-2.0 license that can be
 *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE
 */
 
/**
 * Remove diacritics (accent and other marks) on characters, and dissociate double characters.
 * Based on the character map of http://lehelk.com/2011/05/06/script-to-remove-diacritics/
 * but per-character walk (improved performance).
 *
 * Licensed under WTFPL v2 http://sam.zoy.org/wtfpl/COPYING
 */
 
export class Diacritics {
    private static map = { 9398: 'A', 65313: 'A', 192: 'A', 193: 'A', 194: 'A', 7846: 'A', 7844: 'A', 7850: 'A', 7848: 'A', 195: 'A', 256: 'A', 258: 'A', 7856: 'A', 7854: 'A', 7860: 'A', 7858: 'A', 550: 'A', 480: 'A', 196: 'A', 478: 'A', 7842: 'A', 197: 'A', 506: 'A', 461: 'A', 512: 'A', 514: 'A', 7840: 'A', 7852: 'A', 7862: 'A', 7680: 'A', 260: 'A', 570: 'A', 11375: 'A', 42802: 'AA', 198: 'AE', 508: 'AE', 482: 'AE', 42804: 'AO', 42806: 'AU', 42808: 'AV', 42810: 'AV', 42812: 'AY', 9399: 'B', 65314: 'B', 7682: 'B', 7684: 'B', 7686: 'B', 579: 'B', 386: 'B', 385: 'B', 9400: 'C', 65315: 'C', 262: 'C', 264: 'C', 266: 'C', 268: 'C', 199: 'C', 7688: 'C', 391: 'C', 571: 'C', 42814: 'C', 9401: 'D', 65316: 'D', 7690: 'D', 270: 'D', 7692: 'D', 7696: 'D', 7698: 'D', 7694: 'D', 272: 'D', 395: 'D', 394: 'D', 393: 'D', 42873: 'D', 497: 'DZ', 452: 'DZ', 498: 'Dz', 453: 'Dz', 9402: 'E', 65317: 'E', 200: 'E', 201: 'E', 202: 'E', 7872: 'E', 7870: 'E', 7876: 'E', 7874: 'E', 7868: 'E', 274: 'E', 7700: 'E', 7702: 'E', 276: 'E', 278: 'E', 203: 'E', 7866: 'E', 282: 'E', 516: 'E', 518: 'E', 7864: 'E', 7878: 'E', 552: 'E', 7708: 'E', 280: 'E', 7704: 'E', 7706: 'E', 400: 'E', 398: 'E', 9403: 'F', 65318: 'F', 7710: 'F', 401: 'F', 42875: 'F', 9404: 'G', 65319: 'G', 500: 'G', 284: 'G', 7712: 'G', 286: 'G', 288: 'G', 486: 'G', 290: 'G', 484: 'G', 403: 'G', 42912: 'G', 42877: 'G', 42878: 'G', 9405: 'H', 65320: 'H', 292: 'H', 7714: 'H', 7718: 'H', 542: 'H', 7716: 'H', 7720: 'H', 7722: 'H', 294: 'H', 11367: 'H', 11381: 'H', 42893: 'H', 9406: 'I', 65321: 'I', 204: 'I', 205: 'I', 206: 'I', 296: 'I', 298: 'I', 300: 'I', 304: 'I', 207: 'I', 7726: 'I', 7880: 'I', 463: 'I', 520: 'I', 522: 'I', 7882: 'I', 302: 'I', 7724: 'I', 407: 'I', 9407: 'J', 65322: 'J', 308: 'J', 584: 'J', 9408: 'K', 65323: 'K', 7728: 'K', 488: 'K', 7730: 'K', 310: 'K', 7732: 'K', 408: 'K', 11369: 'K', 42816: 'K', 42818: 'K', 42820: 'K', 42914: 'K', 9409: 'L', 65324: 'L', 319: 'L', 313: 'L', 317: 'L', 7734: 'L', 7736: 'L', 315: 'L', 7740: 'L', 7738: 'L', 321: 'L', 573: 'L', 11362: 'L', 11360: 'L', 42824: 'L', 42822: 'L', 42880: 'L', 455: 'LJ', 456: 'Lj', 9410: 'M', 65325: 'M', 7742: 'M', 7744: 'M', 7746: 'M', 11374: 'M', 412: 'M', 9411: 'N', 65326: 'N', 504: 'N', 323: 'N', 209: 'N', 7748: 'N', 327: 'N', 7750: 'N', 325: 'N', 7754: 'N', 7752: 'N', 544: 'N', 413: 'N', 42896: 'N', 42916: 'N', 458: 'NJ', 459: 'Nj', 9412: 'O', 65327: 'O', 210: 'O', 211: 'O', 212: 'O', 7890: 'O', 7888: 'O', 7894: 'O', 7892: 'O', 213: 'O', 7756: 'O', 556: 'O', 7758: 'O', 332: 'O', 7760: 'O', 7762: 'O', 334: 'O', 558: 'O', 560: 'O', 214: 'O', 554: 'O', 7886: 'O', 336: 'O', 465: 'O', 524: 'O', 526: 'O', 416: 'O', 7900: 'O', 7898: 'O', 7904: 'O', 7902: 'O', 7906: 'O', 7884: 'O', 7896: 'O', 490: 'O', 492: 'O', 216: 'O', 510: 'O', 390: 'O', 415: 'O', 42826: 'O', 42828: 'O', 338: 'OE', 418: 'OI', 42830: 'OO', 546: 'OU', 9413: 'P', 65328: 'P', 7764: 'P', 7766: 'P', 420: 'P', 11363: 'P', 42832: 'P', 42834: 'P', 42836: 'P', 9414: 'Q', 65329: 'Q', 42838: 'Q', 42840: 'Q', 586: 'Q', 9415: 'R', 65330: 'R', 340: 'R', 7768: 'R', 344: 'R', 528: 'R', 530: 'R', 7770: 'R', 7772: 'R', 342: 'R', 7774: 'R', 588: 'R', 11364: 'R', 42842: 'R', 42918: 'R', 42882: 'R', 9416: 'S', 65331: 'S', 346: 'S', 7780: 'S', 348: 'S', 7776: 'S', 352: 'S', 7782: 'S', 7778: 'S', 7784: 'S', 536: 'S', 350: 'S', 11390: 'S', 42920: 'S', 42884: 'S', 7838: 'SS', 9417: 'T', 65332: 'T', 7786: 'T', 356: 'T', 7788: 'T', 538: 'T', 354: 'T', 7792: 'T', 7790: 'T', 358: 'T', 428: 'T', 430: 'T', 574: 'T', 42886: 'T', 42792: 'TZ', 9418: 'U', 65333: 'U', 217: 'U', 218: 'U', 219: 'U', 360: 'U', 7800: 'U', 362: 'U', 7802: 'U', 364: 'U', 220: 'U', 475: 'U', 471: 'U', 469: 'U', 473: 'U', 7910: 'U', 366: 'U', 368: 'U', 467: 'U', 532: 'U', 534: 'U', 431: 'U', 7914: 'U', 7912: 'U', 7918: 'U', 7916: 'U', 7920: 'U', 7908: 'U', 7794: 'U', 370: 'U', 7798: 'U', 7796: 'U', 580: 'U', 9419: 'V', 65334: 'V', 7804: 'V', 7806: 'V', 434: 'V', 42846: 'V', 581: 'V', 42848: 'VY', 9420: 'W', 65335: 'W', 7808: 'W', 7810: 'W', 372: 'W', 7814: 'W', 7812: 'W', 7816: 'W', 11378: 'W', 9421: 'X', 65336: 'X', 7818: 'X', 7820: 'X', 9422: 'Y', 65337: 'Y', 7922: 'Y', 221: 'Y', 374: 'Y', 7928: 'Y', 562: 'Y', 7822: 'Y', 376: 'Y', 7926: 'Y', 7924: 'Y', 435: 'Y', 590: 'Y', 7934: 'Y', 9423: 'Z', 65338: 'Z', 377: 'Z', 7824: 'Z', 379: 'Z', 381: 'Z', 7826: 'Z', 7828: 'Z', 437: 'Z', 548: 'Z', 11391: 'Z', 11371: 'Z', 42850: 'Z', 9424: 'a', 65345: 'a', 7834: 'a', 224: 'a', 225: 'a', 226: 'a', 7847: 'a', 7845: 'a', 7851: 'a', 7849: 'a', 227: 'a', 257: 'a', 259: 'a', 7857: 'a', 7855: 'a', 7861: 'a', 7859: 'a', 551: 'a', 481: 'a', 228: 'a', 479: 'a', 7843: 'a', 229: 'a', 507: 'a', 462: 'a', 513: 'a', 515: 'a', 7841: 'a', 7853: 'a', 7863: 'a', 7681: 'a', 261: 'a', 11365: 'a', 592: 'a', 42803: 'aa', 230: 'ae', 509: 'ae', 483: 'ae', 42805: 'ao', 42807: 'au', 42809: 'av', 42811: 'av', 42813: 'ay', 9425: 'b', 65346: 'b', 7683: 'b', 7685: 'b', 7687: 'b', 384: 'b', 387: 'b', 595: 'b', 9426: 'c', 65347: 'c', 263: 'c', 265: 'c', 267: 'c', 269: 'c', 231: 'c', 7689: 'c', 392: 'c', 572: 'c', 42815: 'c', 8580: 'c', 9427: 'd', 65348: 'd', 7691: 'd', 271: 'd', 7693: 'd', 7697: 'd', 7699: 'd', 7695: 'd', 273: 'd', 396: 'd', 598: 'd', 599: 'd', 42874: 'd', 499: 'dz', 454: 'dz', 9428: 'e', 65349: 'e', 232: 'e', 233: 'e', 234: 'e', 7873: 'e', 7871: 'e', 7877: 'e', 7875: 'e', 7869: 'e', 275: 'e', 7701: 'e', 7703: 'e', 277: 'e', 279: 'e', 235: 'e', 7867: 'e', 283: 'e', 517: 'e', 519: 'e', 7865: 'e', 7879: 'e', 553: 'e', 7709: 'e', 281: 'e', 7705: 'e', 7707: 'e', 583: 'e', 603: 'e', 477: 'e', 9429: 'f', 65350: 'f', 7711: 'f', 402: 'f', 42876: 'f', 9430: 'g', 65351: 'g', 501: 'g', 285: 'g', 7713: 'g', 287: 'g', 289: 'g', 487: 'g', 291: 'g', 485: 'g', 608: 'g', 42913: 'g', 7545: 'g', 42879: 'g', 9431: 'h', 65352: 'h', 293: 'h', 7715: 'h', 7719: 'h', 543: 'h', 7717: 'h', 7721: 'h', 7723: 'h', 7830: 'h', 295: 'h', 11368: 'h', 11382: 'h', 613: 'h', 405: 'hv', 9432: 'i', 65353: 'i', 236: 'i', 237: 'i', 238: 'i', 297: 'i', 299: 'i', 301: 'i', 239: 'i', 7727: 'i', 7881: 'i', 464: 'i', 521: 'i', 523: 'i', 7883: 'i', 303: 'i', 7725: 'i', 616: 'i', 305: 'i', 9433: 'j', 65354: 'j', 309: 'j', 496: 'j', 585: 'j', 9434: 'k', 65355: 'k', 7729: 'k', 489: 'k', 7731: 'k', 311: 'k', 7733: 'k', 409: 'k', 11370: 'k', 42817: 'k', 42819: 'k', 42821: 'k', 42915: 'k', 9435: 'l', 65356: 'l', 320: 'l', 314: 'l', 318: 'l', 7735: 'l', 7737: 'l', 316: 'l', 7741: 'l', 7739: 'l', 322: 'l', 410: 'l', 619: 'l', 11361: 'l', 42825: 'l', 42881: 'l', 42823: 'l', 457: 'lj', 9436: 'm', 65357: 'm', 7743: 'm', 7745: 'm', 7747: 'm', 625: 'm', 623: 'm', 9437: 'n', 65358: 'n', 505: 'n', 324: 'n', 241: 'n', 7749: 'n', 328: 'n', 7751: 'n', 326: 'n', 7755: 'n', 7753: 'n', 414: 'n', 626: 'n', 329: 'n', 42897: 'n', 42917: 'n', 460: 'nj', 9438: 'o', 65359: 'o', 242: 'o', 243: 'o', 244: 'o', 7891: 'o', 7889: 'o', 7895: 'o', 7893: 'o', 245: 'o', 7757: 'o', 557: 'o', 7759: 'o', 333: 'o', 7761: 'o', 7763: 'o', 335: 'o', 559: 'o', 561: 'o', 246: 'o', 555: 'o', 7887: 'o', 337: 'o', 466: 'o', 525: 'o', 527: 'o', 417: 'o', 7901: 'o', 7899: 'o', 7905: 'o', 7903: 'o', 7907: 'o', 7885: 'o', 7897: 'o', 491: 'o', 493: 'o', 248: 'o', 511: 'o', 596: 'o', 42827: 'o', 42829: 'o', 629: 'o', 339: 'oe', 630: 'oe', 419: 'oi', 547: 'ou', 42831: 'oo', 9439: 'p', 65360: 'p', 7765: 'p', 7767: 'p', 421: 'p', 7549: 'p', 42833: 'p', 42835: 'p', 42837: 'p', 9440: 'q', 65361: 'q', 587: 'q', 42839: 'q', 42841: 'q', 9441: 'r', 65362: 'r', 341: 'r', 7769: 'r', 345: 'r', 529: 'r', 531: 'r', 7771: 'r', 7773: 'r', 343: 'r', 7775: 'r', 589: 'r', 637: 'r', 42843: 'r', 42919: 'r', 42883: 'r', 9442: 's', 65363: 's', 347: 's', 7781: 's', 349: 's', 7777: 's', 353: 's', 7783: 's', 7779: 's', 7785: 's', 537: 's', 351: 's', 575: 's', 42921: 's', 42885: 's', 383: 's', 7835: 's', 223: 'ss', 9443: 't', 65364: 't', 7787: 't', 7831: 't', 357: 't', 7789: 't', 539: 't', 355: 't', 7793: 't', 7791: 't', 359: 't', 429: 't', 648: 't', 11366: 't', 42887: 't', 42793: 'tz', 9444: 'u', 65365: 'u', 249: 'u', 250: 'u', 251: 'u', 361: 'u', 7801: 'u', 363: 'u', 7803: 'u', 365: 'u', 252: 'u', 476: 'u', 472: 'u', 470: 'u', 474: 'u', 7911: 'u', 367: 'u', 369: 'u', 468: 'u', 533: 'u', 535: 'u', 432: 'u', 7915: 'u', 7913: 'u', 7919: 'u', 7917: 'u', 7921: 'u', 7909: 'u', 7795: 'u', 371: 'u', 7799: 'u', 7797: 'u', 649: 'u', 9445: 'v', 65366: 'v', 7805: 'v', 7807: 'v', 651: 'v', 42847: 'v', 652: 'v', 42849: 'vy', 9446: 'w', 65367: 'w', 7809: 'w', 7811: 'w', 373: 'w', 7815: 'w', 7813: 'w', 7832: 'w', 7817: 'w', 11379: 'w', 9447: 'x', 65368: 'x', 7819: 'x', 7821: 'x', 9448: 'y', 65369: 'y', 7923: 'y', 253: 'y', 375: 'y', 7929: 'y', 563: 'y', 7823: 'y', 255: 'y', 7927: 'y', 7833: 'y', 7925: 'y', 436: 'y', 591: 'y', 7935: 'y', 9449: 'z', 65370: 'z', 378: 'z', 7825: 'z', 380: 'z', 382: 'z', 7827: 'z', 7829: 'z', 438: 'z', 549: 'z', 576: 'z', 11372: 'z', 42851: 'z', 65296: '0', 8320: '0', 9450: '0', 8304: '0', 185: '1', 9332: '1', 8321: '1', 10102: '1', 9461: '1', 9352: '1', 9312: '1', 65297: '1', 178: '2', 10103: '2', 9333: '2', 65298: '2', 8322: '2', 9462: '2', 9313: '2', 9353: '2', 179: '3', 65299: '3', 9354: '3', 9334: '3', 8323: '3', 10104: '3', 9463: '3', 9314: '3', 9464: '4', 9315: '4', 9355: '4', 65300: '4', 8308: '4', 8324: '4', 10105: '4', 9335: '4', 9356: '5', 8325: '5', 9465: '5', 9336: '5', 10106: '5', 9316: '5', 65301: '5', 8309: '5', 9337: '6', 8310: '6', 65302: '6', 10107: '6', 8326: '6', 9317: '6', 9466: '6', 9357: '6', 65303: '7', 8311: '7', 10108: '7', 9467: '7', 9358: '7', 8327: '7', 9338: '7', 9318: '7', 9319: '8', 9359: '8', 9468: '8', 9339: '8', 8312: '8', 65304: '8', 10109: '8', 8328: '8', 9469: '9', 65305: '9', 9360: '9', 10110: '9', 9340: '9', 8329: '9', 9320: '9', 8313: '9', };
 
    public static remove = (str: string) => {
        const newStr = [] as string[];
        let alter = false;
        const length = (str && str.length) || 0;
        try {
            for (let i = 0; i < length; i++) {
                const c = str.charCodeAt(i);
                const replacement = (<any>Diacritics.map)[c];
                if (replacement) {
                    newStr.push(replacement);
                    alter = true;
                } else {
                    newStr.push(str.charAt(i));
                }
            }
            if (alter) {
                str = newStr.join('');
            }
        } catch (e) {
            alert(e);
        }
        return str;
    }
}