@ccheever/exact-ibex-runtime 0.1.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/package.json +63 -0
- package/src/abort/AbortController.ts +23 -0
- package/src/abort/AbortSignal.ts +152 -0
- package/src/abort/index.ts +2 -0
- package/src/accessibility.ts +12 -0
- package/src/arraybuffer-detach.ts +109 -0
- package/src/base64/base64.ts +168 -0
- package/src/base64/index.ts +1 -0
- package/src/blob/Blob.ts +259 -0
- package/src/blob/File.ts +59 -0
- package/src/blob/FormData.ts +323 -0
- package/src/blob/index.ts +3 -0
- package/src/bootstrap.ts +1946 -0
- package/src/broadcast/BroadcastChannel.ts +280 -0
- package/src/broadcast/index.ts +5 -0
- package/src/cache/Cache.ts +349 -0
- package/src/cache/CacheStorage.ts +89 -0
- package/src/cache/index.ts +27 -0
- package/src/camera/index.ts +6202 -0
- package/src/camera/processor.worker.ts +194 -0
- package/src/camera/scene.ts +195 -0
- package/src/clipboard/Clipboard.ts +129 -0
- package/src/clipboard/ClipboardItem.ts +97 -0
- package/src/clipboard/index.ts +6 -0
- package/src/clone/index.ts +1 -0
- package/src/clone/structuredClone.ts +389 -0
- package/src/clone/transferableSymbols.ts +2 -0
- package/src/compression/CompressionStream.ts +146 -0
- package/src/compression/DecompressionStream.ts +342 -0
- package/src/compression/index.ts +4 -0
- package/src/console/Console.ts +341 -0
- package/src/console/index.ts +2 -0
- package/src/core/accessibility-state.ts +263 -0
- package/src/core/accessibility.ts +184 -0
- package/src/core/agent-state.ts +37 -0
- package/src/core/diagnostics-logs.ts +144 -0
- package/src/core/host-call-bridge.ts +16 -0
- package/src/core/i18n-helpers.ts +189 -0
- package/src/core/locale-state.ts +253 -0
- package/src/core/locale.ts +95 -0
- package/src/crypto/Crypto.ts +2743 -0
- package/src/crypto/index.ts +1 -0
- package/src/diagnostics/logs.ts +7 -0
- package/src/encoding/TextDecoder.ts +1181 -0
- package/src/encoding/TextDecoderStream.ts +58 -0
- package/src/encoding/TextEncoder.ts +180 -0
- package/src/encoding/TextEncoderStream.ts +39 -0
- package/src/encoding/index.ts +8 -0
- package/src/events/CloseEvent.ts +91 -0
- package/src/events/DOMException.ts +409 -0
- package/src/events/ErrorEvent.ts +39 -0
- package/src/events/Event.ts +151 -0
- package/src/events/EventTarget.ts +280 -0
- package/src/events/FocusEvent.ts +27 -0
- package/src/events/KeyboardEvent.ts +46 -0
- package/src/events/MessageEvent.ts +61 -0
- package/src/events/ProgressEvent.ts +33 -0
- package/src/events/PromiseRejectionEvent.ts +31 -0
- package/src/events/index.ts +52 -0
- package/src/eventsource/EventSource.ts +371 -0
- package/src/eventsource/index.ts +2 -0
- package/src/fetch/Headers.ts +642 -0
- package/src/fetch/Request.ts +760 -0
- package/src/fetch/Response.ts +543 -0
- package/src/fetch/body.ts +1256 -0
- package/src/fetch/cookie-jar.ts +566 -0
- package/src/fetch/demo.ts +207 -0
- package/src/fetch/errors.ts +101 -0
- package/src/fetch/fetch.ts +2610 -0
- package/src/fetch/index.ts +101 -0
- package/src/fetch/native-bridge.ts +65 -0
- package/src/fetch/types.ts +258 -0
- package/src/filereader/FileReader.ts +236 -0
- package/src/filereader/index.ts +1 -0
- package/src/fs/Dirent.ts +39 -0
- package/src/fs/ExactFile.ts +450 -0
- package/src/fs/Stats.ts +80 -0
- package/src/fs/index.ts +944 -0
- package/src/fs/promises.ts +386 -0
- package/src/fs/shared.ts +328 -0
- package/src/http-server/index.js +697 -0
- package/src/http-server/index.ts +27 -0
- package/src/identity.generated.ts +14 -0
- package/src/index.ts +283 -0
- package/src/indexeddb/IDBCursor.ts +188 -0
- package/src/indexeddb/IDBDatabase.ts +343 -0
- package/src/indexeddb/IDBFactory.ts +269 -0
- package/src/indexeddb/IDBIndex.ts +194 -0
- package/src/indexeddb/IDBKeyRange.ts +109 -0
- package/src/indexeddb/IDBObjectStore.ts +468 -0
- package/src/indexeddb/IDBRequest.ts +163 -0
- package/src/indexeddb/IDBTransaction.ts +207 -0
- package/src/indexeddb/index.ts +34 -0
- package/src/indexeddb/utils.ts +52 -0
- package/src/inspect/index.ts +1 -0
- package/src/inspect/inspect.ts +465 -0
- package/src/internal/detect.ts +104 -0
- package/src/locale.ts +10 -0
- package/src/location/index.ts +1059 -0
- package/src/locks/LockManager.ts +460 -0
- package/src/locks/index.ts +12 -0
- package/src/media/VideoFrame.ts +58 -0
- package/src/messaging/MessageChannel.ts +31 -0
- package/src/messaging/MessagePort.ts +180 -0
- package/src/messaging/index.ts +2 -0
- package/src/messaging.ts +247 -0
- package/src/native/NativeModules.ts +354 -0
- package/src/native/index.ts +1 -0
- package/src/navigator/Navigator.ts +351 -0
- package/src/navigator/index.ts +1 -0
- package/src/node/Buffer.ts +1786 -0
- package/src/node/index.ts +4 -0
- package/src/node/path.ts +495 -0
- package/src/node/process.ts +2528 -0
- package/src/performance/Performance.ts +532 -0
- package/src/performance/index.ts +21 -0
- package/src/polyfills/array.ts +236 -0
- package/src/polyfills/arraybuffer.ts +172 -0
- package/src/polyfills/groupby.ts +85 -0
- package/src/polyfills/index.ts +85 -0
- package/src/polyfills/intl.ts +1956 -0
- package/src/polyfills/iterator.ts +479 -0
- package/src/polyfills/promise.ts +37 -0
- package/src/polyfills/set.ts +245 -0
- package/src/polyfills/string.ts +85 -0
- package/src/polyfills/typedarray.ts +110 -0
- package/src/promise-rejection-tracking.ts +464 -0
- package/src/react-native/index.ts +388 -0
- package/src/runtime-entry.ts +55 -0
- package/src/scheduling/AnimationFrame.ts +105 -0
- package/src/scheduling/IdleCallback.ts +167 -0
- package/src/scheduling/index.ts +13 -0
- package/src/security/Capabilities.ts +1146 -0
- package/src/security/Permissions.ts +392 -0
- package/src/security/capability-bits.generated.ts +63 -0
- package/src/security/index.ts +16 -0
- package/src/sqlite/Database.ts +456 -0
- package/src/sqlite/Statement.ts +206 -0
- package/src/sqlite/constants.ts +79 -0
- package/src/sqlite/errors.ts +25 -0
- package/src/sqlite/index.ts +34 -0
- package/src/sqlite/module.js +438 -0
- package/src/storage/Storage.ts +291 -0
- package/src/storage/StorageManager.ts +91 -0
- package/src/storage/index.ts +3 -0
- package/src/stream-compat.ts +47 -0
- package/src/streams/ReadableStream.ts +4131 -0
- package/src/streams/TransformStream.ts +375 -0
- package/src/streams/WritableStream.ts +866 -0
- package/src/streams/index.ts +41 -0
- package/src/timers/Timers.ts +296 -0
- package/src/timers/index.ts +11 -0
- package/src/url/URL.ts +656 -0
- package/src/url/URLPattern.ts +850 -0
- package/src/url/URLSearchParams.ts +244 -0
- package/src/url/index.ts +9 -0
- package/src/websocket/WebSocket.ts +770 -0
- package/src/websocket/WebSocketError.ts +52 -0
- package/src/websocket/WebSocketStream.ts +628 -0
- package/src/websocket/index.ts +7 -0
- package/src/window/index.ts +872 -0
|
@@ -0,0 +1,1181 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* TextDecoder - Web Standard TextDecoder Implementation
|
|
4
|
+
*
|
|
5
|
+
* @see https://encoding.spec.whatwg.org/#textdecoder
|
|
6
|
+
*
|
|
7
|
+
* Supported encodings: All WHATWG single-byte encodings, UTF-8, UTF-16LE/BE,
|
|
8
|
+
* replacement, x-user-defined.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { isDetachedArrayBuffer } from '../clone/structuredClone';
|
|
12
|
+
import { getNativeModule } from '../native/NativeModules';
|
|
13
|
+
|
|
14
|
+
const NativeTextDecoderImpl: (new (
|
|
15
|
+
label?: string,
|
|
16
|
+
options?: TextDecoderOptions
|
|
17
|
+
) => { decode(input?: BufferSource, options?: TextDecodeOptions): string }) | null =
|
|
18
|
+
typeof globalThis.TextDecoder === "function" ? (globalThis.TextDecoder as any) : null;
|
|
19
|
+
|
|
20
|
+
export interface TextDecoderOptions {
|
|
21
|
+
fatal?: boolean;
|
|
22
|
+
ignoreBOM?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface TextDecodeOptions {
|
|
26
|
+
stream?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function createEncodingError(message: string): TypeError & { code: string } {
|
|
30
|
+
const error = new TypeError(message) as TypeError & { code: string };
|
|
31
|
+
error.code = "ERR_ENCODING_INVALID_ENCODED_DATA";
|
|
32
|
+
return error;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function isValidUTF8Continuation(
|
|
36
|
+
startByte: number,
|
|
37
|
+
continuationByte: number,
|
|
38
|
+
position: number
|
|
39
|
+
): boolean {
|
|
40
|
+
if ((continuationByte & 0xc0) !== 0x80) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (position !== 1) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if ((startByte & 0xf0) === 0xe0) {
|
|
49
|
+
if (startByte === 0xe0 && continuationByte < 0xa0) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (startByte === 0xed && continuationByte > 0x9f) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if ((startByte & 0xf8) === 0xf0) {
|
|
58
|
+
if (startByte === 0xf0 && continuationByte < 0x90) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (startByte === 0xf4 && continuationByte > 0x8f) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// ─── WHATWG Encoding label normalization ──────────────────────────────────
|
|
70
|
+
// From https://encoding.spec.whatwg.org/#names-and-labels
|
|
71
|
+
const encodingLabels: Record<string, string> = {
|
|
72
|
+
// UTF-8
|
|
73
|
+
"unicode-1-1-utf-8": "utf-8",
|
|
74
|
+
"unicode11utf8": "utf-8",
|
|
75
|
+
"unicode20utf8": "utf-8",
|
|
76
|
+
"utf-8": "utf-8",
|
|
77
|
+
"utf8": "utf-8",
|
|
78
|
+
"x-unicode20utf8": "utf-8",
|
|
79
|
+
|
|
80
|
+
// IBM866
|
|
81
|
+
"866": "ibm866",
|
|
82
|
+
"cp866": "ibm866",
|
|
83
|
+
"csibm866": "ibm866",
|
|
84
|
+
"ibm866": "ibm866",
|
|
85
|
+
|
|
86
|
+
// ISO-8859-2
|
|
87
|
+
"csisolatin2": "iso-8859-2",
|
|
88
|
+
"iso-8859-2": "iso-8859-2",
|
|
89
|
+
"iso-ir-101": "iso-8859-2",
|
|
90
|
+
"iso8859-2": "iso-8859-2",
|
|
91
|
+
"iso88592": "iso-8859-2",
|
|
92
|
+
"iso_8859-2": "iso-8859-2",
|
|
93
|
+
"iso_8859-2:1987": "iso-8859-2",
|
|
94
|
+
"l2": "iso-8859-2",
|
|
95
|
+
"latin2": "iso-8859-2",
|
|
96
|
+
|
|
97
|
+
// ISO-8859-3
|
|
98
|
+
"csisolatin3": "iso-8859-3",
|
|
99
|
+
"iso-8859-3": "iso-8859-3",
|
|
100
|
+
"iso-ir-109": "iso-8859-3",
|
|
101
|
+
"iso8859-3": "iso-8859-3",
|
|
102
|
+
"iso88593": "iso-8859-3",
|
|
103
|
+
"iso_8859-3": "iso-8859-3",
|
|
104
|
+
"iso_8859-3:1988": "iso-8859-3",
|
|
105
|
+
"l3": "iso-8859-3",
|
|
106
|
+
"latin3": "iso-8859-3",
|
|
107
|
+
|
|
108
|
+
// ISO-8859-4
|
|
109
|
+
"csisolatin4": "iso-8859-4",
|
|
110
|
+
"iso-8859-4": "iso-8859-4",
|
|
111
|
+
"iso-ir-110": "iso-8859-4",
|
|
112
|
+
"iso8859-4": "iso-8859-4",
|
|
113
|
+
"iso88594": "iso-8859-4",
|
|
114
|
+
"iso_8859-4": "iso-8859-4",
|
|
115
|
+
"iso_8859-4:1988": "iso-8859-4",
|
|
116
|
+
"l4": "iso-8859-4",
|
|
117
|
+
"latin4": "iso-8859-4",
|
|
118
|
+
|
|
119
|
+
// ISO-8859-5
|
|
120
|
+
"csisolatincyrillic": "iso-8859-5",
|
|
121
|
+
"cyrillic": "iso-8859-5",
|
|
122
|
+
"iso-8859-5": "iso-8859-5",
|
|
123
|
+
"iso-ir-144": "iso-8859-5",
|
|
124
|
+
"iso8859-5": "iso-8859-5",
|
|
125
|
+
"iso88595": "iso-8859-5",
|
|
126
|
+
"iso_8859-5": "iso-8859-5",
|
|
127
|
+
"iso_8859-5:1988": "iso-8859-5",
|
|
128
|
+
|
|
129
|
+
// ISO-8859-6
|
|
130
|
+
"arabic": "iso-8859-6",
|
|
131
|
+
"asmo-708": "iso-8859-6",
|
|
132
|
+
"csiso88596e": "iso-8859-6",
|
|
133
|
+
"csiso88596i": "iso-8859-6",
|
|
134
|
+
"csisolatinarabic": "iso-8859-6",
|
|
135
|
+
"ecma-114": "iso-8859-6",
|
|
136
|
+
"iso-8859-6": "iso-8859-6",
|
|
137
|
+
"iso-8859-6-e": "iso-8859-6",
|
|
138
|
+
"iso-8859-6-i": "iso-8859-6",
|
|
139
|
+
"iso-ir-127": "iso-8859-6",
|
|
140
|
+
"iso8859-6": "iso-8859-6",
|
|
141
|
+
"iso88596": "iso-8859-6",
|
|
142
|
+
"iso_8859-6": "iso-8859-6",
|
|
143
|
+
"iso_8859-6:1987": "iso-8859-6",
|
|
144
|
+
|
|
145
|
+
// ISO-8859-7
|
|
146
|
+
"csisolatingreek": "iso-8859-7",
|
|
147
|
+
"ecma-118": "iso-8859-7",
|
|
148
|
+
"elot_928": "iso-8859-7",
|
|
149
|
+
"greek": "iso-8859-7",
|
|
150
|
+
"greek8": "iso-8859-7",
|
|
151
|
+
"iso-8859-7": "iso-8859-7",
|
|
152
|
+
"iso-ir-126": "iso-8859-7",
|
|
153
|
+
"iso8859-7": "iso-8859-7",
|
|
154
|
+
"iso88597": "iso-8859-7",
|
|
155
|
+
"iso_8859-7": "iso-8859-7",
|
|
156
|
+
"iso_8859-7:1987": "iso-8859-7",
|
|
157
|
+
"sun_eu_greek": "iso-8859-7",
|
|
158
|
+
|
|
159
|
+
// ISO-8859-8
|
|
160
|
+
"csiso88598e": "iso-8859-8",
|
|
161
|
+
"csisolatinhebrew": "iso-8859-8",
|
|
162
|
+
"hebrew": "iso-8859-8",
|
|
163
|
+
"iso-8859-8": "iso-8859-8",
|
|
164
|
+
"iso-8859-8-e": "iso-8859-8",
|
|
165
|
+
"iso-ir-138": "iso-8859-8",
|
|
166
|
+
"iso8859-8": "iso-8859-8",
|
|
167
|
+
"iso88598": "iso-8859-8",
|
|
168
|
+
"iso_8859-8": "iso-8859-8",
|
|
169
|
+
"iso_8859-8:1988": "iso-8859-8",
|
|
170
|
+
"visual": "iso-8859-8",
|
|
171
|
+
|
|
172
|
+
// ISO-8859-8-I
|
|
173
|
+
"csiso88598i": "iso-8859-8-i",
|
|
174
|
+
"iso-8859-8-i": "iso-8859-8-i",
|
|
175
|
+
"logical": "iso-8859-8-i",
|
|
176
|
+
|
|
177
|
+
// ISO-8859-10
|
|
178
|
+
"csisolatin6": "iso-8859-10",
|
|
179
|
+
"iso-8859-10": "iso-8859-10",
|
|
180
|
+
"iso-ir-157": "iso-8859-10",
|
|
181
|
+
"iso8859-10": "iso-8859-10",
|
|
182
|
+
"iso885910": "iso-8859-10",
|
|
183
|
+
"l6": "iso-8859-10",
|
|
184
|
+
"latin6": "iso-8859-10",
|
|
185
|
+
|
|
186
|
+
// ISO-8859-13
|
|
187
|
+
"iso-8859-13": "iso-8859-13",
|
|
188
|
+
"iso8859-13": "iso-8859-13",
|
|
189
|
+
"iso885913": "iso-8859-13",
|
|
190
|
+
|
|
191
|
+
// ISO-8859-14
|
|
192
|
+
"iso-8859-14": "iso-8859-14",
|
|
193
|
+
"iso8859-14": "iso-8859-14",
|
|
194
|
+
"iso885914": "iso-8859-14",
|
|
195
|
+
|
|
196
|
+
// ISO-8859-15
|
|
197
|
+
"csisolatin9": "iso-8859-15",
|
|
198
|
+
"iso-8859-15": "iso-8859-15",
|
|
199
|
+
"iso8859-15": "iso-8859-15",
|
|
200
|
+
"iso885915": "iso-8859-15",
|
|
201
|
+
"iso_8859-15": "iso-8859-15",
|
|
202
|
+
"l9": "iso-8859-15",
|
|
203
|
+
|
|
204
|
+
// ISO-8859-16
|
|
205
|
+
"iso-8859-16": "iso-8859-16",
|
|
206
|
+
|
|
207
|
+
// KOI8-R
|
|
208
|
+
"cskoi8r": "koi8-r",
|
|
209
|
+
"koi": "koi8-r",
|
|
210
|
+
"koi8": "koi8-r",
|
|
211
|
+
"koi8-r": "koi8-r",
|
|
212
|
+
"koi8_r": "koi8-r",
|
|
213
|
+
|
|
214
|
+
// KOI8-U
|
|
215
|
+
"koi8-ru": "koi8-u",
|
|
216
|
+
"koi8-u": "koi8-u",
|
|
217
|
+
|
|
218
|
+
// macintosh
|
|
219
|
+
"csmacintosh": "macintosh",
|
|
220
|
+
"mac": "macintosh",
|
|
221
|
+
"macintosh": "macintosh",
|
|
222
|
+
"x-mac-roman": "macintosh",
|
|
223
|
+
|
|
224
|
+
// windows-874
|
|
225
|
+
"dos-874": "windows-874",
|
|
226
|
+
"iso-8859-11": "windows-874",
|
|
227
|
+
"iso8859-11": "windows-874",
|
|
228
|
+
"iso885911": "windows-874",
|
|
229
|
+
"tis-620": "windows-874",
|
|
230
|
+
"windows-874": "windows-874",
|
|
231
|
+
|
|
232
|
+
// windows-1250
|
|
233
|
+
"cp1250": "windows-1250",
|
|
234
|
+
"windows-1250": "windows-1250",
|
|
235
|
+
"x-cp1250": "windows-1250",
|
|
236
|
+
|
|
237
|
+
// windows-1251
|
|
238
|
+
"cp1251": "windows-1251",
|
|
239
|
+
"windows-1251": "windows-1251",
|
|
240
|
+
"x-cp1251": "windows-1251",
|
|
241
|
+
|
|
242
|
+
// windows-1252
|
|
243
|
+
"ansi_x3.4-1968": "windows-1252",
|
|
244
|
+
"ascii": "windows-1252",
|
|
245
|
+
"cp1252": "windows-1252",
|
|
246
|
+
"cp819": "windows-1252",
|
|
247
|
+
"csisolatin1": "windows-1252",
|
|
248
|
+
"ibm819": "windows-1252",
|
|
249
|
+
"iso-8859-1": "windows-1252",
|
|
250
|
+
"iso-ir-100": "windows-1252",
|
|
251
|
+
"iso8859-1": "windows-1252",
|
|
252
|
+
"iso88591": "windows-1252",
|
|
253
|
+
"iso_8859-1": "windows-1252",
|
|
254
|
+
"iso_8859-1:1987": "windows-1252",
|
|
255
|
+
"l1": "windows-1252",
|
|
256
|
+
"latin1": "windows-1252",
|
|
257
|
+
"us-ascii": "windows-1252",
|
|
258
|
+
"windows-1252": "windows-1252",
|
|
259
|
+
"x-cp1252": "windows-1252",
|
|
260
|
+
|
|
261
|
+
// windows-1253
|
|
262
|
+
"cp1253": "windows-1253",
|
|
263
|
+
"windows-1253": "windows-1253",
|
|
264
|
+
"x-cp1253": "windows-1253",
|
|
265
|
+
|
|
266
|
+
// windows-1254
|
|
267
|
+
"cp1254": "windows-1254",
|
|
268
|
+
"csisolatin5": "windows-1254",
|
|
269
|
+
"iso-8859-9": "windows-1254",
|
|
270
|
+
"iso-ir-148": "windows-1254",
|
|
271
|
+
"iso8859-9": "windows-1254",
|
|
272
|
+
"iso88599": "windows-1254",
|
|
273
|
+
"iso_8859-9": "windows-1254",
|
|
274
|
+
"iso_8859-9:1989": "windows-1254",
|
|
275
|
+
"l5": "windows-1254",
|
|
276
|
+
"latin5": "windows-1254",
|
|
277
|
+
"windows-1254": "windows-1254",
|
|
278
|
+
"x-cp1254": "windows-1254",
|
|
279
|
+
|
|
280
|
+
// windows-1255
|
|
281
|
+
"cp1255": "windows-1255",
|
|
282
|
+
"windows-1255": "windows-1255",
|
|
283
|
+
"x-cp1255": "windows-1255",
|
|
284
|
+
|
|
285
|
+
// windows-1256
|
|
286
|
+
"cp1256": "windows-1256",
|
|
287
|
+
"windows-1256": "windows-1256",
|
|
288
|
+
"x-cp1256": "windows-1256",
|
|
289
|
+
|
|
290
|
+
// windows-1257
|
|
291
|
+
"cp1257": "windows-1257",
|
|
292
|
+
"windows-1257": "windows-1257",
|
|
293
|
+
"x-cp1257": "windows-1257",
|
|
294
|
+
|
|
295
|
+
// windows-1258
|
|
296
|
+
"cp1258": "windows-1258",
|
|
297
|
+
"windows-1258": "windows-1258",
|
|
298
|
+
"x-cp1258": "windows-1258",
|
|
299
|
+
|
|
300
|
+
// x-mac-cyrillic
|
|
301
|
+
"x-mac-cyrillic": "x-mac-cyrillic",
|
|
302
|
+
"x-mac-ukrainian": "x-mac-cyrillic",
|
|
303
|
+
|
|
304
|
+
// Legacy multi-byte Chinese (simplified)
|
|
305
|
+
"chinese": "gbk",
|
|
306
|
+
"csgb2312": "gbk",
|
|
307
|
+
"csiso58gb231280": "gbk",
|
|
308
|
+
"gb2312": "gbk",
|
|
309
|
+
"gb_2312": "gbk",
|
|
310
|
+
"gb_2312-80": "gbk",
|
|
311
|
+
"gbk": "gbk",
|
|
312
|
+
"iso-ir-58": "gbk",
|
|
313
|
+
"x-gbk": "gbk",
|
|
314
|
+
"gb18030": "gb18030",
|
|
315
|
+
|
|
316
|
+
// Legacy multi-byte Chinese (traditional)
|
|
317
|
+
"big5": "big5",
|
|
318
|
+
"big5-hkscs": "big5",
|
|
319
|
+
"cn-big5": "big5",
|
|
320
|
+
"csbig5": "big5",
|
|
321
|
+
"x-x-big5": "big5",
|
|
322
|
+
|
|
323
|
+
// Legacy multi-byte Japanese
|
|
324
|
+
"cseucpkdfmtjapanese": "euc-jp",
|
|
325
|
+
"euc-jp": "euc-jp",
|
|
326
|
+
"x-euc-jp": "euc-jp",
|
|
327
|
+
"csiso2022jp": "iso-2022-jp",
|
|
328
|
+
"iso-2022-jp": "iso-2022-jp",
|
|
329
|
+
"csshiftjis": "shift_jis",
|
|
330
|
+
"ms932": "shift_jis",
|
|
331
|
+
"ms_kanji": "shift_jis",
|
|
332
|
+
"shift-jis": "shift_jis",
|
|
333
|
+
"shift_jis": "shift_jis",
|
|
334
|
+
"sjis": "shift_jis",
|
|
335
|
+
"windows-31j": "shift_jis",
|
|
336
|
+
"x-sjis": "shift_jis",
|
|
337
|
+
|
|
338
|
+
// Legacy multi-byte Korean
|
|
339
|
+
"cseuckr": "euc-kr",
|
|
340
|
+
"csksc56011987": "euc-kr",
|
|
341
|
+
"euc-kr": "euc-kr",
|
|
342
|
+
"iso-ir-149": "euc-kr",
|
|
343
|
+
"korean": "euc-kr",
|
|
344
|
+
"ks_c_5601-1987": "euc-kr",
|
|
345
|
+
"ks_c_5601-1989": "euc-kr",
|
|
346
|
+
"ksc5601": "euc-kr",
|
|
347
|
+
"ksc_5601": "euc-kr",
|
|
348
|
+
"windows-949": "euc-kr",
|
|
349
|
+
|
|
350
|
+
// Legacy miscellaneous
|
|
351
|
+
"csiso2022kr": "replacement",
|
|
352
|
+
"hz-gb-2312": "replacement",
|
|
353
|
+
"iso-2022-cn": "replacement",
|
|
354
|
+
"iso-2022-cn-ext": "replacement",
|
|
355
|
+
"iso-2022-kr": "replacement",
|
|
356
|
+
"replacement": "replacement",
|
|
357
|
+
|
|
358
|
+
"unicodefffe": "utf-16be",
|
|
359
|
+
"utf-16be": "utf-16be",
|
|
360
|
+
|
|
361
|
+
"csunicode": "utf-16le",
|
|
362
|
+
"iso-10646-ucs-2": "utf-16le",
|
|
363
|
+
"ucs-2": "utf-16le",
|
|
364
|
+
"unicode": "utf-16le",
|
|
365
|
+
"unicodefeff": "utf-16le",
|
|
366
|
+
"utf-16": "utf-16le",
|
|
367
|
+
"utf-16le": "utf-16le",
|
|
368
|
+
|
|
369
|
+
"x-user-defined": "x-user-defined",
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
// ─── Single-byte encoding tables ──────────────────────────────────────────
|
|
373
|
+
// Each table maps bytes 0x80-0xFF to Unicode code points.
|
|
374
|
+
// Bytes 0x00-0x7F always map to the same code point.
|
|
375
|
+
// A null entry means the byte is unmapped and should produce U+FFFD (or throw in fatal mode).
|
|
376
|
+
|
|
377
|
+
// Windows-1252 (0x80-0x9F range; 0xA0-0xFF = Latin-1 identity)
|
|
378
|
+
const WINDOWS_1252: (number | null)[] = [
|
|
379
|
+
0x20AC,null,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,0x02C6,0x2030,0x0160,0x2039,0x0152,null,0x017D,null,
|
|
380
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x02DC,0x2122,0x0161,0x203A,0x0153,null,0x017E,0x0178,
|
|
381
|
+
];
|
|
382
|
+
|
|
383
|
+
// IBM866 (DOS Cyrillic)
|
|
384
|
+
const IBM866: number[] = [
|
|
385
|
+
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
|
|
386
|
+
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
|
|
387
|
+
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
|
|
388
|
+
0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510,
|
|
389
|
+
0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F,0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567,
|
|
390
|
+
0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B,0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580,
|
|
391
|
+
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,
|
|
392
|
+
0x0401,0x0451,0x0404,0x0454,0x0407,0x0457,0x040E,0x045E,0x00B0,0x2219,0x00B7,0x221A,0x2116,0x00A4,0x25A0,0x00A0,
|
|
393
|
+
];
|
|
394
|
+
|
|
395
|
+
// ISO-8859-2
|
|
396
|
+
const ISO_8859_2: number[] = [
|
|
397
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
398
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
399
|
+
0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
|
|
400
|
+
0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
|
|
401
|
+
0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
|
|
402
|
+
0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
|
|
403
|
+
0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
|
|
404
|
+
0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9,
|
|
405
|
+
];
|
|
406
|
+
|
|
407
|
+
// ISO-8859-3
|
|
408
|
+
const ISO_8859_3: (number | null)[] = [
|
|
409
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
410
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
411
|
+
0x00A0,0x0126,0x02D8,0x00A3,0x00A4,null,0x0124,0x00A7,0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,null,0x017B,
|
|
412
|
+
0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,null,0x017C,
|
|
413
|
+
0x00C0,0x00C1,0x00C2,null,0x00C4,0x010A,0x0108,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
|
|
414
|
+
null,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
|
|
415
|
+
0x00E0,0x00E1,0x00E2,null,0x00E4,0x010B,0x0109,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
|
|
416
|
+
null,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9,
|
|
417
|
+
];
|
|
418
|
+
|
|
419
|
+
// ISO-8859-4
|
|
420
|
+
const ISO_8859_4: number[] = [
|
|
421
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
422
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
423
|
+
0x00A0,0x0104,0x0138,0x0156,0x00A4,0x0128,0x013B,0x00A7,0x00A8,0x0160,0x0112,0x0122,0x0166,0x00AD,0x017D,0x00AF,
|
|
424
|
+
0x00B0,0x0105,0x02DB,0x0157,0x00B4,0x0129,0x013C,0x02C7,0x00B8,0x0161,0x0113,0x0123,0x0167,0x014A,0x017E,0x014B,
|
|
425
|
+
0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x012A,
|
|
426
|
+
0x0110,0x0145,0x014C,0x0136,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x0168,0x016A,0x00DF,
|
|
427
|
+
0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x012B,
|
|
428
|
+
0x0111,0x0146,0x014D,0x0137,0x00F4,0x00F5,0x00F6,0x00F7,0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x0169,0x016B,0x02D9,
|
|
429
|
+
];
|
|
430
|
+
|
|
431
|
+
// ISO-8859-5
|
|
432
|
+
const ISO_8859_5: number[] = [
|
|
433
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
434
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
435
|
+
0x00A0,0x0401,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408,0x0409,0x040A,0x040B,0x040C,0x00AD,0x040E,0x040F,
|
|
436
|
+
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
|
|
437
|
+
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
|
|
438
|
+
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
|
|
439
|
+
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,
|
|
440
|
+
0x2116,0x0451,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,0x0458,0x0459,0x045A,0x045B,0x045C,0x00A7,0x045E,0x045F,
|
|
441
|
+
];
|
|
442
|
+
|
|
443
|
+
// ISO-8859-6
|
|
444
|
+
const ISO_8859_6: (number | null)[] = [
|
|
445
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
446
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
447
|
+
0x00A0,null,null,null,0x00A4,null,null,null,null,null,null,null,0x060C,0x00AD,null,null,
|
|
448
|
+
null,null,null,null,null,null,null,null,null,null,null,0x061B,null,null,null,0x061F,
|
|
449
|
+
null,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
|
|
450
|
+
0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637,0x0638,0x0639,0x063A,null,null,null,null,null,
|
|
451
|
+
0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
|
|
452
|
+
0x0650,0x0651,0x0652,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
|
453
|
+
];
|
|
454
|
+
|
|
455
|
+
// ISO-8859-7
|
|
456
|
+
const ISO_8859_7: (number | null)[] = [
|
|
457
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
458
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
459
|
+
0x00A0,0x2018,0x2019,0x00A3,0x20AC,0x20AF,0x00A6,0x00A7,0x00A8,0x00A9,0x037A,0x00AB,0x00AC,0x00AD,null,0x2015,
|
|
460
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x0385,0x0386,0x00B7,0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
|
|
461
|
+
0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
|
|
462
|
+
0x03A0,0x03A1,null,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
|
|
463
|
+
0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
|
|
464
|
+
0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,null,
|
|
465
|
+
];
|
|
466
|
+
|
|
467
|
+
// ISO-8859-8
|
|
468
|
+
const ISO_8859_8: (number | null)[] = [
|
|
469
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
470
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
471
|
+
0x00A0,null,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
472
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,null,
|
|
473
|
+
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
|
474
|
+
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
|
|
475
|
+
0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
|
|
476
|
+
0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,0x05E8,0x05E9,0x05EA,null,null,0x200E,0x200F,null,
|
|
477
|
+
];
|
|
478
|
+
|
|
479
|
+
// ISO-8859-10
|
|
480
|
+
const ISO_8859_10: number[] = [
|
|
481
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
482
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
483
|
+
0x00A0,0x0104,0x0112,0x0122,0x012A,0x0128,0x0136,0x00A7,0x013B,0x0110,0x0160,0x0166,0x017D,0x00AD,0x016A,0x014A,
|
|
484
|
+
0x00B0,0x0105,0x0113,0x0123,0x012B,0x0129,0x0137,0x00B7,0x013C,0x0111,0x0161,0x0167,0x017E,0x2015,0x016B,0x014B,
|
|
485
|
+
0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x00CF,
|
|
486
|
+
0x00D0,0x0145,0x014C,0x00D3,0x00D4,0x00D5,0x00D6,0x0168,0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
|
|
487
|
+
0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x00EF,
|
|
488
|
+
0x00F0,0x0146,0x014D,0x00F3,0x00F4,0x00F5,0x00F6,0x0169,0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x0138,
|
|
489
|
+
];
|
|
490
|
+
|
|
491
|
+
// ISO-8859-13
|
|
492
|
+
const ISO_8859_13: number[] = [
|
|
493
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
494
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
495
|
+
0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7,0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
|
|
496
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7,0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
|
|
497
|
+
0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
|
|
498
|
+
0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
|
|
499
|
+
0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
|
|
500
|
+
0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019,
|
|
501
|
+
];
|
|
502
|
+
|
|
503
|
+
// ISO-8859-14
|
|
504
|
+
const ISO_8859_14: number[] = [
|
|
505
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
506
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
507
|
+
0x00A0,0x1E02,0x1E03,0x00A3,0x010A,0x010B,0x1E0A,0x00A7,0x1E80,0x00A9,0x1E82,0x1E0B,0x1EF2,0x00AD,0x00AE,0x0178,
|
|
508
|
+
0x1E1E,0x1E1F,0x0120,0x0121,0x1E40,0x1E41,0x00B6,0x1E56,0x1E81,0x1E57,0x1E83,0x1E60,0x1EF3,0x1E84,0x1E85,0x1E61,
|
|
509
|
+
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
|
|
510
|
+
0x0174,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x1E6A,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x0176,0x00DF,
|
|
511
|
+
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
|
|
512
|
+
0x0175,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x1E6B,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x0177,0x00FF,
|
|
513
|
+
];
|
|
514
|
+
|
|
515
|
+
// ISO-8859-15
|
|
516
|
+
const ISO_8859_15: number[] = [
|
|
517
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
518
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
519
|
+
0x00A0,0x00A1,0x00A2,0x00A3,0x20AC,0x00A5,0x0160,0x00A7,0x0161,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
520
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x017D,0x00B5,0x00B6,0x00B7,0x017E,0x00B9,0x00BA,0x00BB,0x0152,0x0153,0x0178,0x00BF,
|
|
521
|
+
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
|
|
522
|
+
0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
|
|
523
|
+
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
|
|
524
|
+
0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF,
|
|
525
|
+
];
|
|
526
|
+
|
|
527
|
+
// ISO-8859-16
|
|
528
|
+
const ISO_8859_16: number[] = [
|
|
529
|
+
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
530
|
+
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
531
|
+
0x00A0,0x0104,0x0105,0x0141,0x20AC,0x201E,0x0160,0x00A7,0x0161,0x00A9,0x0218,0x00AB,0x0179,0x00AD,0x017A,0x017B,
|
|
532
|
+
0x00B0,0x00B1,0x010C,0x0142,0x017D,0x201D,0x00B6,0x00B7,0x017E,0x010D,0x0219,0x00BB,0x0152,0x0153,0x0178,0x017C,
|
|
533
|
+
0x00C0,0x00C1,0x00C2,0x0102,0x00C4,0x0106,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
|
|
534
|
+
0x0110,0x0143,0x00D2,0x00D3,0x00D4,0x0150,0x00D6,0x015A,0x0170,0x00D9,0x00DA,0x00DB,0x00DC,0x0118,0x021A,0x00DF,
|
|
535
|
+
0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x0107,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
|
|
536
|
+
0x0111,0x0144,0x00F2,0x00F3,0x00F4,0x0151,0x00F6,0x015B,0x0171,0x00F9,0x00FA,0x00FB,0x00FC,0x0119,0x021B,0x00FF,
|
|
537
|
+
];
|
|
538
|
+
|
|
539
|
+
// KOI8-R
|
|
540
|
+
const KOI8_R: number[] = [
|
|
541
|
+
0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524,0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590,
|
|
542
|
+
0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248,0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7,
|
|
543
|
+
0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,
|
|
544
|
+
0x255F,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256A,0x256B,0x256C,0x00A9,
|
|
545
|
+
0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
|
|
546
|
+
0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A,
|
|
547
|
+
0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
|
|
548
|
+
0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A,
|
|
549
|
+
];
|
|
550
|
+
|
|
551
|
+
// KOI8-U
|
|
552
|
+
const KOI8_U: number[] = [
|
|
553
|
+
0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524,0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590,
|
|
554
|
+
0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248,0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7,
|
|
555
|
+
0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457,0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E,
|
|
556
|
+
0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407,0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9,
|
|
557
|
+
0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
|
|
558
|
+
0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A,
|
|
559
|
+
0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
|
|
560
|
+
0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A,
|
|
561
|
+
];
|
|
562
|
+
|
|
563
|
+
// macintosh (Mac OS Roman)
|
|
564
|
+
const MACINTOSH: number[] = [
|
|
565
|
+
0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
|
|
566
|
+
0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3,0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC,
|
|
567
|
+
0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF,0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8,
|
|
568
|
+
0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211,0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x2126,0x00E6,0x00F8,
|
|
569
|
+
0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153,
|
|
570
|
+
0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA,0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02,
|
|
571
|
+
0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1,0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4,
|
|
572
|
+
0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC,0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7,
|
|
573
|
+
];
|
|
574
|
+
|
|
575
|
+
// windows-874
|
|
576
|
+
const WINDOWS_874: (number | null)[] = [
|
|
577
|
+
0x20AC,0x0081,0x0082,0x0083,0x0084,0x2026,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
|
|
578
|
+
0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
|
|
579
|
+
0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
|
|
580
|
+
0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
|
|
581
|
+
0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
|
|
582
|
+
0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,0x0E38,0x0E39,0x0E3A,null,null,null,null,0x0E3F,
|
|
583
|
+
0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
|
|
584
|
+
0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,0x0E58,0x0E59,0x0E5A,0x0E5B,null,null,null,null,
|
|
585
|
+
];
|
|
586
|
+
|
|
587
|
+
// windows-1250
|
|
588
|
+
const WINDOWS_1250: (number | null)[] = [
|
|
589
|
+
0x20AC,null,0x201A,null,0x201E,0x2026,0x2020,0x2021,null,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
|
|
590
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,null,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
|
|
591
|
+
0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
|
|
592
|
+
0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
|
|
593
|
+
0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
|
|
594
|
+
0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
|
|
595
|
+
0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
|
|
596
|
+
0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9,
|
|
597
|
+
];
|
|
598
|
+
|
|
599
|
+
// windows-1251
|
|
600
|
+
const WINDOWS_1251: number[] = [
|
|
601
|
+
0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,
|
|
602
|
+
0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,null as any,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,
|
|
603
|
+
0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,
|
|
604
|
+
0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,
|
|
605
|
+
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
|
|
606
|
+
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
|
|
607
|
+
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
|
|
608
|
+
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,
|
|
609
|
+
];
|
|
610
|
+
|
|
611
|
+
// windows-1253
|
|
612
|
+
const WINDOWS_1253: (number | null)[] = [
|
|
613
|
+
0x20AC,null,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,null,0x2030,null,0x2039,null,null,null,null,
|
|
614
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,null,0x2122,null,0x203A,null,null,null,null,
|
|
615
|
+
0x00A0,0x0385,0x0386,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,null,0x00AB,0x00AC,0x00AD,0x00AE,0x2015,
|
|
616
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x00B5,0x00B6,0x00B7,0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
|
|
617
|
+
0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
|
|
618
|
+
0x03A0,0x03A1,null,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
|
|
619
|
+
0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
|
|
620
|
+
0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,null,
|
|
621
|
+
];
|
|
622
|
+
|
|
623
|
+
// windows-1254
|
|
624
|
+
const WINDOWS_1254: (number | null)[] = [
|
|
625
|
+
0x20AC,null,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,0x02C6,0x2030,0x0160,0x2039,0x0152,null,null,null,
|
|
626
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x02DC,0x2122,0x0161,0x203A,0x0153,null,null,0x0178,
|
|
627
|
+
0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
628
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
|
|
629
|
+
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
|
|
630
|
+
0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF,
|
|
631
|
+
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
|
|
632
|
+
0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF,
|
|
633
|
+
];
|
|
634
|
+
|
|
635
|
+
// windows-1255
|
|
636
|
+
const WINDOWS_1255: (number | null)[] = [
|
|
637
|
+
0x20AC,null,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,0x02C6,0x2030,null,0x2039,null,null,null,null,
|
|
638
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x02DC,0x2122,null,0x203A,null,null,null,null,
|
|
639
|
+
0x00A0,0x00A1,0x00A2,0x00A3,0x20AA,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
640
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
|
|
641
|
+
0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7,0x05B8,0x05B9,0x05BA,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF,
|
|
642
|
+
0x05C0,0x05C1,0x05C2,0x05C3,0x05F0,0x05F1,0x05F2,0x05F3,0x05F4,null,null,null,null,null,null,null,
|
|
643
|
+
0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
|
|
644
|
+
0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,0x05E8,0x05E9,0x05EA,null,null,0x200E,0x200F,null,
|
|
645
|
+
];
|
|
646
|
+
|
|
647
|
+
// windows-1256
|
|
648
|
+
const WINDOWS_1256: number[] = [
|
|
649
|
+
0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,0x02C6,0x2030,0x0679,0x2039,0x0152,0x0686,0x0698,0x0688,
|
|
650
|
+
0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x06A9,0x2122,0x0691,0x203A,0x0153,0x200C,0x200D,0x06BA,
|
|
651
|
+
0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x06BE,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
652
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F,
|
|
653
|
+
0x06C1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
|
|
654
|
+
0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7,0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643,
|
|
655
|
+
0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF,
|
|
656
|
+
0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7,0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x06D2,
|
|
657
|
+
];
|
|
658
|
+
|
|
659
|
+
// windows-1257
|
|
660
|
+
const WINDOWS_1257: (number | null)[] = [
|
|
661
|
+
0x20AC,null,0x201A,null,0x201E,0x2026,0x2020,0x2021,null,0x2030,null,0x2039,null,0x00A8,0x02C7,0x00B8,
|
|
662
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,null,0x2122,null,0x203A,null,0x00AF,0x02DB,null,
|
|
663
|
+
0x00A0,null,0x00A2,0x00A3,0x00A4,null,0x00A6,0x00A7,0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
|
|
664
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
|
|
665
|
+
0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
|
|
666
|
+
0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
|
|
667
|
+
0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
|
|
668
|
+
0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9,
|
|
669
|
+
];
|
|
670
|
+
|
|
671
|
+
// windows-1258
|
|
672
|
+
const WINDOWS_1258: (number | null)[] = [
|
|
673
|
+
0x20AC,null,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,0x02C6,0x2030,null,0x2039,0x0152,null,null,null,
|
|
674
|
+
null,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x02DC,0x2122,null,0x203A,0x0153,null,null,0x0178,
|
|
675
|
+
0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
|
|
676
|
+
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
|
|
677
|
+
0x00C0,0x00C1,0x00C2,0x0102,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x0300,0x00CD,0x00CE,0x00CF,
|
|
678
|
+
0x0110,0x00D1,0x0309,0x00D3,0x00D4,0x01A0,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x01AF,0x0303,0x00DF,
|
|
679
|
+
0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x0301,0x00ED,0x00EE,0x00EF,
|
|
680
|
+
0x0111,0x00F1,0x0323,0x00F3,0x00F4,0x01A1,0x00F6,0x00F7,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x01B0,0x20AB,0x00FF,
|
|
681
|
+
];
|
|
682
|
+
|
|
683
|
+
// x-mac-cyrillic
|
|
684
|
+
const X_MAC_CYRILLIC: number[] = [
|
|
685
|
+
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
|
|
686
|
+
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
|
|
687
|
+
0x2020,0x00B0,0x0490,0x00A3,0x00A7,0x2022,0x00B6,0x0406,0x00AE,0x00A9,0x2122,0x0402,0x0452,0x2260,0x0403,0x0453,
|
|
688
|
+
0x221E,0x00B1,0x2264,0x2265,0x0456,0x00B5,0x0491,0x0408,0x0404,0x0454,0x0407,0x0457,0x0409,0x0459,0x040A,0x045A,
|
|
689
|
+
0x0458,0x0405,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,0x00BB,0x2026,0x00A0,0x040B,0x045B,0x040C,0x045C,0x0455,
|
|
690
|
+
0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x201E,0x040E,0x045E,0x040F,0x045F,0x2116,0x0401,0x0451,0x044F,
|
|
691
|
+
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
|
|
692
|
+
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x20AC,
|
|
693
|
+
];
|
|
694
|
+
|
|
695
|
+
// Map encoding names to their tables
|
|
696
|
+
const SINGLE_BYTE_TABLES: Record<string, (number | null)[]> = {
|
|
697
|
+
"ibm866": IBM866,
|
|
698
|
+
"iso-8859-2": ISO_8859_2,
|
|
699
|
+
"iso-8859-3": ISO_8859_3,
|
|
700
|
+
"iso-8859-4": ISO_8859_4,
|
|
701
|
+
"iso-8859-5": ISO_8859_5,
|
|
702
|
+
"iso-8859-6": ISO_8859_6,
|
|
703
|
+
"iso-8859-7": ISO_8859_7,
|
|
704
|
+
"iso-8859-8": ISO_8859_8,
|
|
705
|
+
"iso-8859-8-i": ISO_8859_8, // Same table as ISO-8859-8
|
|
706
|
+
"iso-8859-10": ISO_8859_10,
|
|
707
|
+
"iso-8859-13": ISO_8859_13,
|
|
708
|
+
"iso-8859-14": ISO_8859_14,
|
|
709
|
+
"iso-8859-15": ISO_8859_15,
|
|
710
|
+
"iso-8859-16": ISO_8859_16,
|
|
711
|
+
"koi8-r": KOI8_R,
|
|
712
|
+
"koi8-u": KOI8_U,
|
|
713
|
+
"macintosh": MACINTOSH,
|
|
714
|
+
"windows-874": WINDOWS_874,
|
|
715
|
+
"windows-1250": WINDOWS_1250,
|
|
716
|
+
"windows-1251": WINDOWS_1251,
|
|
717
|
+
"windows-1253": WINDOWS_1253,
|
|
718
|
+
"windows-1254": WINDOWS_1254,
|
|
719
|
+
"windows-1255": WINDOWS_1255,
|
|
720
|
+
"windows-1256": WINDOWS_1256,
|
|
721
|
+
"windows-1257": WINDOWS_1257,
|
|
722
|
+
"windows-1258": WINDOWS_1258,
|
|
723
|
+
"x-mac-cyrillic": X_MAC_CYRILLIC,
|
|
724
|
+
};
|
|
725
|
+
|
|
726
|
+
export class TextDecoder {
|
|
727
|
+
readonly encoding: string;
|
|
728
|
+
readonly fatal: boolean;
|
|
729
|
+
readonly ignoreBOM: boolean;
|
|
730
|
+
|
|
731
|
+
// State for streaming decode
|
|
732
|
+
private _pendingBytes: number[] = [];
|
|
733
|
+
private _bomSeen: boolean = false;
|
|
734
|
+
|
|
735
|
+
constructor(label?: string, options?: TextDecoderOptions) {
|
|
736
|
+
// WHATWG spec: strip ASCII whitespace (tab, LF, FF, CR, space) from both ends
|
|
737
|
+
let rawLabel = label ?? "utf-8";
|
|
738
|
+
if (typeof rawLabel !== "string") {
|
|
739
|
+
rawLabel = String(rawLabel);
|
|
740
|
+
}
|
|
741
|
+
// Strip leading/trailing ASCII whitespace: \t \n \f \r \x20
|
|
742
|
+
let start = 0;
|
|
743
|
+
let end = rawLabel.length;
|
|
744
|
+
while (start < end) {
|
|
745
|
+
const code = rawLabel.charCodeAt(start);
|
|
746
|
+
if (code === 0x09 || code === 0x0A || code === 0x0C || code === 0x0D || code === 0x20) {
|
|
747
|
+
start++;
|
|
748
|
+
} else {
|
|
749
|
+
break;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
while (end > start) {
|
|
753
|
+
const code = rawLabel.charCodeAt(end - 1);
|
|
754
|
+
if (code === 0x09 || code === 0x0A || code === 0x0C || code === 0x0D || code === 0x20) {
|
|
755
|
+
end--;
|
|
756
|
+
} else {
|
|
757
|
+
break;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
const normalizedLabel = rawLabel.slice(start, end).toLowerCase();
|
|
761
|
+
const encoding = encodingLabels[normalizedLabel];
|
|
762
|
+
|
|
763
|
+
if (!encoding) {
|
|
764
|
+
throw new RangeError(
|
|
765
|
+
`The encoding label provided ('${label}') is not supported.`
|
|
766
|
+
);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
this.encoding = encoding;
|
|
770
|
+
this.fatal = Boolean(options?.fatal);
|
|
771
|
+
this.ignoreBOM = Boolean(options?.ignoreBOM);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Decode bytes to a string
|
|
776
|
+
*
|
|
777
|
+
* @param input ArrayBuffer, TypedArray, or DataView
|
|
778
|
+
* @param options Decode options (stream mode)
|
|
779
|
+
* @returns Decoded string
|
|
780
|
+
*/
|
|
781
|
+
decode(input?: BufferSource | null, options?: TextDecodeOptions): string {
|
|
782
|
+
const stream = options?.stream ?? false;
|
|
783
|
+
const hadPendingBytes = this._pendingBytes.length > 0;
|
|
784
|
+
|
|
785
|
+
// Get bytes from input
|
|
786
|
+
let bytes: Uint8Array;
|
|
787
|
+
if (input === undefined || input === null) {
|
|
788
|
+
bytes = new Uint8Array(0);
|
|
789
|
+
} else if (input instanceof ArrayBuffer) {
|
|
790
|
+
bytes = isDetachedArrayBuffer(input) ? new Uint8Array(0) : new Uint8Array(input);
|
|
791
|
+
} else if (ArrayBuffer.isView(input)) {
|
|
792
|
+
// Always decode the underlying bytes for typed-array views rather than
|
|
793
|
+
// reinterpreting element values as separate bytes.
|
|
794
|
+
const sourceBuffer = input.buffer;
|
|
795
|
+
if (sourceBuffer instanceof ArrayBuffer && isDetachedArrayBuffer(sourceBuffer)) {
|
|
796
|
+
bytes = new Uint8Array(0);
|
|
797
|
+
} else {
|
|
798
|
+
bytes = new Uint8Array(sourceBuffer, input.byteOffset, input.byteLength);
|
|
799
|
+
}
|
|
800
|
+
} else {
|
|
801
|
+
throw new TypeError("Input must be an ArrayBuffer or ArrayBufferView");
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
// Combine with pending bytes from previous stream call
|
|
805
|
+
if (this._pendingBytes.length > 0) {
|
|
806
|
+
const combined = new Uint8Array(this._pendingBytes.length + bytes.length);
|
|
807
|
+
combined.set(this._pendingBytes);
|
|
808
|
+
combined.set(bytes, this._pendingBytes.length);
|
|
809
|
+
bytes = combined;
|
|
810
|
+
this._pendingBytes = [];
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
let result: string;
|
|
814
|
+
const enc = this.encoding;
|
|
815
|
+
|
|
816
|
+
if (enc === "utf-8") {
|
|
817
|
+
// Try native decoding for UTF-8 (most common case)
|
|
818
|
+
if (!stream && !hadPendingBytes) {
|
|
819
|
+
const nativeEncoding = getNativeModule('encoding');
|
|
820
|
+
if (nativeEncoding) {
|
|
821
|
+
try {
|
|
822
|
+
result = nativeEncoding.decodeUTF8(bytes, this.fatal);
|
|
823
|
+
// Handle BOM if needed
|
|
824
|
+
if (!this._bomSeen && !this.ignoreBOM && result.charCodeAt(0) === 0xFEFF) {
|
|
825
|
+
result = result.slice(1);
|
|
826
|
+
}
|
|
827
|
+
this._bomSeen = true;
|
|
828
|
+
} catch (e) {
|
|
829
|
+
// Fall through to JS implementation if native fails
|
|
830
|
+
if (this.fatal) {
|
|
831
|
+
if (e && typeof e === "object" && "code" in e) {
|
|
832
|
+
throw e;
|
|
833
|
+
}
|
|
834
|
+
throw createEncodingError(
|
|
835
|
+
e instanceof Error && e.message ? e.message : "Invalid encoded data"
|
|
836
|
+
);
|
|
837
|
+
}
|
|
838
|
+
result = this._decodeUTF8(bytes, stream);
|
|
839
|
+
}
|
|
840
|
+
} else {
|
|
841
|
+
result = this._decodeUTF8(bytes, stream);
|
|
842
|
+
}
|
|
843
|
+
} else {
|
|
844
|
+
result = this._decodeUTF8(bytes, stream);
|
|
845
|
+
}
|
|
846
|
+
} else if (enc === "utf-16le") {
|
|
847
|
+
result = this._decodeUTF16(bytes, false, stream);
|
|
848
|
+
} else if (enc === "utf-16be") {
|
|
849
|
+
result = this._decodeUTF16(bytes, true, stream);
|
|
850
|
+
} else if (enc === "replacement") {
|
|
851
|
+
result = this._decodeReplacement(bytes);
|
|
852
|
+
} else if (enc === "x-user-defined") {
|
|
853
|
+
result = this._decodeXUserDefined(bytes);
|
|
854
|
+
} else if (enc === "windows-1252") {
|
|
855
|
+
result = this._decodeSingleByte(bytes, WINDOWS_1252, true);
|
|
856
|
+
} else if (SINGLE_BYTE_TABLES[enc]) {
|
|
857
|
+
result = this._decodeSingleByte(bytes, SINGLE_BYTE_TABLES[enc]!, false);
|
|
858
|
+
} else {
|
|
859
|
+
if (NativeTextDecoderImpl && NativeTextDecoderImpl !== (TextDecoder as any)) {
|
|
860
|
+
try {
|
|
861
|
+
result = new NativeTextDecoderImpl(enc, {
|
|
862
|
+
fatal: this.fatal,
|
|
863
|
+
ignoreBOM: this.ignoreBOM,
|
|
864
|
+
}).decode(bytes, options);
|
|
865
|
+
} catch (error) {
|
|
866
|
+
if (this.fatal) {
|
|
867
|
+
throw error;
|
|
868
|
+
}
|
|
869
|
+
result = this._decodeUTF8(bytes, stream);
|
|
870
|
+
}
|
|
871
|
+
} else {
|
|
872
|
+
result = this._decodeUTF8(bytes, stream);
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// Reset state if not streaming
|
|
877
|
+
if (!stream) {
|
|
878
|
+
this._pendingBytes = [];
|
|
879
|
+
this._bomSeen = false;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
return result;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
private _decodeSingleByte(bytes: Uint8Array, table: (number | null)[], isWindows1252: boolean): string {
|
|
886
|
+
const result: string[] = [];
|
|
887
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
888
|
+
const byte = bytes[i];
|
|
889
|
+
if (byte <= 0x7F) {
|
|
890
|
+
result.push(String.fromCharCode(byte));
|
|
891
|
+
} else {
|
|
892
|
+
if (isWindows1252) {
|
|
893
|
+
// windows-1252: 0x80-0x9F use the table, 0xA0-0xFF map to Latin-1
|
|
894
|
+
if (byte >= 0x80 && byte <= 0x9F) {
|
|
895
|
+
const cp = table[byte - 0x80];
|
|
896
|
+
if (cp === null) {
|
|
897
|
+
if (this.fatal) {
|
|
898
|
+
throw createEncodingError("Invalid byte in encoding");
|
|
899
|
+
}
|
|
900
|
+
result.push("\ufffd");
|
|
901
|
+
} else {
|
|
902
|
+
result.push(String.fromCharCode(cp));
|
|
903
|
+
}
|
|
904
|
+
} else {
|
|
905
|
+
result.push(String.fromCharCode(byte));
|
|
906
|
+
}
|
|
907
|
+
} else {
|
|
908
|
+
const cp = table[byte - 0x80];
|
|
909
|
+
if (cp === null) {
|
|
910
|
+
if (this.fatal) {
|
|
911
|
+
throw createEncodingError("Invalid byte in encoding");
|
|
912
|
+
}
|
|
913
|
+
result.push("\ufffd");
|
|
914
|
+
} else {
|
|
915
|
+
result.push(String.fromCharCode(cp));
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
return result.join("");
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
private _decodeReplacement(bytes: Uint8Array): string {
|
|
924
|
+
// The "replacement" encoding: if input is non-empty, emit one U+FFFD
|
|
925
|
+
// and set error flag (if fatal, throw).
|
|
926
|
+
if (bytes.length === 0) {
|
|
927
|
+
return "";
|
|
928
|
+
}
|
|
929
|
+
if (this.fatal) {
|
|
930
|
+
throw createEncodingError("Replacement encoding always errors on non-empty input");
|
|
931
|
+
}
|
|
932
|
+
return "\ufffd";
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
private _decodeXUserDefined(bytes: Uint8Array): string {
|
|
936
|
+
const result: string[] = [];
|
|
937
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
938
|
+
const byte = bytes[i];
|
|
939
|
+
if (byte <= 0x7F) {
|
|
940
|
+
result.push(String.fromCharCode(byte));
|
|
941
|
+
} else {
|
|
942
|
+
// x-user-defined maps 0x80-0xFF to U+F780-U+F7FF
|
|
943
|
+
result.push(String.fromCharCode(0xF780 + byte - 0x80));
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
return result.join("");
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
private _decodeUTF8(bytes: Uint8Array, stream: boolean): string {
|
|
950
|
+
const result: string[] = [];
|
|
951
|
+
let i = 0;
|
|
952
|
+
|
|
953
|
+
// Handle BOM
|
|
954
|
+
if (!this._bomSeen && bytes.length >= 3) {
|
|
955
|
+
if (
|
|
956
|
+
bytes[0] === 0xef &&
|
|
957
|
+
bytes[1] === 0xbb &&
|
|
958
|
+
bytes[2] === 0xbf &&
|
|
959
|
+
!this.ignoreBOM
|
|
960
|
+
) {
|
|
961
|
+
i = 3;
|
|
962
|
+
}
|
|
963
|
+
this._bomSeen = true;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
while (i < bytes.length) {
|
|
967
|
+
const byte1 = bytes[i];
|
|
968
|
+
let codePoint: number;
|
|
969
|
+
let bytesNeeded: number;
|
|
970
|
+
|
|
971
|
+
if ((byte1 & 0x80) === 0) {
|
|
972
|
+
// 1-byte sequence (ASCII)
|
|
973
|
+
codePoint = byte1;
|
|
974
|
+
bytesNeeded = 1;
|
|
975
|
+
} else if ((byte1 & 0xe0) === 0xc0 && byte1 >= 0xc2) {
|
|
976
|
+
// 2-byte sequence
|
|
977
|
+
codePoint = byte1 & 0x1f;
|
|
978
|
+
bytesNeeded = 2;
|
|
979
|
+
} else if ((byte1 & 0xf0) === 0xe0) {
|
|
980
|
+
// 3-byte sequence
|
|
981
|
+
codePoint = byte1 & 0x0f;
|
|
982
|
+
bytesNeeded = 3;
|
|
983
|
+
} else if ((byte1 & 0xf8) === 0xf0 && byte1 <= 0xf4) {
|
|
984
|
+
// 4-byte sequence
|
|
985
|
+
codePoint = byte1 & 0x07;
|
|
986
|
+
bytesNeeded = 4;
|
|
987
|
+
} else {
|
|
988
|
+
// Invalid start byte
|
|
989
|
+
if (this.fatal) {
|
|
990
|
+
throw createEncodingError("Invalid UTF-8 byte sequence");
|
|
991
|
+
}
|
|
992
|
+
result.push("\ufffd");
|
|
993
|
+
i++;
|
|
994
|
+
continue;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
// Check if we have enough bytes
|
|
998
|
+
if (i + bytesNeeded > bytes.length) {
|
|
999
|
+
if (stream) {
|
|
1000
|
+
let consumed = 1;
|
|
1001
|
+
let malformed = false;
|
|
1002
|
+
|
|
1003
|
+
while (i + consumed < bytes.length) {
|
|
1004
|
+
const continuation = bytes[i + consumed];
|
|
1005
|
+
if (!isValidUTF8Continuation(byte1, continuation, consumed)) {
|
|
1006
|
+
malformed = true;
|
|
1007
|
+
break;
|
|
1008
|
+
}
|
|
1009
|
+
consumed++;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
if (malformed) {
|
|
1013
|
+
if (this.fatal) {
|
|
1014
|
+
throw createEncodingError("Invalid UTF-8 continuation byte");
|
|
1015
|
+
}
|
|
1016
|
+
result.push("\ufffd");
|
|
1017
|
+
i += consumed;
|
|
1018
|
+
continue;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
// Save a still-valid partial sequence for the next decode call.
|
|
1022
|
+
this._pendingBytes = Array.from(bytes.slice(i));
|
|
1023
|
+
break;
|
|
1024
|
+
} else if (this.fatal) {
|
|
1025
|
+
throw createEncodingError("Incomplete UTF-8 byte sequence");
|
|
1026
|
+
} else {
|
|
1027
|
+
let consumed = 1;
|
|
1028
|
+
while (i + consumed < bytes.length) {
|
|
1029
|
+
const continuation = bytes[i + consumed];
|
|
1030
|
+
if (!isValidUTF8Continuation(byte1, continuation, consumed)) {
|
|
1031
|
+
break;
|
|
1032
|
+
}
|
|
1033
|
+
consumed++;
|
|
1034
|
+
}
|
|
1035
|
+
result.push("\ufffd");
|
|
1036
|
+
if (i + consumed >= bytes.length) {
|
|
1037
|
+
break;
|
|
1038
|
+
}
|
|
1039
|
+
i += consumed;
|
|
1040
|
+
continue;
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
// Read continuation bytes
|
|
1045
|
+
let valid = true;
|
|
1046
|
+
for (let j = 1; j < bytesNeeded; j++) {
|
|
1047
|
+
const contByte = bytes[i + j];
|
|
1048
|
+
if ((contByte & 0xc0) !== 0x80) {
|
|
1049
|
+
valid = false;
|
|
1050
|
+
break;
|
|
1051
|
+
}
|
|
1052
|
+
codePoint = (codePoint << 6) | (contByte & 0x3f);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
if (!valid) {
|
|
1056
|
+
if (this.fatal) {
|
|
1057
|
+
throw createEncodingError("Invalid UTF-8 continuation byte");
|
|
1058
|
+
}
|
|
1059
|
+
result.push("\ufffd");
|
|
1060
|
+
i++;
|
|
1061
|
+
continue;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
// Validate code point
|
|
1065
|
+
if (
|
|
1066
|
+
codePoint > 0x10ffff ||
|
|
1067
|
+
(codePoint >= 0xd800 && codePoint <= 0xdfff) ||
|
|
1068
|
+
(bytesNeeded === 2 && codePoint < 0x80) ||
|
|
1069
|
+
(bytesNeeded === 3 && codePoint < 0x800) ||
|
|
1070
|
+
(bytesNeeded === 4 && codePoint < 0x10000)
|
|
1071
|
+
) {
|
|
1072
|
+
if (this.fatal) {
|
|
1073
|
+
throw createEncodingError("Invalid UTF-8 code point");
|
|
1074
|
+
}
|
|
1075
|
+
result.push("\ufffd");
|
|
1076
|
+
i++;
|
|
1077
|
+
continue;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
// Convert code point to string
|
|
1081
|
+
if (codePoint <= 0xffff) {
|
|
1082
|
+
result.push(String.fromCharCode(codePoint));
|
|
1083
|
+
} else {
|
|
1084
|
+
// Convert to surrogate pair
|
|
1085
|
+
const offset = codePoint - 0x10000;
|
|
1086
|
+
result.push(
|
|
1087
|
+
String.fromCharCode(0xd800 + (offset >> 10)),
|
|
1088
|
+
String.fromCharCode(0xdc00 + (offset & 0x3ff))
|
|
1089
|
+
);
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
i += bytesNeeded;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
return result.join("");
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
private _decodeUTF16(
|
|
1099
|
+
bytes: Uint8Array,
|
|
1100
|
+
bigEndian: boolean,
|
|
1101
|
+
stream: boolean
|
|
1102
|
+
): string {
|
|
1103
|
+
const result: string[] = [];
|
|
1104
|
+
let i = 0;
|
|
1105
|
+
|
|
1106
|
+
// Handle BOM
|
|
1107
|
+
if (!this._bomSeen && bytes.length >= 2) {
|
|
1108
|
+
if (bytes[0] === 0xfe && bytes[1] === 0xff && !this.ignoreBOM) {
|
|
1109
|
+
bigEndian = true;
|
|
1110
|
+
i = 2;
|
|
1111
|
+
} else if (bytes[0] === 0xff && bytes[1] === 0xfe && !this.ignoreBOM) {
|
|
1112
|
+
bigEndian = false;
|
|
1113
|
+
i = 2;
|
|
1114
|
+
}
|
|
1115
|
+
this._bomSeen = true;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
while (i < bytes.length) {
|
|
1119
|
+
if (i + 1 >= bytes.length) {
|
|
1120
|
+
if (stream) {
|
|
1121
|
+
this._pendingBytes = Array.from(bytes.slice(i));
|
|
1122
|
+
break;
|
|
1123
|
+
}
|
|
1124
|
+
if (this.fatal) {
|
|
1125
|
+
throw createEncodingError("Invalid UTF-16 byte sequence");
|
|
1126
|
+
}
|
|
1127
|
+
result.push("\ufffd");
|
|
1128
|
+
break;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
const unit = bigEndian
|
|
1132
|
+
? (bytes[i] << 8) | bytes[i + 1]
|
|
1133
|
+
: bytes[i] | (bytes[i + 1] << 8);
|
|
1134
|
+
|
|
1135
|
+
// Check for surrogate pairs
|
|
1136
|
+
if (unit >= 0xd800 && unit <= 0xdbff) {
|
|
1137
|
+
// High surrogate
|
|
1138
|
+
if (i + 3 >= bytes.length) {
|
|
1139
|
+
if (stream) {
|
|
1140
|
+
this._pendingBytes = Array.from(bytes.slice(i));
|
|
1141
|
+
break;
|
|
1142
|
+
}
|
|
1143
|
+
if (this.fatal) {
|
|
1144
|
+
throw createEncodingError("Invalid UTF-16 surrogate pair");
|
|
1145
|
+
}
|
|
1146
|
+
result.push("\ufffd");
|
|
1147
|
+
i += 2;
|
|
1148
|
+
continue;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
const low = bigEndian
|
|
1152
|
+
? (bytes[i + 2] << 8) | bytes[i + 3]
|
|
1153
|
+
: bytes[i + 2] | (bytes[i + 3] << 8);
|
|
1154
|
+
|
|
1155
|
+
if (low >= 0xdc00 && low <= 0xdfff) {
|
|
1156
|
+
result.push(String.fromCharCode(unit, low));
|
|
1157
|
+
i += 4;
|
|
1158
|
+
continue;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
// Unpaired high surrogate
|
|
1162
|
+
if (this.fatal) {
|
|
1163
|
+
throw createEncodingError("Invalid UTF-16 surrogate pair");
|
|
1164
|
+
}
|
|
1165
|
+
result.push("\ufffd");
|
|
1166
|
+
} else if (unit >= 0xdc00 && unit <= 0xdfff) {
|
|
1167
|
+
// Unpaired low surrogate
|
|
1168
|
+
if (this.fatal) {
|
|
1169
|
+
throw createEncodingError("Invalid UTF-16 surrogate pair");
|
|
1170
|
+
}
|
|
1171
|
+
result.push("\ufffd");
|
|
1172
|
+
} else {
|
|
1173
|
+
result.push(String.fromCharCode(unit));
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
i += 2;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
return result.join("");
|
|
1180
|
+
}
|
|
1181
|
+
}
|