travel/admin/node_modules/unidecode/unidecode.js

671 lines
16 KiB
JavaScript

/**
* Unidecode takes UTF-8 data and tries to represent it in US-ASCII characters (i.e., the universally displayable characters between 0x00 and 0x7F).
* The representation is almost always an attempt at transliteration -- i.e., conveying, in Roman letters, the pronunciation expressed by the text in
* some other writing system.
*
* The tables used (in data) are converted from the tables provided in the perl library Text::Unidecode (http://search.cpan.org/dist/Text-Unidecode/lib/Text/Unidecode.pm)
* and are distributed under the perl license
*
* @author Francois-Guillaume Ribreau
*
* Based on the port of unidecode for php
*/
'use strict';
var tr = {};
var utf8_rx = /(?![\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})./g;
module.exports = function (str) {
return str.replace(utf8_rx, unidecode_internal_replace);
};
function unidecode_internal_replace(match) {
var utf16 = utf8_to_utf16(match);
if (utf16 > 0xFFFF) {
return '_';
} else {
var h = utf16 >> 8;
var l = utf16 & 0xFF;
// (18) 18 > h < 1e (30)
if (h > 24 && h < 30) return '';
//(d7) 215 > h < 249 (f9) no supported
if (h > 215 && h < 249) return '';
if (!tr[h]) {
switch (dec2hex(h)) {
case '00':
tr[h] = require('./data/x00');
break;
case '01':
tr[h] = require('./data/x01');
break;
case '02':
tr[h] = require('./data/x02');
break;
case '03':
tr[h] = require('./data/x03');
break;
case '04':
tr[h] = require('./data/x04');
break;
case '05':
tr[h] = require('./data/x05');
break;
case '06':
tr[h] = require('./data/x06');
break;
case '07':
tr[h] = require('./data/x07');
break;
case '09':
tr[h] = require('./data/x09');
break;
case '0a':
tr[h] = require('./data/x0a');
break;
case '0b':
tr[h] = require('./data/x0b');
break;
case '0c':
tr[h] = require('./data/x0c');
break;
case '0d':
tr[h] = require('./data/x0d');
break;
case '0e':
tr[h] = require('./data/x0e');
break;
case '0f':
tr[h] = require('./data/x0f');
break;
case '10':
tr[h] = require('./data/x10');
break;
case '11':
tr[h] = require('./data/x11');
break;
case '12':
tr[h] = require('./data/x12');
break;
case '13':
tr[h] = require('./data/x13');
break;
case '14':
tr[h] = require('./data/x14');
break;
case '15':
tr[h] = require('./data/x15');
break;
case '16':
tr[h] = require('./data/x16');
break;
case '17':
tr[h] = require('./data/x17');
break;
case '18':
tr[h] = require('./data/x18');
break;
case '1e':
tr[h] = require('./data/x1e');
break;
case '1f':
tr[h] = require('./data/x1f');
break;
case '20':
tr[h] = require('./data/x20');
break;
case '21':
tr[h] = require('./data/x21');
break;
case '22':
tr[h] = require('./data/x22');
break;
case '23':
tr[h] = require('./data/x23');
break;
case '24':
tr[h] = require('./data/x24');
break;
case '25':
tr[h] = require('./data/x25');
break;
case '26':
tr[h] = require('./data/x26');
break;
case '27':
tr[h] = require('./data/x27');
break;
case '28':
tr[h] = require('./data/x28');
break;
case '2e':
tr[h] = require('./data/x2e');
break;
case '2f':
tr[h] = require('./data/x2f');
break;
case '30':
tr[h] = require('./data/x30');
break;
case '31':
tr[h] = require('./data/x31');
break;
case '32':
tr[h] = require('./data/x32');
break;
case '33':
tr[h] = require('./data/x33');
break;
case '4d':
tr[h] = require('./data/x4d');
break;
case '4e':
tr[h] = require('./data/x4e');
break;
case '4f':
tr[h] = require('./data/x4f');
break;
case '50':
tr[h] = require('./data/x50');
break;
case '51':
tr[h] = require('./data/x51');
break;
case '52':
tr[h] = require('./data/x52');
break;
case '53':
tr[h] = require('./data/x53');
break;
case '54':
tr[h] = require('./data/x54');
break;
case '55':
tr[h] = require('./data/x55');
break;
case '56':
tr[h] = require('./data/x56');
break;
case '57':
tr[h] = require('./data/x57');
break;
case '58':
tr[h] = require('./data/x58');
break;
case '59':
tr[h] = require('./data/x59');
break;
case '5a':
tr[h] = require('./data/x5a');
break;
case '5b':
tr[h] = require('./data/x5b');
break;
case '5c':
tr[h] = require('./data/x5c');
break;
case '5d':
tr[h] = require('./data/x5d');
break;
case '5e':
tr[h] = require('./data/x5e');
break;
case '5f':
tr[h] = require('./data/x5f');
break;
case '60':
tr[h] = require('./data/x60');
break;
case '61':
tr[h] = require('./data/x61');
break;
case '62':
tr[h] = require('./data/x62');
break;
case '63':
tr[h] = require('./data/x63');
break;
case '64':
tr[h] = require('./data/x64');
break;
case '65':
tr[h] = require('./data/x65');
break;
case '66':
tr[h] = require('./data/x66');
break;
case '67':
tr[h] = require('./data/x67');
break;
case '68':
tr[h] = require('./data/x68');
break;
case '69':
tr[h] = require('./data/x69');
break;
case '6a':
tr[h] = require('./data/x6a');
break;
case '6b':
tr[h] = require('./data/x6b');
break;
case '6c':
tr[h] = require('./data/x6c');
break;
case '6d':
tr[h] = require('./data/x6d');
break;
case '6e':
tr[h] = require('./data/x6e');
break;
case '6f':
tr[h] = require('./data/x6f');
break;
case '70':
tr[h] = require('./data/x70');
break;
case '71':
tr[h] = require('./data/x71');
break;
case '72':
tr[h] = require('./data/x72');
break;
case '73':
tr[h] = require('./data/x73');
break;
case '74':
tr[h] = require('./data/x74');
break;
case '75':
tr[h] = require('./data/x75');
break;
case '76':
tr[h] = require('./data/x76');
break;
case '77':
tr[h] = require('./data/x77');
break;
case '78':
tr[h] = require('./data/x78');
break;
case '79':
tr[h] = require('./data/x79');
break;
case '7a':
tr[h] = require('./data/x7a');
break;
case '7b':
tr[h] = require('./data/x7b');
break;
case '7c':
tr[h] = require('./data/x7c');
break;
case '7d':
tr[h] = require('./data/x7d');
break;
case '7e':
tr[h] = require('./data/x7e');
break;
case '7f':
tr[h] = require('./data/x7f');
break;
case '80':
tr[h] = require('./data/x80');
break;
case '81':
tr[h] = require('./data/x81');
break;
case '82':
tr[h] = require('./data/x82');
break;
case '83':
tr[h] = require('./data/x83');
break;
case '84':
tr[h] = require('./data/x84');
break;
case '85':
tr[h] = require('./data/x85');
break;
case '86':
tr[h] = require('./data/x86');
break;
case '87':
tr[h] = require('./data/x87');
break;
case '88':
tr[h] = require('./data/x88');
break;
case '89':
tr[h] = require('./data/x89');
break;
case '8a':
tr[h] = require('./data/x8a');
break;
case '8b':
tr[h] = require('./data/x8b');
break;
case '8c':
tr[h] = require('./data/x8c');
break;
case '8d':
tr[h] = require('./data/x8d');
break;
case '8e':
tr[h] = require('./data/x8e');
break;
case '8f':
tr[h] = require('./data/x8f');
break;
case '90':
tr[h] = require('./data/x90');
break;
case '91':
tr[h] = require('./data/x91');
break;
case '92':
tr[h] = require('./data/x92');
break;
case '93':
tr[h] = require('./data/x93');
break;
case '94':
tr[h] = require('./data/x94');
break;
case '95':
tr[h] = require('./data/x95');
break;
case '96':
tr[h] = require('./data/x96');
break;
case '97':
tr[h] = require('./data/x97');
break;
case '98':
tr[h] = require('./data/x98');
break;
case '99':
tr[h] = require('./data/x99');
break;
case '9a':
tr[h] = require('./data/x9a');
break;
case '9b':
tr[h] = require('./data/x9b');
break;
case '9c':
tr[h] = require('./data/x9c');
break;
case '9d':
tr[h] = require('./data/x9d');
break;
case '9e':
tr[h] = require('./data/x9e');
break;
case '9f':
tr[h] = require('./data/x9f');
break;
case 'a0':
tr[h] = require('./data/xa0');
break;
case 'a1':
tr[h] = require('./data/xa1');
break;
case 'a2':
tr[h] = require('./data/xa2');
break;
case 'a3':
tr[h] = require('./data/xa3');
break;
case 'a4':
tr[h] = require('./data/xa4');
break;
case 'ac':
tr[h] = require('./data/xac');
break;
case 'ad':
tr[h] = require('./data/xad');
break;
case 'ae':
tr[h] = require('./data/xae');
break;
case 'af':
tr[h] = require('./data/xaf');
break;
case 'b0':
tr[h] = require('./data/xb0');
break;
case 'b1':
tr[h] = require('./data/xb1');
break;
case 'b2':
tr[h] = require('./data/xb2');
break;
case 'b3':
tr[h] = require('./data/xb3');
break;
case 'b4':
tr[h] = require('./data/xb4');
break;
case 'b5':
tr[h] = require('./data/xb5');
break;
case 'b6':
tr[h] = require('./data/xb6');
break;
case 'b7':
tr[h] = require('./data/xb7');
break;
case 'b8':
tr[h] = require('./data/xb8');
break;
case 'b9':
tr[h] = require('./data/xb9');
break;
case 'ba':
tr[h] = require('./data/xba');
break;
case 'bb':
tr[h] = require('./data/xbb');
break;
case 'bc':
tr[h] = require('./data/xbc');
break;
case 'bd':
tr[h] = require('./data/xbd');
break;
case 'be':
tr[h] = require('./data/xbe');
break;
case 'bf':
tr[h] = require('./data/xbf');
break;
case 'c0':
tr[h] = require('./data/xc0');
break;
case 'c1':
tr[h] = require('./data/xc1');
break;
case 'c2':
tr[h] = require('./data/xc2');
break;
case 'c3':
tr[h] = require('./data/xc3');
break;
case 'c4':
tr[h] = require('./data/xc4');
break;
case 'c5':
tr[h] = require('./data/xc5');
break;
case 'c6':
tr[h] = require('./data/xc6');
break;
case 'c7':
tr[h] = require('./data/xc7');
break;
case 'c8':
tr[h] = require('./data/xc8');
break;
case 'c9':
tr[h] = require('./data/xc9');
break;
case 'ca':
tr[h] = require('./data/xca');
break;
case 'cb':
tr[h] = require('./data/xcb');
break;
case 'cc':
tr[h] = require('./data/xcc');
break;
case 'cd':
tr[h] = require('./data/xcd');
break;
case 'ce':
tr[h] = require('./data/xce');
break;
case 'cf':
tr[h] = require('./data/xcf');
break;
case 'd0':
tr[h] = require('./data/xd0');
break;
case 'd1':
tr[h] = require('./data/xd1');
break;
case 'd2':
tr[h] = require('./data/xd2');
break;
case 'd3':
tr[h] = require('./data/xd3');
break;
case 'd4':
tr[h] = require('./data/xd4');
break;
case 'd5':
tr[h] = require('./data/xd5');
break;
case 'd6':
tr[h] = require('./data/xd6');
break;
case 'd7':
tr[h] = require('./data/xd7');
break;
case 'f9':
tr[h] = require('./data/xf9');
break;
case 'fa':
tr[h] = require('./data/xfa');
break;
case 'fb':
tr[h] = require('./data/xfb');
break;
case 'fc':
tr[h] = require('./data/xfc');
break;
case 'fd':
tr[h] = require('./data/xfd');
break;
case 'fe':
tr[h] = require('./data/xfe');
break;
case 'ff':
tr[h] = require('./data/xff');
break;
default:
// console.error("Unidecode file not found for h=", h);
return '';
}
}
return tr[h][l];
}
}
function dec2hex(i) {
return (i + 0x100).toString(16).substr(-2);
}
function utf8_to_utf16(raw) {
var b1, b2, b3, b4,
x, y, z;
while (Array.isArray(raw)) raw = raw[0];
switch (raw.length) {
case 1:
return ord(raw);
// http://en.wikipedia.org/wiki/UTF-8
case 2:
b1 = ord(raw.substr(0, 1));
b2 = ord(raw.substr(1, 1));
x = ((b1 & 0x03) << 6) | (b2 & 0x3F);
y = (b1 & 0x1C) >> 2;
return (y << 8) | x;
case 3:
b1 = ord(raw.substr(0, 1));
b2 = ord(raw.substr(1, 1));
b3 = ord(raw.substr(2, 1));
x = ((b2 & 0x03) << 6) | (b3 & 0x3F);
y = ((b1 & 0x0F) << 4) | ((b2 & 0x3C) >> 2);
return (y << 8) | x;
default:
b1 = ord(raw.substr(0, 1));
b2 = ord(raw.substr(1, 1));
b3 = ord(raw.substr(2, 1));
b4 = ord(raw.substr(3, 1));
x = ((b3 & 0x03) << 6) | (b4 & 0x3F);
y = ((b2 & 0x0F) << 4) | ((b3 & 0x3C) >> 2);
z = ((b1 & 0x07) << 5) | ((b2 & 0x30) >> 4);
return (z << 16) | (y << 8) | x;
}
}
/* From php.js */
function ord(string) {
// Returns the codepoint value of a character
//
// version: 1109.2015
// discuss at: http://phpjs.org/functions/ord
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// + improved by: Brett Zamir (http://brett-zamir.me)
// + input by: incidence
// * example 1: ord('K');
// * returns 1: 75
// * example 2: ord('\uD800\uDC00'); // surrogate pair to create a single Unicode character
// * returns 2: 65536
var str = string + '',
code = str.charCodeAt(0);
if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)
var hi = code;
if (str.length === 1) {
return code; // This is just a high surrogate with no following low surrogate, so we return its value;
// we could also throw an error as it is not a complete character, but someone may want to know
}
var low = str.charCodeAt(1);
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
}
if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
return code; // This is just a low surrogate with no preceding high surrogate, so we return its value;
// we could also throw an error as it is not a complete character, but someone may want to know
}
return code;
}