iconv-tiny 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -19
- package/dist/iconv-tiny.d.mts +59 -45
- package/dist/iconv-tiny.min.mjs +25 -21
- package/dist/iconv-tiny.mjs +768 -491
- package/package.json +4 -4
package/dist/iconv-tiny.mjs
CHANGED
|
@@ -1,16 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* iconv-tiny v1.
|
|
2
|
+
* iconv-tiny v1.4.0
|
|
3
3
|
* (c) 2025-present vip.delete <vip.delete@gmail.com>
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
// src/types.mjs
|
|
9
|
+
var createDecoderOperations = (createDecodeStateFn, decodeFn, decodeEndFn) => ({
|
|
10
|
+
createDecodeStateFn,
|
|
11
|
+
decodeFn,
|
|
12
|
+
decodeEndFn
|
|
13
|
+
});
|
|
14
|
+
var createEncoderOperations = (createEncodeStateFn, encodeIntoFn, flushIntoFn, byteLengthMaxFn, byteLengthFn) => ({
|
|
15
|
+
createEncodeStateFn,
|
|
16
|
+
encodeIntoFn,
|
|
17
|
+
flushIntoFn,
|
|
18
|
+
byteLengthMaxFn,
|
|
19
|
+
byteLengthFn
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// src/native.mjs
|
|
23
|
+
var createDecodeStateNative = (charsetCtx, options) => {
|
|
24
|
+
const ignoreBOM = !(options?.stripBOM ?? STRIP_BOM_DEFAULT);
|
|
25
|
+
const state = {
|
|
26
|
+
decoder: new TextDecoder(charsetCtx.charsetName, { ignoreBOM })
|
|
27
|
+
};
|
|
28
|
+
return state;
|
|
29
|
+
};
|
|
30
|
+
var nativeDecode = (decodeState, input) => (
|
|
31
|
+
/** @type {!DecodeStateNative} */
|
|
32
|
+
decodeState.decoder.decode(input, { stream: true })
|
|
33
|
+
);
|
|
34
|
+
var nativeDecodeEnd = (decodeState) => (
|
|
35
|
+
/** @type {!DecodeStateNative} */
|
|
36
|
+
decodeState.decoder.decode()
|
|
37
|
+
);
|
|
38
|
+
var nativeDecoderOp = createDecoderOperations(
|
|
39
|
+
//
|
|
40
|
+
createDecodeStateNative,
|
|
41
|
+
nativeDecode,
|
|
42
|
+
nativeDecodeEnd
|
|
43
|
+
);
|
|
44
|
+
var isNativeDecoderSupported = (charsetName) => {
|
|
45
|
+
try {
|
|
46
|
+
new TextDecoder(charsetName);
|
|
47
|
+
return true;
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
8
53
|
// src/commons.mjs
|
|
54
|
+
var TEXT_ENCODER = new TextEncoder();
|
|
9
55
|
var REPLACEMENT_CHARACTER_CODE = 65533;
|
|
10
56
|
var DEFAULT_CHAR_BYTE = 63;
|
|
57
|
+
var MAX_BPM = 65535;
|
|
58
|
+
var MAX_CODE_POINT = 1114111;
|
|
59
|
+
var BOM_CHAR_CODE = 65279;
|
|
60
|
+
var STRIP_BOM_DEFAULT = true;
|
|
61
|
+
var ADD_BOM_DEFAULT = false;
|
|
62
|
+
var HIGH_SURROGATE_FROM = 55296;
|
|
63
|
+
var LOW_SURROGATE_FROM = 56320;
|
|
11
64
|
var STRING_SMALLSIZE = 192;
|
|
12
65
|
var STRING_CHUNKSIZE = 1024;
|
|
13
|
-
var UTF16LE = new TextDecoder("utf-16le", { fatal: true });
|
|
66
|
+
var UTF16LE = new TextDecoder("utf-16le", { fatal: true, ignoreBOM: true });
|
|
67
|
+
var MAX_PREPEND_BYTES = 4;
|
|
68
|
+
var MAX_LEFTOVER_BYTES = 4;
|
|
14
69
|
var getStringFallback = (u16) => {
|
|
15
70
|
const len = u16.length;
|
|
16
71
|
const result = [];
|
|
@@ -31,95 +86,164 @@ var getString = (u16) => {
|
|
|
31
86
|
}
|
|
32
87
|
};
|
|
33
88
|
var isMapped = (num) => num !== REPLACEMENT_CHARACTER_CODE;
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
89
|
+
var decodeEndDummy = () => "";
|
|
90
|
+
var flushIntoDummy = () => {
|
|
91
|
+
};
|
|
92
|
+
var byteLengthMax1X = (str) => str.length;
|
|
93
|
+
var byteLengthMax2X = (str) => 2 * str.length;
|
|
94
|
+
var byteLengthMax4X = (str) => 4 * str.length;
|
|
95
|
+
var put16LE = (cp, buf, i) => {
|
|
96
|
+
buf[i] = cp;
|
|
97
|
+
buf[i + 1] = cp >> 8;
|
|
98
|
+
};
|
|
99
|
+
var put16BE = (cp, buf, i) => {
|
|
100
|
+
buf[i] = cp >> 8;
|
|
101
|
+
buf[i + 1] = cp;
|
|
102
|
+
};
|
|
103
|
+
var put32LE = (cp, buf, i) => {
|
|
104
|
+
buf[i] = cp;
|
|
105
|
+
buf[i + 1] = cp >> 8;
|
|
106
|
+
buf[i + 2] = cp >> 16;
|
|
107
|
+
buf[i + 3] = cp >> 24;
|
|
108
|
+
};
|
|
109
|
+
var put32BE = (cp, buf, i) => {
|
|
110
|
+
buf[i] = cp >> 24;
|
|
111
|
+
buf[i + 1] = cp >> 16;
|
|
112
|
+
buf[i + 2] = cp >> 8;
|
|
113
|
+
buf[i + 3] = cp;
|
|
114
|
+
};
|
|
115
|
+
var get32LE = (buf, i) => (buf[i] | buf[i + 1] << 8 | buf[i + 2] << 16 | buf[i + 3] << 24) >>> 0;
|
|
116
|
+
var get32BE = (buf, i) => (buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3]) >>> 0;
|
|
117
|
+
var appendCodePoint = (cp, buf, i) => {
|
|
118
|
+
if (cp <= MAX_BPM) {
|
|
119
|
+
buf[i] = cp;
|
|
120
|
+
return 1;
|
|
121
|
+
}
|
|
122
|
+
if (cp > MAX_CODE_POINT) {
|
|
123
|
+
buf[i] = REPLACEMENT_CHARACTER_CODE;
|
|
124
|
+
return 1;
|
|
125
|
+
}
|
|
126
|
+
cp -= 65536;
|
|
127
|
+
buf[i] = HIGH_SURROGATE_FROM | cp >> 10;
|
|
128
|
+
buf[i + 1] = LOW_SURROGATE_FROM | cp & 1023;
|
|
129
|
+
return 2;
|
|
130
|
+
};
|
|
131
|
+
var TEMP_BUFFER = new Uint8Array(4096);
|
|
132
|
+
var byteLengthDefault = (str, ctx2, op) => {
|
|
133
|
+
const state = op.createEncodeStateFn(ctx2, {});
|
|
37
134
|
do {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
} while (
|
|
42
|
-
|
|
135
|
+
const read = state.r;
|
|
136
|
+
op.encodeIntoFn(state, str, TEMP_BUFFER);
|
|
137
|
+
str = str.slice(state.r - read);
|
|
138
|
+
} while (str.length);
|
|
139
|
+
op.flushIntoFn(state, TEMP_BUFFER);
|
|
140
|
+
return state.w;
|
|
43
141
|
};
|
|
44
|
-
var
|
|
142
|
+
var DecoderStream = class {
|
|
45
143
|
/**
|
|
46
|
-
* @param {!
|
|
144
|
+
* @param {!DecodeState} state
|
|
47
145
|
* @param {!DecoderOperations} op
|
|
48
|
-
* @param {!ns.DecoderOptions} [options]
|
|
49
146
|
*/
|
|
50
|
-
constructor(
|
|
51
|
-
this.state =
|
|
147
|
+
constructor(state, op) {
|
|
148
|
+
this.state = state;
|
|
52
149
|
this.op = op;
|
|
53
150
|
}
|
|
54
151
|
/**
|
|
55
152
|
* @override
|
|
56
|
-
* @param {!Uint8Array}
|
|
153
|
+
* @param {!Uint8Array} buf
|
|
154
|
+
* @return {string}
|
|
155
|
+
*/
|
|
156
|
+
// @ts-expect-error
|
|
157
|
+
write(buf) {
|
|
158
|
+
return this.op.decodeFn(this.state, buf);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* @override
|
|
57
162
|
* @return {string}
|
|
58
163
|
*/
|
|
59
164
|
// @ts-expect-error
|
|
60
|
-
|
|
61
|
-
return this.op.
|
|
165
|
+
end() {
|
|
166
|
+
return this.op.decodeEndFn(this.state);
|
|
62
167
|
}
|
|
63
168
|
};
|
|
64
|
-
var
|
|
169
|
+
var EncoderStream = class {
|
|
65
170
|
/**
|
|
66
|
-
* @param {!
|
|
171
|
+
* @param {!EncodeState} state
|
|
67
172
|
* @param {!EncoderOperations} op
|
|
68
|
-
* @param {!ns.EncoderOptions} [options]
|
|
69
173
|
*/
|
|
70
|
-
constructor(
|
|
71
|
-
this.
|
|
174
|
+
constructor(state, op) {
|
|
175
|
+
this.state = state;
|
|
72
176
|
this.op = op;
|
|
73
|
-
this.options = options ?? {};
|
|
74
|
-
this.state = op.createEncodeStateFn(ctx, this.options);
|
|
75
177
|
}
|
|
76
178
|
/**
|
|
77
179
|
* @override
|
|
78
|
-
* @param {string}
|
|
180
|
+
* @param {string} str
|
|
79
181
|
* @return {!Uint8Array}
|
|
80
182
|
*/
|
|
81
183
|
// @ts-expect-error
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
184
|
+
write(str) {
|
|
185
|
+
const { state, op } = this;
|
|
186
|
+
const buf = new Uint8Array(op.byteLengthMaxFn(str) + MAX_PREPEND_BYTES);
|
|
187
|
+
const writtenBefore = state.w;
|
|
188
|
+
op.encodeIntoFn(state, str, buf);
|
|
189
|
+
return buf.subarray(0, state.w - writtenBefore);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* @override
|
|
193
|
+
* @return {!Uint8Array}
|
|
194
|
+
*/
|
|
195
|
+
// @ts-expect-error
|
|
196
|
+
end() {
|
|
197
|
+
const { state, op } = this;
|
|
198
|
+
const buf = new Uint8Array(MAX_LEFTOVER_BYTES);
|
|
199
|
+
const writtenBefore = state.w;
|
|
200
|
+
op.flushIntoFn(state, buf);
|
|
201
|
+
return buf.subarray(0, state.w - writtenBefore);
|
|
91
202
|
}
|
|
203
|
+
// --- Low-Level Encoding APIs ---
|
|
92
204
|
/**
|
|
93
205
|
* @override
|
|
94
|
-
* @param {string}
|
|
95
|
-
* @param {!Uint8Array}
|
|
206
|
+
* @param {string} str
|
|
207
|
+
* @param {!Uint8Array} buf
|
|
96
208
|
* @return {!ns.TextEncoderEncodeIntoResult}
|
|
97
209
|
*/
|
|
98
210
|
// @ts-expect-error
|
|
99
|
-
encodeInto(
|
|
100
|
-
|
|
211
|
+
encodeInto(str, buf) {
|
|
212
|
+
const { state, op } = this;
|
|
213
|
+
const readBefore = state.r;
|
|
214
|
+
const writtenBefore = state.w;
|
|
215
|
+
op.encodeIntoFn(state, str, buf);
|
|
216
|
+
return { read: state.r - readBefore, written: state.w - writtenBefore };
|
|
101
217
|
}
|
|
102
218
|
/**
|
|
103
219
|
* @override
|
|
104
|
-
* @param {
|
|
105
|
-
* @return {
|
|
220
|
+
* @param {!Uint8Array} buf
|
|
221
|
+
* @return {!ns.TextEncoderEncodeIntoResult}
|
|
106
222
|
*/
|
|
107
223
|
// @ts-expect-error
|
|
108
|
-
|
|
109
|
-
const {
|
|
110
|
-
|
|
224
|
+
flushInto(buf) {
|
|
225
|
+
const { state, op } = this;
|
|
226
|
+
const readBefore = state.r;
|
|
227
|
+
const writtenBefore = state.w;
|
|
228
|
+
op.flushIntoFn(state, buf);
|
|
229
|
+
return { read: state.r - readBefore, written: state.w - writtenBefore };
|
|
111
230
|
}
|
|
112
231
|
};
|
|
113
232
|
var Encoding = class {
|
|
114
233
|
/**
|
|
115
234
|
* @param {!CharsetContext} ctx
|
|
116
235
|
* @param {!DecoderOperations} decoderOp
|
|
236
|
+
* @param {?DecoderOperations} decoderOpFast
|
|
117
237
|
* @param {!EncoderOperations} encoderOp
|
|
238
|
+
* @param {?EncoderOperations} encoderOpFast
|
|
118
239
|
*/
|
|
119
|
-
constructor(
|
|
120
|
-
this.ctx =
|
|
240
|
+
constructor(ctx2, decoderOp, decoderOpFast, encoderOp, encoderOpFast) {
|
|
241
|
+
this.ctx = ctx2;
|
|
121
242
|
this.decoderOp = decoderOp;
|
|
122
|
-
this.
|
|
243
|
+
this.decoderOpFast = decoderOpFast;
|
|
244
|
+
this.encoderOp = encoderOp;
|
|
245
|
+
this.encoderOpFast = encoderOpFast;
|
|
246
|
+
this.nativeDecoderSupported = isNativeDecoderSupported(ctx2.charsetName);
|
|
123
247
|
}
|
|
124
248
|
/**
|
|
125
249
|
* @override
|
|
@@ -131,164 +255,241 @@ var Encoding = class {
|
|
|
131
255
|
}
|
|
132
256
|
/**
|
|
133
257
|
* @override
|
|
134
|
-
* @param {!Uint8Array}
|
|
135
|
-
* @param {!ns.
|
|
258
|
+
* @param {!Uint8Array} buf
|
|
259
|
+
* @param {!ns.DecodeOptions} [options]
|
|
136
260
|
* @return {string}
|
|
137
261
|
*/
|
|
138
262
|
// @ts-expect-error
|
|
139
|
-
decode(
|
|
140
|
-
const decoder = this.
|
|
141
|
-
|
|
263
|
+
decode(buf, options) {
|
|
264
|
+
const decoder = this.getDecoder(options);
|
|
265
|
+
const body = decoder.write(buf);
|
|
266
|
+
const tail = decoder.end();
|
|
267
|
+
return tail ? body + tail : body;
|
|
142
268
|
}
|
|
143
269
|
/**
|
|
144
270
|
* @override
|
|
145
|
-
* @param {string}
|
|
146
|
-
* @param {!ns.
|
|
271
|
+
* @param {string} str
|
|
272
|
+
* @param {!ns.EncodeOptions} [options]
|
|
147
273
|
* @return {!Uint8Array}
|
|
148
274
|
*/
|
|
149
275
|
// @ts-expect-error
|
|
150
|
-
encode(
|
|
151
|
-
|
|
152
|
-
|
|
276
|
+
encode(str, options) {
|
|
277
|
+
options ??= {};
|
|
278
|
+
const op = this.getEncoderOp(options);
|
|
279
|
+
const state = op.createEncodeStateFn(this.ctx, options);
|
|
280
|
+
const buf = new Uint8Array(op.byteLengthMaxFn(str) + MAX_PREPEND_BYTES);
|
|
281
|
+
op.encodeIntoFn(state, str, buf);
|
|
282
|
+
op.flushIntoFn(state, buf);
|
|
283
|
+
return buf.subarray(0, state.w);
|
|
153
284
|
}
|
|
154
285
|
/**
|
|
155
286
|
* @override
|
|
156
|
-
* @param {
|
|
157
|
-
* @return {
|
|
287
|
+
* @param {string} str
|
|
288
|
+
* @return {number}
|
|
158
289
|
*/
|
|
159
290
|
// @ts-expect-error
|
|
160
|
-
|
|
161
|
-
|
|
291
|
+
byteLength(str) {
|
|
292
|
+
const { ctx: ctx2, encoderOp } = this;
|
|
293
|
+
return encoderOp.byteLengthFn(str, ctx2, encoderOp);
|
|
162
294
|
}
|
|
295
|
+
// --- Low-level Stream APIs ---
|
|
163
296
|
/**
|
|
164
297
|
* @override
|
|
165
|
-
* @param {!ns.
|
|
166
|
-
* @return {!
|
|
298
|
+
* @param {!ns.DecodeOptions} [options]
|
|
299
|
+
* @return {!DecoderStream}
|
|
167
300
|
*/
|
|
168
301
|
// @ts-expect-error
|
|
169
|
-
|
|
170
|
-
|
|
302
|
+
getDecoder(options) {
|
|
303
|
+
options ??= {};
|
|
304
|
+
const op = this.getDecoderOp(options);
|
|
305
|
+
const state = op.createDecodeStateFn(this.ctx, options);
|
|
306
|
+
return new DecoderStream(state, op);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* @override
|
|
310
|
+
* @param {!ns.EncodeOptions} [options]
|
|
311
|
+
* @return {!EncoderStream}
|
|
312
|
+
*/
|
|
313
|
+
// @ts-expect-error
|
|
314
|
+
getEncoder(options) {
|
|
315
|
+
options ??= {};
|
|
316
|
+
const op = this.getEncoderOp(options);
|
|
317
|
+
const state = op.createEncodeStateFn(this.ctx, options);
|
|
318
|
+
return new EncoderStream(state, op);
|
|
319
|
+
}
|
|
320
|
+
// Private
|
|
321
|
+
/**
|
|
322
|
+
* @private
|
|
323
|
+
* @param {!ns.DecodeOptions} options
|
|
324
|
+
* @return {!DecoderOperations}
|
|
325
|
+
*/
|
|
326
|
+
getDecoderOp(options) {
|
|
327
|
+
if (this.nativeDecoderSupported && options.native) {
|
|
328
|
+
return nativeDecoderOp;
|
|
329
|
+
}
|
|
330
|
+
return this.decoderOpFast && typeof options.defaultCharUnicode !== "function" ? this.decoderOpFast : this.decoderOp;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* @private
|
|
334
|
+
* @param {!ns.EncodeOptions} options
|
|
335
|
+
* @return {!EncoderOperations}
|
|
336
|
+
*/
|
|
337
|
+
getEncoderOp(options) {
|
|
338
|
+
return this.encoderOpFast && typeof options.defaultCharByte !== "function" ? this.encoderOpFast : this.encoderOp;
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
var createEncodingFast = (ctx2, decoderOp, decoderOpFast, encoderOp, encoderOpFast) => new Encoding(
|
|
342
|
+
//
|
|
343
|
+
ctx2,
|
|
344
|
+
decoderOp,
|
|
345
|
+
decoderOpFast,
|
|
346
|
+
encoderOp,
|
|
347
|
+
encoderOpFast
|
|
348
|
+
);
|
|
349
|
+
var createEncoding = (ctx2, decoderOp, encoderOp) => createEncodingFast(
|
|
350
|
+
//
|
|
351
|
+
ctx2,
|
|
352
|
+
decoderOp,
|
|
353
|
+
decoderOp,
|
|
354
|
+
encoderOp,
|
|
355
|
+
encoderOp
|
|
356
|
+
);
|
|
357
|
+
var Singleton = class {
|
|
358
|
+
/**
|
|
359
|
+
* @param {!ns.Encoding} encoding
|
|
360
|
+
*/
|
|
361
|
+
constructor(encoding) {
|
|
362
|
+
this.encoding = encoding;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* @override
|
|
366
|
+
* @return {!ns.Encoding}
|
|
367
|
+
*/
|
|
368
|
+
// @ts-expect-error
|
|
369
|
+
create() {
|
|
370
|
+
return this.encoding;
|
|
171
371
|
}
|
|
172
372
|
};
|
|
173
|
-
var createEncoding = (ctx, decoderOp, encoderOp3) => new Encoding(ctx, decoderOp, encoderOp3);
|
|
174
373
|
|
|
175
374
|
// src/mapped.mjs
|
|
176
375
|
var NO_LEFTOVER = -1;
|
|
177
|
-
var
|
|
178
|
-
var isNativeDecoderSupported = (charsetName) => {
|
|
179
|
-
try {
|
|
180
|
-
new TextDecoder(charsetName);
|
|
181
|
-
return true;
|
|
182
|
-
} catch {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
var nativeDecodeMapped = (decodeState, input) => {
|
|
187
|
-
const state = (
|
|
188
|
-
/** @type {!DecodeStateMapped} */
|
|
189
|
-
decodeState
|
|
190
|
-
);
|
|
191
|
-
const decoder = (
|
|
192
|
-
/** @type {!TextDecoder} */
|
|
193
|
-
state.decoder
|
|
194
|
-
);
|
|
195
|
-
return decoder.decode(input, { stream: Boolean(input) });
|
|
196
|
-
};
|
|
376
|
+
var getDefaultChar = (defaultChar, defaultNumber) => typeof defaultChar === "string" && defaultChar.length > 0 ? defaultChar.charCodeAt(0) : defaultNumber;
|
|
197
377
|
var createDecodeStateMapped = (charsetCtx, options) => {
|
|
198
|
-
const
|
|
378
|
+
const ctx2 = (
|
|
199
379
|
/** @type {!MappedCharsetContext} */
|
|
200
380
|
charsetCtx
|
|
201
381
|
);
|
|
202
382
|
const defaultCharUnicode = options.defaultCharUnicode;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
let decoder = null;
|
|
206
|
-
const useNativeDecode = nativeDecoderSupported && (options?.native ?? DEFAULT_NATIVE_DECODE);
|
|
207
|
-
if (useNativeDecode) {
|
|
208
|
-
decoder = new TextDecoder(charsetName);
|
|
209
|
-
} else if (typeof defaultCharUnicode === "string") {
|
|
210
|
-
if (defaultCharUnicode.length) {
|
|
211
|
-
defaultChar = defaultCharUnicode.charCodeAt(0);
|
|
212
|
-
}
|
|
213
|
-
} else if (typeof defaultCharUnicode === "function") {
|
|
214
|
-
handler = defaultCharUnicode;
|
|
215
|
-
}
|
|
383
|
+
const defaultChar = getDefaultChar(defaultCharUnicode, REPLACEMENT_CHARACTER_CODE);
|
|
384
|
+
const handler = typeof defaultCharUnicode === "function" ? defaultCharUnicode : null;
|
|
216
385
|
const state = {
|
|
217
|
-
b2c,
|
|
386
|
+
b2c: ctx2.b2c,
|
|
387
|
+
leftover: NO_LEFTOVER,
|
|
218
388
|
defaultChar,
|
|
219
|
-
handler
|
|
220
|
-
decodeFunction: useNativeDecode ? nativeDecodeMapped : softwareDecodeMapped,
|
|
221
|
-
decoder,
|
|
222
|
-
leftover: NO_LEFTOVER
|
|
389
|
+
handler
|
|
223
390
|
};
|
|
224
391
|
return state;
|
|
225
392
|
};
|
|
226
|
-
var
|
|
227
|
-
const
|
|
228
|
-
for (let i = 0; i <
|
|
229
|
-
const
|
|
230
|
-
if (isMapped(
|
|
231
|
-
|
|
393
|
+
var createCachedForDefaultChar = (arr, defaultChar) => {
|
|
394
|
+
const cached = arr.slice();
|
|
395
|
+
for (let i = 0; i < arr.length; i++) {
|
|
396
|
+
const val = arr[i];
|
|
397
|
+
if (!isMapped(val)) {
|
|
398
|
+
cached[i] = defaultChar;
|
|
232
399
|
}
|
|
233
400
|
}
|
|
234
|
-
return
|
|
401
|
+
return cached;
|
|
235
402
|
};
|
|
236
|
-
var
|
|
237
|
-
const
|
|
403
|
+
var createDecodeStateMappedFast = (charsetCtx, options) => {
|
|
404
|
+
const ctx2 = (
|
|
238
405
|
/** @type {!MappedCharsetContext} */
|
|
239
406
|
charsetCtx
|
|
240
407
|
);
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
408
|
+
const defaultCharUnicode = options.defaultCharUnicode;
|
|
409
|
+
const defaultChar = getDefaultChar(defaultCharUnicode, REPLACEMENT_CHARACTER_CODE);
|
|
410
|
+
if (!ctx2.b2cCached || ctx2.b2cCachedForDefaultChar !== defaultChar) {
|
|
411
|
+
ctx2.b2cCached = createCachedForDefaultChar(ctx2.b2c, defaultChar);
|
|
412
|
+
ctx2.b2cCachedForDefaultChar = defaultChar;
|
|
244
413
|
}
|
|
245
|
-
const
|
|
414
|
+
const state = {
|
|
415
|
+
b2c: ctx2.b2cCached
|
|
416
|
+
};
|
|
417
|
+
return state;
|
|
418
|
+
};
|
|
419
|
+
var createEncodeStateMapped = (charsetCtx, options) => {
|
|
420
|
+
const ctx2 = (
|
|
421
|
+
/** @type {!MappedCharsetContext} */
|
|
422
|
+
charsetCtx
|
|
423
|
+
);
|
|
246
424
|
const defaultCharByte = options.defaultCharByte;
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (typeof defaultCharByte === "string") {
|
|
250
|
-
if (defaultCharByte.length) {
|
|
251
|
-
defaultChar = defaultCharByte.charCodeAt(0);
|
|
252
|
-
}
|
|
253
|
-
} else if (typeof defaultCharByte === "function") {
|
|
254
|
-
handler = defaultCharByte;
|
|
255
|
-
}
|
|
425
|
+
const defaultChar = getDefaultChar(defaultCharByte, DEFAULT_CHAR_BYTE);
|
|
426
|
+
const handler = typeof defaultCharByte === "function" ? defaultCharByte : null;
|
|
256
427
|
const state = {
|
|
257
|
-
|
|
428
|
+
r: 0,
|
|
429
|
+
w: 0,
|
|
430
|
+
c2b: ctx2.c2b,
|
|
258
431
|
defaultChar,
|
|
259
432
|
handler
|
|
260
433
|
};
|
|
261
434
|
return state;
|
|
262
435
|
};
|
|
263
|
-
var
|
|
264
|
-
const
|
|
265
|
-
/** @type {!
|
|
266
|
-
|
|
436
|
+
var createEncodeStateMappedFast = (charsetCtx, options) => {
|
|
437
|
+
const ctx2 = (
|
|
438
|
+
/** @type {!MappedCharsetContext} */
|
|
439
|
+
charsetCtx
|
|
267
440
|
);
|
|
268
|
-
|
|
441
|
+
const defaultCharByte = options.defaultCharByte;
|
|
442
|
+
const defaultChar = getDefaultChar(defaultCharByte, DEFAULT_CHAR_BYTE);
|
|
443
|
+
if (!ctx2.c2bCached || ctx2.c2bCachedForDefaultChar !== defaultChar) {
|
|
444
|
+
ctx2.c2bCached = createCachedForDefaultChar(ctx2.c2b, defaultChar);
|
|
445
|
+
ctx2.c2bCachedForDefaultChar = defaultChar;
|
|
446
|
+
}
|
|
447
|
+
const state = {
|
|
448
|
+
r: 0,
|
|
449
|
+
w: 0,
|
|
450
|
+
c2b: ctx2.c2bCached
|
|
451
|
+
};
|
|
452
|
+
return state;
|
|
269
453
|
};
|
|
270
|
-
var
|
|
271
|
-
|
|
272
|
-
|
|
454
|
+
var createC2B = (b2c) => {
|
|
455
|
+
const c2b = new Uint16Array(65536).fill(REPLACEMENT_CHARACTER_CODE);
|
|
456
|
+
for (let i = 0; i < b2c.length; i++) {
|
|
457
|
+
const ch = b2c[i];
|
|
458
|
+
if (isMapped(ch)) {
|
|
459
|
+
c2b[ch] = i;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return c2b;
|
|
273
463
|
};
|
|
274
|
-
var createCharsetMapped = (charsetName, b2c,
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
464
|
+
var createCharsetMapped = (charsetName, b2c, decoderOp, decoderOpFast, encoderOp, encoderOpFast) => {
|
|
465
|
+
const ctx2 = {
|
|
466
|
+
//
|
|
467
|
+
charsetName,
|
|
468
|
+
b2c,
|
|
469
|
+
b2cCached: null,
|
|
470
|
+
b2cCachedForDefaultChar: 0,
|
|
471
|
+
c2b: createC2B(b2c),
|
|
472
|
+
c2bCached: null,
|
|
473
|
+
c2bCachedForDefaultChar: 0
|
|
474
|
+
};
|
|
475
|
+
return createEncodingFast(
|
|
476
|
+
//
|
|
477
|
+
ctx2,
|
|
478
|
+
decoderOp,
|
|
479
|
+
decoderOpFast,
|
|
480
|
+
encoderOp,
|
|
481
|
+
encoderOpFast
|
|
482
|
+
);
|
|
278
483
|
};
|
|
279
484
|
|
|
280
485
|
// src/dbcs.mjs
|
|
281
|
-
var decodeDBCS = (decodeState,
|
|
486
|
+
var decodeDBCS = (decodeState, buf) => {
|
|
282
487
|
const state = (
|
|
283
488
|
/** @type {!DecodeStateMapped} */
|
|
284
489
|
decodeState
|
|
285
490
|
);
|
|
286
491
|
const { b2c, defaultChar, handler, leftover } = state;
|
|
287
|
-
|
|
288
|
-
state.leftover = NO_LEFTOVER;
|
|
289
|
-
return leftover === NO_LEFTOVER ? "" : String.fromCharCode(handler?.(leftover, -1) ?? defaultChar);
|
|
290
|
-
}
|
|
291
|
-
const len = array.length;
|
|
492
|
+
const len = buf.length;
|
|
292
493
|
if (len === 0) {
|
|
293
494
|
return "";
|
|
294
495
|
}
|
|
@@ -297,7 +498,7 @@ var decodeDBCS = (decodeState, array) => {
|
|
|
297
498
|
let j = 0;
|
|
298
499
|
let lead;
|
|
299
500
|
if (leftover === NO_LEFTOVER) {
|
|
300
|
-
lead =
|
|
501
|
+
lead = buf[0];
|
|
301
502
|
} else {
|
|
302
503
|
state.leftover = NO_LEFTOVER;
|
|
303
504
|
lead = leftover;
|
|
@@ -308,7 +509,7 @@ var decodeDBCS = (decodeState, array) => {
|
|
|
308
509
|
if (isMapped(ch)) {
|
|
309
510
|
u16[j++] = ch;
|
|
310
511
|
} else if (i + 1 < len) {
|
|
311
|
-
const trail =
|
|
512
|
+
const trail = buf[i + 1];
|
|
312
513
|
const code = lead << 8 | trail;
|
|
313
514
|
ch = b2c[code];
|
|
314
515
|
if (isMapped(ch)) {
|
|
@@ -323,53 +524,72 @@ var decodeDBCS = (decodeState, array) => {
|
|
|
323
524
|
}
|
|
324
525
|
i++;
|
|
325
526
|
if (i < len) {
|
|
326
|
-
lead =
|
|
527
|
+
lead = buf[i];
|
|
327
528
|
} else {
|
|
328
529
|
break;
|
|
329
530
|
}
|
|
330
531
|
}
|
|
331
532
|
return getString(u16.subarray(0, j));
|
|
332
533
|
};
|
|
333
|
-
var
|
|
334
|
-
const
|
|
534
|
+
var decodeEndDBCS = (decodeState) => {
|
|
535
|
+
const state = (
|
|
536
|
+
/** @type {!DecodeStateMapped} */
|
|
537
|
+
decodeState
|
|
538
|
+
);
|
|
539
|
+
const leftover = state.leftover;
|
|
540
|
+
state.leftover = NO_LEFTOVER;
|
|
541
|
+
return leftover === NO_LEFTOVER ? "" : String.fromCharCode(state.handler?.(leftover, -1) ?? state.defaultChar);
|
|
542
|
+
};
|
|
543
|
+
var decoderOpDBCS = createDecoderOperations(
|
|
544
|
+
//
|
|
545
|
+
createDecodeStateMapped,
|
|
546
|
+
decodeDBCS,
|
|
547
|
+
decodeEndDBCS
|
|
548
|
+
);
|
|
549
|
+
var encodeIntoDBCS = (encodeState, str, buf) => {
|
|
550
|
+
const state = (
|
|
335
551
|
/** @type {!EncodeStateMapped} */
|
|
336
552
|
encodeState
|
|
337
553
|
);
|
|
554
|
+
const { c2b, defaultChar, handler } = state;
|
|
338
555
|
let i = 0;
|
|
339
556
|
let j = 0;
|
|
340
|
-
const srcLen =
|
|
341
|
-
const dstLen =
|
|
557
|
+
const srcLen = str.length;
|
|
558
|
+
const dstLen = buf.length;
|
|
342
559
|
const dstLen1 = dstLen - 1;
|
|
343
560
|
for (; i < srcLen; i++) {
|
|
344
|
-
const ch =
|
|
561
|
+
const ch = str.charCodeAt(i);
|
|
345
562
|
const val = c2b[ch];
|
|
346
563
|
const value = isMapped(val) ? val : handler?.(ch, i) ?? defaultChar;
|
|
347
564
|
if (value > 255) {
|
|
348
565
|
if (j >= dstLen1) {
|
|
349
566
|
break;
|
|
350
567
|
}
|
|
351
|
-
|
|
352
|
-
|
|
568
|
+
buf[j] = value >> 8;
|
|
569
|
+
buf[j + 1] = value;
|
|
353
570
|
j += 2;
|
|
354
571
|
} else {
|
|
355
572
|
if (j >= dstLen) {
|
|
356
573
|
break;
|
|
357
574
|
}
|
|
358
|
-
|
|
575
|
+
buf[j] = value;
|
|
359
576
|
j += 1;
|
|
360
577
|
}
|
|
361
578
|
}
|
|
362
|
-
|
|
579
|
+
state.r += i;
|
|
580
|
+
state.w += j;
|
|
363
581
|
};
|
|
364
|
-
var
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
var
|
|
582
|
+
var encoderOpDBCS = createEncoderOperations(
|
|
583
|
+
//
|
|
584
|
+
createEncodeStateMapped,
|
|
585
|
+
encodeIntoDBCS,
|
|
586
|
+
flushIntoDummy,
|
|
587
|
+
byteLengthMax2X,
|
|
588
|
+
byteLengthDefault
|
|
589
|
+
);
|
|
590
|
+
var createTableDBCS = (ctx2, options) => {
|
|
591
|
+
const { parent, mappingTable } = ctx2;
|
|
592
|
+
const b2c = new Uint16Array(65536).fill(REPLACEMENT_CHARACTER_CODE);
|
|
373
593
|
for (let rangeIdx = 0; rangeIdx < mappingTable.length; rangeIdx++) {
|
|
374
594
|
const range = mappingTable[rangeIdx];
|
|
375
595
|
const start = Number.parseInt(
|
|
@@ -396,7 +616,7 @@ var applyMappingTable = (b2c, parent, mappingTable) => {
|
|
|
396
616
|
}
|
|
397
617
|
}
|
|
398
618
|
if (parent) {
|
|
399
|
-
const parentB2C = parent.
|
|
619
|
+
const parentB2C = parent.createTable();
|
|
400
620
|
for (let i = 0; i < parentB2C.length; i++) {
|
|
401
621
|
const parentCH = parentB2C[i];
|
|
402
622
|
if (isMapped(parentCH)) {
|
|
@@ -407,6 +627,7 @@ var applyMappingTable = (b2c, parent, mappingTable) => {
|
|
|
407
627
|
}
|
|
408
628
|
}
|
|
409
629
|
}
|
|
630
|
+
return b2c;
|
|
410
631
|
};
|
|
411
632
|
var DBCS = class {
|
|
412
633
|
/**
|
|
@@ -416,32 +637,39 @@ var DBCS = class {
|
|
|
416
637
|
*/
|
|
417
638
|
constructor(charsetName, parent, mappingTable) {
|
|
418
639
|
this.charsetName = charsetName;
|
|
419
|
-
this.
|
|
420
|
-
this.mappingTable = mappingTable;
|
|
640
|
+
this.ctx = { parent, mappingTable };
|
|
421
641
|
}
|
|
422
642
|
/**
|
|
423
643
|
* @override
|
|
644
|
+
* @param {!ns.Options} [options]
|
|
424
645
|
* @return {!ns.Encoding}
|
|
425
646
|
*/
|
|
426
647
|
// @ts-expect-error
|
|
427
|
-
create() {
|
|
428
|
-
return createCharsetMapped(
|
|
648
|
+
create(options) {
|
|
649
|
+
return createCharsetMapped(
|
|
650
|
+
//
|
|
651
|
+
this.charsetName,
|
|
652
|
+
this.createTable(options),
|
|
653
|
+
decoderOpDBCS,
|
|
654
|
+
decoderOpDBCS,
|
|
655
|
+
encoderOpDBCS,
|
|
656
|
+
encoderOpDBCS
|
|
657
|
+
);
|
|
429
658
|
}
|
|
430
659
|
/**
|
|
431
660
|
* @override
|
|
661
|
+
* @param {!ns.Options} [options]
|
|
432
662
|
* @return {!Uint16Array}
|
|
433
663
|
*/
|
|
434
664
|
// @ts-expect-error
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
applyMappingTable(b2c, this.parent, this.mappingTable);
|
|
438
|
-
return b2c;
|
|
665
|
+
createTable(options) {
|
|
666
|
+
return createTableDBCS(this.ctx, options);
|
|
439
667
|
}
|
|
440
668
|
};
|
|
441
669
|
|
|
442
|
-
// src/iconv
|
|
670
|
+
// src/iconv.mjs
|
|
443
671
|
var canonicalize = (encoding) => encoding.toLowerCase().replace(/[^a-z0-9]/gu, "").replace(/(?<!\d)0+/gu, "");
|
|
444
|
-
var
|
|
672
|
+
var Iconv = class {
|
|
445
673
|
/**
|
|
446
674
|
* @param {!Object<string, !ns.EncodingFactory>} [encodings]
|
|
447
675
|
* @param {string} [aliases]
|
|
@@ -462,25 +690,27 @@ var IconvTiny = class {
|
|
|
462
690
|
}
|
|
463
691
|
/**
|
|
464
692
|
* @override
|
|
465
|
-
* @param {!Uint8Array}
|
|
693
|
+
* @param {!Uint8Array} buf
|
|
466
694
|
* @param {string} encoding
|
|
467
695
|
* @param {!ns.OptionsAndDecoderOptions} [options]
|
|
468
696
|
* @return {string}
|
|
469
697
|
*/
|
|
470
698
|
// @ts-expect-error
|
|
471
|
-
decode(
|
|
472
|
-
|
|
699
|
+
decode(buf, encoding, options) {
|
|
700
|
+
const enc = this.getEncoding(encoding, options);
|
|
701
|
+
const str = enc.decode(buf, options);
|
|
702
|
+
return str;
|
|
473
703
|
}
|
|
474
704
|
/**
|
|
475
705
|
* @override
|
|
476
|
-
* @param {string}
|
|
706
|
+
* @param {string} str
|
|
477
707
|
* @param {string} encoding
|
|
478
708
|
* @param {!ns.OptionsAndEncoderOptions} [options]
|
|
479
709
|
* @return {!Uint8Array}
|
|
480
710
|
*/
|
|
481
711
|
// @ts-expect-error
|
|
482
|
-
encode(
|
|
483
|
-
return this.getEncoding(encoding, options).encode(
|
|
712
|
+
encode(str, encoding, options) {
|
|
713
|
+
return this.getEncoding(encoding, options).encode(str, options);
|
|
484
714
|
}
|
|
485
715
|
/**
|
|
486
716
|
* @override
|
|
@@ -504,84 +734,148 @@ var IconvTiny = class {
|
|
|
504
734
|
return encoding;
|
|
505
735
|
}
|
|
506
736
|
};
|
|
507
|
-
var createIconv = (encodings2, aliases2) => new
|
|
737
|
+
var createIconv = (encodings2, aliases2) => new Iconv(encodings2, aliases2);
|
|
508
738
|
|
|
509
739
|
// src/sbcs.mjs
|
|
510
|
-
var
|
|
511
|
-
|
|
512
|
-
return "";
|
|
513
|
-
}
|
|
514
|
-
const { b2c, defaultChar, handler } = (
|
|
740
|
+
var decodeSBCS = (decodeState, buf) => {
|
|
741
|
+
const state = (
|
|
515
742
|
/** @type {!DecodeStateMapped} */
|
|
516
743
|
decodeState
|
|
517
744
|
);
|
|
518
|
-
const
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
745
|
+
const b2c = state.b2c;
|
|
746
|
+
const defaultChar = state.defaultChar;
|
|
747
|
+
const handler = (
|
|
748
|
+
/** @type {!ns.DefaultFunction} */
|
|
749
|
+
state.handler
|
|
750
|
+
);
|
|
751
|
+
const u16 = new Uint16Array(buf.length);
|
|
752
|
+
for (let i = 0; i < buf.length; i++) {
|
|
753
|
+
const bt = buf[i];
|
|
754
|
+
const ch = b2c[bt];
|
|
755
|
+
u16[i] = isMapped(ch) ? ch : handler(bt, i) ?? defaultChar;
|
|
756
|
+
}
|
|
757
|
+
return Buffer ? Buffer.from(u16.buffer, u16.byteOffset, u16.byteLength).toString("ucs2") : getString(u16);
|
|
758
|
+
};
|
|
759
|
+
var decoderOpSBCS = createDecoderOperations(
|
|
760
|
+
//
|
|
761
|
+
createDecodeStateMapped,
|
|
762
|
+
decodeSBCS,
|
|
763
|
+
decodeEndDummy
|
|
764
|
+
);
|
|
765
|
+
var decodeSBCSFast = (decodeState, buf) => {
|
|
766
|
+
const state = (
|
|
767
|
+
/** @type {!DecodeStateMappedFast} */
|
|
768
|
+
decodeState
|
|
769
|
+
);
|
|
770
|
+
const b2c = state.b2c;
|
|
771
|
+
const u16 = new Uint16Array(buf.length);
|
|
772
|
+
for (let i = 0; i < buf.length; i++) {
|
|
773
|
+
const bt = buf[i];
|
|
774
|
+
const ch = b2c[bt];
|
|
775
|
+
u16[i] = ch;
|
|
524
776
|
}
|
|
525
|
-
return getString(u16);
|
|
777
|
+
return Buffer ? Buffer.from(u16.buffer, u16.byteOffset, u16.byteLength).toString("ucs2") : getString(u16);
|
|
526
778
|
};
|
|
527
|
-
var
|
|
528
|
-
|
|
779
|
+
var decoderOpSBCSFast = createDecoderOperations(
|
|
780
|
+
//
|
|
781
|
+
createDecodeStateMappedFast,
|
|
782
|
+
decodeSBCSFast,
|
|
783
|
+
decodeEndDummy
|
|
784
|
+
);
|
|
785
|
+
var encodeIntoSBCS = (encodeState, str, buf) => {
|
|
786
|
+
const state = (
|
|
529
787
|
/** @type {!EncodeStateMapped} */
|
|
530
788
|
encodeState
|
|
531
789
|
);
|
|
532
|
-
const
|
|
790
|
+
const c2b = state.c2b;
|
|
791
|
+
const defaultChar = state.defaultChar;
|
|
792
|
+
const handler = (
|
|
793
|
+
/** @type {!ns.DefaultFunction} */
|
|
794
|
+
state.handler
|
|
795
|
+
);
|
|
796
|
+
const len = Math.min(str.length, buf.length);
|
|
533
797
|
for (let i = 0; i < len; i++) {
|
|
534
|
-
const ch =
|
|
535
|
-
const
|
|
536
|
-
|
|
798
|
+
const ch = str.charCodeAt(i);
|
|
799
|
+
const bt = c2b[ch];
|
|
800
|
+
buf[i] = isMapped(bt) ? bt : handler(ch, i) ?? defaultChar;
|
|
537
801
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var byteLengthSBCS = (encodeState, op, text) => text.length;
|
|
541
|
-
var encoderOp2 = {
|
|
542
|
-
createEncodeStateFn: createEncodeStateMapped,
|
|
543
|
-
encodeIntoFn: encodeIntoSBCS,
|
|
544
|
-
byteLengthMaxFn: byteLengthSBCS,
|
|
545
|
-
byteLengthFn: byteLengthSBCS
|
|
802
|
+
state.r += len;
|
|
803
|
+
state.w += len;
|
|
546
804
|
};
|
|
547
|
-
var
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
805
|
+
var encoderOpSBCS = createEncoderOperations(
|
|
806
|
+
//
|
|
807
|
+
createEncodeStateMapped,
|
|
808
|
+
encodeIntoSBCS,
|
|
809
|
+
flushIntoDummy,
|
|
810
|
+
byteLengthMax1X,
|
|
811
|
+
byteLengthMax1X
|
|
812
|
+
);
|
|
813
|
+
var encodeIntoSBCSFast = (encodeState, str, buf) => {
|
|
814
|
+
const state = (
|
|
815
|
+
/** @type {!EncodeStateMappedFast} */
|
|
816
|
+
encodeState
|
|
817
|
+
);
|
|
818
|
+
const { c2b } = state;
|
|
819
|
+
const len = Math.min(str.length, buf.length);
|
|
820
|
+
for (let i = 0; i < len; i++) {
|
|
821
|
+
const ch = str.charCodeAt(i);
|
|
822
|
+
const bt = c2b[ch];
|
|
823
|
+
buf[i] = bt;
|
|
556
824
|
}
|
|
825
|
+
state.r += len;
|
|
826
|
+
state.w += len;
|
|
557
827
|
};
|
|
558
|
-
var
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
828
|
+
var encoderOpSBCSFast = createEncoderOperations(
|
|
829
|
+
//
|
|
830
|
+
createEncodeStateMappedFast,
|
|
831
|
+
encodeIntoSBCSFast,
|
|
832
|
+
flushIntoDummy,
|
|
833
|
+
byteLengthMax1X,
|
|
834
|
+
byteLengthMax1X
|
|
835
|
+
);
|
|
836
|
+
var createTableSBCS = (ctx2, options) => {
|
|
837
|
+
const { symbols, diff } = ctx2;
|
|
838
|
+
const b2c = new Uint16Array(256).fill(REPLACEMENT_CHARACTER_CODE);
|
|
839
|
+
{
|
|
840
|
+
let i = 0;
|
|
841
|
+
while (i < 256 - symbols.length) {
|
|
842
|
+
b2c[i] = i++;
|
|
843
|
+
}
|
|
844
|
+
let j = 0;
|
|
845
|
+
while (i < 256) {
|
|
846
|
+
b2c[i++] = symbols.charCodeAt(j++);
|
|
847
|
+
}
|
|
563
848
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
if (ch === " ".charCodeAt(0)) {
|
|
570
|
-
b2c[i] = i;
|
|
849
|
+
{
|
|
850
|
+
let i = 0;
|
|
851
|
+
while (i < diff.length) {
|
|
852
|
+
b2c[diff.charCodeAt(i)] = diff.charCodeAt(i + 1);
|
|
853
|
+
i += 2;
|
|
571
854
|
}
|
|
572
|
-
|
|
573
|
-
|
|
855
|
+
}
|
|
856
|
+
{
|
|
857
|
+
let i = 128;
|
|
858
|
+
while (i < 256) {
|
|
859
|
+
const ch = b2c[i];
|
|
860
|
+
if (ch === " ".charCodeAt(0)) {
|
|
861
|
+
b2c[i] = i;
|
|
862
|
+
}
|
|
863
|
+
if (ch === "?".charCodeAt(0)) {
|
|
864
|
+
b2c[i] = REPLACEMENT_CHARACTER_CODE;
|
|
865
|
+
}
|
|
866
|
+
i++;
|
|
574
867
|
}
|
|
575
|
-
i++;
|
|
576
868
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
869
|
+
{
|
|
870
|
+
const overrides = options?.overrides ?? [];
|
|
871
|
+
let k = 0;
|
|
872
|
+
while (k < overrides.length - 1) {
|
|
873
|
+
const code = overrides[k++];
|
|
874
|
+
const ch = overrides[k++];
|
|
875
|
+
b2c[Number(code)] = typeof ch === "number" ? ch : ch.charCodeAt(0);
|
|
876
|
+
}
|
|
584
877
|
}
|
|
878
|
+
return b2c;
|
|
585
879
|
};
|
|
586
880
|
var SBCS = class {
|
|
587
881
|
/**
|
|
@@ -591,8 +885,7 @@ var SBCS = class {
|
|
|
591
885
|
*/
|
|
592
886
|
constructor(charsetName, symbols, diff) {
|
|
593
887
|
this.charsetName = charsetName;
|
|
594
|
-
this.
|
|
595
|
-
this.diff = diff ?? "";
|
|
888
|
+
this.ctx = { symbols, diff: diff ?? "" };
|
|
596
889
|
}
|
|
597
890
|
/**
|
|
598
891
|
* @override
|
|
@@ -601,7 +894,15 @@ var SBCS = class {
|
|
|
601
894
|
*/
|
|
602
895
|
// @ts-expect-error
|
|
603
896
|
create(options) {
|
|
604
|
-
return createCharsetMapped(
|
|
897
|
+
return createCharsetMapped(
|
|
898
|
+
//
|
|
899
|
+
this.charsetName,
|
|
900
|
+
this.createTable(options),
|
|
901
|
+
decoderOpSBCS,
|
|
902
|
+
decoderOpSBCSFast,
|
|
903
|
+
encoderOpSBCS,
|
|
904
|
+
encoderOpSBCSFast
|
|
905
|
+
);
|
|
605
906
|
}
|
|
606
907
|
/**
|
|
607
908
|
* @override
|
|
@@ -609,323 +910,299 @@ var SBCS = class {
|
|
|
609
910
|
* @return {!Uint16Array}
|
|
610
911
|
*/
|
|
611
912
|
// @ts-expect-error
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
const b2c = createB2C2();
|
|
615
|
-
applySymbols(b2c, symbols);
|
|
616
|
-
applyDiff(b2c, diff);
|
|
617
|
-
replaceSpecials(b2c);
|
|
618
|
-
applyOverrides(b2c, options?.overrides ?? []);
|
|
619
|
-
return b2c;
|
|
913
|
+
createTable(options) {
|
|
914
|
+
return createTableSBCS(this.ctx, options);
|
|
620
915
|
}
|
|
621
916
|
};
|
|
622
917
|
|
|
623
918
|
// src/unicode.mjs
|
|
624
|
-
var
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
var HIGH_SURROGATE_FROM = 55296;
|
|
630
|
-
var LOW_SURROGATE_FROM = 56320;
|
|
631
|
-
var put16LE = (src, i, dst, j) => {
|
|
632
|
-
const cp = src.charCodeAt(i);
|
|
633
|
-
dst[j] = cp;
|
|
634
|
-
dst[j + 1] = cp >> 8;
|
|
635
|
-
return 0;
|
|
636
|
-
};
|
|
637
|
-
var put16BE = (src, i, dst, j) => {
|
|
638
|
-
const cp = src.charCodeAt(i);
|
|
639
|
-
dst[j] = cp >> 8;
|
|
640
|
-
dst[j + 1] = cp;
|
|
641
|
-
return 0;
|
|
642
|
-
};
|
|
643
|
-
var put32LE = (src, i, dst, j) => {
|
|
644
|
-
const cp = (
|
|
645
|
-
/** @type {number} */
|
|
646
|
-
src.codePointAt(i)
|
|
647
|
-
);
|
|
648
|
-
dst[j] = cp;
|
|
649
|
-
dst[j + 1] = cp >> 8;
|
|
650
|
-
dst[j + 2] = cp >> 16;
|
|
651
|
-
dst[j + 3] = cp >> 24;
|
|
652
|
-
return cp > 65535 ? 1 : 0;
|
|
653
|
-
};
|
|
654
|
-
var put32BE = (src, i, dst, j) => {
|
|
655
|
-
const cp = (
|
|
656
|
-
/** @type {number} */
|
|
657
|
-
src.codePointAt(i)
|
|
658
|
-
);
|
|
659
|
-
dst[j] = cp >> 24;
|
|
660
|
-
dst[j + 1] = cp >> 16;
|
|
661
|
-
dst[j + 2] = cp >> 8;
|
|
662
|
-
dst[j + 3] = cp;
|
|
663
|
-
return cp > 65535 ? 1 : 0;
|
|
664
|
-
};
|
|
665
|
-
var get32LE = (src, i) => (src[i] | src[i + 1] << 8 | src[i + 2] << 16 | src[i + 3] << 24) >>> 0;
|
|
666
|
-
var get32BE = (src, i) => (src[i] << 24 | src[i + 1] << 16 | src[i + 2] << 8 | src[i + 3]) >>> 0;
|
|
667
|
-
var appendCodePoint = (dst, j, cp) => {
|
|
668
|
-
if (cp <= MAX_BPM) {
|
|
669
|
-
dst[j] = cp;
|
|
670
|
-
dst[j + 1] = cp >> 8;
|
|
671
|
-
return 2;
|
|
672
|
-
}
|
|
673
|
-
if (cp > MAX_CODE_POINT) {
|
|
674
|
-
dst[j] = REPLACEMENT_CHARACTER_CODE;
|
|
675
|
-
dst[j + 1] = REPLACEMENT_CHARACTER_CODE >> 8;
|
|
676
|
-
return 2;
|
|
677
|
-
}
|
|
678
|
-
cp -= 65536;
|
|
679
|
-
const high = HIGH_SURROGATE_FROM | cp >> 10;
|
|
680
|
-
const low = LOW_SURROGATE_FROM | cp & 1023;
|
|
681
|
-
dst[j] = high;
|
|
682
|
-
dst[j + 1] = high >> 8;
|
|
683
|
-
dst[j + 2] = low;
|
|
684
|
-
dst[j + 3] = low >> 8;
|
|
685
|
-
return 4;
|
|
686
|
-
};
|
|
687
|
-
var createDecodeStateUTF8 = (charsetCtx, options) => {
|
|
688
|
-
const noBOM = !(options.stripBOM ?? STRIP_BOM_DEFAULT);
|
|
689
|
-
const state = {
|
|
690
|
-
decoder: new TextDecoder("UTF-8", { ignoreBOM: noBOM })
|
|
919
|
+
var createUnicodeEncoding = (name, littleEndian, decoderOp, encoderOp) => {
|
|
920
|
+
const charsetName = "UTF-" + name + (littleEndian ? "LE" : "BE");
|
|
921
|
+
const ctx2 = {
|
|
922
|
+
charsetName,
|
|
923
|
+
littleEndian
|
|
691
924
|
};
|
|
692
|
-
return
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
decodeState
|
|
925
|
+
return createEncoding(
|
|
926
|
+
//
|
|
927
|
+
ctx2,
|
|
928
|
+
decoderOp,
|
|
929
|
+
encoderOp
|
|
698
930
|
);
|
|
699
|
-
return state.decoder.decode(input, { stream: Boolean(input) });
|
|
700
|
-
};
|
|
701
|
-
var decoderOpUTF8 = {
|
|
702
|
-
createDecodeStateFn: createDecodeStateUTF8,
|
|
703
|
-
decodeFn: decodeUTF8
|
|
704
931
|
};
|
|
705
|
-
|
|
706
|
-
|
|
932
|
+
|
|
933
|
+
// src/utf16.mjs
|
|
934
|
+
var decoderOpUTF16 = nativeDecoderOp;
|
|
935
|
+
var createEncodeStateUTF16 = (charsetCtx, options) => {
|
|
936
|
+
const { littleEndian } = (
|
|
937
|
+
/** @type {!CharsetContextUnicode} */
|
|
938
|
+
charsetCtx
|
|
939
|
+
);
|
|
940
|
+
const appendBOM = options.addBOM ?? ADD_BOM_DEFAULT;
|
|
707
941
|
const state = {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
942
|
+
r: 0,
|
|
943
|
+
w: 0,
|
|
944
|
+
appendBOM,
|
|
945
|
+
put: littleEndian ? put16LE : put16BE
|
|
712
946
|
};
|
|
713
947
|
return state;
|
|
714
948
|
};
|
|
715
|
-
var
|
|
949
|
+
var encodeIntoUTF16 = (encodeState, str, buf) => {
|
|
716
950
|
const state = (
|
|
717
|
-
/** @type {!
|
|
951
|
+
/** @type {!EncodeStateUTF16} */
|
|
718
952
|
encodeState
|
|
719
953
|
);
|
|
720
|
-
const { appendBOM } = state;
|
|
954
|
+
const { appendBOM, put } = state;
|
|
721
955
|
let j = 0;
|
|
722
956
|
if (appendBOM) {
|
|
723
|
-
if (
|
|
724
|
-
return
|
|
957
|
+
if (buf.length < 2) {
|
|
958
|
+
return;
|
|
725
959
|
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
dst[2] = 191;
|
|
729
|
-
j += 3;
|
|
960
|
+
put(BOM_CHAR_CODE, buf, 0);
|
|
961
|
+
j += 2;
|
|
730
962
|
state.appendBOM = false;
|
|
731
963
|
}
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
const len1 = src.length - 1;
|
|
737
|
-
if (src.length > 0) {
|
|
738
|
-
const code = src.charCodeAt(len1);
|
|
739
|
-
if (code >= HIGH_SURROGATE_FROM && code < LOW_SURROGATE_FROM) {
|
|
740
|
-
state.highSurrogate = src.charAt(len1);
|
|
741
|
-
src = src.slice(0, len1);
|
|
964
|
+
let i = 0;
|
|
965
|
+
while (i < str.length) {
|
|
966
|
+
if (buf.length - j < 2) {
|
|
967
|
+
break;
|
|
742
968
|
}
|
|
969
|
+
const ch = str.charCodeAt(i);
|
|
970
|
+
put(ch, buf, j);
|
|
971
|
+
j += 2;
|
|
972
|
+
i++;
|
|
743
973
|
}
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
};
|
|
747
|
-
var byteLengthMaxUTF8 = (encodeState, op, text) => {
|
|
748
|
-
const state = (
|
|
749
|
-
/** @type {!EncodeStateUTF8} */
|
|
750
|
-
encodeState
|
|
751
|
-
);
|
|
752
|
-
return (state.doBOM ? 4 : 0) + text.length * 4;
|
|
753
|
-
};
|
|
754
|
-
var encoderOpUTF8 = {
|
|
755
|
-
createEncodeStateFn: createEncodeStateUTF8,
|
|
756
|
-
encodeIntoFn: encodeIntoUTF8,
|
|
757
|
-
byteLengthMaxFn: byteLengthMaxUTF8,
|
|
758
|
-
byteLengthFn: byteLengthDefault
|
|
759
|
-
};
|
|
760
|
-
var createDecodeStateUTF16 = (charsetCtx, options) => {
|
|
761
|
-
const ctx = (
|
|
762
|
-
/** @type {!UnicodeCharsetContext} */
|
|
763
|
-
charsetCtx
|
|
764
|
-
);
|
|
765
|
-
const noBOM = !(options.stripBOM ?? STRIP_BOM_DEFAULT);
|
|
766
|
-
const { bo } = ctx;
|
|
767
|
-
const state = {
|
|
768
|
-
decoder: new TextDecoder("UTF-16" + ["LE", "BE"][bo], { ignoreBOM: noBOM })
|
|
769
|
-
};
|
|
770
|
-
return state;
|
|
771
|
-
};
|
|
772
|
-
var decodeUTF16 = (decodeState, input) => {
|
|
773
|
-
const state = (
|
|
774
|
-
/** @type {!DecodeStateUTF16} */
|
|
775
|
-
decodeState
|
|
776
|
-
);
|
|
777
|
-
return state.decoder.decode(input, { stream: Boolean(input) });
|
|
778
|
-
};
|
|
779
|
-
var decoderOpUTF16 = {
|
|
780
|
-
createDecodeStateFn: createDecodeStateUTF16,
|
|
781
|
-
decodeFn: decodeUTF16
|
|
974
|
+
state.r += i;
|
|
975
|
+
state.w += j;
|
|
782
976
|
};
|
|
977
|
+
var encoderOpUTF16 = createEncoderOperations(
|
|
978
|
+
//
|
|
979
|
+
createEncodeStateUTF16,
|
|
980
|
+
encodeIntoUTF16,
|
|
981
|
+
flushIntoDummy,
|
|
982
|
+
byteLengthMax2X,
|
|
983
|
+
byteLengthMax2X
|
|
984
|
+
);
|
|
985
|
+
var UTF_16LE = createUnicodeEncoding(16, true, decoderOpUTF16, encoderOpUTF16);
|
|
986
|
+
var UTF_16BE = createUnicodeEncoding(16, false, decoderOpUTF16, encoderOpUTF16);
|
|
987
|
+
|
|
988
|
+
// src/utf32.mjs
|
|
783
989
|
var createDecodeStateUTF32 = (charsetCtx, options) => {
|
|
784
|
-
const
|
|
785
|
-
/** @type {!
|
|
990
|
+
const { littleEndian } = (
|
|
991
|
+
/** @type {!CharsetContextUnicode} */
|
|
786
992
|
charsetCtx
|
|
787
993
|
);
|
|
788
994
|
const state = {
|
|
789
995
|
leftover: new Uint8Array(4),
|
|
790
996
|
leftoverSize: 0,
|
|
791
|
-
get32:
|
|
792
|
-
|
|
997
|
+
get32: littleEndian ? get32LE : get32BE,
|
|
998
|
+
removeBOM: options.stripBOM ?? STRIP_BOM_DEFAULT
|
|
793
999
|
};
|
|
794
1000
|
return state;
|
|
795
1001
|
};
|
|
796
|
-
var decodeUTF32 = (decodeState,
|
|
1002
|
+
var decodeUTF32 = (decodeState, buf) => {
|
|
797
1003
|
const state = (
|
|
798
1004
|
/** @type {!DecodeStateUTF32} */
|
|
799
1005
|
decodeState
|
|
800
1006
|
);
|
|
801
|
-
const { leftover, get32
|
|
802
|
-
|
|
803
|
-
if (state.leftoverSize) {
|
|
804
|
-
state.leftoverSize = 0;
|
|
805
|
-
return String.fromCharCode(REPLACEMENT_CHARACTER_CODE);
|
|
806
|
-
}
|
|
807
|
-
return "";
|
|
808
|
-
}
|
|
809
|
-
const dst = new Uint8Array(input.length + 4);
|
|
1007
|
+
const { leftover, get32 } = state;
|
|
1008
|
+
const u16 = new Uint16Array((buf.length >> 1) + 2);
|
|
810
1009
|
let i = 0;
|
|
811
1010
|
let j = 0;
|
|
812
1011
|
if (state.leftoverSize) {
|
|
813
|
-
while (state.leftoverSize < 4 && i <
|
|
814
|
-
leftover[state.leftoverSize++] =
|
|
1012
|
+
while (state.leftoverSize < 4 && i < buf.length) {
|
|
1013
|
+
leftover[state.leftoverSize++] = buf[i++];
|
|
815
1014
|
}
|
|
816
1015
|
if (state.leftoverSize < 4) {
|
|
817
1016
|
return "";
|
|
818
1017
|
}
|
|
819
|
-
j += appendCodePoint(
|
|
1018
|
+
j += appendCodePoint(get32(leftover, 0), u16, j);
|
|
820
1019
|
}
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
j += appendCodePoint(dst, j, get32(input, i));
|
|
1020
|
+
for (; i < buf.length - 3; i += 4) {
|
|
1021
|
+
j += appendCodePoint(get32(buf, i), u16, j);
|
|
824
1022
|
}
|
|
825
|
-
state.leftoverSize =
|
|
1023
|
+
state.leftoverSize = buf.length - i;
|
|
826
1024
|
if (state.leftoverSize) {
|
|
827
|
-
leftover.set(
|
|
1025
|
+
leftover.set(buf.subarray(i));
|
|
1026
|
+
}
|
|
1027
|
+
let str = getString(u16.subarray(0, j));
|
|
1028
|
+
if (state.removeBOM && str.charCodeAt(0) === BOM_CHAR_CODE) {
|
|
1029
|
+
str = str.slice(1);
|
|
1030
|
+
state.removeBOM = false;
|
|
828
1031
|
}
|
|
829
|
-
return
|
|
1032
|
+
return str;
|
|
830
1033
|
};
|
|
831
|
-
var
|
|
832
|
-
|
|
833
|
-
|
|
1034
|
+
var decodeEndUTF32 = (decodeState) => {
|
|
1035
|
+
const state = (
|
|
1036
|
+
/** @type {!DecodeStateUTF32} */
|
|
1037
|
+
decodeState
|
|
1038
|
+
);
|
|
1039
|
+
if (state.leftoverSize) {
|
|
1040
|
+
state.leftoverSize = 0;
|
|
1041
|
+
return String.fromCharCode(REPLACEMENT_CHARACTER_CODE);
|
|
1042
|
+
}
|
|
1043
|
+
return "";
|
|
834
1044
|
};
|
|
835
|
-
var
|
|
836
|
-
|
|
837
|
-
|
|
1045
|
+
var decoderOpUTF32 = createDecoderOperations(
|
|
1046
|
+
//
|
|
1047
|
+
createDecodeStateUTF32,
|
|
1048
|
+
decodeUTF32,
|
|
1049
|
+
decodeEndUTF32
|
|
1050
|
+
);
|
|
1051
|
+
var createEncodeStateUTF32 = (charsetCtx, options) => {
|
|
1052
|
+
const { littleEndian } = (
|
|
1053
|
+
/** @type {!CharsetContextUnicode} */
|
|
838
1054
|
charsetCtx
|
|
839
1055
|
);
|
|
840
|
-
const doBOM = options.addBOM ?? ADD_BOM_DEFAULT;
|
|
841
1056
|
const state = {
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
put:
|
|
1057
|
+
r: 0,
|
|
1058
|
+
w: 0,
|
|
1059
|
+
appendBOM: options.addBOM ?? ADD_BOM_DEFAULT,
|
|
1060
|
+
put: littleEndian ? put32LE : put32BE,
|
|
1061
|
+
highSurrogate: 0
|
|
846
1062
|
};
|
|
847
1063
|
return state;
|
|
848
1064
|
};
|
|
849
|
-
var
|
|
1065
|
+
var encodeIntoUTF32 = (encodeState, str, buf) => {
|
|
850
1066
|
const state = (
|
|
851
|
-
/** @type {!
|
|
1067
|
+
/** @type {!EncodeStateUTF32} */
|
|
852
1068
|
encodeState
|
|
853
1069
|
);
|
|
854
|
-
const { appendBOM,
|
|
1070
|
+
const { appendBOM, put } = state;
|
|
855
1071
|
let j = 0;
|
|
856
1072
|
if (appendBOM) {
|
|
857
|
-
if (
|
|
858
|
-
return
|
|
1073
|
+
if (buf.length < 4) {
|
|
1074
|
+
return;
|
|
859
1075
|
}
|
|
860
|
-
put(
|
|
861
|
-
j +=
|
|
1076
|
+
put(BOM_CHAR_CODE, buf, 0);
|
|
1077
|
+
j += 4;
|
|
862
1078
|
state.appendBOM = false;
|
|
863
1079
|
}
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
1080
|
+
let i = 0;
|
|
1081
|
+
let k = 0;
|
|
1082
|
+
if (state.highSurrogate) {
|
|
1083
|
+
str = String.fromCharCode(state.highSurrogate) + str;
|
|
1084
|
+
state.highSurrogate = 0;
|
|
1085
|
+
k = 1;
|
|
1086
|
+
}
|
|
1087
|
+
while (i < str.length) {
|
|
1088
|
+
const ch = (
|
|
1089
|
+
/** @type {number} */
|
|
1090
|
+
str.codePointAt(i)
|
|
1091
|
+
);
|
|
1092
|
+
if (i === str.length - 1 && ch > HIGH_SURROGATE_FROM) {
|
|
1093
|
+
state.highSurrogate = ch;
|
|
1094
|
+
break;
|
|
1095
|
+
}
|
|
1096
|
+
if (buf.length - j < 4) {
|
|
1097
|
+
break;
|
|
1098
|
+
}
|
|
1099
|
+
put(ch, buf, j);
|
|
1100
|
+
i += ch > 65535 ? 2 : 1;
|
|
1101
|
+
j += 4;
|
|
867
1102
|
}
|
|
868
|
-
|
|
1103
|
+
state.r += i - k;
|
|
1104
|
+
state.w += j;
|
|
869
1105
|
};
|
|
870
|
-
var
|
|
1106
|
+
var flushIntoUTF32 = (encodeState, buf) => {
|
|
871
1107
|
const state = (
|
|
872
|
-
/** @type {!
|
|
1108
|
+
/** @type {!EncodeStateUTF32} */
|
|
873
1109
|
encodeState
|
|
874
1110
|
);
|
|
875
|
-
|
|
1111
|
+
const { put, highSurrogate } = state;
|
|
1112
|
+
if (!highSurrogate) {
|
|
1113
|
+
return;
|
|
1114
|
+
}
|
|
1115
|
+
if (buf.length < 4) {
|
|
1116
|
+
return;
|
|
1117
|
+
}
|
|
1118
|
+
put(highSurrogate, buf, 0);
|
|
1119
|
+
state.highSurrogate = 0;
|
|
1120
|
+
state.r += 0;
|
|
1121
|
+
state.w += 4;
|
|
876
1122
|
};
|
|
877
|
-
var
|
|
1123
|
+
var encoderOpUTF32 = createEncoderOperations(
|
|
1124
|
+
//
|
|
1125
|
+
createEncodeStateUTF32,
|
|
1126
|
+
encodeIntoUTF32,
|
|
1127
|
+
flushIntoUTF32,
|
|
1128
|
+
byteLengthMax4X,
|
|
1129
|
+
byteLengthDefault
|
|
1130
|
+
);
|
|
1131
|
+
var UTF_32LE = createUnicodeEncoding(32, true, decoderOpUTF32, encoderOpUTF32);
|
|
1132
|
+
var UTF_32BE = createUnicodeEncoding(32, false, decoderOpUTF32, encoderOpUTF32);
|
|
1133
|
+
|
|
1134
|
+
// src/utf8.mjs
|
|
1135
|
+
var decoderOpUTF8 = nativeDecoderOp;
|
|
1136
|
+
var createEncodeStateUTF8 = (charsetCtx, options) => {
|
|
1137
|
+
const appendBOM = options.addBOM ?? ADD_BOM_DEFAULT;
|
|
1138
|
+
const state = {
|
|
1139
|
+
r: 0,
|
|
1140
|
+
w: 0,
|
|
1141
|
+
appendBOM,
|
|
1142
|
+
highSurrogate: ""
|
|
1143
|
+
};
|
|
1144
|
+
return state;
|
|
1145
|
+
};
|
|
1146
|
+
var encodeIntoUTF8 = (encodeState, str, buf) => {
|
|
878
1147
|
const state = (
|
|
879
|
-
/** @type {!
|
|
1148
|
+
/** @type {!EncodeStateUTF8} */
|
|
880
1149
|
encodeState
|
|
881
1150
|
);
|
|
882
|
-
|
|
883
|
-
|
|
1151
|
+
let j = 0;
|
|
1152
|
+
if (state.appendBOM) {
|
|
1153
|
+
if (buf.length < 3) {
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
buf[0] = 239;
|
|
1157
|
+
buf[1] = 187;
|
|
1158
|
+
buf[2] = 191;
|
|
1159
|
+
j = 3;
|
|
1160
|
+
state.appendBOM = false;
|
|
884
1161
|
}
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
createEncodeStateFn: createEncodeStateUTF,
|
|
889
|
-
encodeIntoFn: encodeIntoUTF,
|
|
890
|
-
byteLengthMaxFn: byteLengthMaxUTF,
|
|
891
|
-
byteLengthFn: byteLengthUTF
|
|
892
|
-
};
|
|
893
|
-
var CHARSET_CONFIG = [
|
|
894
|
-
{
|
|
895
|
-
i: 16,
|
|
896
|
-
decoderOp: decoderOpUTF16,
|
|
897
|
-
encoderOp: encoderOpUTF
|
|
898
|
-
},
|
|
899
|
-
{
|
|
900
|
-
i: 32,
|
|
901
|
-
decoderOp: decoderOpUTF32,
|
|
902
|
-
encoderOp: encoderOpUTF
|
|
903
|
-
},
|
|
904
|
-
{
|
|
905
|
-
i: 8,
|
|
906
|
-
decoderOp: decoderOpUTF8,
|
|
907
|
-
encoderOp: encoderOpUTF8
|
|
1162
|
+
if (state.highSurrogate) {
|
|
1163
|
+
str = state.highSurrogate + str;
|
|
1164
|
+
state.highSurrogate = "";
|
|
908
1165
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
const ctx = { charsetName: "UTF-" + cfg.i + ["LE", "BE", ""][bo], i, bo };
|
|
918
|
-
this.encoding = createEncoding(ctx, cfg.decoderOp, cfg.encoderOp);
|
|
1166
|
+
let i = 0;
|
|
1167
|
+
if (str.length > 0) {
|
|
1168
|
+
const code = str.charCodeAt(str.length - 1);
|
|
1169
|
+
if (code >= HIGH_SURROGATE_FROM && code < LOW_SURROGATE_FROM) {
|
|
1170
|
+
state.highSurrogate = str.charAt(str.length - 1);
|
|
1171
|
+
str = str.slice(0, str.length - 1);
|
|
1172
|
+
i = 1;
|
|
1173
|
+
}
|
|
919
1174
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
1175
|
+
const { read, written } = TEXT_ENCODER.encodeInto(str, buf.subarray(j));
|
|
1176
|
+
state.r += read + i;
|
|
1177
|
+
state.w += written + j;
|
|
1178
|
+
};
|
|
1179
|
+
var flushIntoUTF8 = (encodeState, buf) => {
|
|
1180
|
+
const state = (
|
|
1181
|
+
/** @type {!EncodeStateUTF8} */
|
|
1182
|
+
encodeState
|
|
1183
|
+
);
|
|
1184
|
+
if (state.highSurrogate) {
|
|
1185
|
+
const { read, written } = TEXT_ENCODER.encodeInto(state.highSurrogate, buf);
|
|
1186
|
+
state.highSurrogate = "";
|
|
1187
|
+
state.r += 1 + read;
|
|
1188
|
+
state.w += written;
|
|
927
1189
|
}
|
|
928
1190
|
};
|
|
1191
|
+
var encoderOpUTF8 = createEncoderOperations(
|
|
1192
|
+
//
|
|
1193
|
+
createEncodeStateUTF8,
|
|
1194
|
+
encodeIntoUTF8,
|
|
1195
|
+
flushIntoUTF8,
|
|
1196
|
+
byteLengthMax4X,
|
|
1197
|
+
byteLengthDefault
|
|
1198
|
+
);
|
|
1199
|
+
var ctx = { charsetName: "UTF-8" };
|
|
1200
|
+
var UTF_8 = createEncoding(
|
|
1201
|
+
//
|
|
1202
|
+
ctx,
|
|
1203
|
+
decoderOpUTF8,
|
|
1204
|
+
encoderOpUTF8
|
|
1205
|
+
);
|
|
929
1206
|
|
|
930
1207
|
// dist/main.mjs
|
|
931
1208
|
var US_ASCII = new SBCS("US-ASCII", "?".repeat(128));
|
|
@@ -1101,11 +1378,11 @@ var CP932 = new DBCS("CP932", SHIFT_JIS, [
|
|
|
1101
1378
|
["fb80", "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],
|
|
1102
1379
|
["fc40", "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]
|
|
1103
1380
|
]);
|
|
1104
|
-
var UTF8 = new
|
|
1105
|
-
var UTF16LE2 = new
|
|
1106
|
-
var UTF16BE = new
|
|
1107
|
-
var UTF32LE = new
|
|
1108
|
-
var UTF32BE = new
|
|
1381
|
+
var UTF8 = new Singleton(UTF_8);
|
|
1382
|
+
var UTF16LE2 = new Singleton(UTF_16LE);
|
|
1383
|
+
var UTF16BE = new Singleton(UTF_16BE);
|
|
1384
|
+
var UTF32LE = new Singleton(UTF_32LE);
|
|
1385
|
+
var UTF32BE = new Singleton(UTF_32BE);
|
|
1109
1386
|
var encodings = { US_ASCII, ISO_8859_1, ISO_8859_2, ISO_8859_3, ISO_8859_4, ISO_8859_5, ISO_8859_6, ISO_8859_7, ISO_8859_8, ISO_8859_9, ISO_8859_10, ISO_8859_11, ISO_8859_13, ISO_8859_14, ISO_8859_15, ISO_8859_16, CP037, CP424, CP500, CP875, CP1026, CP437, CP737, CP775, CP850, CP852, CP855, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP874, CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257, CP1258, MAC_CYRILLIC, MAC_GREEK, MAC_ICELAND, MAC_LATIN2, MAC_ROMAN, MAC_TURKISH, ATARIST, CP856, CP1006, KOI8_R, KOI8_U, KZ1048, NEXTSTEP, JIS_0201, SHIFT_JIS, CP932, UTF8, UTF16LE: UTF16LE2, UTF16BE, UTF32LE, UTF32BE };
|
|
1110
1387
|
var aliases = "US-ASCII 646 ansix34 ascii ascii7 cp367 csascii default ibm367 iso646irv iso646us isoir6 us,ISO-8859-1 819 88591 cp819 csisolatin1 ibm819 isoir100 l1 latin1,ISO-8859-2 88592 912 cp912 csisolatin2 ibm912 isoir101 l2 latin2,ISO-8859-3 88593 913 cp913 csisolatin3 ibm913 isoir109 l3 latin3,ISO-8859-4 88594 914 cp914 csisolatin4 ibm914 isoir110 l4 latin4,ISO-8859-5 88595 915 cp915 csisolatincyrillic cyrillic ibm915 isoir144,ISO-8859-6 1089 88596 arabic asmo708 cp1089 csisolatinarabic ecma114 ibm1089 isoir127,ISO-8859-7 813 88597 cp813 csisolatingreek ecma118 elot928 greek greek8 ibm813 isoir126 suneugreek,ISO-8859-8 88598 916 cp916 csisolatinhebrew hebrew ibm916 isoir138,ISO-8859-9 88599 920 cp920 csisolatin5 ibm920 isoir148 l5 latin5,ISO-8859-10 csisolatin6 isoir157 l6 latin6,ISO-8859-11 xiso885911,ISO-8859-13 885913,ISO-8859-14 isoceltic isoir199 l8 latin8,ISO-8859-15 885915 923 cp923 csiso885915 csisolatin csisolatin9 ibm923 iso885915fdis l9 latin latin9,ISO-8859-16 csiso885916 iso8859162001 isoir226 l10 latin10,CP037 37 cpibm37 csebcdiccpca csebcdiccpnl csebcdiccpus csebcdiccpwt csibm37 ebcdiccpca ebcdiccpnl ebcdiccpus ebcdiccpwt ibm37,CP424 424 csibm424 ebcdiccphe ibm424,CP500 500 csibm500 ebcdiccpbh ebcdiccpch ibm500,CP875 875 ibm875 xibm875,CP1026 1026 ibm1026,CP437 437 cspc8codepage437 ibm437 windows437,CP737 737 ibm737 xibm737,CP775 775 ibm775,CP850 850 cspc850multilingual ibm850,CP852 852 cspcp852 ibm852,CP855 855 cspcp855 ibm855,CP857 857 csibm857 ibm857,CP860 860 csibm860 ibm860,CP861 861 cpis csibm861 ibm861,CP862 862 csibm862 cspc862latinhebrew ibm862,CP863 863 csibm863 ibm863,CP864 864 csibm864 ibm864,CP865 865 csibm865 ibm865,CP866 866 csibm866 ibm866,CP869 869 cpgr csibm869 ibm869,CP874 874 ibm874 xibm874,CP1250 cp5346 win1250 windows1250,CP1251 ansi1251 cp5347 win1251 windows1251,CP1252 cp5348 ibm1252 win1252 windows1252,CP1253 cp5349 win1253 windows1253,CP1254 cp5350 win1254 windows1254,CP1255 win1255 windows1255,CP1256 win1256 windows1256,CP1257 cp5353 win1257 windows1257,CP1258 win1258 windows1258,MAC-CYRILLIC xmaccyrillic,MAC-GREEK xmacgreek,MAC-ICELAND xmaciceland,MAC-LATIN2 maccentraleurope xmaccentraleurope,MAC-ROMAN xmacroman,MAC-TURKISH xmacturkish,ATARIST,CP856 856 ibm856 xibm856,CP1006 1006 ibm1006 xibm1006,KOI8-R cskoi8r koi8,KOI8-U cskoi8u,KZ1048 cskz1048 rk1048 strk10482002,NEXTSTEP we8nextstep,JIS-0201 cshalfwidthkatakana x201,SHIFT-JIS csshiftjis jis201 mskanji sjis xsjis,CP932 932 ms932 win932 windows31j windows932,UTF8 unicode11utf8,UTF16LE utf16,UTF16BE,UTF32LE utf32,UTF32BE";
|
|
1111
1388
|
export {
|