dockerized_openAger/nodered/rootfs/data/node_modules/encoding-japanese/src/encoding-convert.js
2020-10-17 18:42:50 +02:00

1598 lines
34 KiB
JavaScript

var config = require('./config');
var util = require('./util');
var EncodingDetect = require('./encoding-detect');
var EncodingTable = require('./encoding-table');
/**
* JIS to SJIS
*/
function JISToSJIS(data) {
var results = [];
var index = 0;
var i = 0;
var len = data && data.length;
var b1, b2;
for (; i < len; i++) {
// escape sequence
while (data[i] === 0x1B) {
if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
(data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
index = 1;
} else if ((data[i + 1] === 0x28 && data[i + 2] === 0x49)) {
index = 2;
} else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
data[i + 3] === 0x44) {
index = 3;
i++;
} else {
index = 0;
}
i += 3;
if (data[i] === void 0) {
return results;
}
}
if (index === 1) {
b1 = data[i];
b2 = data[++i];
if (b1 & 0x01) {
b1 >>= 1;
if (b1 < 0x2F) {
b1 += 0x71;
} else {
b1 -= 0x4F;
}
if (b2 > 0x5F) {
b2 += 0x20;
} else {
b2 += 0x1F;
}
} else {
b1 >>= 1;
if (b1 <= 0x2F) {
b1 += 0x70;
} else {
b1 -= 0x50;
}
b2 += 0x7E;
}
results[results.length] = b1 & 0xFF;
results[results.length] = b2 & 0xFF;
} else if (index === 2) {
results[results.length] = data[i] + 0x80 & 0xFF;
} else if (index === 3) {
// Shift_JIS cannot convert JIS X 0212:1990.
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.JISToSJIS = JISToSJIS;
/**
* JIS to EUCJP
*/
function JISToEUCJP(data) {
var results = [];
var index = 0;
var len = data && data.length;
var i = 0;
for (; i < len; i++) {
// escape sequence
while (data[i] === 0x1B) {
if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
(data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
index = 1;
} else if ((data[i + 1] === 0x28 && data[i + 2] === 0x49)) {
index = 2;
} else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
data[i + 3] === 0x44) {
index = 3;
i++;
} else {
index = 0;
}
i += 3;
if (data[i] === void 0) {
return results;
}
}
if (index === 1) {
results[results.length] = data[i] + 0x80 & 0xFF;
results[results.length] = data[++i] + 0x80 & 0xFF;
} else if (index === 2) {
results[results.length] = 0x8E;
results[results.length] = data[i] + 0x80 & 0xFF;
} else if (index === 3) {
results[results.length] = 0x8F;
results[results.length] = data[i] + 0x80 & 0xFF;
results[results.length] = data[++i] + 0x80 & 0xFF;
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.JISToEUCJP = JISToEUCJP;
/**
* SJIS to JIS
*/
function SJISToJIS(data) {
var results = [];
var index = 0;
var len = data && data.length;
var i = 0;
var b1, b2;
var esc = [
0x1B, 0x28, 0x42,
0x1B, 0x24, 0x42,
0x1B, 0x28, 0x49
];
for (; i < len; i++) {
b1 = data[i];
if (b1 >= 0xA1 && b1 <= 0xDF) {
if (index !== 2) {
index = 2;
results[results.length] = esc[6];
results[results.length] = esc[7];
results[results.length] = esc[8];
}
results[results.length] = b1 - 0x80 & 0xFF;
} else if (b1 >= 0x80) {
if (index !== 1) {
index = 1;
results[results.length] = esc[3];
results[results.length] = esc[4];
results[results.length] = esc[5];
}
b1 <<= 1;
b2 = data[++i];
if (b2 < 0x9F) {
if (b1 < 0x13F) {
b1 -= 0xE1;
} else {
b1 -= 0x61;
}
if (b2 > 0x7E) {
b2 -= 0x20;
} else {
b2 -= 0x1F;
}
} else {
if (b1 < 0x13F) {
b1 -= 0xE0;
} else {
b1 -= 0x60;
}
b2 -= 0x7E;
}
results[results.length] = b1 & 0xFF;
results[results.length] = b2 & 0xFF;
} else {
if (index !== 0) {
index = 0;
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
results[results.length] = b1 & 0xFF;
}
}
if (index !== 0) {
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
return results;
}
exports.SJISToJIS = SJISToJIS;
/**
* SJIS to EUCJP
*/
function SJISToEUCJP(data) {
var results = [];
var len = data && data.length;
var i = 0;
var b1, b2;
for (; i < len; i++) {
b1 = data[i];
if (b1 >= 0xA1 && b1 <= 0xDF) {
results[results.length] = 0x8E;
results[results.length] = b1;
} else if (b1 >= 0x81) {
b2 = data[++i];
b1 <<= 1;
if (b2 < 0x9F) {
if (b1 < 0x13F) {
b1 -= 0x61;
} else {
b1 -= 0xE1;
}
if (b2 > 0x7E) {
b2 += 0x60;
} else {
b2 += 0x61;
}
} else {
if (b1 < 0x13F) {
b1 -= 0x60;
} else {
b1 -= 0xE0;
}
b2 += 0x02;
}
results[results.length] = b1 & 0xFF;
results[results.length] = b2 & 0xFF;
} else {
results[results.length] = b1 & 0xFF;
}
}
return results;
}
exports.SJISToEUCJP = SJISToEUCJP;
/**
* EUCJP to JIS
*/
function EUCJPToJIS(data) {
var results = [];
var index = 0;
var len = data && data.length;
var i = 0;
var b;
// escape sequence
var esc = [
0x1B, 0x28, 0x42,
0x1B, 0x24, 0x42,
0x1B, 0x28, 0x49,
0x1B, 0x24, 0x28, 0x44
];
for (; i < len; i++) {
b = data[i];
if (b === 0x8E) {
if (index !== 2) {
index = 2;
results[results.length] = esc[6];
results[results.length] = esc[7];
results[results.length] = esc[8];
}
results[results.length] = data[++i] - 0x80 & 0xFF;
} else if (b === 0x8F) {
if (index !== 3) {
index = 3;
results[results.length] = esc[9];
results[results.length] = esc[10];
results[results.length] = esc[11];
results[results.length] = esc[12];
}
results[results.length] = data[++i] - 0x80 & 0xFF;
results[results.length] = data[++i] - 0x80 & 0xFF;
} else if (b > 0x8E) {
if (index !== 1) {
index = 1;
results[results.length] = esc[3];
results[results.length] = esc[4];
results[results.length] = esc[5];
}
results[results.length] = b - 0x80 & 0xFF;
results[results.length] = data[++i] - 0x80 & 0xFF;
} else {
if (index !== 0) {
index = 0;
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
results[results.length] = b & 0xFF;
}
}
if (index !== 0) {
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
return results;
}
exports.EUCJPToJIS = EUCJPToJIS;
/**
* EUCJP to SJIS
*/
function EUCJPToSJIS(data) {
var results = [];
var len = data && data.length;
var i = 0;
var b1, b2;
for (; i < len; i++) {
b1 = data[i];
if (b1 === 0x8F) {
results[results.length] = config.UNKNOWN_CHARACTER;
i += 2;
} else if (b1 > 0x8E) {
b2 = data[++i];
if (b1 & 0x01) {
b1 >>= 1;
if (b1 < 0x6F) {
b1 += 0x31;
} else {
b1 += 0x71;
}
if (b2 > 0xDF) {
b2 -= 0x60;
} else {
b2 -= 0x61;
}
} else {
b1 >>= 1;
if (b1 <= 0x6F) {
b1 += 0x30;
} else {
b1 += 0x70;
}
b2 -= 0x02;
}
results[results.length] = b1 & 0xFF;
results[results.length] = b2 & 0xFF;
} else if (b1 === 0x8E) {
results[results.length] = data[++i] & 0xFF;
} else {
results[results.length] = b1 & 0xFF;
}
}
return results;
}
exports.EUCJPToSJIS = EUCJPToSJIS;
/**
* SJIS To UTF-8
*/
function SJISToUTF8(data) {
config.init_JIS_TO_UTF8_TABLE();
var results = [];
var i = 0;
var len = data && data.length;
var b, b1, b2, u2, u3, jis, utf8;
for (; i < len; i++) {
b = data[i];
if (b >= 0xA1 && b <= 0xDF) {
b2 = b - 0x40;
u2 = 0xBC | ((b2 >> 6) & 0x03);
u3 = 0x80 | (b2 & 0x3F);
results[results.length] = 0xEF;
results[results.length] = u2 & 0xFF;
results[results.length] = u3 & 0xFF;
} else if (b >= 0x80) {
b1 = b << 1;
b2 = data[++i];
if (b2 < 0x9F) {
if (b1 < 0x13F) {
b1 -= 0xE1;
} else {
b1 -= 0x61;
}
if (b2 > 0x7E) {
b2 -= 0x20;
} else {
b2 -= 0x1F;
}
} else {
if (b1 < 0x13F) {
b1 -= 0xE0;
} else {
b1 -= 0x60;
}
b2 -= 0x7E;
}
b1 &= 0xFF;
jis = (b1 << 8) + b2;
utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
if (utf8 === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (utf8 < 0xFFFF) {
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
} else {
results[results.length] = utf8 >> 16 & 0xFF;
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
}
}
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.SJISToUTF8 = SJISToUTF8;
/**
* EUC-JP to UTF-8
*/
function EUCJPToUTF8(data) {
config.init_JIS_TO_UTF8_TABLE();
var results = [];
var i = 0;
var len = data && data.length;
var b, b2, u2, u3, j2, j3, jis, utf8;
for (; i < len; i++) {
b = data[i];
if (b === 0x8E) {
b2 = data[++i] - 0x40;
u2 = 0xBC | ((b2 >> 6) & 0x03);
u3 = 0x80 | (b2 & 0x3F);
results[results.length] = 0xEF;
results[results.length] = u2 & 0xFF;
results[results.length] = u3 & 0xFF;
} else if (b === 0x8F) {
j2 = data[++i] - 0x80;
j3 = data[++i] - 0x80;
jis = (j2 << 8) + j3;
utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];
if (utf8 === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (utf8 < 0xFFFF) {
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
} else {
results[results.length] = utf8 >> 16 & 0xFF;
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
}
}
} else if (b >= 0x80) {
jis = ((b - 0x80) << 8) + (data[++i] - 0x80);
utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
if (utf8 === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (utf8 < 0xFFFF) {
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
} else {
results[results.length] = utf8 >> 16 & 0xFF;
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
}
}
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.EUCJPToUTF8 = EUCJPToUTF8;
/**
* JIS to UTF-8
*/
function JISToUTF8(data) {
config.init_JIS_TO_UTF8_TABLE();
var results = [];
var index = 0;
var i = 0;
var len = data && data.length;
var b2, u2, u3, jis, utf8;
for (; i < len; i++) {
while (data[i] === 0x1B) {
if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
(data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
index = 1;
} else if (data[i + 1] === 0x28 && data[i + 2] === 0x49) {
index = 2;
} else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
data[i + 3] === 0x44) {
index = 3;
i++;
} else {
index = 0;
}
i += 3;
if (data[i] === void 0) {
return results;
}
}
if (index === 1) {
jis = (data[i] << 8) + data[++i];
utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
if (utf8 === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (utf8 < 0xFFFF) {
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
} else {
results[results.length] = utf8 >> 16 & 0xFF;
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
}
}
} else if (index === 2) {
b2 = data[i] + 0x40;
u2 = 0xBC | ((b2 >> 6) & 0x03);
u3 = 0x80 | (b2 & 0x3F);
results[results.length] = 0xEF;
results[results.length] = u2 & 0xFF;
results[results.length] = u3 & 0xFF;
} else if (index === 3) {
jis = (data[i] << 8) + data[++i];
utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];
if (utf8 === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (utf8 < 0xFFFF) {
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
} else {
results[results.length] = utf8 >> 16 & 0xFF;
results[results.length] = utf8 >> 8 & 0xFF;
results[results.length] = utf8 & 0xFF;
}
}
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.JISToUTF8 = JISToUTF8;
/**
* UTF-8 to SJIS
*/
function UTF8ToSJIS(data) {
var results = [];
var i = 0;
var len = data && data.length;
var b, b1, b2, utf8, jis;
for (; i < len; i++) {
b = data[i];
if (b >= 0x80) {
if (b <= 0xDF) {
// 2 bytes
utf8 = (b << 8) + data[++i];
} else {
// 3 bytes
utf8 = (b << 16) +
(data[++i] << 8) +
(data[++i] & 0xFF);
}
jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
if (jis === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
if (jis < 0xFF) {
results[results.length] = jis + 0x80;
} else {
if (jis > 0x10000) {
jis -= 0x10000;
}
b1 = jis >> 8;
b2 = jis & 0xFF;
if (b1 & 0x01) {
b1 >>= 1;
if (b1 < 0x2F) {
b1 += 0x71;
} else {
b1 -= 0x4F;
}
if (b2 > 0x5F) {
b2 += 0x20;
} else {
b2 += 0x1F;
}
} else {
b1 >>= 1;
if (b1 <= 0x2F) {
b1 += 0x70;
} else {
b1 -= 0x50;
}
b2 += 0x7E;
}
results[results.length] = b1 & 0xFF;
results[results.length] = b2 & 0xFF;
}
}
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.UTF8ToSJIS = UTF8ToSJIS;
/**
* UTF-8 to EUC-JP
*/
function UTF8ToEUCJP(data) {
var results = [];
var i = 0;
var len = data && data.length;
var b, utf8, jis;
for (; i < len; i++) {
b = data[i];
if (b >= 0x80) {
if (b <= 0xDF) {
utf8 = (data[i++] << 8) + data[i];
} else {
utf8 = (data[i++] << 16) +
(data[i++] << 8) +
(data[i] & 0xFF);
}
jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
if (jis === void 0) {
jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];
if (jis === void 0) {
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
results[results.length] = 0x8F;
results[results.length] = (jis >> 8) - 0x80 & 0xFF;
results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;
}
} else {
if (jis > 0x10000) {
jis -= 0x10000;
}
if (jis < 0xFF) {
results[results.length] = 0x8E;
results[results.length] = jis - 0x80 & 0xFF;
} else {
results[results.length] = (jis >> 8) - 0x80 & 0xFF;
results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;
}
}
} else {
results[results.length] = data[i] & 0xFF;
}
}
return results;
}
exports.UTF8ToEUCJP = UTF8ToEUCJP;
/**
* UTF-8 to JIS
*/
function UTF8ToJIS(data) {
var results = [];
var index = 0;
var len = data && data.length;
var i = 0;
var b, utf8, jis;
var esc = [
0x1B, 0x28, 0x42,
0x1B, 0x24, 0x42,
0x1B, 0x28, 0x49,
0x1B, 0x24, 0x28, 0x44
];
for (; i < len; i++) {
b = data[i];
if (b < 0x80) {
if (index !== 0) {
index = 0;
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
results[results.length] = b & 0xFF;
} else {
if (b <= 0xDF) {
utf8 = (data[i] << 8) + data[++i];
} else {
utf8 = (data[i] << 16) + (data[++i] << 8) + data[++i];
}
jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
if (jis === void 0) {
jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];
if (jis === void 0) {
if (index !== 0) {
index = 0;
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
results[results.length] = config.UNKNOWN_CHARACTER;
} else {
// JIS X 0212:1990
if (index !== 3) {
index = 3;
results[results.length] = esc[9];
results[results.length] = esc[10];
results[results.length] = esc[11];
results[results.length] = esc[12];
}
results[results.length] = jis >> 8 & 0xFF;
results[results.length] = jis & 0xFF;
}
} else {
if (jis > 0x10000) {
jis -= 0x10000;
}
if (jis < 0xFF) {
// Halfwidth Katakana
if (index !== 2) {
index = 2;
results[results.length] = esc[6];
results[results.length] = esc[7];
results[results.length] = esc[8];
}
results[results.length] = jis & 0xFF;
} else {
if (index !== 1) {
index = 1;
results[results.length] = esc[3];
results[results.length] = esc[4];
results[results.length] = esc[5];
}
results[results.length] = jis >> 8 & 0xFF;
results[results.length] = jis & 0xFF;
}
}
}
}
if (index !== 0) {
results[results.length] = esc[0];
results[results.length] = esc[1];
results[results.length] = esc[2];
}
return results;
}
exports.UTF8ToJIS = UTF8ToJIS;
/**
* UTF-16 (JavaScript Unicode array) to UTF-8
*/
function UNICODEToUTF8(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c, second;
for (; i < len; i++) {
c = data[i];
// high surrogate
if (c >= 0xD800 && c <= 0xDBFF && i + 1 < len) {
second = data[i + 1];
// low surrogate
if (second >= 0xDC00 && second <= 0xDFFF) {
c = (c - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
i++;
}
}
if (c < 0x80) {
results[results.length] = c;
} else if (c < 0x800) {
results[results.length] = 0xC0 | ((c >> 6) & 0x1F);
results[results.length] = 0x80 | (c & 0x3F);
} else if (c < 0x10000) {
results[results.length] = 0xE0 | ((c >> 12) & 0xF);
results[results.length] = 0x80 | ((c >> 6) & 0x3F);
results[results.length] = 0x80 | (c & 0x3F);
} else if (c < 0x200000) {
results[results.length] = 0xF0 | ((c >> 18) & 0xF);
results[results.length] = 0x80 | ((c >> 12) & 0x3F);
results[results.length] = 0x80 | ((c >> 6) & 0x3F);
results[results.length] = 0x80 | (c & 0x3F);
}
}
return results;
}
exports.UNICODEToUTF8 = UNICODEToUTF8;
/**
* UTF-8 to UTF-16 (JavaScript Unicode array)
*/
function UTF8ToUNICODE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var n, c, c2, c3, c4, code;
while (i < len) {
c = data[i++];
n = c >> 4;
if (n >= 0 && n <= 7) {
// 0xxx xxxx
code = c;
} else if (n === 12 || n === 13) {
// 110x xxxx
// 10xx xxxx
c2 = data[i++];
code = ((c & 0x1F) << 6) | (c2 & 0x3F);
} else if (n === 14) {
// 1110 xxxx
// 10xx xxxx
// 10xx xxxx
c2 = data[i++];
c3 = data[i++];
code = ((c & 0x0F) << 12) |
((c2 & 0x3F) << 6) |
(c3 & 0x3F);
} else if (n === 15) {
// 1111 0xxx
// 10xx xxxx
// 10xx xxxx
// 10xx xxxx
c2 = data[i++];
c3 = data[i++];
c4 = data[i++];
code = ((c & 0x7) << 18) |
((c2 & 0x3F) << 12) |
((c3 & 0x3F) << 6) |
(c4 & 0x3F);
}
if (code <= 0xFFFF) {
results[results.length] = code;
} else {
// Split in surrogate halves
code -= 0x10000;
results[results.length] = (code >> 10) + 0xD800; // High surrogate
results[results.length] = (code % 0x400) + 0xDC00; // Low surrogate
}
}
return results;
}
exports.UTF8ToUNICODE = UTF8ToUNICODE;
/**
* UTF-16 (JavaScript Unicode array) to UTF-16
*
* UTF-16BE (big-endian)
* Note: this function does not prepend the BOM by default.
*
* RFC 2781 4.3 Interpreting text labelled as UTF-16
* If the first two octets of the text is not 0xFE followed by
* 0xFF, and is not 0xFF followed by 0xFE, then the text SHOULD be
* interpreted as being big-endian.
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UNICODEToUTF16(data, options) {
var results;
if (options && options.bom) {
var optBom = options.bom;
if (!util.isString(optBom)) {
optBom = 'BE';
}
var bom, utf16;
if (optBom.charAt(0).toUpperCase() === 'B') {
// Big-endian
bom = [0xFE, 0xFF];
utf16 = UNICODEToUTF16BE(data);
} else {
// Little-endian
bom = [0xFF, 0xFE];
utf16 = UNICODEToUTF16LE(data);
}
results = [];
results[0] = bom[0];
results[1] = bom[1];
for (var i = 0, len = utf16.length; i < len; i++) {
results[results.length] = utf16[i];
}
} else {
// Without BOM: Convert as BE (SHOULD).
results = UNICODEToUTF16BE(data);
}
return results;
}
exports.UNICODEToUTF16 = UNICODEToUTF16;
/**
* UTF-16 (JavaScript Unicode array) to UTF-16BE
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UNICODEToUTF16BE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c;
while (i < len) {
c = data[i++];
if (c <= 0xFF) {
results[results.length] = 0;
results[results.length] = c;
} else if (c <= 0xFFFF) {
results[results.length] = c >> 8 & 0xFF;
results[results.length] = c & 0xFF;
}
}
return results;
}
exports.UNICODEToUTF16BE = UNICODEToUTF16BE;
/**
* UTF-16 (JavaScript Unicode array) to UTF-16LE
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UNICODEToUTF16LE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c;
while (i < len) {
c = data[i++];
if (c <= 0xFF) {
results[results.length] = c;
results[results.length] = 0;
} else if (c <= 0xFFFF) {
results[results.length] = c & 0xFF;
results[results.length] = c >> 8 & 0xFF;
}
}
return results;
}
exports.UNICODEToUTF16LE = UNICODEToUTF16LE;
/**
* UTF-16BE to UTF-16 (JavaScript Unicode array)
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UTF16BEToUNICODE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c1, c2;
if (len >= 2 &&
((data[0] === 0xFE && data[1] === 0xFF) ||
(data[0] === 0xFF && data[1] === 0xFE))
) {
i = 2;
}
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (c1 === 0) {
results[results.length] = c2;
} else {
results[results.length] = ((c1 & 0xFF) << 8) | (c2 & 0xFF);
}
}
return results;
}
exports.UTF16BEToUNICODE = UTF16BEToUNICODE;
/**
* UTF-16LE to UTF-16 (JavaScript Unicode array)
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UTF16LEToUNICODE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c1, c2;
if (len >= 2 &&
((data[0] === 0xFE && data[1] === 0xFF) ||
(data[0] === 0xFF && data[1] === 0xFE))
) {
i = 2;
}
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (c2 === 0) {
results[results.length] = c1;
} else {
results[results.length] = ((c2 & 0xFF) << 8) | (c1 & 0xFF);
}
}
return results;
}
exports.UTF16LEToUNICODE = UTF16LEToUNICODE;
/**
* UTF-16 to UTF-16 (JavaScript Unicode array)
*
* @link https://www.ietf.org/rfc/rfc2781.txt
* UTF-16, an encoding of ISO 10646
*/
function UTF16ToUNICODE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var isLE = false;
var first = true;
var c1, c2;
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (first && i === 2) {
first = false;
if (c1 === 0xFE && c2 === 0xFF) {
isLE = false;
} else if (c1 === 0xFF && c2 === 0xFE) {
// Little-endian
isLE = true;
} else {
isLE = EncodingDetect.isUTF16LE(data);
i = 0;
}
continue;
}
if (isLE) {
if (c2 === 0) {
results[results.length] = c1;
} else {
results[results.length] = ((c2 & 0xFF) << 8) | (c1 & 0xFF);
}
} else {
if (c1 === 0) {
results[results.length] = c2;
} else {
results[results.length] = ((c1 & 0xFF) << 8) | (c2 & 0xFF);
}
}
}
return results;
}
exports.UTF16ToUNICODE = UTF16ToUNICODE;
/**
* UTF-16 to UTF-16BE
*/
function UTF16ToUTF16BE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var isLE = false;
var first = true;
var c1, c2;
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (first && i === 2) {
first = false;
if (c1 === 0xFE && c2 === 0xFF) {
isLE = false;
} else if (c1 === 0xFF && c2 === 0xFE) {
// Little-endian
isLE = true;
} else {
isLE = EncodingDetect.isUTF16LE(data);
i = 0;
}
continue;
}
if (isLE) {
results[results.length] = c2;
results[results.length] = c1;
} else {
results[results.length] = c1;
results[results.length] = c2;
}
}
return results;
}
exports.UTF16ToUTF16BE = UTF16ToUTF16BE;
/**
* UTF-16BE to UTF-16
*/
function UTF16BEToUTF16(data, options) {
var isLE = false;
var bom;
if (options && options.bom) {
var optBom = options.bom;
if (!util.isString(optBom)) {
optBom = 'BE';
}
if (optBom.charAt(0).toUpperCase() === 'B') {
// Big-endian
bom = [0xFE, 0xFF];
} else {
// Little-endian
bom = [0xFF, 0xFE];
isLE = true;
}
}
var results = [];
var len = data && data.length;
var i = 0;
if (len >= 2 &&
((data[0] === 0xFE && data[1] === 0xFF) ||
(data[0] === 0xFF && data[1] === 0xFE))
) {
i = 2;
}
if (bom) {
results[0] = bom[0];
results[1] = bom[1];
}
var c1, c2;
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (isLE) {
results[results.length] = c2;
results[results.length] = c1;
} else {
results[results.length] = c1;
results[results.length] = c2;
}
}
return results;
}
exports.UTF16BEToUTF16 = UTF16BEToUTF16;
/**
* UTF-16 to UTF-16LE
*/
function UTF16ToUTF16LE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var isLE = false;
var first = true;
var c1, c2;
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (first && i === 2) {
first = false;
if (c1 === 0xFE && c2 === 0xFF) {
isLE = false;
} else if (c1 === 0xFF && c2 === 0xFE) {
// Little-endian
isLE = true;
} else {
isLE = EncodingDetect.isUTF16LE(data);
i = 0;
}
continue;
}
if (isLE) {
results[results.length] = c1;
results[results.length] = c2;
} else {
results[results.length] = c2;
results[results.length] = c1;
}
}
return results;
}
exports.UTF16ToUTF16LE = UTF16ToUTF16LE;
/**
* UTF-16LE to UTF-16
*/
function UTF16LEToUTF16(data, options) {
var isLE = false;
var bom;
if (options && options.bom) {
var optBom = options.bom;
if (!util.isString(optBom)) {
optBom = 'BE';
}
if (optBom.charAt(0).toUpperCase() === 'B') {
// Big-endian
bom = [0xFE, 0xFF];
} else {
// Little-endian
bom = [0xFF, 0xFE];
isLE = true;
}
}
var results = [];
var len = data && data.length;
var i = 0;
if (len >= 2 &&
((data[0] === 0xFE && data[1] === 0xFF) ||
(data[0] === 0xFF && data[1] === 0xFE))
) {
i = 2;
}
if (bom) {
results[0] = bom[0];
results[1] = bom[1];
}
var c1, c2;
while (i < len) {
c1 = data[i++];
c2 = data[i++];
if (isLE) {
results[results.length] = c1;
results[results.length] = c2;
} else {
results[results.length] = c2;
results[results.length] = c1;
}
}
return results;
}
exports.UTF16LEToUTF16 = UTF16LEToUTF16;
/**
* UTF-16BE to UTF-16LE
*/
function UTF16BEToUTF16LE(data) {
var results = [];
var i = 0;
var len = data && data.length;
var c1, c2;
if (len >= 2 &&
((data[0] === 0xFE && data[1] === 0xFF) ||
(data[0] === 0xFF && data[1] === 0xFE))
) {
i = 2;
}
while (i < len) {
c1 = data[i++];
c2 = data[i++];
results[results.length] = c2;
results[results.length] = c1;
}
return results;
}
exports.UTF16BEToUTF16LE = UTF16BEToUTF16LE;
/**
* UTF-16LE to UTF-16BE
*/
function UTF16LEToUTF16BE(data) {
return UTF16BEToUTF16LE(data);
}
exports.UTF16LEToUTF16BE = UTF16LEToUTF16BE;
/**
* UTF-16 (JavaScript Unicode array) to JIS
*/
function UNICODEToJIS(data) {
return UTF8ToJIS(UNICODEToUTF8(data));
}
exports.UNICODEToJIS = UNICODEToJIS;
/**
* JIS to UTF-16 (JavaScript Unicode array)
*/
function JISToUNICODE(data) {
return UTF8ToUNICODE(JISToUTF8(data));
}
exports.JISToUNICODE = JISToUNICODE;
/**
* UTF-16 (JavaScript Unicode array) to EUCJP
*/
function UNICODEToEUCJP(data) {
return UTF8ToEUCJP(UNICODEToUTF8(data));
}
exports.UNICODEToEUCJP = UNICODEToEUCJP;
/**
* EUCJP to UTF-16 (JavaScript Unicode array)
*/
function EUCJPToUNICODE(data) {
return UTF8ToUNICODE(EUCJPToUTF8(data));
}
exports.EUCJPToUNICODE = EUCJPToUNICODE;
/**
* UTF-16 (JavaScript Unicode array) to SJIS
*/
function UNICODEToSJIS(data) {
return UTF8ToSJIS(UNICODEToUTF8(data));
}
exports.UNICODEToSJIS = UNICODEToSJIS;
/**
* SJIS to UTF-16 (JavaScript Unicode array)
*/
function SJISToUNICODE(data) {
return UTF8ToUNICODE(SJISToUTF8(data));
}
exports.SJISToUNICODE = SJISToUNICODE;
/**
* UTF-8 to UTF-16
*/
function UTF8ToUTF16(data, options) {
return UNICODEToUTF16(UTF8ToUNICODE(data), options);
}
exports.UTF8ToUTF16 = UTF8ToUTF16;
/**
* UTF-16 to UTF-8
*/
function UTF16ToUTF8(data) {
return UNICODEToUTF8(UTF16ToUNICODE(data));
}
exports.UTF16ToUTF8 = UTF16ToUTF8;
/**
* UTF-8 to UTF-16BE
*/
function UTF8ToUTF16BE(data) {
return UNICODEToUTF16BE(UTF8ToUNICODE(data));
}
exports.UTF8ToUTF16BE = UTF8ToUTF16BE;
/**
* UTF-16BE to UTF-8
*/
function UTF16BEToUTF8(data) {
return UNICODEToUTF8(UTF16BEToUNICODE(data));
}
exports.UTF16BEToUTF8 = UTF16BEToUTF8;
/**
* UTF-8 to UTF-16LE
*/
function UTF8ToUTF16LE(data) {
return UNICODEToUTF16LE(UTF8ToUNICODE(data));
}
exports.UTF8ToUTF16LE = UTF8ToUTF16LE;
/**
* UTF-16LE to UTF-8
*/
function UTF16LEToUTF8(data) {
return UNICODEToUTF8(UTF16LEToUNICODE(data));
}
exports.UTF16LEToUTF8 = UTF16LEToUTF8;
/**
* JIS to UTF-16
*/
function JISToUTF16(data, options) {
return UTF8ToUTF16(JISToUTF8(data), options);
}
exports.JISToUTF16 = JISToUTF16;
/**
* UTF-16 to JIS
*/
function UTF16ToJIS(data) {
return UTF8ToJIS(UTF16ToUTF8(data));
}
exports.UTF16ToJIS = UTF16ToJIS;
/**
* JIS to UTF-16BE
*/
function JISToUTF16BE(data) {
return UTF8ToUTF16BE(JISToUTF8(data));
}
exports.JISToUTF16BE = JISToUTF16BE;
/**
* UTF-16BE to JIS
*/
function UTF16BEToJIS(data) {
return UTF8ToJIS(UTF16BEToUTF8(data));
}
exports.UTF16BEToJIS = UTF16BEToJIS;
/**
* JIS to UTF-16LE
*/
function JISToUTF16LE(data) {
return UTF8ToUTF16LE(JISToUTF8(data));
}
exports.JISToUTF16LE = JISToUTF16LE;
/**
* UTF-16LE to JIS
*/
function UTF16LEToJIS(data) {
return UTF8ToJIS(UTF16LEToUTF8(data));
}
exports.UTF16LEToJIS = UTF16LEToJIS;
/**
* EUC-JP to UTF-16
*/
function EUCJPToUTF16(data, options) {
return UTF8ToUTF16(EUCJPToUTF8(data), options);
}
exports.EUCJPToUTF16 = EUCJPToUTF16;
/**
* UTF-16 to EUC-JP
*/
function UTF16ToEUCJP(data) {
return UTF8ToEUCJP(UTF16ToUTF8(data));
}
exports.UTF16ToEUCJP = UTF16ToEUCJP;
/**
* EUC-JP to UTF-16BE
*/
function EUCJPToUTF16BE(data) {
return UTF8ToUTF16BE(EUCJPToUTF8(data));
}
exports.EUCJPToUTF16BE = EUCJPToUTF16BE;
/**
* UTF-16BE to EUC-JP
*/
function UTF16BEToEUCJP(data) {
return UTF8ToEUCJP(UTF16BEToUTF8(data));
}
exports.UTF16BEToEUCJP = UTF16BEToEUCJP;
/**
* EUC-JP to UTF-16LE
*/
function EUCJPToUTF16LE(data) {
return UTF8ToUTF16LE(EUCJPToUTF8(data));
}
exports.EUCJPToUTF16LE = EUCJPToUTF16LE;
/**
* UTF-16LE to EUC-JP
*/
function UTF16LEToEUCJP(data) {
return UTF8ToEUCJP(UTF16LEToUTF8(data));
}
exports.UTF16LEToEUCJP = UTF16LEToEUCJP;
/**
* SJIS to UTF-16
*/
function SJISToUTF16(data, options) {
return UTF8ToUTF16(SJISToUTF8(data), options);
}
exports.SJISToUTF16 = SJISToUTF16;
/**
* UTF-16 to SJIS
*/
function UTF16ToSJIS(data) {
return UTF8ToSJIS(UTF16ToUTF8(data));
}
exports.UTF16ToSJIS = UTF16ToSJIS;
/**
* SJIS to UTF-16BE
*/
function SJISToUTF16BE(data) {
return UTF8ToUTF16BE(SJISToUTF8(data));
}
exports.SJISToUTF16BE = SJISToUTF16BE;
/**
* UTF-16BE to SJIS
*/
function UTF16BEToSJIS(data) {
return UTF8ToSJIS(UTF16BEToUTF8(data));
}
exports.UTF16BEToSJIS = UTF16BEToSJIS;
/**
* SJIS to UTF-16LE
*/
function SJISToUTF16LE(data) {
return UTF8ToUTF16LE(SJISToUTF8(data));
}
exports.SJISToUTF16LE = SJISToUTF16LE;
/**
* UTF-16LE to SJIS
*/
function UTF16LEToSJIS(data) {
return UTF8ToSJIS(UTF16LEToUTF8(data));
}
exports.UTF16LEToSJIS = UTF16LEToSJIS;