utf16-to-sjis
Version:
Tiny UTF-16 to Shift-JIS (CP932) converter.
59 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convert = void 0;
const table_1 = require("./table");
function convert(data) {
let arr;
if (typeof data == "string") {
let cps = [];
for (let i = 0; i < data.length; i++) {
cps.push(data.charCodeAt(i));
}
arr = cps;
}
else {
arr = data;
}
const buf = new ArrayBuffer(arr.length * 2);
const dv = new DataView(buf);
let wp = 0;
for (let i = 0; i < arr.length; i++) {
const code = arr[i];
if (code != null) {
let ch;
if (code < 0x80) {
ch = code & 0x7f;
}
else if (0xff61 <= code && code <= 0xff9f) {
ch = code - (0xfec0); // map 0xff61...0xff9f to hankaku kana 0xa1...0xdf.
}
else {
ch = table_1.UTF16_TO_SJIS[code];
}
if (ch != null) {
if (ch < 0x100) {
dv.setUint8(wp++, ch);
}
else if (ch < 0x10000) {
dv.setUint16(wp, ch);
wp += 2;
}
else {
dv.setUint8(wp++, 0x3f); // '?'
}
}
else {
if (code < 0x100) {
dv.setUint8(wp, 0x3f); // '?'
}
else {
dv.setUint16(wp, 0x8148); // '?'
wp += 2;
}
}
}
}
return new Uint8Array(buf, 0, wp);
}
exports.convert = convert;
//# sourceMappingURL=index.js.map