@kayahr/text-encoding
Version:
Text encoder and decoder
53 lines • 1.51 kB
JavaScript
/*
* Copyright (C) 2021 Klaus Reimer <k@ailis.de>
* See LICENSE.md for licensing information.
*/
import { AbstractEncoder } from "../AbstractEncoder.js";
import { END_OF_BUFFER } from "../ByteBuffer.js";
import { FINISHED } from "../constants.js";
import { convertCodeUnitToBytes, inRange } from "../util.js";
/**
* Base class for utf-16 encoders.
*/
export class UTF16Encoder extends AbstractEncoder {
bigEndian;
/**
* @param bigEndian - True for utf-16be, false for utf-16le
*/
constructor(bigEndian) {
super();
this.bigEndian = bigEndian;
}
/** @inheritdoc */
encode(buffer) {
const codePoint = buffer.read();
if (codePoint === END_OF_BUFFER) {
return FINISHED;
}
if (inRange(codePoint, 0x0000, 0xFFFF)) {
return convertCodeUnitToBytes(codePoint, this.bigEndian);
}
const lead = convertCodeUnitToBytes(((codePoint - 0x10000) >> 10) + 0xD800, this.bigEndian);
const trail = convertCodeUnitToBytes(((codePoint - 0x10000) & 0x3FF) + 0xDC00, this.bigEndian);
return lead.concat(trail);
}
}
/**
* Encoder for utf-16le encoding.
*/
export class UTF16LEEncoder extends UTF16Encoder {
/** @inheritdoc */
constructor() {
super(false);
}
}
/**
* Encoder for utf-16be encoding.
*/
export class UTF16BEEncoder extends UTF16Encoder {
/** @inheritdoc */
constructor() {
super(true);
}
}
//# sourceMappingURL=UTF16Encoder.js.map