Initial commit - Dutchie dispensary scraper

This commit is contained in:
Kelly
2025-11-28 19:45:44 -07:00
commit 5757a8e9bd
23375 changed files with 3788799 additions and 0 deletions

237
backend/node_modules/@zxing/text-encoding/LICENSE.md generated vendored Normal file
View File

@@ -0,0 +1,237 @@
The encoding indexes, algorithms, and many comments in the code
derive from the Encoding Standard https://encoding.spec.whatwg.org/
Otherwise, the code of this repository is released under the Unlicense
license and is also dual-licensed under an Apache 2.0 license. Both
are included below.
# Unlicense
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
# Apache 2.0 License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

145
backend/node_modules/@zxing/text-encoding/README.md generated vendored Normal file
View File

@@ -0,0 +1,145 @@
text-encoding
==============
This is a fork of https://github.com/inexorabletash/text-encoding, which
has been marked as deprecated in the npm registry.
```
npm info text-encoding
text-encoding@0.7.0 | (Unlicense OR Apache-2.0) | deps: none | versions: 11
Polyfill for the Encoding Living Standard's API.
https://github.com/inexorabletash/text-encoding
DEPRECATED ⚠️ - no longer maintained
keywords: encoding, decoding, living standard
dist
.tarball: https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz
.shasum: f895e836e45990624086601798ea98e8f36ee643
.integrity: sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==
.unpackedSize: 649.6 kB
maintainers:
- inexorabletash <inexorabletash@gmail.com>
dist-tags:
latest: 0.7.0
published a year ago by inexorabletash <inexorabletash@gmail.com>
```
This fork is published as `@zxing/text-encoding` and will be available as long
as it is in use by `@zxing` packages.
<hr />
This is a polyfill for the [Encoding Living
Standard](https://encoding.spec.whatwg.org/) API for the Web, allowing
encoding and decoding of textual data to and from Typed Array buffers
for binary data in JavaScript.
By default it adheres to the spec and does not support *encoding* to
legacy encodings, only *decoding*. It is also implemented to match the
specification's algorithms, rather than for performance. The intended
use is within Web pages, so it has no dependency on server frameworks
or particular module schemes.
Basic examples and tests are included.
### Install ###
There are a few ways you can get and use the `@zxing/text-encoding` library.
### HTML Page Usage ###
Clone the repo and include the files directly:
```html
<!-- Required for non-UTF encodings -->
<script src="encoding-indexes.js"></script>
<script src="encoding.js"></script>
```
This is the only use case the developer cares about. If you want those
fancy module and/or package manager things that are popular these days
you should probably use a different library.
#### Package Managers ####
The package is published to **npm** as `@zxing/text-encoding`.
Use through these is not really supported, since they aren't used by
the developer of the library. Using `require()` in interesting ways
probably breaks. Patches welcome, as long as they don't break the
basic use of the files via `<script>`.
### API Overview ###
Basic Usage
```js
var uint8array = new TextEncoder().encode(string);
var string = new TextDecoder(encoding).decode(uint8array);
```
Streaming Decode
```js
var string = "", decoder = new TextDecoder(encoding), buffer;
while (buffer = next_chunk()) {
string += decoder.decode(buffer, {stream:true});
}
string += decoder.decode(); // finish the stream
```
### Encodings ###
All encodings from the Encoding specification are supported:
utf-8 ibm866 iso-8859-2 iso-8859-3 iso-8859-4 iso-8859-5 iso-8859-6
iso-8859-7 iso-8859-8 iso-8859-8-i iso-8859-10 iso-8859-13 iso-8859-14
iso-8859-15 iso-8859-16 koi8-r koi8-u macintosh windows-874
windows-1250 windows-1251 windows-1252 windows-1253 windows-1254
windows-1255 windows-1256 windows-1257 windows-1258 x-mac-cyrillic
gb18030 hz-gb-2312 big5 euc-jp iso-2022-jp shift_jis euc-kr
replacement utf-16be utf-16le x-user-defined
(Some encodings may be supported under other names, e.g. ascii,
iso-8859-1, etc. See [Encoding](https://encoding.spec.whatwg.org/) for
additional labels for each encoding.)
Encodings other than **utf-8**, **utf-16le** and **utf-16be** require
an additional `encoding-indexes.js` file to be included. It is rather
large (596kB uncompressed, 188kB gzipped); portions may be deleted if
support for some encodings is not required.
### Non-Standard Behavior ###
As required by the specification, only encoding to **utf-8** is
supported. If you want to try it out, you can force a non-standard
behavior by passing the `NONSTANDARD_allowLegacyEncoding` option to
TextEncoder and a label. For example:
```js
var uint8array = new TextEncoder(
'windows-1252', { NONSTANDARD_allowLegacyEncoding: true }).encode(text);
```
But note that the above won't work if you're using the polyfill in a
browser that natively supports the TextEncoder API natively, since the
polyfill won't be used!
You can force the polyfill to be used by using this before the polyfill:
```html
<script>
window.TextEncoder = window.TextDecoder = null;
</script>
```
To support the legacy encodings (which may be stateful), the
TextEncoder `encode()` method accepts an optional dictionary and
`stream` option, e.g. `encoder.encode(string, {stream: true});` This
is not needed for standard encoding since the input is always in
complete code points.

View File

@@ -0,0 +1,21 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class Big5Decoder {
readonly fatal: boolean;
Big5_lead: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,97 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var Big5Decoder = /** @class */ (function () {
function Big5Decoder(options) {
this.fatal = options.fatal;
// Big5's decoder has an associated Big5 lead (initially 0x00).
/** @type {number} */ this.Big5_lead = 0x00;
}
/**
* @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.
*/
Big5Decoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and Big5 lead is not 0x00, set
// Big5 lead to 0x00 and return error.
if (bite === terminology_1.end_of_stream && this.Big5_lead !== 0x00) {
this.Big5_lead = 0x00;
return encodings_1.decoderError(this.fatal);
}
// 2. If byte is end-of-stream and Big5 lead is 0x00, return
// finished.
if (bite === terminology_1.end_of_stream && this.Big5_lead === 0x00)
return finished_1.finished;
// 3. If Big5 lead is not 0x00, let lead be Big5 lead, let
// pointer be null, set Big5 lead to 0x00, and then run these
// substeps:
if (this.Big5_lead !== 0x00) {
var lead = this.Big5_lead;
var pointer = null;
this.Big5_lead = 0x00;
// 1. Let offset be 0x40 if byte is less than 0x7F and 0x62
// otherwise.
var offset = bite < 0x7F ? 0x40 : 0x62;
// 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1
// to 0xFE, inclusive, set pointer to (lead 0x81) × 157 +
// (byte offset).
if (utilities_1.inRange(bite, 0x40, 0x7E) || utilities_1.inRange(bite, 0xA1, 0xFE))
pointer = (lead - 0x81) * 157 + (bite - offset);
// 3. If there is a row in the table below whose first column
// is pointer, return the two code points listed in its second
// column
// Pointer | Code points
// --------+--------------
// 1133 | U+00CA U+0304
// 1135 | U+00CA U+030C
// 1164 | U+00EA U+0304
// 1166 | U+00EA U+030C
switch (pointer) {
case 1133: return [0x00CA, 0x0304];
case 1135: return [0x00CA, 0x030C];
case 1164: return [0x00EA, 0x0304];
case 1166: return [0x00EA, 0x030C];
}
// 4. Let code point be null if pointer is null and the index
// code point for pointer in index Big5 otherwise.
var code_point = (pointer === null) ? null :
indexes_1.indexCodePointFor(pointer, indexes_1.index('big5'));
// 5. If code point is null and byte is an ASCII byte, prepend
// byte to stream.
if (code_point === null && terminology_1.isASCIIByte(bite))
stream.prepend(bite);
// 6. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 7. Return a code point whose value is code point.
return code_point;
}
// 4. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5
// lead to byte and return continue.
if (utilities_1.inRange(bite, 0x81, 0xFE)) {
this.Big5_lead = bite;
return null;
}
// 6. Return error.
return encodings_1.decoderError(this.fatal);
};
return Big5Decoder;
}());
exports.Big5Decoder = Big5Decoder;
//# sourceMappingURL=Big5Decoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Big5Decoder.js","sourceRoot":"","sources":["../../../../src/coders/big5/Big5Decoder.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class Big5Encoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,50 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var Big5Encoder = /** @class */ (function () {
function Big5Encoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
Big5Encoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. Let pointer be the index Big5 pointer for code point.
var pointer = indexes_1.indexBig5PointerFor(code_point);
// 4. If pointer is null, return error with code point.
if (pointer === null)
return encodings_1.encoderError(code_point);
// 5. Let lead be Math.floor(pointer / 157) + 0x81.
var lead = Math.floor(pointer / 157) + 0x81;
// 6. If lead is less than 0xA1, return error with code point.
if (lead < 0xA1)
return encodings_1.encoderError(code_point);
// 7. Let trail be pointer % 157.
var trail = pointer % 157;
// 8. Let offset be 0x40 if trail is less than 0x3F and 0x62
// otherwise.
var offset = trail < 0x3F ? 0x40 : 0x62;
// Return two bytes whose values are lead and trail + offset.
return [lead, trail + offset];
};
return Big5Encoder;
}());
exports.Big5Encoder = Big5Encoder;
//# sourceMappingURL=Big5Encoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Big5Encoder.js","sourceRoot":"","sources":["../../../../src/coders/big5/Big5Encoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAA6D;AAC7D,0DAA6E;AAE7E;;;;KAIK;AACL;IAIE,qBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,6BAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,2DAA2D;QAC3D,IAAM,OAAO,GAAG,6BAAmB,CAAC,UAAU,CAAC,CAAC;QAEhD,uDAAuD;QACvD,IAAI,OAAO,KAAK,IAAI;YAClB,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,mDAAmD;QACnD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAE9C,8DAA8D;QAC9D,IAAI,IAAI,GAAG,IAAI;YACb,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,iCAAiC;QACjC,IAAM,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC;QAE5B,4DAA4D;QAC5D,aAAa;QACb,IAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1C,6DAA6D;QAC7D,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IAChC,CAAC;IACH,kBAAC;AAAD,CAAC,AA/CD,IA+CC;AA/CY,kCAAW"}

View File

@@ -0,0 +1,2 @@
export * from './Big5Decoder';
export * from './Big5Encoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./Big5Decoder"));
__export(require("./Big5Encoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/big5/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,mCAA8B"}

View File

@@ -0,0 +1,22 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class EUCJPDecoder {
readonly fatal: boolean;
eucjp_jis0212_flag: boolean;
eucjp_lead: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,96 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var EUCJPDecoder = /** @class */ (function () {
function EUCJPDecoder(options) {
this.fatal = options.fatal;
// euc-jp's decoder has an associated euc-jp jis0212 flag
// (initially unset) and euc-jp lead (initially 0x00).
/** @type {boolean} */ this.eucjp_jis0212_flag = false,
/** @type {number} */ this.eucjp_lead = 0x00;
}
/**
* @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.
*/
EUCJPDecoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and euc-jp lead is not 0x00, set
// euc-jp lead to 0x00, and return error.
if (bite === terminology_1.end_of_stream && this.eucjp_lead !== 0x00) {
this.eucjp_lead = 0x00;
return encodings_1.decoderError(this.fatal);
}
// 2. If byte is end-of-stream and euc-jp lead is 0x00, return
// finished.
if (bite === terminology_1.end_of_stream && this.eucjp_lead === 0x00)
return finished_1.finished;
// 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to
// 0xDF, inclusive, set euc-jp lead to 0x00 and return a code
// point whose value is 0xFF61 0xA1 + byte.
if (this.eucjp_lead === 0x8E && utilities_1.inRange(bite, 0xA1, 0xDF)) {
this.eucjp_lead = 0x00;
return 0xFF61 - 0xA1 + bite;
}
// 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to
// 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead
// to byte, and return continue.
if (this.eucjp_lead === 0x8F && utilities_1.inRange(bite, 0xA1, 0xFE)) {
this.eucjp_jis0212_flag = true;
this.eucjp_lead = bite;
return null;
}
// 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set
// euc-jp lead to 0x00, and run these substeps:
if (this.eucjp_lead !== 0x00) {
var lead = this.eucjp_lead;
this.eucjp_lead = 0x00;
// 1. Let code point be null.
var code_point = null;
// 2. If lead and byte are both in the range 0xA1 to 0xFE,
// inclusive, set code point to the index code point for (lead
// 0xA1) × 94 + byte 0xA1 in index jis0208 if the euc-jp
// jis0212 flag is unset and in index jis0212 otherwise.
if (utilities_1.inRange(lead, 0xA1, 0xFE) && utilities_1.inRange(bite, 0xA1, 0xFE)) {
code_point = indexes_1.indexCodePointFor((lead - 0xA1) * 94 + (bite - 0xA1), indexes_1.index(!this.eucjp_jis0212_flag ? 'jis0208' : 'jis0212'));
}
// 3. Unset the euc-jp jis0212 flag.
this.eucjp_jis0212_flag = false;
// 4. If byte is not in the range 0xA1 to 0xFE, inclusive,
// prepend byte to stream.
if (!utilities_1.inRange(bite, 0xA1, 0xFE))
stream.prepend(bite);
// 5. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 6. Return a code point whose value is code point.
return code_point;
}
// 6. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE,
// inclusive, set euc-jp lead to byte and return continue.
if (bite === 0x8E || bite === 0x8F || utilities_1.inRange(bite, 0xA1, 0xFE)) {
this.eucjp_lead = bite;
return null;
}
// 8. Return error.
return encodings_1.decoderError(this.fatal);
};
return EUCJPDecoder;
}());
exports.EUCJPDecoder = EUCJPDecoder;
//# sourceMappingURL=EUCJPDecoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EUCJPDecoder.js","sourceRoot":"","sources":["../../../../src/coders/euc-jp/EUCJPDecoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAkE;AAClE,0DAAwE;AACxE,sDAAmD;AAEnD;;;;GAIG;AACH;IAOE,sBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE3B,yDAAyD;QACzD,sDAAsD;QACtD,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACtD,qBAAqB,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,IAAY;QAClC,+DAA+D;QAC/D,yCAAyC;QACzC,IAAI,IAAI,KAAK,2BAAa,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,8DAA8D;QAC9D,YAAY;QACZ,IAAI,IAAI,KAAK,2BAAa,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YACpD,OAAO,mBAAQ,CAAC;QAElB,6DAA6D;QAC7D,6DAA6D;QAC7D,6CAA6C;QAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;SAC7B;QAED,6DAA6D;QAC7D,gEAAgE;QAChE,gCAAgC;QAChC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC;SACb;QAED,8DAA8D;QAC9D,+CAA+C;QAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,6BAA6B;YAC7B,IAAI,UAAU,GAAW,IAAI,CAAC;YAE9B,0DAA0D;YAC1D,8DAA8D;YAC9D,4DAA4D;YAC5D,wDAAwD;YACxD,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;gBAC1D,UAAU,GAAG,2BAAiB,CAC5B,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAClC,eAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAa,CAAC,CAAC;aACxE;YAED,oCAAoC;YACpC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,0DAA0D;YAC1D,0BAA0B;YAC1B,IAAI,CAAC,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvB,0CAA0C;YAC1C,IAAI,UAAU,KAAK,IAAI;gBACrB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,oDAAoD;YACpD,OAAO,UAAU,CAAC;SACnB;QAED,+DAA+D;QAC/D,WAAW;QACX,IAAI,yBAAW,CAAC,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;QAEd,0DAA0D;QAC1D,0DAA0D;QAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC;SACb;QAED,mBAAmB;QACnB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACH,mBAAC;AAAD,CAAC,AAvGD,IAuGC;AAvGY,oCAAY"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class EUCJPEncoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,60 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var EUCJPEncoder = /** @class */ (function () {
function EUCJPEncoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
EUCJPEncoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. If code point is U+00A5, return byte 0x5C.
if (code_point === 0x00A5)
return 0x5C;
// 4. If code point is U+203E, return byte 0x7E.
if (code_point === 0x203E)
return 0x7E;
// 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
// return two bytes whose values are 0x8E and code point
// 0xFF61 + 0xA1.
if (utilities_1.inRange(code_point, 0xFF61, 0xFF9F))
return [0x8E, code_point - 0xFF61 + 0xA1];
// 6. If code point is U+2212, set it to U+FF0D.
if (code_point === 0x2212)
code_point = 0xFF0D;
// 7. Let pointer be the index pointer for code point in index
// jis0208.
var pointer = indexes_1.indexPointerFor(code_point, indexes_1.index('jis0208'));
// 8. If pointer is null, return error with code point.
if (pointer === null)
return encodings_1.encoderError(code_point);
// 9. Let lead be Math.floor(pointer / 94) + 0xA1.
var lead = Math.floor(pointer / 94) + 0xA1;
// 10. Let trail be pointer % 94 + 0xA1.
var trail = pointer % 94 + 0xA1;
// 11. Return two bytes whose values are lead and trail.
return [lead, trail];
};
return EUCJPEncoder;
}());
exports.EUCJPEncoder = EUCJPEncoder;
//# sourceMappingURL=EUCJPEncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EUCJPEncoder.js","sourceRoot":"","sources":["../../../../src/coders/euc-jp/EUCJPEncoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAgE;AAChE,0DAA6E;AAC7E,sDAAmD;AAEnD;;;;GAIG;AACH;IAIE,sBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,OAAO,IAAI,CAAC;QAEd,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,OAAO,IAAI,CAAC;QAEd,gEAAgE;QAChE,0DAA0D;QAC1D,iBAAiB;QACjB,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAE5C,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,UAAU,GAAG,MAAM,CAAC;QAEtB,8DAA8D;QAC9D,WAAW;QACX,IAAM,OAAO,GAAG,yBAAe,CAAC,UAAU,EAAE,eAAK,CAAC,SAAS,CAAa,CAAC,CAAC;QAE1E,uDAAuD;QACvD,IAAI,OAAO,KAAK,IAAI;YAClB,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,kDAAkD;QAClD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAE7C,wCAAwC;QACxC,IAAM,KAAK,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;QAElC,wDAAwD;QACxD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IACH,mBAAC;AAAD,CAAC,AA1DD,IA0DC;AA1DY,oCAAY"}

View File

@@ -0,0 +1,2 @@
export * from './EUCJPDecoder';
export * from './EUCJPEncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./EUCJPDecoder"));
__export(require("./EUCJPEncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/euc-jp/index.ts"],"names":[],"mappings":";;;;;AAAA,oCAA+B;AAC/B,oCAA+B"}

View File

@@ -0,0 +1,21 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class EUCKRDecoder {
readonly fatal: boolean;
euckr_lead: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,78 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var EUCKRDecoder = /** @class */ (function () {
function EUCKRDecoder(options) {
this.fatal = options.fatal;
// euc-kr's decoder has an associated euc-kr lead (initially 0x00).
/** @type {number} */ this.euckr_lead = 0x00;
}
/**
* @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.
*/
EUCKRDecoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and euc-kr lead is not 0x00, set
// euc-kr lead to 0x00 and return error.
if (bite === terminology_1.end_of_stream && this.euckr_lead !== 0) {
this.euckr_lead = 0x00;
return encodings_1.decoderError(this.fatal);
}
// 2. If byte is end-of-stream and euc-kr lead is 0x00, return
// finished.
if (bite === terminology_1.end_of_stream && this.euckr_lead === 0)
return finished_1.finished;
// 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let
// pointer be null, set euc-kr lead to 0x00, and then run these
// substeps:
if (this.euckr_lead !== 0x00) {
var lead = this.euckr_lead;
var pointer = null;
this.euckr_lead = 0x00;
// 1. If byte is in the range 0x41 to 0xFE, inclusive, set
// pointer to (lead 0x81) × 190 + (byte 0x41).
if (utilities_1.inRange(bite, 0x41, 0xFE))
pointer = (lead - 0x81) * 190 + (bite - 0x41);
// 2. Let code point be null, if pointer is null, and the
// index code point for pointer in index euc-kr otherwise.
var code_point = (pointer === null)
? null : indexes_1.indexCodePointFor(pointer, indexes_1.index('euc-kr'));
// 3. If code point is null and byte is an ASCII byte, prepend
// byte to stream.
if (pointer === null && terminology_1.isASCIIByte(bite))
stream.prepend(bite);
// 4. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 5. Return a code point whose value is code point.
return code_point;
}
// 4. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 5. If byte is in the range 0x81 to 0xFE, inclusive, set
// euc-kr lead to byte and return continue.
if (utilities_1.inRange(bite, 0x81, 0xFE)) {
this.euckr_lead = bite;
return null;
}
// 6. Return error.
return encodings_1.decoderError(this.fatal);
};
return EUCKRDecoder;
}());
exports.EUCKRDecoder = EUCKRDecoder;
//# sourceMappingURL=EUCKRDecoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EUCKRDecoder.js","sourceRoot":"","sources":["../../../../src/coders/euc-kr/EUCKRDecoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAkE;AAClE,0DAAwE;AACxE,sDAAmD;AAEnD;;;;GAIG;AACH;IAME,sBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE3B,mEAAmE;QACnE,qBAAqB,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC/C,CAAC;IACD;;;;;;OAMG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,IAAY;QAClC,+DAA+D;QAC/D,wCAAwC;QACxC,IAAI,IAAI,KAAK,2BAAa,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,8DAA8D;QAC9D,YAAY;QACZ,IAAI,IAAI,KAAK,2BAAa,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACjD,OAAO,mBAAQ,CAAC;QAElB,8DAA8D;QAC9D,+DAA+D;QAC/D,YAAY;QACZ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,0DAA0D;YAC1D,kDAAkD;YAClD,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBAC3B,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAEhD,yDAAyD;YACzD,0DAA0D;YAC1D,IAAM,UAAU,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;gBACnC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAAiB,CAAC,OAAO,EAAE,eAAK,CAAC,QAAQ,CAAa,CAAC,CAAC;YAEnE,8DAA8D;YAC9D,kBAAkB;YAClB,IAAI,OAAO,KAAK,IAAI,IAAI,yBAAW,CAAC,IAAI,CAAC;gBACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvB,0CAA0C;YAC1C,IAAI,UAAU,KAAK,IAAI;gBACrB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,oDAAoD;YACpD,OAAO,UAAU,CAAC;SACnB;QAED,+DAA+D;QAC/D,WAAW;QACX,IAAI,yBAAW,CAAC,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;QAEd,0DAA0D;QAC1D,2CAA2C;QAC3C,IAAI,mBAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC;SACb;QAED,mBAAmB;QACnB,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACH,mBAAC;AAAD,CAAC,AA9ED,IA8EC;AA9EY,oCAAY"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class EUCKREncoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var EUCKREncoder = /** @class */ (function () {
function EUCKREncoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
EUCKREncoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. Let pointer be the index pointer for code point in index
// euc-kr.
var pointer = indexes_1.indexPointerFor(code_point, indexes_1.index('euc-kr'));
// 4. If pointer is null, return error with code point.
if (pointer === null)
return encodings_1.encoderError(code_point);
// 5. Let lead be Math.floor(pointer / 190) + 0x81.
var lead = Math.floor(pointer / 190) + 0x81;
// 6. Let trail be pointer % 190 + 0x41.
var trail = (pointer % 190) + 0x41;
// 7. Return two bytes whose values are lead and trail.
return [lead, trail];
};
return EUCKREncoder;
}());
exports.EUCKREncoder = EUCKREncoder;
//# sourceMappingURL=EUCKREncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EUCKREncoder.js","sourceRoot":"","sources":["../../../../src/coders/euc-kr/EUCKREncoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAgE;AAChE,0DAA6E;AAE7E;;;;GAIG;AACH;IAIE,sBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,8DAA8D;QAC9D,UAAU;QACV,IAAM,OAAO,GAAG,yBAAe,CAAC,UAAU,EAAE,eAAK,CAAC,QAAQ,CAAa,CAAC,CAAC;QAEzE,uDAAuD;QACvD,IAAI,OAAO,KAAK,IAAI;YAClB,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,mDAAmD;QACnD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAE9C,wCAAwC;QACxC,IAAM,KAAK,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAErC,uDAAuD;QACvD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IACH,mBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,oCAAY"}

View File

@@ -0,0 +1,2 @@
export * from './EUCKRDecoder';
export * from './EUCKREncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./EUCKRDecoder"));
__export(require("./EUCKREncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/euc-kr/index.ts"],"names":[],"mappings":";;;;;AAAA,oCAA+B;AAC/B,oCAA+B"}

View File

@@ -0,0 +1,23 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class GB18030Decoder {
readonly fatal: boolean;
gb18030_first: number;
gb18030_second: number;
gb18030_third: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,146 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var GB18030Decoder = /** @class */ (function () {
function GB18030Decoder(options) {
this.fatal = options.fatal;
// gb18030's decoder has an associated gb18030 first, gb18030
// second, and gb18030 third (all initially 0x00).
/** @type {number} */ this.gb18030_first = 0x00,
/** @type {number} */ this.gb18030_second = 0x00,
/** @type {number} */ this.gb18030_third = 0x00;
}
/**
* @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.
*/
GB18030Decoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and gb18030 first, gb18030
// second, and gb18030 third are 0x00, return finished.
if (bite === terminology_1.end_of_stream && this.gb18030_first === 0x00 &&
this.gb18030_second === 0x00 && this.gb18030_third === 0x00) {
return finished_1.finished;
}
// 2. If byte is end-of-stream, and gb18030 first, gb18030
// second, or gb18030 third is not 0x00, set gb18030 first,
// gb18030 second, and gb18030 third to 0x00, and return error.
if (bite === terminology_1.end_of_stream &&
(this.gb18030_first !== 0x00 || this.gb18030_second !== 0x00 ||
this.gb18030_third !== 0x00)) {
this.gb18030_first = 0x00;
this.gb18030_second = 0x00;
this.gb18030_third = 0x00;
encodings_1.decoderError(this.fatal);
}
var code_point;
// 3. If gb18030 third is not 0x00, run these substeps:
if (this.gb18030_third !== 0x00) {
// 1. Let code point be null.
code_point = null;
// 2. If byte is in the range 0x30 to 0x39, inclusive, set
// code point to the index gb18030 ranges code point for
// (((gb18030 first 0x81) × 10 + gb18030 second 0x30) ×
// 126 + gb18030 third 0x81) × 10 + byte 0x30.
if (utilities_1.inRange(bite, 0x30, 0x39)) {
code_point = indexes_1.indexGB18030RangesCodePointFor((((this.gb18030_first - 0x81) * 10 + this.gb18030_second - 0x30) * 126 +
this.gb18030_third - 0x81) * 10 + bite - 0x30);
}
// 3. Let buffer be a byte sequence consisting of gb18030
// second, gb18030 third, and byte, in order.
var buffer = [this.gb18030_second, this.gb18030_third, bite];
// 4. Set gb18030 first, gb18030 second, and gb18030 third to
// 0x00.
this.gb18030_first = 0x00;
this.gb18030_second = 0x00;
this.gb18030_third = 0x00;
// 5. If code point is null, prepend buffer to stream and
// return error.
if (code_point === null) {
stream.prepend(buffer);
return encodings_1.decoderError(this.fatal);
}
// 6. Return a code point whose value is code point.
return code_point;
}
// 4. If gb18030 second is not 0x00, run these substeps:
if (this.gb18030_second !== 0x00) {
// 1. If byte is in the range 0x81 to 0xFE, inclusive, set
// gb18030 third to byte and return continue.
if (utilities_1.inRange(bite, 0x81, 0xFE)) {
this.gb18030_third = bite;
return null;
}
// 2. Prepend gb18030 second followed by byte to stream, set
// gb18030 first and gb18030 second to 0x00, and return error.
stream.prepend([this.gb18030_second, bite]);
this.gb18030_first = 0x00;
this.gb18030_second = 0x00;
return encodings_1.decoderError(this.fatal);
}
// 5. If gb18030 first is not 0x00, run these substeps:
if (this.gb18030_first !== 0x00) {
// 1. If byte is in the range 0x30 to 0x39, inclusive, set
// gb18030 second to byte and return continue.
if (utilities_1.inRange(bite, 0x30, 0x39)) {
this.gb18030_second = bite;
return null;
}
// 2. Let lead be gb18030 first, let pointer be null, and set
// gb18030 first to 0x00.
var lead = this.gb18030_first;
var pointer = null;
this.gb18030_first = 0x00;
// 3. Let offset be 0x40 if byte is less than 0x7F and 0x41
// otherwise.
var offset = bite < 0x7F ? 0x40 : 0x41;
// 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
// to 0xFE, inclusive, set pointer to (lead 0x81) × 190 +
// (byte offset).
if (utilities_1.inRange(bite, 0x40, 0x7E) || utilities_1.inRange(bite, 0x80, 0xFE))
pointer = (lead - 0x81) * 190 + (bite - offset);
// 5. Let code point be null if pointer is null and the index
// code point for pointer in index gb18030 otherwise.
code_point = pointer === null ? null :
indexes_1.indexCodePointFor(pointer, indexes_1.index('gb18030'));
// 6. If code point is null and byte is an ASCII byte, prepend
// byte to stream.
if (code_point === null && terminology_1.isASCIIByte(bite))
stream.prepend(bite);
// 7. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 8. Return a code point whose value is code point.
return code_point;
}
// 6. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 7. If byte is 0x80, return code point U+20AC.
if (bite === 0x80)
return 0x20AC;
// 8. If byte is in the range 0x81 to 0xFE, inclusive, set
// gb18030 first to byte and return continue.
if (utilities_1.inRange(bite, 0x81, 0xFE)) {
this.gb18030_first = bite;
return null;
}
// 9. Return error.
return encodings_1.decoderError(this.fatal);
};
return GB18030Decoder;
}());
exports.GB18030Decoder = GB18030Decoder;
//# sourceMappingURL=GB18030Decoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"GB18030Decoder.js","sourceRoot":"","sources":["../../../../src/coders/gb18030/GB18030Decoder.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,20 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
* @param {boolean=} gbk_flag
*/
export declare class GB18030Encoder {
private gbk_flag;
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
}, gbk_flag?: boolean);
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,82 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
* @param {boolean=} gbk_flag
*/
var GB18030Encoder = /** @class */ (function () {
function GB18030Encoder(options, gbk_flag) {
if (gbk_flag === void 0) { gbk_flag = undefined; }
this.gbk_flag = gbk_flag;
this.fatal = options.fatal;
// gb18030's decoder has an associated gbk flag (initially unset).
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
GB18030Encoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. If code point is U+E5E5, return error with code point.
if (code_point === 0xE5E5)
return encodings_1.encoderError(code_point);
// 4. If the gbk flag is set and code point is U+20AC, return
// byte 0x80.
if (this.gbk_flag && code_point === 0x20AC)
return 0x80;
// 5. Let pointer be the index pointer for code point in index
// gb18030.
var pointer = indexes_1.indexPointerFor(code_point, indexes_1.index('gb18030'));
// 6. If pointer is not null, run these substeps:
if (pointer !== null) {
// 1. Let lead be Math.floor(pointer / 190) + 0x81.
var lead = Math.floor(pointer / 190) + 0x81;
// 2. Let trail be pointer % 190.
var trail = pointer % 190;
// 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise.
var offset = trail < 0x3F ? 0x40 : 0x41;
// 4. Return two bytes whose values are lead and trail + offset.
return [lead, trail + offset];
}
// 7. If gbk flag is set, return error with code point.
if (this.gbk_flag)
return encodings_1.encoderError(code_point);
// 8. Set pointer to the index gb18030 ranges pointer for code
// point.
pointer = indexes_1.indexGB18030RangesPointerFor(code_point);
// 9. Let byte1 be Math.floor(pointer / 10 / 126 / 10).
var byte1 = Math.floor(pointer / 10 / 126 / 10);
// 10. Set pointer to pointer byte1 × 10 × 126 × 10.
pointer = pointer - byte1 * 10 * 126 * 10;
// 11. Let byte2 be Math.floor(pointer / 10 / 126).
var byte2 = Math.floor(pointer / 10 / 126);
// 12. Set pointer to pointer byte2 × 10 × 126.
pointer = pointer - byte2 * 10 * 126;
// 13. Let byte3 be Math.floor(pointer / 10).
var byte3 = Math.floor(pointer / 10);
// 14. Let byte4 be pointer byte3 × 10.
var byte4 = pointer - byte3 * 10;
// 15. Return four bytes whose values are byte1 + 0x81, byte2 +
// 0x30, byte3 + 0x81, byte4 + 0x30.
return [byte1 + 0x81,
byte2 + 0x30,
byte3 + 0x81,
byte4 + 0x30];
};
return GB18030Encoder;
}());
exports.GB18030Encoder = GB18030Encoder;
//# sourceMappingURL=GB18030Encoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"GB18030Encoder.js","sourceRoot":"","sources":["../../../../src/coders/gb18030/GB18030Encoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAA8F;AAC9F,0DAA6E;AAG7E;;;;;GAKG;AACH;IAIE,wBAAY,OAA4B,EAAU,QAA6B;QAA7B,yBAAA,EAAA,oBAA6B;QAA7B,aAAQ,GAAR,QAAQ,CAAqB;QAC7E,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,kEAAkE;IACpE,CAAC;IAED;;;;OAIG;IACH,gCAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,4DAA4D;QAC5D,IAAI,UAAU,KAAK,MAAM;YACvB,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,6DAA6D;QAC7D,aAAa;QACb,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,MAAM;YACxC,OAAO,IAAI,CAAC;QAEd,8DAA8D;QAC9D,WAAW;QACX,IAAI,OAAO,GAAG,yBAAe,CAAC,UAAU,EAAE,eAAK,CAAC,SAAS,CAAa,CAAC,CAAC;QAExE,iDAAiD;QACjD,IAAI,OAAO,KAAK,IAAI,EAAE;YAEpB,mDAAmD;YACnD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;YAE9C,iCAAiC;YACjC,IAAM,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC;YAE5B,uEAAuE;YACvE,IAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,gEAAgE;YAChE,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;SAC/B;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,QAAQ;YACf,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,8DAA8D;QAC9D,SAAS;QACT,OAAO,GAAG,sCAA4B,CAAC,UAAU,CAAC,CAAC;QAEnD,uDAAuD;QACvD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QAElD,sDAAsD;QACtD,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;QAE1C,mDAAmD;QACnD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;QAE7C,iDAAiD;QACjD,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC;QAErC,6CAA6C;QAC7C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAEvC,yCAAyC;QACzC,IAAM,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC;QAEnC,+DAA+D;QAC/D,oCAAoC;QACpC,OAAO,CAAC,KAAK,GAAG,IAAI;YACpB,KAAK,GAAG,IAAI;YACZ,KAAK,GAAG,IAAI;YACZ,KAAK,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC;IACH,qBAAC;AAAD,CAAC,AAtFD,IAsFC;AAtFY,wCAAc"}

View File

@@ -0,0 +1,2 @@
export * from './GB18030Decoder';
export * from './GB18030Encoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./GB18030Decoder"));
__export(require("./GB18030Encoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/gb18030/index.ts"],"names":[],"mappings":";;;;;AAAA,sCAAiC;AACjC,sCAAiC"}

View File

@@ -0,0 +1,24 @@
import { Stream } from "../../common/Stream";
export declare class ISO2022JPDecoder {
readonly fatal: boolean;
iso2022jp_decoder_state: any;
iso2022jp_decoder_output_state: any;
iso2022jp_lead: number;
iso2022jp_output_flag: boolean;
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,272 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
var states;
(function (states) {
states[states["ASCII"] = 0] = "ASCII";
states[states["Roman"] = 1] = "Roman";
states[states["Katakana"] = 2] = "Katakana";
states[states["LeadByte"] = 3] = "LeadByte";
states[states["TrailByte"] = 4] = "TrailByte";
states[states["EscapeStart"] = 5] = "EscapeStart";
states[states["Escape"] = 6] = "Escape";
})(states || (states = {}));
var ISO2022JPDecoder = /** @class */ (function () {
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
function ISO2022JPDecoder(options) {
this.fatal = options.fatal;
// iso-2022-jp's decoder has an associated iso-2022-jp decoder
// state (initially ASCII), iso-2022-jp decoder output state
// (initially ASCII), iso-2022-jp lead (initially 0x00), and
// iso-2022-jp output flag (initially unset).
/** @type {number} */ this.iso2022jp_decoder_state = states.ASCII,
/** @type {number} */ this.iso2022jp_decoder_output_state = states.ASCII,
/** @type {number} */ this.iso2022jp_lead = 0x00,
/** @type {boolean} */ this.iso2022jp_output_flag = false;
}
/**
* @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.
*/
ISO2022JPDecoder.prototype.handler = function (stream, bite) {
// switching on iso-2022-jp decoder state:
switch (this.iso2022jp_decoder_state) {
default:
case states.ASCII:
// ASCII
// Based on byte:
// 0x1B
if (bite === 0x1B) {
// Set iso-2022-jp decoder state to escape start and return
// continue.
this.iso2022jp_decoder_state = states.EscapeStart;
return null;
}
// 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B
if (utilities_1.inRange(bite, 0x00, 0x7F) && bite !== 0x0E
&& bite !== 0x0F && bite !== 0x1B) {
// Unset the iso-2022-jp output flag and return a code point
// whose value is byte.
this.iso2022jp_output_flag = false;
return bite;
}
// end-of-stream
if (bite === terminology_1.end_of_stream) {
// Return finished.
return finished_1.finished;
}
// Otherwise
// Unset the iso-2022-jp output flag and return error.
this.iso2022jp_output_flag = false;
return encodings_1.decoderError(this.fatal);
case states.Roman:
// Roman
// Based on byte:
// 0x1B
if (bite === 0x1B) {
// Set iso-2022-jp decoder state to escape start and return
// continue.
this.iso2022jp_decoder_state = states.EscapeStart;
return null;
}
// 0x5C
if (bite === 0x5C) {
// Unset the iso-2022-jp output flag and return code point
// U+00A5.
this.iso2022jp_output_flag = false;
return 0x00A5;
}
// 0x7E
if (bite === 0x7E) {
// Unset the iso-2022-jp output flag and return code point
// U+203E.
this.iso2022jp_output_flag = false;
return 0x203E;
}
// 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E
if (utilities_1.inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F
&& bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) {
// Unset the iso-2022-jp output flag and return a code point
// whose value is byte.
this.iso2022jp_output_flag = false;
return bite;
}
// end-of-stream
if (bite === terminology_1.end_of_stream) {
// Return finished.
return finished_1.finished;
}
// Otherwise
// Unset the iso-2022-jp output flag and return error.
this.iso2022jp_output_flag = false;
return encodings_1.decoderError(this.fatal);
case states.Katakana:
// Katakana
// Based on byte:
// 0x1B
if (bite === 0x1B) {
// Set iso-2022-jp decoder state to escape start and return
// continue.
this.iso2022jp_decoder_state = states.EscapeStart;
return null;
}
// 0x21 to 0x5F
if (utilities_1.inRange(bite, 0x21, 0x5F)) {
// Unset the iso-2022-jp output flag and return a code point
// whose value is 0xFF61 0x21 + byte.
this.iso2022jp_output_flag = false;
return 0xFF61 - 0x21 + bite;
}
// end-of-stream
if (bite === terminology_1.end_of_stream) {
// Return finished.
return finished_1.finished;
}
// Otherwise
// Unset the iso-2022-jp output flag and return error.
this.iso2022jp_output_flag = false;
return encodings_1.decoderError(this.fatal);
case states.LeadByte:
// Lead byte
// Based on byte:
// 0x1B
if (bite === 0x1B) {
// Set iso-2022-jp decoder state to escape start and return
// continue.
this.iso2022jp_decoder_state = states.EscapeStart;
return null;
}
// 0x21 to 0x7E
if (utilities_1.inRange(bite, 0x21, 0x7E)) {
// Unset the iso-2022-jp output flag, set iso-2022-jp lead
// to byte, iso-2022-jp decoder state to trail byte, and
// return continue.
this.iso2022jp_output_flag = false;
this.iso2022jp_lead = bite;
this.iso2022jp_decoder_state = states.TrailByte;
return null;
}
// end-of-stream
if (bite === terminology_1.end_of_stream) {
// Return finished.
return finished_1.finished;
}
// Otherwise
// Unset the iso-2022-jp output flag and return error.
this.iso2022jp_output_flag = false;
return encodings_1.decoderError(this.fatal);
case states.TrailByte:
// Trail byte
// Based on byte:
// 0x1B
if (bite === 0x1B) {
// Set iso-2022-jp decoder state to escape start and return
// continue.
this.iso2022jp_decoder_state = states.EscapeStart;
return encodings_1.decoderError(this.fatal);
}
// 0x21 to 0x7E
if (utilities_1.inRange(bite, 0x21, 0x7E)) {
// 1. Set the iso-2022-jp decoder state to lead byte.
this.iso2022jp_decoder_state = states.LeadByte;
// 2. Let pointer be (iso-2022-jp lead 0x21) × 94 + byte 0x21.
var pointer = (this.iso2022jp_lead - 0x21) * 94 + bite - 0x21;
// 3. Let code point be the index code point for pointer in
// index jis0208.
var code_point = indexes_1.indexCodePointFor(pointer, indexes_1.index('jis0208'));
// 4. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 5. Return a code point whose value is code point.
return code_point;
}
// end-of-stream
if (bite === terminology_1.end_of_stream) {
// Set the iso-2022-jp decoder state to lead byte, prepend
// byte to stream, and return error.
this.iso2022jp_decoder_state = states.LeadByte;
stream.prepend(bite);
return encodings_1.decoderError(this.fatal);
}
// Otherwise
// Set iso-2022-jp decoder state to lead byte and return
// error.
this.iso2022jp_decoder_state = states.LeadByte;
return encodings_1.decoderError(this.fatal);
case states.EscapeStart:
// Escape start
// 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to
// byte, iso-2022-jp decoder state to escape, and return
// continue.
if (bite === 0x24 || bite === 0x28) {
this.iso2022jp_lead = bite;
this.iso2022jp_decoder_state = states.Escape;
return null;
}
// 2. Prepend byte to stream.
stream.prepend(bite);
// 3. Unset the iso-2022-jp output flag, set iso-2022-jp
// decoder state to iso-2022-jp decoder output state, and
// return error.
this.iso2022jp_output_flag = false;
this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state;
return encodings_1.decoderError(this.fatal);
case states.Escape:
// Escape
// 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to
// 0x00.
var lead = this.iso2022jp_lead;
this.iso2022jp_lead = 0x00;
// 2. Let state be null.
var state = null;
// 3. If lead is 0x28 and byte is 0x42, set state to ASCII.
if (lead === 0x28 && bite === 0x42)
state = states.ASCII;
// 4. If lead is 0x28 and byte is 0x4A, set state to Roman.
if (lead === 0x28 && bite === 0x4A)
state = states.Roman;
// 5. If lead is 0x28 and byte is 0x49, set state to Katakana.
if (lead === 0x28 && bite === 0x49)
state = states.Katakana;
// 6. If lead is 0x24 and byte is either 0x40 or 0x42, set
// state to lead byte.
if (lead === 0x24 && (bite === 0x40 || bite === 0x42))
state = states.LeadByte;
// 7. If state is non-null, run these substeps:
if (state !== null) {
// 1. Set iso-2022-jp decoder state and iso-2022-jp decoder
// output state to states.
this.iso2022jp_decoder_state = this.iso2022jp_decoder_state = state;
// 2. Let output flag be the iso-2022-jp output flag.
var output_flag = this.iso2022jp_output_flag;
// 3. Set the iso-2022-jp output flag.
this.iso2022jp_output_flag = true;
// 4. Return continue, if output flag is unset, and error
// otherwise.
return !output_flag ? null : encodings_1.decoderError(this.fatal);
}
// 8. Prepend lead and byte to stream.
stream.prepend([lead, bite]);
// 9. Unset the iso-2022-jp output flag, set iso-2022-jp
// decoder state to iso-2022-jp decoder output state and
// return error.
this.iso2022jp_output_flag = false;
this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state;
return encodings_1.decoderError(this.fatal);
}
};
return ISO2022JPDecoder;
}());
exports.ISO2022JPDecoder = ISO2022JPDecoder;
//# sourceMappingURL=ISO2022JPDecoder.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,25 @@
import { Stream } from "../../common/Stream";
declare enum states {
ASCII = 0,
Roman = 1,
jis0208 = 2
}
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class ISO2022JPEncoder {
readonly fatal: boolean;
iso2022jp_state: states;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}
export {};

View File

@@ -0,0 +1,124 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var states;
(function (states) {
states[states["ASCII"] = 0] = "ASCII";
states[states["Roman"] = 1] = "Roman";
states[states["jis0208"] = 2] = "jis0208";
})(states || (states = {}));
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var ISO2022JPEncoder = /** @class */ (function () {
function ISO2022JPEncoder(options) {
this.fatal = options.fatal;
// iso-2022-jp's encoder has an associated iso-2022-jp encoder
// state which is one of ASCII, Roman, and jis0208 (initially
// ASCII).
/** @type {number} */ this.iso2022jp_state = states.ASCII;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
ISO2022JPEncoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream and iso-2022-jp encoder
// state is not ASCII, prepend code point to stream, set
// iso-2022-jp encoder state to ASCII, and return three bytes
// 0x1B 0x28 0x42.
if (code_point === terminology_1.end_of_stream &&
this.iso2022jp_state !== states.ASCII) {
stream.prepend(code_point);
this.iso2022jp_state = states.ASCII;
return [0x1B, 0x28, 0x42];
}
// 2. If code point is end-of-stream and iso-2022-jp encoder
// state is ASCII, return finished.
if (code_point === terminology_1.end_of_stream && this.iso2022jp_state === states.ASCII)
return finished_1.finished;
// 3. If ISO-2022-JP encoder state is ASCII or Roman, and code
// point is U+000E, U+000F, or U+001B, return error with U+FFFD.
if ((this.iso2022jp_state === states.ASCII ||
this.iso2022jp_state === states.Roman) &&
(code_point === 0x000E || code_point === 0x000F ||
code_point === 0x001B)) {
return encodings_1.encoderError(0xFFFD);
}
// 4. If iso-2022-jp encoder state is ASCII and code point is an
// ASCII code point, return a byte whose value is code point.
if (this.iso2022jp_state === states.ASCII &&
terminology_1.isASCIICodePoint(code_point))
return code_point;
// 5. If iso-2022-jp encoder state is Roman and code point is an
// ASCII code point, excluding U+005C and U+007E, or is U+00A5
// or U+203E, run these substeps:
if (this.iso2022jp_state === states.Roman &&
((terminology_1.isASCIICodePoint(code_point) &&
code_point !== 0x005C && code_point !== 0x007E) ||
(code_point == 0x00A5 || code_point == 0x203E))) {
// 1. If code point is an ASCII code point, return a byte
// whose value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 2. If code point is U+00A5, return byte 0x5C.
if (code_point === 0x00A5)
return 0x5C;
// 3. If code point is U+203E, return byte 0x7E.
if (code_point === 0x203E)
return 0x7E;
}
// 6. If code point is an ASCII code point, and iso-2022-jp
// encoder state is not ASCII, prepend code point to stream, set
// iso-2022-jp encoder state to ASCII, and return three bytes
// 0x1B 0x28 0x42.
if (terminology_1.isASCIICodePoint(code_point) &&
this.iso2022jp_state !== states.ASCII) {
stream.prepend(code_point);
this.iso2022jp_state = states.ASCII;
return [0x1B, 0x28, 0x42];
}
// 7. If code point is either U+00A5 or U+203E, and iso-2022-jp
// encoder state is not Roman, prepend code point to stream, set
// iso-2022-jp encoder state to Roman, and return three bytes
// 0x1B 0x28 0x4A.
if ((code_point === 0x00A5 || code_point === 0x203E) &&
this.iso2022jp_state !== states.Roman) {
stream.prepend(code_point);
this.iso2022jp_state = states.Roman;
return [0x1B, 0x28, 0x4A];
}
// 8. If code point is U+2212, set it to U+FF0D.
if (code_point === 0x2212)
code_point = 0xFF0D;
// 9. Let pointer be the index pointer for code point in index
// jis0208.
var pointer = indexes_1.indexPointerFor(code_point, indexes_1.index('jis0208'));
// 10. If pointer is null, return error with code point.
if (pointer === null)
return encodings_1.encoderError(code_point);
// 11. If iso-2022-jp encoder state is not jis0208, prepend code
// point to stream, set iso-2022-jp encoder state to jis0208,
// and return three bytes 0x1B 0x24 0x42.
if (this.iso2022jp_state !== states.jis0208) {
stream.prepend(code_point);
this.iso2022jp_state = states.jis0208;
return [0x1B, 0x24, 0x42];
}
// 12. Let lead be Math.floor(pointer / 94) + 0x21.
var lead = Math.floor(pointer / 94) + 0x21;
// 13. Let trail be pointer % 94 + 0x21.
var trail = pointer % 94 + 0x21;
// 14. Return two bytes whose values are lead and trail.
return [lead, trail];
};
return ISO2022JPEncoder;
}());
exports.ISO2022JPEncoder = ISO2022JPEncoder;
//# sourceMappingURL=ISO2022JPEncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ISO2022JPEncoder.js","sourceRoot":"","sources":["../../../../src/coders/iso-2022-jp/ISO2022JPEncoder.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,2 @@
export * from './ISO2022JPDecoder';
export * from './ISO2022JPEncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./ISO2022JPDecoder"));
__export(require("./ISO2022JPEncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/iso-2022-jp/index.ts"],"names":[],"mappings":";;;;;AAAA,wCAAmC;AACnC,wCAAmC"}

View File

@@ -0,0 +1,21 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class ShiftJISDecoder {
readonly fatal: boolean;
Shift_JIS_lead: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,95 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var ShiftJISDecoder = /** @class */ (function () {
function ShiftJISDecoder(options) {
this.fatal = options.fatal;
// Shift_JIS's decoder has an associated Shift_JIS lead (initially
// 0x00).
/** @type {number} */ this.Shift_JIS_lead = 0x00;
}
/**
* @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.
*/
ShiftJISDecoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and Shift_JIS lead is not 0x00,
// set Shift_JIS lead to 0x00 and return error.
if (bite === terminology_1.end_of_stream && this.Shift_JIS_lead !== 0x00) {
this.Shift_JIS_lead = 0x00;
return encodings_1.decoderError(this.fatal);
}
// 2. If byte is end-of-stream and Shift_JIS lead is 0x00,
// return finished.
if (bite === terminology_1.end_of_stream && this.Shift_JIS_lead === 0x00)
return finished_1.finished;
// 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead,
// let pointer be null, set Shift_JIS lead to 0x00, and then run
// these substeps:
if (this.Shift_JIS_lead !== 0x00) {
var lead = this.Shift_JIS_lead;
var pointer = null;
this.Shift_JIS_lead = 0x00;
// 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41
// otherwise.
var offset = (bite < 0x7F) ? 0x40 : 0x41;
// 2. Let lead offset be 0x81, if lead is less than 0xA0, and
// 0xC1 otherwise.
var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1;
// 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
// to 0xFC, inclusive, set pointer to (lead lead offset) ×
// 188 + byte offset.
if (utilities_1.inRange(bite, 0x40, 0x7E) || utilities_1.inRange(bite, 0x80, 0xFC))
pointer = (lead - lead_offset) * 188 + bite - offset;
// 4. If pointer is in the range 8836 to 10715, inclusive,
// return a code point whose value is 0xE000 8836 + pointer.
if (utilities_1.inRange(pointer, 8836, 10715))
return 0xE000 - 8836 + pointer;
// 5. Let code point be null, if pointer is null, and the
// index code point for pointer in index jis0208 otherwise.
var code_point = (pointer === null) ? null :
indexes_1.indexCodePointFor(pointer, indexes_1.index('jis0208'));
// 6. If code point is null and byte is an ASCII byte, prepend
// byte to stream.
if (code_point === null && terminology_1.isASCIIByte(bite))
stream.prepend(bite);
// 7. If code point is null, return error.
if (code_point === null)
return encodings_1.decoderError(this.fatal);
// 8. Return a code point whose value is code point.
return code_point;
}
// 4. If byte is an ASCII byte or 0x80, return a code point
// whose value is byte.
if (terminology_1.isASCIIByte(bite) || bite === 0x80)
return bite;
// 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a
// code point whose value is 0xFF61 0xA1 + byte.
if (utilities_1.inRange(bite, 0xA1, 0xDF))
return 0xFF61 - 0xA1 + bite;
// 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0
// to 0xFC, inclusive, set Shift_JIS lead to byte and return
// continue.
if (utilities_1.inRange(bite, 0x81, 0x9F) || utilities_1.inRange(bite, 0xE0, 0xFC)) {
this.Shift_JIS_lead = bite;
return null;
}
// 7. Return error.
return encodings_1.decoderError(this.fatal);
};
return ShiftJISDecoder;
}());
exports.ShiftJISDecoder = ShiftJISDecoder;
//# sourceMappingURL=ShiftJISDecoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ShiftJISDecoder.js","sourceRoot":"","sources":["../../../../src/coders/shift-jis/ShiftJISDecoder.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class ShiftJISEncoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,65 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var ShiftJISEncoder = /** @class */ (function () {
function ShiftJISEncoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
ShiftJISEncoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point or U+0080, return a
// byte whose value is code point.
if (terminology_1.isASCIICodePoint(code_point) || code_point === 0x0080)
return code_point;
// 3. If code point is U+00A5, return byte 0x5C.
if (code_point === 0x00A5)
return 0x5C;
// 4. If code point is U+203E, return byte 0x7E.
if (code_point === 0x203E)
return 0x7E;
// 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
// return a byte whose value is code point 0xFF61 + 0xA1.
if (utilities_1.inRange(code_point, 0xFF61, 0xFF9F))
return code_point - 0xFF61 + 0xA1;
// 6. If code point is U+2212, set it to U+FF0D.
if (code_point === 0x2212)
code_point = 0xFF0D;
// 7. Let pointer be the index Shift_JIS pointer for code point.
var pointer = indexes_1.indexShiftJISPointerFor(code_point);
// 8. If pointer is null, return error with code point.
if (pointer === null)
return encodings_1.encoderError(code_point);
// 9. Let lead be Math.floor(pointer / 188).
var lead = Math.floor(pointer / 188);
// 10. Let lead offset be 0x81, if lead is less than 0x1F, and
// 0xC1 otherwise.
var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1;
// 11. Let trail be pointer % 188.
var trail = pointer % 188;
// 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41
// otherwise.
var offset = (trail < 0x3F) ? 0x40 : 0x41;
// 13. Return two bytes whose values are lead + lead offset and
// trail + offset.
return [lead + lead_offset, trail + offset];
};
return ShiftJISEncoder;
}());
exports.ShiftJISEncoder = ShiftJISEncoder;
//# sourceMappingURL=ShiftJISEncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ShiftJISEncoder.js","sourceRoot":"","sources":["../../../../src/coders/shift-jis/ShiftJISEncoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAiE;AACjE,0DAA6E;AAC7E,sDAAmD;AAEnD;;;;GAIG;AACH;IAIE,yBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,iCAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,8DAA8D;QAC9D,kCAAkC;QAClC,IAAI,8BAAgB,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,MAAM;YACvD,OAAO,UAAU,CAAC;QAEpB,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,OAAO,IAAI,CAAC;QAEd,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,OAAO,IAAI,CAAC;QAEd,gEAAgE;QAChE,2DAA2D;QAC3D,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrC,OAAO,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;QAEpC,gDAAgD;QAChD,IAAI,UAAU,KAAK,MAAM;YACvB,UAAU,GAAG,MAAM,CAAC;QAEtB,gEAAgE;QAChE,IAAM,OAAO,GAAG,iCAAuB,CAAC,UAAU,CAAC,CAAC;QAEpD,uDAAuD;QACvD,IAAI,OAAO,KAAK,IAAI;YAClB,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;QAElC,4CAA4C;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;QAEvC,8DAA8D;QAC9D,kBAAkB;QAClB,IAAM,WAAW,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhD,kCAAkC;QAClC,IAAM,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC;QAE5B,+DAA+D;QAC/D,aAAa;QACb,IAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,+DAA+D;QAC/D,kBAAkB;QAClB,OAAO,CAAC,IAAI,GAAG,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IAC9C,CAAC;IACH,sBAAC;AAAD,CAAC,AAjED,IAiEC;AAjEY,0CAAe"}

View File

@@ -0,0 +1,2 @@
export * from './ShiftJISDecoder';
export * from './ShiftJISEncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./ShiftJISDecoder"));
__export(require("./ShiftJISEncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/shift-jis/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAAkC;AAClC,uCAAkC"}

View File

@@ -0,0 +1,22 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {!Array.<number>} index The encoding index.
* @param {{fatal: boolean}} options
*/
export declare class SingleByteDecoder {
private readonly index;
readonly fatal: boolean;
constructor(index: Array<number>, options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,44 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Decoder}
* @param {!Array.<number>} index The encoding index.
* @param {{fatal: boolean}} options
*/
var SingleByteDecoder = /** @class */ (function () {
function SingleByteDecoder(index, options) {
this.index = index;
this.fatal = options.fatal;
}
/**
* @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.
*/
SingleByteDecoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream, return finished.
if (bite === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 3. Let code point be the index code point for byte 0x80 in
// index single-byte.
var code_point = this.index[bite - 0x80];
// 4. If code point is null, return error.
if (!code_point)
return encodings_1.decoderError(this.fatal);
// 5. Return a code point whose value is code point.
return code_point;
};
return SingleByteDecoder;
}());
exports.SingleByteDecoder = SingleByteDecoder;
//# sourceMappingURL=SingleByteDecoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"SingleByteDecoder.js","sourceRoot":"","sources":["../../../../src/coders/single-byte/SingleByteDecoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,0DAAwE;AAExE;;;;;GAKG;AACH;IAIE,2BAA6B,KAAoB,EAAE,OAA4B;QAAlD,UAAK,GAAL,KAAK,CAAe;QAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,mCAAO,GAAP,UAAQ,MAAc,EAAE,IAAY;QAClC,gDAAgD;QAChD,IAAI,IAAI,KAAK,2BAAa;YACxB,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,WAAW;QACX,IAAI,yBAAW,CAAC,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;QAEd,+DAA+D;QAC/D,qBAAqB;QACrB,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAE3C,0CAA0C;QAC1C,IAAI,CAAC,UAAU;YACb,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElC,oDAAoD;QACpD,OAAO,UAAU,CAAC;IACpB,CAAC;IACH,wBAAC;AAAD,CAAC,AApCD,IAoCC;AApCY,8CAAiB"}

View File

@@ -0,0 +1,20 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Encoder}
* @param {!Array.<?number>} index The encoding index.
* @param {{fatal: boolean}} options
*/
export declare class SingleByteEncoder {
private index;
readonly fatal: boolean;
constructor(index: (number | null)[], options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,43 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var encodings_1 = require("../../encoding/encodings");
var finished_1 = require("../../encoding/finished");
var indexes_1 = require("../../encoding/indexes");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Encoder}
* @param {!Array.<?number>} index The encoding index.
* @param {{fatal: boolean}} options
*/
var SingleByteEncoder = /** @class */ (function () {
function SingleByteEncoder(index, options) {
this.index = index;
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
SingleByteEncoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. Let pointer be the index pointer for code point in index
// single-byte.
var pointer = indexes_1.indexPointerFor(code_point, this.index);
// 4. If pointer is null, return error with code point.
if (pointer === null)
encodings_1.encoderError(code_point);
// 5. Return a byte whose value is pointer + 0x80.
return pointer + 0x80;
};
return SingleByteEncoder;
}());
exports.SingleByteEncoder = SingleByteEncoder;
//# sourceMappingURL=SingleByteEncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"SingleByteEncoder.js","sourceRoot":"","sources":["../../../../src/coders/single-byte/SingleByteEncoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,kDAAyD;AACzD,0DAA6E;AAE7E;;;;;GAKG;AACH;IAIE,2BAAoB,KAAwB,EAAE,OAA4B;QAAtD,UAAK,GAAL,KAAK,CAAmB;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,mCAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,8DAA8D;QAC9D,eAAe;QACf,IAAM,OAAO,GAAG,yBAAe,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAExD,uDAAuD;QACvD,IAAI,OAAO,KAAK,IAAI;YAClB,wBAAY,CAAC,UAAU,CAAC,CAAC;QAE3B,kDAAkD;QAClD,OAAO,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IACH,wBAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,8CAAiB"}

View File

@@ -0,0 +1,2 @@
export * from './SingleByteDecoder';
export * from './SingleByteEncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./SingleByteDecoder"));
__export(require("./SingleByteEncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/single-byte/index.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,yCAAoC"}

View File

@@ -0,0 +1,24 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {boolean} utf16_be True if big-endian, false if little-endian.
* @param {{fatal: boolean}} options
*/
export declare class UTF16Decoder {
private utf16_be;
readonly fatal: boolean;
utf16_lead_byte: any;
utf16_lead_surrogate: any;
constructor(utf16_be: boolean, options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,97 @@
"use strict";
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

View File

@@ -0,0 +1 @@
{"version":3,"file":"UTF16Decoder.js","sourceRoot":"","sources":["../../../../src/coders/utf-16/UTF16Decoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,0DAA2D;AAC3D,sDAAmD;AACnD,iEAAiE;AAGjE;;;;;GAKG;AACH;IAOE,sBAAoB,QAAiB,EAAE,OAA4B;QAA/C,aAAQ,GAAR,QAAQ,CAAS;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,sBAAsB,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QACnD,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,IAAY;QAClC,6DAA6D;QAC7D,8DAA8D;QAC9D,mDAAmD;QACnD,IAAI,IAAI,KAAK,2BAAa,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI;YAC1D,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,EAAE;YACrC,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,8DAA8D;QAC9D,4CAA4C;QAC5C,IAAI,IAAI,KAAK,2BAAa,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;YACzD,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;YACpC,OAAO,mBAAQ,CAAC;SACjB;QAED,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO,IAAI,CAAC;SACb;QAED,qCAAqC;QACrC,IAAI,SAAiB,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,+BAA+B;YAC/B,oCAAoC;YACpC,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;SAChD;aAAM;YACL,iCAAiC;YACjC,oCAAoC;YACpC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;SAChD;QACD,qCAAqC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,8DAA8D;QAC9D,+DAA+D;QAC/D,+BAA+B;QAC/B,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;YACtC,IAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAEjC,oDAAoD;YACpD,0DAA0D;YAC1D,4DAA4D;YAC5D,IAAI,mBAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;gBACtC,OAAO,OAAO,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,KAAK;oBAChD,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;aACxB;YAED,4DAA4D;YAC5D,4DAA4D;YAC5D,SAAS;YACT,MAAM,CAAC,OAAO,CAAC,8CAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjE,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,+DAA+D;QAC/D,8DAA8D;QAC9D,IAAI,mBAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;YACtC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACtC,OAAO,IAAI,CAAC;SACb;QAED,+DAA+D;QAC/D,gBAAgB;QAChB,IAAI,mBAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;YACpC,OAAO,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElC,kCAAkC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACH,mBAAC;AAAD,CAAC,AA9FD,IA8FC;AA9FY,oCAAY"}

View File

@@ -0,0 +1,20 @@
import { Stream } from "../../common";
/**
* @constructor
* @implements {Encoder}
* @param {boolean} utf16_be True if big-endian, false if little-endian.
* @param {{fatal: boolean}} options
*/
export declare class UTF16Encoder {
private utf16_be;
readonly fatal: boolean;
constructor(utf16_be: boolean, options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,44 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
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 {Encoder}
* @param {boolean} utf16_be True if big-endian, false if little-endian.
* @param {{fatal: boolean}} options
*/
var UTF16Encoder = /** @class */ (function () {
function UTF16Encoder(utf16_be, options) {
this.utf16_be = utf16_be;
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
UTF16Encoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is in the range U+0000 to U+FFFF, inclusive,
// return the sequence resulting of converting code point to
// bytes using utf-16be encoder flag.
if (utilities_1.inRange(code_point, 0x0000, 0xFFFF))
return converCodeUnitToBytes_1.convertCodeUnitToBytes(code_point, this.utf16_be);
// 3. Let lead be ((code point 0x10000) >> 10) + 0xD800,
// converted to bytes using utf-16be encoder flag.
var lead = converCodeUnitToBytes_1.convertCodeUnitToBytes(((code_point - 0x10000) >> 10) + 0xD800, this.utf16_be);
// 4. Let trail be ((code point 0x10000) & 0x3FF) + 0xDC00,
// converted to bytes using utf-16be encoder flag.
var trail = converCodeUnitToBytes_1.convertCodeUnitToBytes(((code_point - 0x10000) & 0x3FF) + 0xDC00, this.utf16_be);
// 5. Return a byte sequence of lead followed by trail.
return lead.concat(trail);
};
return UTF16Encoder;
}());
exports.UTF16Encoder = UTF16Encoder;
//# sourceMappingURL=UTF16Encoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"UTF16Encoder.js","sourceRoot":"","sources":["../../../../src/coders/utf-16/UTF16Encoder.ts"],"names":[],"mappings":";;AACA,oDAAmD;AACnD,0DAA2D;AAC3D,sDAAmD;AACnD,iEAAiE;AAEjE;;;;;GAKG;AACH;IAIE,sBAAoB,QAAiB,EAAE,OAA4B;QAA/C,aAAQ,GAAR,QAAQ,CAAS;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,8BAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,gEAAgE;QAChE,4DAA4D;QAC5D,qCAAqC;QACrC,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrC,OAAO,8CAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3D,0DAA0D;QAC1D,kDAAkD;QAClD,IAAM,IAAI,GAAG,8CAAsB,CACjC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE1D,6DAA6D;QAC7D,kDAAkD;QAClD,IAAM,KAAK,GAAG,8CAAsB,CAClC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5D,uDAAuD;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACH,mBAAC;AAAD,CAAC,AArCD,IAqCC;AArCY,oCAAY"}

View File

@@ -0,0 +1,6 @@
/**
* @param {number} code_unit
* @param {boolean} utf16be
* @return {!Array.<number>} bytes
*/
export declare function convertCodeUnitToBytes(code_unit: number, utf16be: boolean): Array<number>;

View File

@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @param {number} code_unit
* @param {boolean} utf16be
* @return {!Array.<number>} bytes
*/
function convertCodeUnitToBytes(code_unit, utf16be) {
// 1. Let byte1 be code unit >> 8.
var byte1 = code_unit >> 8;
// 2. Let byte2 be code unit & 0x00FF.
var byte2 = code_unit & 0x00FF;
// 3. Then return the bytes in order:
// utf-16be flag is set: byte1, then byte2.
if (utf16be)
return [byte1, byte2];
// utf-16be flag is unset: byte2, then byte1.
return [byte2, byte1];
}
exports.convertCodeUnitToBytes = convertCodeUnitToBytes;
//# sourceMappingURL=converCodeUnitToBytes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"converCodeUnitToBytes.js","sourceRoot":"","sources":["../../../../src/coders/utf-16/converCodeUnitToBytes.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,SAAiB,EAAE,OAAgB;IACxE,kCAAkC;IAClC,IAAM,KAAK,GAAG,SAAS,IAAI,CAAC,CAAC;IAE7B,sCAAsC;IACtC,IAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAEjC,qCAAqC;IACrC,2CAA2C;IAC3C,IAAI,OAAO;QACT,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC;AAbD,wDAaC"}

View File

@@ -0,0 +1,2 @@
export * from './UTF16Decoder';
export * from './UTF16Encoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./UTF16Decoder"));
__export(require("./UTF16Encoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/utf-16/index.ts"],"names":[],"mappings":";;;;;AAAA,oCAA+B;AAC/B,oCAA+B"}

View File

@@ -0,0 +1,25 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class UTF8Decoder {
readonly fatal: boolean;
utf8_code_point: number;
utf8_bytes_seen: number;
utf8_bytes_needed: number;
utf8_lower_boundary: number;
utf8_upper_boundary: number;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,128 @@
"use strict";
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");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var UTF8Decoder = /** @class */ (function () {
function UTF8Decoder(options) {
this.fatal = options.fatal;
// utf-8's decoder's has an associated utf-8 code point, utf-8
// bytes seen, and utf-8 bytes needed (all initially 0), a utf-8
// lower boundary (initially 0x80), and a utf-8 upper boundary
// (initially 0xBF).
/** @type {number} */ this.utf8_code_point = 0,
/** @type {number} */ this.utf8_bytes_seen = 0,
/** @type {number} */ this.utf8_bytes_needed = 0,
/** @type {number} */ this.utf8_lower_boundary = 0x80,
/** @type {number} */ this.utf8_upper_boundary = 0xBF;
}
/**
* @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.
*/
UTF8Decoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream and utf-8 bytes needed is not 0,
// set utf-8 bytes needed to 0 and return error.
if (bite === terminology_1.end_of_stream && this.utf8_bytes_needed !== 0) {
this.utf8_bytes_needed = 0;
return encodings_1.decoderError(this.fatal);
}
// 2. If byte is end-of-stream, return finished.
if (bite === terminology_1.end_of_stream)
return finished_1.finished;
// 3. If utf-8 bytes needed is 0, based on byte:
if (this.utf8_bytes_needed === 0) {
// 0x00 to 0x7F
if (utilities_1.inRange(bite, 0x00, 0x7F)) {
// Return a code point whose value is byte.
return bite;
}
// 0xC2 to 0xDF
else if (utilities_1.inRange(bite, 0xC2, 0xDF)) {
// 1. Set utf-8 bytes needed to 1.
this.utf8_bytes_needed = 1;
// 2. Set UTF-8 code point to byte & 0x1F.
this.utf8_code_point = bite & 0x1F;
}
// 0xE0 to 0xEF
else if (utilities_1.inRange(bite, 0xE0, 0xEF)) {
// 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0.
if (bite === 0xE0)
this.utf8_lower_boundary = 0xA0;
// 2. If byte is 0xED, set utf-8 upper boundary to 0x9F.
if (bite === 0xED)
this.utf8_upper_boundary = 0x9F;
// 3. Set utf-8 bytes needed to 2.
this.utf8_bytes_needed = 2;
// 4. Set UTF-8 code point to byte & 0xF.
this.utf8_code_point = bite & 0xF;
}
// 0xF0 to 0xF4
else if (utilities_1.inRange(bite, 0xF0, 0xF4)) {
// 1. If byte is 0xF0, set utf-8 lower boundary to 0x90.
if (bite === 0xF0)
this.utf8_lower_boundary = 0x90;
// 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F.
if (bite === 0xF4)
this.utf8_upper_boundary = 0x8F;
// 3. Set utf-8 bytes needed to 3.
this.utf8_bytes_needed = 3;
// 4. Set UTF-8 code point to byte & 0x7.
this.utf8_code_point = bite & 0x7;
}
// Otherwise
else {
// Return error.
return encodings_1.decoderError(this.fatal);
}
// Return continue.
return null;
}
// 4. If byte is not in the range utf-8 lower boundary to utf-8
// upper boundary, inclusive, run these substeps:
if (!utilities_1.inRange(bite, this.utf8_lower_boundary, this.utf8_upper_boundary)) {
// 1. Set utf-8 code point, utf-8 bytes needed, and utf-8
// bytes seen to 0, set utf-8 lower boundary to 0x80, and set
// utf-8 upper boundary to 0xBF.
this.utf8_code_point = this.utf8_bytes_needed = this.utf8_bytes_seen = 0;
this.utf8_lower_boundary = 0x80;
this.utf8_upper_boundary = 0xBF;
// 2. Prepend byte to stream.
stream.prepend(bite);
// 3. Return error.
return encodings_1.decoderError(this.fatal);
}
// 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary
// to 0xBF.
this.utf8_lower_boundary = 0x80;
this.utf8_upper_boundary = 0xBF;
// 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte &
// 0x3F)
this.utf8_code_point = (this.utf8_code_point << 6) | (bite & 0x3F);
// 7. Increase utf-8 bytes seen by one.
this.utf8_bytes_seen += 1;
// 8. If utf-8 bytes seen is not equal to utf-8 bytes needed,
// continue.
if (this.utf8_bytes_seen !== this.utf8_bytes_needed)
return null;
// 9. Let code point be utf-8 code point.
var code_point = this.utf8_code_point;
// 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes
// seen to 0.
this.utf8_code_point = this.utf8_bytes_needed = this.utf8_bytes_seen = 0;
// 11. Return a code point whose value is code point.
return code_point;
};
return UTF8Decoder;
}());
exports.UTF8Decoder = UTF8Decoder;
//# sourceMappingURL=UTF8Decoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"UTF8Decoder.js","sourceRoot":"","sources":["../../../../src/coders/utf-8/UTF8Decoder.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class UTF8Encoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,66 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var finished_1 = require("../../encoding/finished");
var terminology_1 = require("../../encoding/terminology");
var utilities_1 = require("../../encoding/utilities");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var UTF8Encoder = /** @class */ (function () {
function UTF8Encoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
UTF8Encoder.prototype.handler = function (stream, code_point) {
// 1. If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. Set count and offset based on the range code point is in:
var count, offset;
// U+0080 to U+07FF, inclusive:
if (utilities_1.inRange(code_point, 0x0080, 0x07FF)) {
// 1 and 0xC0
count = 1;
offset = 0xC0;
}
// U+0800 to U+FFFF, inclusive:
else if (utilities_1.inRange(code_point, 0x0800, 0xFFFF)) {
// 2 and 0xE0
count = 2;
offset = 0xE0;
}
// U+10000 to U+10FFFF, inclusive:
else if (utilities_1.inRange(code_point, 0x10000, 0x10FFFF)) {
// 3 and 0xF0
count = 3;
offset = 0xF0;
}
// 4. Let bytes be a byte sequence whose first byte is (code
// point >> (6 × count)) + offset.
var bytes = [(code_point >> (6 * count)) + offset];
// 5. Run these substeps while count is greater than 0:
while (count > 0) {
// 1. Set temp to code point >> (6 × (count 1)).
var temp = code_point >> (6 * (count - 1));
// 2. Append to bytes 0x80 | (temp & 0x3F).
bytes.push(0x80 | (temp & 0x3F));
// 3. Decrease count by one.
count -= 1;
}
// 6. Return bytes bytes, in order.
return bytes;
};
return UTF8Encoder;
}());
exports.UTF8Encoder = UTF8Encoder;
//# sourceMappingURL=UTF8Encoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"UTF8Encoder.js","sourceRoot":"","sources":["../../../../src/coders/utf-8/UTF8Encoder.ts"],"names":[],"mappings":";;AACA,oDAAmD;AACnD,0DAA6E;AAC7E,sDAAmD;AAEnD;;;;GAIG;AACH;IAIE,qBAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,6BAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,sDAAsD;QACtD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,+DAA+D;QAC/D,IAAI,KAAa,EAAE,MAAc,CAAC;QAClC,+BAA+B;QAC/B,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;YACvC,aAAa;YACb,KAAK,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,IAAI,CAAC;SACf;QACD,+BAA+B;aAC1B,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;YAC5C,aAAa;YACb,KAAK,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,IAAI,CAAC;SACf;QACD,kCAAkC;aAC7B,IAAI,mBAAO,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;YAC/C,aAAa;YACb,KAAK,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,IAAI,CAAC;SACf;QAED,4DAA4D;QAC5D,kCAAkC;QAClC,IAAM,KAAK,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAErD,uDAAuD;QACvD,OAAO,KAAK,GAAG,CAAC,EAAE;YAEhB,kDAAkD;YAClD,IAAM,IAAI,GAAG,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAE7C,2CAA2C;YAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;YAEjC,4BAA4B;YAC5B,KAAK,IAAI,CAAC,CAAC;SACZ;QAED,mCAAmC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IACH,kBAAC;AAAD,CAAC,AAhED,IAgEC;AAhEY,kCAAW"}

View File

@@ -0,0 +1,2 @@
export * from './UTF8Decoder';
export * from './UTF8Encoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./UTF8Decoder"));
__export(require("./UTF8Encoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/utf-8/index.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8B;AAC9B,mCAA8B"}

View File

@@ -0,0 +1,20 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
export declare class XUserDefinedDecoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @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.
*/
handler(stream: Stream, bite: number): (number | Array<number>) | null;
}

View File

@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var finished_1 = require("../../encoding/finished");
var terminology_1 = require("../../encoding/terminology");
/**
* @constructor
* @implements {Decoder}
* @param {{fatal: boolean}} options
*/
var XUserDefinedDecoder = /** @class */ (function () {
function XUserDefinedDecoder(options) {
this.fatal = options.fatal;
}
/**
* @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.
*/
XUserDefinedDecoder.prototype.handler = function (stream, bite) {
// 1. If byte is end-of-stream, return finished.
if (bite === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If byte is an ASCII byte, return a code point whose value
// is byte.
if (terminology_1.isASCIIByte(bite))
return bite;
// 3. Return a code point whose value is 0xF780 + byte 0x80.
return 0xF780 + bite - 0x80;
};
return XUserDefinedDecoder;
}());
exports.XUserDefinedDecoder = XUserDefinedDecoder;
//# sourceMappingURL=XUserDefinedDecoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"XUserDefinedDecoder.js","sourceRoot":"","sources":["../../../../src/coders/x-user-defined/XUserDefinedDecoder.ts"],"names":[],"mappings":";;AACA,oDAAmD;AACnD,0DAAwE;AAExE;;;;GAIG;AACH;IAIE,6BAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,qCAAO,GAAP,UAAQ,MAAc,EAAE,IAAY;QAClC,gDAAgD;QAChD,IAAI,IAAI,KAAK,2BAAa;YACxB,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,WAAW;QACX,IAAI,yBAAW,CAAC,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;QAEd,8DAA8D;QAC9D,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9B,CAAC;IACH,0BAAC;AAAD,CAAC,AA5BD,IA4BC;AA5BY,kDAAmB"}

View File

@@ -0,0 +1,18 @@
import { Stream } from "../../common/Stream";
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
export declare class XUserDefinedEncoder {
readonly fatal: boolean;
constructor(options: {
fatal: boolean;
});
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
handler(stream: Stream, code_point: number): (number | Array<number>);
}

View File

@@ -0,0 +1,39 @@
"use strict";
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");
/**
* @constructor
* @implements {Encoder}
* @param {{fatal: boolean}} options
*/
var XUserDefinedEncoder = /** @class */ (function () {
function XUserDefinedEncoder(options) {
this.fatal = options.fatal;
}
/**
* @param {Stream} stream Input stream.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit.
*/
XUserDefinedEncoder.prototype.handler = function (stream, code_point) {
// 1.If code point is end-of-stream, return finished.
if (code_point === terminology_1.end_of_stream)
return finished_1.finished;
// 2. If code point is an ASCII code point, return a byte whose
// value is code point.
if (terminology_1.isASCIICodePoint(code_point))
return code_point;
// 3. If code point is in the range U+F780 to U+F7FF, inclusive,
// return a byte whose value is code point 0xF780 + 0x80.
if (utilities_1.inRange(code_point, 0xF780, 0xF7FF))
return code_point - 0xF780 + 0x80;
// 4. Return error with code point.
return encodings_1.encoderError(code_point);
};
return XUserDefinedEncoder;
}());
exports.XUserDefinedEncoder = XUserDefinedEncoder;
//# sourceMappingURL=XUserDefinedEncoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"XUserDefinedEncoder.js","sourceRoot":"","sources":["../../../../src/coders/x-user-defined/XUserDefinedEncoder.ts"],"names":[],"mappings":";;AACA,sDAAwD;AACxD,oDAAmD;AACnD,0DAA6E;AAC7E,sDAAmD;AAEnD;;;;GAIG;AACH;IAIE,6BAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,qCAAO,GAAP,UAAQ,MAAc,EAAE,UAAkB;QACxC,qDAAqD;QACrD,IAAI,UAAU,KAAK,2BAAa;YAC9B,OAAO,mBAAQ,CAAC;QAElB,+DAA+D;QAC/D,uBAAuB;QACvB,IAAI,8BAAgB,CAAC,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;QAEpB,gEAAgE;QAChE,2DAA2D;QAC3D,IAAI,mBAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrC,OAAO,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;QAEpC,mCAAmC;QACnC,OAAO,wBAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACH,0BAAC;AAAD,CAAC,AA/BD,IA+BC;AA/BY,kDAAmB"}

View File

@@ -0,0 +1,2 @@
export * from './XUserDefinedDecoder';
export * from './XUserDefinedEncoder';

View File

@@ -0,0 +1,8 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./XUserDefinedDecoder"));
__export(require("./XUserDefinedEncoder"));
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/coders/x-user-defined/index.ts"],"names":[],"mappings":";;;;;AAAA,2CAAsC;AACtC,2CAAsC"}

View File

@@ -0,0 +1,12 @@
import { Stream } from "./Stream";
/** @interface */
export interface Decoder {
/**
* @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, or |finished|.
*/
handler(stream: Stream, bite: number): number | number[];
}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Decoder.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Decoder.js","sourceRoot":"","sources":["../../../src/common/Decoder.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,10 @@
import { Stream } from "./Stream";
/** @interface */
export interface Encoder {
/**
* @param {Stream} stream The stream of code points being encoded.
* @param {number} code_point Next code point read from the stream.
* @return {(number|!Array.<number>)} Byte(s) to emit, or |finished|.
*/
handler(stream: Stream, code_point: number): number | number[];
}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Encoder.js.map

Some files were not shown because too many files have changed in this diff Show More