tahamajs/IE / Projects /front /node_modules /@zxing /text-encoding /cjs /coders /utf-16 /UTF16Decoder.js
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| var encodings_1 = require("../../encoding/encodings"); | |
| var finished_1 = require("../../encoding/finished"); | |
| var terminology_1 = require("../../encoding/terminology"); | |
| var utilities_1 = require("../../encoding/utilities"); | |
| var converCodeUnitToBytes_1 = require("./converCodeUnitToBytes"); | |
| /** | |
| * @constructor | |
| * @implements {Decoder} | |
| * @param {boolean} utf16_be True if big-endian, false if little-endian. | |
| * @param {{fatal: boolean}} options | |
| */ | |
| var UTF16Decoder = /** @class */ (function () { | |
| function UTF16Decoder(utf16_be, options) { | |
| this.utf16_be = utf16_be; | |
| this.fatal = options.fatal; | |
| /** @type {?number} */ this.utf16_lead_byte = null; | |
| /** @type {?number} */ this.utf16_lead_surrogate = null; | |
| } | |
| /** | |
| * @param {Stream} stream The stream of bytes being decoded. | |
| * @param {number} bite The next byte read from the stream. | |
| * @return {?(number|!Array.<number>)} The next code point(s) | |
| * decoded, or null if not enough data exists in the input | |
| * stream to decode a complete code point. | |
| */ | |
| UTF16Decoder.prototype.handler = function (stream, bite) { | |
| // 1. If byte is end-of-stream and either utf-16 lead byte or | |
| // utf-16 lead surrogate is not null, set utf-16 lead byte and | |
| // utf-16 lead surrogate to null, and return error. | |
| if (bite === terminology_1.end_of_stream && (this.utf16_lead_byte !== null || | |
| this.utf16_lead_surrogate !== null)) { | |
| return encodings_1.decoderError(this.fatal); | |
| } | |
| // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 | |
| // lead surrogate are null, return finished. | |
| if (bite === terminology_1.end_of_stream && this.utf16_lead_byte === null && | |
| this.utf16_lead_surrogate === null) { | |
| return finished_1.finished; | |
| } | |
| // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte | |
| // and return continue. | |
| if (this.utf16_lead_byte === null) { | |
| this.utf16_lead_byte = bite; | |
| return null; | |
| } | |
| // 4. Let code unit be the result of: | |
| var code_unit; | |
| if (this.utf16_be) { | |
| // utf-16be decoder flag is set | |
| // (utf-16 lead byte << 8) + byte. | |
| code_unit = (this.utf16_lead_byte << 8) + bite; | |
| } | |
| else { | |
| // utf-16be decoder flag is unset | |
| // (byte << 8) + utf-16 lead byte. | |
| code_unit = (bite << 8) + this.utf16_lead_byte; | |
| } | |
| // Then set utf-16 lead byte to null. | |
| this.utf16_lead_byte = null; | |
| // 5. If utf-16 lead surrogate is not null, let lead surrogate | |
| // be utf-16 lead surrogate, set utf-16 lead surrogate to null, | |
| // and then run these substeps: | |
| if (this.utf16_lead_surrogate !== null) { | |
| var lead_surrogate = this.utf16_lead_surrogate; | |
| this.utf16_lead_surrogate = null; | |
| // 1. If code unit is in the range U+DC00 to U+DFFF, | |
| // inclusive, return a code point whose value is 0x10000 + | |
| // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). | |
| if (utilities_1.inRange(code_unit, 0xDC00, 0xDFFF)) { | |
| return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + | |
| (code_unit - 0xDC00); | |
| } | |
| // 2. Prepend the sequence resulting of converting code unit | |
| // to bytes using utf-16be decoder flag to stream and return | |
| // error. | |
| stream.prepend(converCodeUnitToBytes_1.convertCodeUnitToBytes(code_unit, this.utf16_be)); | |
| return encodings_1.decoderError(this.fatal); | |
| } | |
| // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, | |
| // set utf-16 lead surrogate to code unit and return continue. | |
| if (utilities_1.inRange(code_unit, 0xD800, 0xDBFF)) { | |
| this.utf16_lead_surrogate = code_unit; | |
| return null; | |
| } | |
| // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, | |
| // return error. | |
| if (utilities_1.inRange(code_unit, 0xDC00, 0xDFFF)) | |
| return encodings_1.decoderError(this.fatal); | |
| // 8. Return code point code unit. | |
| return code_unit; | |
| }; | |
| return UTF16Decoder; | |
| }()); | |
| exports.UTF16Decoder = UTF16Decoder; | |
| //# sourceMappingURL=UTF16Decoder.js.map |
Xet Storage Details
- Size:
- 4.44 kB
- Xet hash:
- b4b61abef0a436cedf8128ea30cce4ac22131baa01f6f2b4c8cfa1882fd17577
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.