UNPKG

@kayahr/text-encoding

Version:
53 lines 1.51 kB
/* * 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