@rohal12/twee-ts 1.13.1 → 1.15.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/dist/bin/twee-ts.js +933 -1127
- package/dist/bin/twee-ts.js.map +1 -1
- package/dist/{chunk-EQAUFATA.js → chunk-W3SNMQO4.js} +990 -1184
- package/dist/chunk-W3SNMQO4.js.map +1 -0
- package/dist/index.cjs +953 -1146
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1059 -1253
- package/dist/index.js.map +1 -1
- package/dist/plugins/rollup.js +1 -1
- package/dist/plugins/vite.d.ts +11 -45
- package/dist/plugins/vite.js +308 -38
- package/dist/plugins/vite.js.map +1 -1
- package/package.json +19 -5
- package/dist/chunk-EQAUFATA.js.map +0 -1
|
@@ -1,3 +1,63 @@
|
|
|
1
|
+
// src/media-types.ts
|
|
2
|
+
import { extname } from "path";
|
|
3
|
+
var MEDIA_TYPE_MAP = {
|
|
4
|
+
// Audio
|
|
5
|
+
aac: "audio/aac",
|
|
6
|
+
flac: "audio/flac",
|
|
7
|
+
ogg: "audio/ogg",
|
|
8
|
+
wav: "audio/wav",
|
|
9
|
+
mp3: "audio/mpeg",
|
|
10
|
+
m4a: "audio/mp4",
|
|
11
|
+
oga: "audio/ogg",
|
|
12
|
+
opus: "audio/ogg",
|
|
13
|
+
wave: "audio/wav",
|
|
14
|
+
weba: "audio/webm",
|
|
15
|
+
// Fonts
|
|
16
|
+
otf: "font/otf",
|
|
17
|
+
ttf: "font/ttf",
|
|
18
|
+
woff: "font/woff",
|
|
19
|
+
woff2: "font/woff2",
|
|
20
|
+
// Images
|
|
21
|
+
gif: "image/gif",
|
|
22
|
+
jpeg: "image/jpeg",
|
|
23
|
+
jpg: "image/jpeg",
|
|
24
|
+
png: "image/png",
|
|
25
|
+
svg: "image/svg+xml",
|
|
26
|
+
tif: "image/tiff",
|
|
27
|
+
tiff: "image/tiff",
|
|
28
|
+
webp: "image/webp",
|
|
29
|
+
// Metadata
|
|
30
|
+
vtt: "text/vtt",
|
|
31
|
+
// Video
|
|
32
|
+
mp4: "video/mp4",
|
|
33
|
+
ogv: "video/ogg",
|
|
34
|
+
webm: "video/webm"
|
|
35
|
+
};
|
|
36
|
+
function mediaTypeFromExt(ext) {
|
|
37
|
+
return MEDIA_TYPE_MAP[ext] ?? "application/octet-stream";
|
|
38
|
+
}
|
|
39
|
+
function mediaTypeFromFilename(filename) {
|
|
40
|
+
return mediaTypeFromExt(normalizedFileExt(filename));
|
|
41
|
+
}
|
|
42
|
+
function normalizedFileExt(filename) {
|
|
43
|
+
const ext = extname(filename);
|
|
44
|
+
if (!ext) return "";
|
|
45
|
+
return ext.slice(1).toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
function slugify(original) {
|
|
48
|
+
return original.replace(/[\x00-\x20!-/:-@[-^`{-\x9f]+/g, "_");
|
|
49
|
+
}
|
|
50
|
+
function fontFormatHint(ext) {
|
|
51
|
+
switch (ext) {
|
|
52
|
+
case "ttf":
|
|
53
|
+
return "truetype";
|
|
54
|
+
case "otf":
|
|
55
|
+
return "opentype";
|
|
56
|
+
default:
|
|
57
|
+
return ext;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
1
61
|
// src/compiler.ts
|
|
2
62
|
import { writeFileSync as writeFileSync2 } from "fs";
|
|
3
63
|
|
|
@@ -488,68 +548,6 @@ function getStoryStats(story, wordCountMethod = "tweego") {
|
|
|
488
548
|
// src/filesystem.ts
|
|
489
549
|
import { readdirSync, statSync, watch as fsWatch } from "fs";
|
|
490
550
|
import { resolve, relative, join } from "path";
|
|
491
|
-
|
|
492
|
-
// src/media-types.ts
|
|
493
|
-
import { extname } from "path";
|
|
494
|
-
var MEDIA_TYPE_MAP = {
|
|
495
|
-
// Audio
|
|
496
|
-
aac: "audio/aac",
|
|
497
|
-
flac: "audio/flac",
|
|
498
|
-
ogg: "audio/ogg",
|
|
499
|
-
wav: "audio/wav",
|
|
500
|
-
mp3: "audio/mpeg",
|
|
501
|
-
m4a: "audio/mp4",
|
|
502
|
-
oga: "audio/ogg",
|
|
503
|
-
opus: "audio/ogg",
|
|
504
|
-
wave: "audio/wav",
|
|
505
|
-
weba: "audio/webm",
|
|
506
|
-
// Fonts
|
|
507
|
-
otf: "font/otf",
|
|
508
|
-
ttf: "font/ttf",
|
|
509
|
-
woff: "font/woff",
|
|
510
|
-
woff2: "font/woff2",
|
|
511
|
-
// Images
|
|
512
|
-
gif: "image/gif",
|
|
513
|
-
jpeg: "image/jpeg",
|
|
514
|
-
jpg: "image/jpeg",
|
|
515
|
-
png: "image/png",
|
|
516
|
-
svg: "image/svg+xml",
|
|
517
|
-
tif: "image/tiff",
|
|
518
|
-
tiff: "image/tiff",
|
|
519
|
-
webp: "image/webp",
|
|
520
|
-
// Metadata
|
|
521
|
-
vtt: "text/vtt",
|
|
522
|
-
// Video
|
|
523
|
-
mp4: "video/mp4",
|
|
524
|
-
ogv: "video/ogg",
|
|
525
|
-
webm: "video/webm"
|
|
526
|
-
};
|
|
527
|
-
function mediaTypeFromExt(ext) {
|
|
528
|
-
return MEDIA_TYPE_MAP[ext] ?? "application/octet-stream";
|
|
529
|
-
}
|
|
530
|
-
function mediaTypeFromFilename(filename) {
|
|
531
|
-
return mediaTypeFromExt(normalizedFileExt(filename));
|
|
532
|
-
}
|
|
533
|
-
function normalizedFileExt(filename) {
|
|
534
|
-
const ext = extname(filename);
|
|
535
|
-
if (!ext) return "";
|
|
536
|
-
return ext.slice(1).toLowerCase();
|
|
537
|
-
}
|
|
538
|
-
function slugify(original) {
|
|
539
|
-
return original.replace(/[\x00-\x20!-/:-@[-^`{-\x9f]+/g, "_");
|
|
540
|
-
}
|
|
541
|
-
function fontFormatHint(ext) {
|
|
542
|
-
switch (ext) {
|
|
543
|
-
case "ttf":
|
|
544
|
-
return "truetype";
|
|
545
|
-
case "otf":
|
|
546
|
-
return "opentype";
|
|
547
|
-
default:
|
|
548
|
-
return ext;
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// src/filesystem.ts
|
|
553
551
|
function getFilenames(pathnames, outFilename) {
|
|
554
552
|
const filenames = [];
|
|
555
553
|
const absOutFile = outFilename ? resolve(outFilename) : "";
|
|
@@ -1253,8 +1251,7 @@ function parseTwee(source, options = {}) {
|
|
|
1253
1251
|
return { passages, diagnostics };
|
|
1254
1252
|
}
|
|
1255
1253
|
|
|
1256
|
-
// node_modules/.pnpm/entities@
|
|
1257
|
-
var _a;
|
|
1254
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js
|
|
1258
1255
|
var decodeMap = /* @__PURE__ */ new Map([
|
|
1259
1256
|
[0, 65533],
|
|
1260
1257
|
// C1 Unicode control character reference replacements
|
|
@@ -1286,47 +1283,16 @@ var decodeMap = /* @__PURE__ */ new Map([
|
|
|
1286
1283
|
[158, 382],
|
|
1287
1284
|
[159, 376]
|
|
1288
1285
|
]);
|
|
1289
|
-
var fromCodePoint = (
|
|
1290
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
|
|
1291
|
-
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
|
|
1292
|
-
let output = "";
|
|
1293
|
-
if (codePoint > 65535) {
|
|
1294
|
-
codePoint -= 65536;
|
|
1295
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
1296
|
-
codePoint = 56320 | codePoint & 1023;
|
|
1297
|
-
}
|
|
1298
|
-
output += String.fromCharCode(codePoint);
|
|
1299
|
-
return output;
|
|
1300
|
-
})
|
|
1301
|
-
);
|
|
1302
1286
|
function replaceCodePoint(codePoint) {
|
|
1303
|
-
var _a3;
|
|
1304
1287
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
1305
1288
|
return 65533;
|
|
1306
1289
|
}
|
|
1307
|
-
return
|
|
1290
|
+
return decodeMap.get(codePoint) ?? codePoint;
|
|
1308
1291
|
}
|
|
1309
1292
|
|
|
1310
|
-
// node_modules/.pnpm/entities@
|
|
1293
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js
|
|
1311
1294
|
function decodeBase64(input) {
|
|
1312
|
-
const binary = (
|
|
1313
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1314
|
-
typeof atob === "function" ? (
|
|
1315
|
-
// Browser (and Node >=16)
|
|
1316
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1317
|
-
atob(input)
|
|
1318
|
-
) : (
|
|
1319
|
-
// Older Node versions (<16)
|
|
1320
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1321
|
-
typeof Buffer.from === "function" ? (
|
|
1322
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1323
|
-
Buffer.from(input, "base64").toString("binary")
|
|
1324
|
-
) : (
|
|
1325
|
-
// eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
|
|
1326
|
-
new Buffer(input, "base64").toString("binary")
|
|
1327
|
-
)
|
|
1328
|
-
)
|
|
1329
|
-
);
|
|
1295
|
+
const binary = atob(input);
|
|
1330
1296
|
const evenLength = binary.length & ~1;
|
|
1331
1297
|
const out = new Uint16Array(evenLength / 2);
|
|
1332
1298
|
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
@@ -1337,36 +1303,36 @@ function decodeBase64(input) {
|
|
|
1337
1303
|
return out;
|
|
1338
1304
|
}
|
|
1339
1305
|
|
|
1340
|
-
// node_modules/.pnpm/entities@
|
|
1306
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js
|
|
1341
1307
|
var htmlDecodeTree = /* @__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
|
|
1342
1308
|
|
|
1343
|
-
// node_modules/.pnpm/entities@
|
|
1309
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-xml.js
|
|
1344
1310
|
var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
|
|
1345
1311
|
|
|
1346
|
-
// node_modules/.pnpm/entities@
|
|
1312
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js
|
|
1347
1313
|
var BinTrieFlags;
|
|
1348
|
-
(function(
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1314
|
+
(function(BinTrieFlags2) {
|
|
1315
|
+
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1316
|
+
BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
|
|
1317
|
+
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1318
|
+
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1353
1319
|
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1354
1320
|
|
|
1355
|
-
// node_modules/.pnpm/entities@
|
|
1321
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js
|
|
1356
1322
|
var CharCodes;
|
|
1357
|
-
(function(
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1323
|
+
(function(CharCodes3) {
|
|
1324
|
+
CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
|
|
1325
|
+
CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
|
|
1326
|
+
CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
|
|
1327
|
+
CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
|
|
1328
|
+
CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
|
|
1329
|
+
CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
|
|
1330
|
+
CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
|
|
1331
|
+
CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
|
|
1332
|
+
CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1333
|
+
CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
|
|
1334
|
+
CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
|
|
1335
|
+
CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1370
1336
|
})(CharCodes || (CharCodes = {}));
|
|
1371
1337
|
var TO_LOWER_BIT = 32;
|
|
1372
1338
|
function isNumber(code) {
|
|
@@ -1382,33 +1348,51 @@ function isEntityInAttributeInvalidEnd(code) {
|
|
|
1382
1348
|
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1383
1349
|
}
|
|
1384
1350
|
var EntityDecoderState;
|
|
1385
|
-
(function(
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1351
|
+
(function(EntityDecoderState2) {
|
|
1352
|
+
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
1353
|
+
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
1354
|
+
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1355
|
+
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
1356
|
+
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
1391
1357
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1392
1358
|
var DecodingMode;
|
|
1393
|
-
(function(
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1359
|
+
(function(DecodingMode2) {
|
|
1360
|
+
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
1361
|
+
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
1362
|
+
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
1397
1363
|
})(DecodingMode || (DecodingMode = {}));
|
|
1398
1364
|
var EntityDecoder = class {
|
|
1365
|
+
decodeTree;
|
|
1366
|
+
emitCodePoint;
|
|
1367
|
+
errors;
|
|
1399
1368
|
constructor(decodeTree, emitCodePoint, errors) {
|
|
1400
1369
|
this.decodeTree = decodeTree;
|
|
1401
1370
|
this.emitCodePoint = emitCodePoint;
|
|
1402
1371
|
this.errors = errors;
|
|
1403
|
-
this.state = EntityDecoderState.EntityStart;
|
|
1404
|
-
this.consumed = 1;
|
|
1405
|
-
this.result = 0;
|
|
1406
|
-
this.treeIndex = 0;
|
|
1407
|
-
this.excess = 1;
|
|
1408
|
-
this.decodeMode = DecodingMode.Strict;
|
|
1409
|
-
this.runConsumed = 0;
|
|
1410
1372
|
}
|
|
1411
|
-
/**
|
|
1373
|
+
/** The current state of the decoder. */
|
|
1374
|
+
state = EntityDecoderState.EntityStart;
|
|
1375
|
+
/** Characters that were consumed while parsing an entity. */
|
|
1376
|
+
consumed = 1;
|
|
1377
|
+
/**
|
|
1378
|
+
* The result of the entity.
|
|
1379
|
+
*
|
|
1380
|
+
* Either the result index of a numeric entity, or the codepoint of a
|
|
1381
|
+
* numeric entity.
|
|
1382
|
+
*/
|
|
1383
|
+
result = 0;
|
|
1384
|
+
/** The current index in the decode tree. */
|
|
1385
|
+
treeIndex = 0;
|
|
1386
|
+
/** The number of characters that were consumed in excess. */
|
|
1387
|
+
excess = 1;
|
|
1388
|
+
/** The mode in which the decoder is operating. */
|
|
1389
|
+
decodeMode = DecodingMode.Strict;
|
|
1390
|
+
/** The number of characters that have been consumed in the current run. */
|
|
1391
|
+
runConsumed = 0;
|
|
1392
|
+
/**
|
|
1393
|
+
* Resets the instance to make it reusable.
|
|
1394
|
+
* @param decodeMode Entity decoding mode to use.
|
|
1395
|
+
*/
|
|
1412
1396
|
startEntity(decodeMode) {
|
|
1413
1397
|
this.decodeMode = decodeMode;
|
|
1414
1398
|
this.state = EntityDecoderState.EntityStart;
|
|
@@ -1424,7 +1408,6 @@ var EntityDecoder = class {
|
|
|
1424
1408
|
*
|
|
1425
1409
|
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
1426
1410
|
* entity is incomplete, and resume when the next string is written.
|
|
1427
|
-
*
|
|
1428
1411
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1429
1412
|
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
1430
1413
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1458,7 +1441,6 @@ var EntityDecoder = class {
|
|
|
1458
1441
|
* Switches between the numeric decimal and hexadecimal states.
|
|
1459
1442
|
*
|
|
1460
1443
|
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
1461
|
-
*
|
|
1462
1444
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1463
1445
|
* @param offset The current offset.
|
|
1464
1446
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1479,7 +1461,6 @@ var EntityDecoder = class {
|
|
|
1479
1461
|
* Parses a hexadecimal numeric entity.
|
|
1480
1462
|
*
|
|
1481
1463
|
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
1482
|
-
*
|
|
1483
1464
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1484
1465
|
* @param offset The current offset.
|
|
1485
1466
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1502,7 +1483,6 @@ var EntityDecoder = class {
|
|
|
1502
1483
|
* Parses a decimal numeric entity.
|
|
1503
1484
|
*
|
|
1504
1485
|
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
1505
|
-
*
|
|
1506
1486
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1507
1487
|
* @param offset The current offset.
|
|
1508
1488
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1525,7 +1505,6 @@ var EntityDecoder = class {
|
|
|
1525
1505
|
*
|
|
1526
1506
|
* Implements the logic from the `Hexademical character reference start
|
|
1527
1507
|
* state` and `Numeric character reference end state` in the HTML spec.
|
|
1528
|
-
*
|
|
1529
1508
|
* @param lastCp The last code point of the entity. Used to see if the
|
|
1530
1509
|
* entity was terminated with a semicolon.
|
|
1531
1510
|
* @param expectedLength The minimum number of characters that should be
|
|
@@ -1534,9 +1513,8 @@ var EntityDecoder = class {
|
|
|
1534
1513
|
* @returns The number of characters that were consumed.
|
|
1535
1514
|
*/
|
|
1536
1515
|
emitNumericEntity(lastCp, expectedLength) {
|
|
1537
|
-
var _a3;
|
|
1538
1516
|
if (this.consumed <= expectedLength) {
|
|
1539
|
-
|
|
1517
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1540
1518
|
return 0;
|
|
1541
1519
|
}
|
|
1542
1520
|
if (lastCp === CharCodes.SEMI) {
|
|
@@ -1557,7 +1535,6 @@ var EntityDecoder = class {
|
|
|
1557
1535
|
* Parses a named entity.
|
|
1558
1536
|
*
|
|
1559
1537
|
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
1560
|
-
*
|
|
1561
1538
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1562
1539
|
* @param offset The current offset.
|
|
1563
1540
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1630,24 +1607,20 @@ var EntityDecoder = class {
|
|
|
1630
1607
|
}
|
|
1631
1608
|
/**
|
|
1632
1609
|
* Emit a named entity that was not terminated with a semicolon.
|
|
1633
|
-
*
|
|
1634
1610
|
* @returns The number of characters consumed.
|
|
1635
1611
|
*/
|
|
1636
1612
|
emitNotTerminatedNamedEntity() {
|
|
1637
|
-
var _a3;
|
|
1638
1613
|
const { result, decodeTree } = this;
|
|
1639
1614
|
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1640
1615
|
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1641
|
-
|
|
1616
|
+
this.errors?.missingSemicolonAfterCharacterReference();
|
|
1642
1617
|
return this.consumed;
|
|
1643
1618
|
}
|
|
1644
1619
|
/**
|
|
1645
1620
|
* Emit a named entity.
|
|
1646
|
-
*
|
|
1647
1621
|
* @param result The index of the entity in the decode tree.
|
|
1648
1622
|
* @param valueLength The number of bytes in the entity.
|
|
1649
1623
|
* @param consumed The number of characters consumed.
|
|
1650
|
-
*
|
|
1651
1624
|
* @returns The number of characters consumed.
|
|
1652
1625
|
*/
|
|
1653
1626
|
emitNamedEntityData(result, valueLength, consumed) {
|
|
@@ -1662,11 +1635,9 @@ var EntityDecoder = class {
|
|
|
1662
1635
|
* Signal to the parser that the end of the input was reached.
|
|
1663
1636
|
*
|
|
1664
1637
|
* Remaining data will be emitted and relevant errors will be produced.
|
|
1665
|
-
*
|
|
1666
1638
|
* @returns The number of characters consumed.
|
|
1667
1639
|
*/
|
|
1668
1640
|
end() {
|
|
1669
|
-
var _a3;
|
|
1670
1641
|
switch (this.state) {
|
|
1671
1642
|
case EntityDecoderState.NamedEntity: {
|
|
1672
1643
|
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
@@ -1679,7 +1650,7 @@ var EntityDecoder = class {
|
|
|
1679
1650
|
return this.emitNumericEntity(0, 3);
|
|
1680
1651
|
}
|
|
1681
1652
|
case EntityDecoderState.NumericStart: {
|
|
1682
|
-
|
|
1653
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1683
1654
|
return 0;
|
|
1684
1655
|
}
|
|
1685
1656
|
case EntityDecoderState.EntityStart: {
|
|
@@ -1717,36 +1688,36 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
|
1717
1688
|
return -1;
|
|
1718
1689
|
}
|
|
1719
1690
|
|
|
1720
|
-
// node_modules/.pnpm/htmlparser2@
|
|
1691
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Tokenizer.js
|
|
1721
1692
|
var CharCodes2;
|
|
1722
|
-
(function(
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1693
|
+
(function(CharCodes3) {
|
|
1694
|
+
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
|
|
1695
|
+
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
|
|
1696
|
+
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
|
|
1697
|
+
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
|
|
1698
|
+
CharCodes3[CharCodes3["Space"] = 32] = "Space";
|
|
1699
|
+
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
|
|
1700
|
+
CharCodes3[CharCodes3["Number"] = 35] = "Number";
|
|
1701
|
+
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
|
|
1702
|
+
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
|
|
1703
|
+
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
|
|
1704
|
+
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
|
|
1705
|
+
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
|
|
1706
|
+
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
|
|
1707
|
+
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
|
|
1708
|
+
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
|
|
1709
|
+
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
|
|
1710
|
+
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
|
|
1711
|
+
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
|
|
1712
|
+
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
|
|
1713
|
+
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
|
|
1714
|
+
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
|
|
1715
|
+
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
|
|
1716
|
+
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
|
|
1717
|
+
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
|
|
1718
|
+
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
|
|
1719
|
+
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
|
|
1720
|
+
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
1750
1721
|
})(CharCodes2 || (CharCodes2 = {}));
|
|
1751
1722
|
var State;
|
|
1752
1723
|
(function(State2) {
|
|
@@ -1769,12 +1740,12 @@ var State;
|
|
|
1769
1740
|
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
1770
1741
|
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
1771
1742
|
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
1772
|
-
State2[State2["
|
|
1773
|
-
State2[State2["
|
|
1774
|
-
State2[State2["
|
|
1775
|
-
State2[State2["
|
|
1776
|
-
State2[State2["
|
|
1777
|
-
State2[State2["
|
|
1743
|
+
State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
|
|
1744
|
+
State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
|
|
1745
|
+
State2[State2["InCommentLike"] = 22] = "InCommentLike";
|
|
1746
|
+
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
1747
|
+
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
1748
|
+
State2[State2["InPlainText"] = 25] = "InPlainText";
|
|
1778
1749
|
State2[State2["InEntity"] = 26] = "InEntity";
|
|
1779
1750
|
})(State || (State = {}));
|
|
1780
1751
|
function isWhitespace(c) {
|
|
@@ -1794,12 +1765,56 @@ var QuoteType;
|
|
|
1794
1765
|
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
1795
1766
|
})(QuoteType || (QuoteType = {}));
|
|
1796
1767
|
var Sequences = {
|
|
1768
|
+
Empty: new Uint8Array(0),
|
|
1797
1769
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
1798
1770
|
// CDATA[
|
|
1799
1771
|
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
1800
1772
|
// ]]>
|
|
1801
|
-
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
1802
|
-
//
|
|
1773
|
+
CommentEnd: new Uint8Array([45, 45, 33, 62]),
|
|
1774
|
+
// `--!>`
|
|
1775
|
+
Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
|
|
1776
|
+
// `doctype`
|
|
1777
|
+
IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
|
|
1778
|
+
// `</iframe`
|
|
1779
|
+
NoembedEnd: new Uint8Array([
|
|
1780
|
+
60,
|
|
1781
|
+
47,
|
|
1782
|
+
110,
|
|
1783
|
+
111,
|
|
1784
|
+
101,
|
|
1785
|
+
109,
|
|
1786
|
+
98,
|
|
1787
|
+
101,
|
|
1788
|
+
100
|
|
1789
|
+
]),
|
|
1790
|
+
// `</noembed`
|
|
1791
|
+
NoframesEnd: new Uint8Array([
|
|
1792
|
+
60,
|
|
1793
|
+
47,
|
|
1794
|
+
110,
|
|
1795
|
+
111,
|
|
1796
|
+
102,
|
|
1797
|
+
114,
|
|
1798
|
+
97,
|
|
1799
|
+
109,
|
|
1800
|
+
101,
|
|
1801
|
+
115
|
|
1802
|
+
]),
|
|
1803
|
+
// `</noframes`
|
|
1804
|
+
Plaintext: new Uint8Array([
|
|
1805
|
+
60,
|
|
1806
|
+
47,
|
|
1807
|
+
112,
|
|
1808
|
+
108,
|
|
1809
|
+
97,
|
|
1810
|
+
105,
|
|
1811
|
+
110,
|
|
1812
|
+
116,
|
|
1813
|
+
101,
|
|
1814
|
+
120,
|
|
1815
|
+
116
|
|
1816
|
+
]),
|
|
1817
|
+
// `</plaintext`
|
|
1803
1818
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
1804
1819
|
// `</script`
|
|
1805
1820
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
@@ -1822,22 +1837,43 @@ var Sequences = {
|
|
|
1822
1837
|
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
1823
1838
|
// `</xmp`
|
|
1824
1839
|
};
|
|
1840
|
+
var specialStartSequences = /* @__PURE__ */ new Map([
|
|
1841
|
+
[Sequences.IframeEnd[2], Sequences.IframeEnd],
|
|
1842
|
+
[Sequences.NoembedEnd[2], Sequences.NoembedEnd],
|
|
1843
|
+
[Sequences.Plaintext[2], Sequences.Plaintext],
|
|
1844
|
+
[Sequences.ScriptEnd[2], Sequences.ScriptEnd],
|
|
1845
|
+
[Sequences.TitleEnd[2], Sequences.TitleEnd],
|
|
1846
|
+
[Sequences.XmpEnd[2], Sequences.XmpEnd]
|
|
1847
|
+
]);
|
|
1825
1848
|
var Tokenizer = class {
|
|
1826
|
-
|
|
1849
|
+
cbs;
|
|
1850
|
+
/** The current state the tokenizer is in. */
|
|
1851
|
+
state = State.Text;
|
|
1852
|
+
/** The read buffer. */
|
|
1853
|
+
buffer = "";
|
|
1854
|
+
/** The beginning of the section that is currently being read. */
|
|
1855
|
+
sectionStart = 0;
|
|
1856
|
+
/** The index within the buffer that we are currently looking at. */
|
|
1857
|
+
index = 0;
|
|
1858
|
+
/** The start of the last entity. */
|
|
1859
|
+
entityStart = 0;
|
|
1860
|
+
/** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
|
|
1861
|
+
baseState = State.Text;
|
|
1862
|
+
/** For special parsing behavior inside of script and style tags. */
|
|
1863
|
+
isSpecial = false;
|
|
1864
|
+
/** Indicates whether the tokenizer has been paused. */
|
|
1865
|
+
running = true;
|
|
1866
|
+
/** The offset of the current buffer. */
|
|
1867
|
+
offset = 0;
|
|
1868
|
+
xmlMode;
|
|
1869
|
+
decodeEntities;
|
|
1870
|
+
recognizeSelfClosing;
|
|
1871
|
+
entityDecoder;
|
|
1872
|
+
constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
|
|
1827
1873
|
this.cbs = cbs;
|
|
1828
|
-
this.state = State.Text;
|
|
1829
|
-
this.buffer = "";
|
|
1830
|
-
this.sectionStart = 0;
|
|
1831
|
-
this.index = 0;
|
|
1832
|
-
this.entityStart = 0;
|
|
1833
|
-
this.baseState = State.Text;
|
|
1834
|
-
this.isSpecial = false;
|
|
1835
|
-
this.running = true;
|
|
1836
|
-
this.offset = 0;
|
|
1837
|
-
this.currentSequence = void 0;
|
|
1838
|
-
this.sequenceIndex = 0;
|
|
1839
1874
|
this.xmlMode = xmlMode;
|
|
1840
1875
|
this.decodeEntities = decodeEntities;
|
|
1876
|
+
this.recognizeSelfClosing = recognizeSelfClosing;
|
|
1841
1877
|
this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
|
|
1842
1878
|
}
|
|
1843
1879
|
reset() {
|
|
@@ -1846,7 +1882,9 @@ var Tokenizer = class {
|
|
|
1846
1882
|
this.sectionStart = 0;
|
|
1847
1883
|
this.index = 0;
|
|
1848
1884
|
this.baseState = State.Text;
|
|
1849
|
-
this.
|
|
1885
|
+
this.isSpecial = false;
|
|
1886
|
+
this.currentSequence = Sequences.Empty;
|
|
1887
|
+
this.sequenceIndex = 0;
|
|
1850
1888
|
this.running = true;
|
|
1851
1889
|
this.offset = 0;
|
|
1852
1890
|
}
|
|
@@ -1879,56 +1917,63 @@ var Tokenizer = class {
|
|
|
1879
1917
|
this.startEntity();
|
|
1880
1918
|
}
|
|
1881
1919
|
}
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
this.
|
|
1893
|
-
} else if (!isEnd) {
|
|
1894
|
-
this.sequenceIndex++;
|
|
1895
|
-
return;
|
|
1920
|
+
currentSequence = Sequences.Empty;
|
|
1921
|
+
sequenceIndex = 0;
|
|
1922
|
+
enterTagBody() {
|
|
1923
|
+
if (this.currentSequence === Sequences.Plaintext) {
|
|
1924
|
+
this.currentSequence = Sequences.Empty;
|
|
1925
|
+
this.state = State.InPlainText;
|
|
1926
|
+
} else if (this.isSpecial) {
|
|
1927
|
+
this.state = State.InSpecialTag;
|
|
1928
|
+
this.sequenceIndex = 0;
|
|
1929
|
+
} else {
|
|
1930
|
+
this.state = State.Text;
|
|
1896
1931
|
}
|
|
1897
|
-
this.sequenceIndex = 0;
|
|
1898
|
-
this.state = State.InTagName;
|
|
1899
|
-
this.stateInTagName(c);
|
|
1900
1932
|
}
|
|
1901
|
-
/**
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1933
|
+
/**
|
|
1934
|
+
* Match the opening tag name against an HTML text-only tag sequence.
|
|
1935
|
+
*
|
|
1936
|
+
* Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,
|
|
1937
|
+
* `noembed`/`noframes`), so we may switch to an alternate sequence at the
|
|
1938
|
+
* first distinguishing byte. On a successful full match we fall back to
|
|
1939
|
+
* the normal tag-name state; a later `>` will enter raw-text, RCDATA, or
|
|
1940
|
+
* plaintext mode based on `currentSequence` / `isSpecial`.
|
|
1941
|
+
* @param c Current character code point.
|
|
1942
|
+
*/
|
|
1943
|
+
stateSpecialStartSequence(c) {
|
|
1944
|
+
const lower = c | 32;
|
|
1945
|
+
if (this.sequenceIndex < this.currentSequence.length) {
|
|
1946
|
+
if (lower === this.currentSequence[this.sequenceIndex]) {
|
|
1947
|
+
this.sequenceIndex++;
|
|
1915
1948
|
return;
|
|
1916
1949
|
}
|
|
1917
|
-
this.sequenceIndex
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
if (this.currentSequence === Sequences.TitleEnd) {
|
|
1923
|
-
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
1924
|
-
this.startEntity();
|
|
1950
|
+
if (this.sequenceIndex === 3) {
|
|
1951
|
+
if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
|
|
1952
|
+
this.currentSequence = Sequences.StyleEnd;
|
|
1953
|
+
this.sequenceIndex = 4;
|
|
1954
|
+
return;
|
|
1925
1955
|
}
|
|
1926
|
-
|
|
1927
|
-
|
|
1956
|
+
if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
|
|
1957
|
+
this.currentSequence = Sequences.TextareaEnd;
|
|
1958
|
+
this.sequenceIndex = 4;
|
|
1959
|
+
return;
|
|
1960
|
+
}
|
|
1961
|
+
} else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
|
|
1962
|
+
this.currentSequence = Sequences.NoframesEnd;
|
|
1963
|
+
this.sequenceIndex = 5;
|
|
1964
|
+
return;
|
|
1928
1965
|
}
|
|
1929
|
-
} else {
|
|
1930
|
-
this.sequenceIndex =
|
|
1966
|
+
} else if (isEndOfTagSection(c)) {
|
|
1967
|
+
this.sequenceIndex = 0;
|
|
1968
|
+
this.state = State.InTagName;
|
|
1969
|
+
this.stateInTagName(c);
|
|
1970
|
+
return;
|
|
1931
1971
|
}
|
|
1972
|
+
this.isSpecial = false;
|
|
1973
|
+
this.currentSequence = Sequences.Empty;
|
|
1974
|
+
this.sequenceIndex = 0;
|
|
1975
|
+
this.state = State.InTagName;
|
|
1976
|
+
this.stateInTagName(c);
|
|
1932
1977
|
}
|
|
1933
1978
|
stateCDATASequence(c) {
|
|
1934
1979
|
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
@@ -1940,14 +1985,19 @@ var Tokenizer = class {
|
|
|
1940
1985
|
}
|
|
1941
1986
|
} else {
|
|
1942
1987
|
this.sequenceIndex = 0;
|
|
1943
|
-
this.
|
|
1944
|
-
|
|
1988
|
+
if (this.xmlMode) {
|
|
1989
|
+
this.state = State.InDeclaration;
|
|
1990
|
+
this.stateInDeclaration(c);
|
|
1991
|
+
} else {
|
|
1992
|
+
this.state = State.InSpecialComment;
|
|
1993
|
+
this.stateInSpecialComment(c);
|
|
1994
|
+
}
|
|
1945
1995
|
}
|
|
1946
1996
|
}
|
|
1947
1997
|
/**
|
|
1948
1998
|
* When we wait for one specific character, we can speed things up
|
|
1949
1999
|
* by skipping through the buffer until we find it.
|
|
1950
|
-
*
|
|
2000
|
+
* @param c Current character code point.
|
|
1951
2001
|
* @returns Whether the character was found.
|
|
1952
2002
|
*/
|
|
1953
2003
|
fastForwardTo(c) {
|
|
@@ -1959,6 +2009,16 @@ var Tokenizer = class {
|
|
|
1959
2009
|
this.index = this.buffer.length + this.offset - 1;
|
|
1960
2010
|
return false;
|
|
1961
2011
|
}
|
|
2012
|
+
/**
|
|
2013
|
+
* Emit a comment token and return to the text state.
|
|
2014
|
+
* @param offset Number of characters in the end sequence that have already been matched.
|
|
2015
|
+
*/
|
|
2016
|
+
emitComment(offset) {
|
|
2017
|
+
this.cbs.oncomment(this.sectionStart, this.index, offset);
|
|
2018
|
+
this.sequenceIndex = 0;
|
|
2019
|
+
this.sectionStart = this.index + 1;
|
|
2020
|
+
this.state = State.Text;
|
|
2021
|
+
}
|
|
1962
2022
|
/**
|
|
1963
2023
|
* Comments and CDATA end with `-->` and `]]>`.
|
|
1964
2024
|
*
|
|
@@ -1966,14 +2026,26 @@ var Tokenizer = class {
|
|
|
1966
2026
|
* - Their end sequences have a distinct character they start with.
|
|
1967
2027
|
* - That character is then repeated, so we have to check multiple repeats.
|
|
1968
2028
|
* - All characters but the start character of the sequence can be skipped.
|
|
2029
|
+
* @param c Current character code point.
|
|
1969
2030
|
*/
|
|
1970
2031
|
stateInCommentLike(c) {
|
|
1971
|
-
if (
|
|
2032
|
+
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && /*
|
|
2033
|
+
* We're still at the very start of the comment: the only
|
|
2034
|
+
* characters consumed since `<!--` are the dashes that
|
|
2035
|
+
* advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).
|
|
2036
|
+
*/
|
|
2037
|
+
this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
|
|
2038
|
+
this.emitComment(this.sequenceIndex);
|
|
2039
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
|
|
2040
|
+
this.emitComment(2);
|
|
2041
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
|
|
2042
|
+
this.sequenceIndex = Number(c === CharCodes2.Dash);
|
|
2043
|
+
} else if (c === this.currentSequence[this.sequenceIndex]) {
|
|
1972
2044
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
1973
2045
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
1974
2046
|
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
1975
2047
|
} else {
|
|
1976
|
-
this.cbs.oncomment(this.sectionStart, this.index,
|
|
2048
|
+
this.cbs.oncomment(this.sectionStart, this.index, 3);
|
|
1977
2049
|
}
|
|
1978
2050
|
this.sequenceIndex = 0;
|
|
1979
2051
|
this.sectionStart = this.index + 1;
|
|
@@ -1992,61 +2064,107 @@ var Tokenizer = class {
|
|
|
1992
2064
|
*
|
|
1993
2065
|
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
|
|
1994
2066
|
* We allow anything that wouldn't end the tag.
|
|
2067
|
+
* @param c Current character code point.
|
|
1995
2068
|
*/
|
|
1996
2069
|
isTagStartChar(c) {
|
|
1997
2070
|
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
1998
2071
|
}
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
this.
|
|
2017
|
-
|
|
2018
|
-
this.
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
this.
|
|
2072
|
+
/**
|
|
2073
|
+
* Scan raw-text / RCDATA content for the matching end tag.
|
|
2074
|
+
*
|
|
2075
|
+
* For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.
|
|
2076
|
+
* For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.
|
|
2077
|
+
* @param c Current character code point.
|
|
2078
|
+
*/
|
|
2079
|
+
stateInSpecialTag(c) {
|
|
2080
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2081
|
+
if (isEndOfTagSection(c)) {
|
|
2082
|
+
const endOfText = this.index - this.currentSequence.length;
|
|
2083
|
+
if (this.sectionStart < endOfText) {
|
|
2084
|
+
const actualIndex = this.index;
|
|
2085
|
+
this.index = endOfText;
|
|
2086
|
+
this.cbs.ontext(this.sectionStart, endOfText);
|
|
2087
|
+
this.index = actualIndex;
|
|
2088
|
+
}
|
|
2089
|
+
this.isSpecial = false;
|
|
2090
|
+
this.sectionStart = endOfText + 2;
|
|
2091
|
+
this.stateInClosingTagName(c);
|
|
2092
|
+
return;
|
|
2093
|
+
}
|
|
2094
|
+
this.sequenceIndex = 0;
|
|
2095
|
+
}
|
|
2096
|
+
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2097
|
+
this.sequenceIndex += 1;
|
|
2098
|
+
} else if (this.sequenceIndex === 0) {
|
|
2099
|
+
if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
|
|
2100
|
+
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2101
|
+
this.startEntity();
|
|
2102
|
+
}
|
|
2103
|
+
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
2104
|
+
this.sequenceIndex = 1;
|
|
2105
|
+
}
|
|
2106
|
+
} else {
|
|
2107
|
+
this.sequenceIndex = Number(c === CharCodes2.Lt);
|
|
2108
|
+
}
|
|
2109
|
+
}
|
|
2110
|
+
stateBeforeTagName(c) {
|
|
2111
|
+
if (c === CharCodes2.ExclamationMark) {
|
|
2112
|
+
this.state = State.BeforeDeclaration;
|
|
2113
|
+
this.sectionStart = this.index + 1;
|
|
2114
|
+
} else if (c === CharCodes2.Questionmark) {
|
|
2115
|
+
if (this.xmlMode) {
|
|
2116
|
+
this.state = State.InProcessingInstruction;
|
|
2117
|
+
this.sequenceIndex = 0;
|
|
2118
|
+
this.sectionStart = this.index + 1;
|
|
2119
|
+
} else {
|
|
2120
|
+
this.state = State.InSpecialComment;
|
|
2121
|
+
this.sectionStart = this.index;
|
|
2122
|
+
}
|
|
2123
|
+
} else if (this.isTagStartChar(c)) {
|
|
2124
|
+
this.sectionStart = this.index;
|
|
2125
|
+
const special = this.xmlMode || this.cbs.isInForeignContext?.() ? void 0 : specialStartSequences.get(c | 32);
|
|
2126
|
+
if (special === void 0) {
|
|
2127
|
+
this.state = State.InTagName;
|
|
2128
|
+
} else {
|
|
2129
|
+
this.isSpecial = true;
|
|
2130
|
+
this.currentSequence = special;
|
|
2131
|
+
this.sequenceIndex = 3;
|
|
2132
|
+
this.state = State.SpecialStartSequence;
|
|
2133
|
+
}
|
|
2134
|
+
} else if (c === CharCodes2.Slash) {
|
|
2135
|
+
this.state = State.BeforeClosingTagName;
|
|
2136
|
+
} else {
|
|
2137
|
+
this.state = State.Text;
|
|
2138
|
+
this.stateText(c);
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
stateInTagName(c) {
|
|
2142
|
+
if (isEndOfTagSection(c)) {
|
|
2143
|
+
this.cbs.onopentagname(this.sectionStart, this.index);
|
|
2144
|
+
this.sectionStart = -1;
|
|
2035
2145
|
this.state = State.BeforeAttributeName;
|
|
2036
2146
|
this.stateBeforeAttributeName(c);
|
|
2037
2147
|
}
|
|
2038
2148
|
}
|
|
2039
2149
|
stateBeforeClosingTagName(c) {
|
|
2040
2150
|
if (isWhitespace(c)) {
|
|
2151
|
+
if (this.xmlMode) {
|
|
2152
|
+
} else {
|
|
2153
|
+
this.state = State.InSpecialComment;
|
|
2154
|
+
this.sectionStart = this.index;
|
|
2155
|
+
}
|
|
2041
2156
|
} else if (c === CharCodes2.Gt) {
|
|
2042
2157
|
this.state = State.Text;
|
|
2158
|
+
if (!this.xmlMode) {
|
|
2159
|
+
this.sectionStart = this.index + 1;
|
|
2160
|
+
}
|
|
2043
2161
|
} else {
|
|
2044
2162
|
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
2045
2163
|
this.sectionStart = this.index;
|
|
2046
2164
|
}
|
|
2047
2165
|
}
|
|
2048
2166
|
stateInClosingTagName(c) {
|
|
2049
|
-
if (
|
|
2167
|
+
if (isEndOfTagSection(c)) {
|
|
2050
2168
|
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
2051
2169
|
this.sectionStart = -1;
|
|
2052
2170
|
this.state = State.AfterClosingTagName;
|
|
@@ -2062,12 +2180,7 @@ var Tokenizer = class {
|
|
|
2062
2180
|
stateBeforeAttributeName(c) {
|
|
2063
2181
|
if (c === CharCodes2.Gt) {
|
|
2064
2182
|
this.cbs.onopentagend(this.index);
|
|
2065
|
-
|
|
2066
|
-
this.state = State.InSpecialTag;
|
|
2067
|
-
this.sequenceIndex = 0;
|
|
2068
|
-
} else {
|
|
2069
|
-
this.state = State.Text;
|
|
2070
|
-
}
|
|
2183
|
+
this.enterTagBody();
|
|
2071
2184
|
this.sectionStart = this.index + 1;
|
|
2072
2185
|
} else if (c === CharCodes2.Slash) {
|
|
2073
2186
|
this.state = State.InSelfClosingTag;
|
|
@@ -2076,12 +2189,26 @@ var Tokenizer = class {
|
|
|
2076
2189
|
this.sectionStart = this.index;
|
|
2077
2190
|
}
|
|
2078
2191
|
}
|
|
2192
|
+
/**
|
|
2193
|
+
* Handle `/` before `>` in an opening tag.
|
|
2194
|
+
*
|
|
2195
|
+
* In HTML mode, text-only tags ignore the self-closing flag and still enter
|
|
2196
|
+
* their raw-text/RCDATA/plaintext state unless self-closing tags are being
|
|
2197
|
+
* recognized. In XML mode, or for ordinary tags, the tokenizer returns to
|
|
2198
|
+
* regular text parsing after emitting the self-closing callback.
|
|
2199
|
+
* @param c Current character code point.
|
|
2200
|
+
*/
|
|
2079
2201
|
stateInSelfClosingTag(c) {
|
|
2080
2202
|
if (c === CharCodes2.Gt) {
|
|
2081
2203
|
this.cbs.onselfclosingtag(this.index);
|
|
2082
|
-
this.state = State.Text;
|
|
2083
2204
|
this.sectionStart = this.index + 1;
|
|
2205
|
+
if (!this.recognizeSelfClosing) {
|
|
2206
|
+
this.enterTagBody();
|
|
2207
|
+
return;
|
|
2208
|
+
}
|
|
2209
|
+
this.state = State.Text;
|
|
2084
2210
|
this.isSpecial = false;
|
|
2211
|
+
this.currentSequence = Sequences.Empty;
|
|
2085
2212
|
} else if (!isWhitespace(c)) {
|
|
2086
2213
|
this.state = State.BeforeAttributeName;
|
|
2087
2214
|
this.stateBeforeAttributeName(c);
|
|
@@ -2149,12 +2276,54 @@ var Tokenizer = class {
|
|
|
2149
2276
|
this.startEntity();
|
|
2150
2277
|
}
|
|
2151
2278
|
}
|
|
2279
|
+
/**
|
|
2280
|
+
* Distinguish between CDATA, declarations, HTML comments, and HTML bogus
|
|
2281
|
+
* comments after `<!`.
|
|
2282
|
+
*
|
|
2283
|
+
* In HTML mode, only real comments and doctypes stay on declaration paths;
|
|
2284
|
+
* everything else becomes a bogus comment terminated by the next `>`.
|
|
2285
|
+
* @param c Current character code point.
|
|
2286
|
+
*/
|
|
2152
2287
|
stateBeforeDeclaration(c) {
|
|
2153
2288
|
if (c === CharCodes2.OpeningSquareBracket) {
|
|
2154
2289
|
this.state = State.CDATASequence;
|
|
2155
2290
|
this.sequenceIndex = 0;
|
|
2156
|
-
} else {
|
|
2291
|
+
} else if (this.xmlMode) {
|
|
2157
2292
|
this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2293
|
+
} else if ((c | 32) === Sequences.Doctype[0]) {
|
|
2294
|
+
this.state = State.DeclarationSequence;
|
|
2295
|
+
this.currentSequence = Sequences.Doctype;
|
|
2296
|
+
this.sequenceIndex = 1;
|
|
2297
|
+
} else if (c === CharCodes2.Gt) {
|
|
2298
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2299
|
+
this.state = State.Text;
|
|
2300
|
+
this.sectionStart = this.index + 1;
|
|
2301
|
+
} else if (c === CharCodes2.Dash) {
|
|
2302
|
+
this.state = State.BeforeComment;
|
|
2303
|
+
} else {
|
|
2304
|
+
this.state = State.InSpecialComment;
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
/**
|
|
2308
|
+
* Continue matching `doctype` after `<!d`.
|
|
2309
|
+
*
|
|
2310
|
+
* A full `doctype` match stays on the declaration path; any other name falls
|
|
2311
|
+
* back to an HTML bogus comment, which matches browser behavior for
|
|
2312
|
+
* non-doctype `<!...>` constructs.
|
|
2313
|
+
* @param c Current character code point.
|
|
2314
|
+
*/
|
|
2315
|
+
stateDeclarationSequence(c) {
|
|
2316
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2317
|
+
this.state = State.InDeclaration;
|
|
2318
|
+
this.stateInDeclaration(c);
|
|
2319
|
+
} else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2320
|
+
this.sequenceIndex += 1;
|
|
2321
|
+
} else if (c === CharCodes2.Gt) {
|
|
2322
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2323
|
+
this.state = State.Text;
|
|
2324
|
+
this.sectionStart = this.index + 1;
|
|
2325
|
+
} else {
|
|
2326
|
+
this.state = State.InSpecialComment;
|
|
2158
2327
|
}
|
|
2159
2328
|
}
|
|
2160
2329
|
stateInDeclaration(c) {
|
|
@@ -2164,21 +2333,39 @@ var Tokenizer = class {
|
|
|
2164
2333
|
this.sectionStart = this.index + 1;
|
|
2165
2334
|
}
|
|
2166
2335
|
}
|
|
2336
|
+
/**
|
|
2337
|
+
* XML processing instructions (`<?...?>`).
|
|
2338
|
+
*
|
|
2339
|
+
* In HTML mode `<?` is routed to `InSpecialComment` instead, so this
|
|
2340
|
+
* state is only reachable in XML mode.
|
|
2341
|
+
* @param c Current character code point.
|
|
2342
|
+
*/
|
|
2167
2343
|
stateInProcessingInstruction(c) {
|
|
2168
|
-
if (c === CharCodes2.
|
|
2169
|
-
this.
|
|
2344
|
+
if (c === CharCodes2.Questionmark) {
|
|
2345
|
+
this.sequenceIndex = 1;
|
|
2346
|
+
} else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
|
|
2347
|
+
this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
|
|
2348
|
+
this.sequenceIndex = 0;
|
|
2170
2349
|
this.state = State.Text;
|
|
2171
2350
|
this.sectionStart = this.index + 1;
|
|
2351
|
+
} else {
|
|
2352
|
+
this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
|
|
2172
2353
|
}
|
|
2173
2354
|
}
|
|
2174
2355
|
stateBeforeComment(c) {
|
|
2175
2356
|
if (c === CharCodes2.Dash) {
|
|
2176
2357
|
this.state = State.InCommentLike;
|
|
2177
2358
|
this.currentSequence = Sequences.CommentEnd;
|
|
2178
|
-
this.sequenceIndex =
|
|
2359
|
+
this.sequenceIndex = 0;
|
|
2179
2360
|
this.sectionStart = this.index + 1;
|
|
2180
|
-
} else {
|
|
2361
|
+
} else if (this.xmlMode) {
|
|
2181
2362
|
this.state = State.InDeclaration;
|
|
2363
|
+
} else if (c === CharCodes2.Gt) {
|
|
2364
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2365
|
+
this.state = State.Text;
|
|
2366
|
+
this.sectionStart = this.index + 1;
|
|
2367
|
+
} else {
|
|
2368
|
+
this.state = State.InSpecialComment;
|
|
2182
2369
|
}
|
|
2183
2370
|
}
|
|
2184
2371
|
stateInSpecialComment(c) {
|
|
@@ -2188,38 +2375,6 @@ var Tokenizer = class {
|
|
|
2188
2375
|
this.sectionStart = this.index + 1;
|
|
2189
2376
|
}
|
|
2190
2377
|
}
|
|
2191
|
-
stateBeforeSpecialS(c) {
|
|
2192
|
-
const lower = c | 32;
|
|
2193
|
-
if (lower === Sequences.ScriptEnd[3]) {
|
|
2194
|
-
this.startSpecial(Sequences.ScriptEnd, 4);
|
|
2195
|
-
} else if (lower === Sequences.StyleEnd[3]) {
|
|
2196
|
-
this.startSpecial(Sequences.StyleEnd, 4);
|
|
2197
|
-
} else {
|
|
2198
|
-
this.state = State.InTagName;
|
|
2199
|
-
this.stateInTagName(c);
|
|
2200
|
-
}
|
|
2201
|
-
}
|
|
2202
|
-
stateBeforeSpecialT(c) {
|
|
2203
|
-
const lower = c | 32;
|
|
2204
|
-
switch (lower) {
|
|
2205
|
-
case Sequences.TitleEnd[3]: {
|
|
2206
|
-
this.startSpecial(Sequences.TitleEnd, 4);
|
|
2207
|
-
break;
|
|
2208
|
-
}
|
|
2209
|
-
case Sequences.TextareaEnd[3]: {
|
|
2210
|
-
this.startSpecial(Sequences.TextareaEnd, 4);
|
|
2211
|
-
break;
|
|
2212
|
-
}
|
|
2213
|
-
case Sequences.XmpEnd[3]: {
|
|
2214
|
-
this.startSpecial(Sequences.XmpEnd, 4);
|
|
2215
|
-
break;
|
|
2216
|
-
}
|
|
2217
|
-
default: {
|
|
2218
|
-
this.state = State.InTagName;
|
|
2219
|
-
this.stateInTagName(c);
|
|
2220
|
-
}
|
|
2221
|
-
}
|
|
2222
|
-
}
|
|
2223
2378
|
startEntity() {
|
|
2224
2379
|
this.baseState = this.state;
|
|
2225
2380
|
this.state = State.InEntity;
|
|
@@ -2248,7 +2403,7 @@ var Tokenizer = class {
|
|
|
2248
2403
|
*/
|
|
2249
2404
|
cleanup() {
|
|
2250
2405
|
if (this.running && this.sectionStart !== this.index) {
|
|
2251
|
-
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2406
|
+
if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2252
2407
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
2253
2408
|
this.sectionStart = this.index;
|
|
2254
2409
|
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
@@ -2273,6 +2428,10 @@ var Tokenizer = class {
|
|
|
2273
2428
|
this.stateText(c);
|
|
2274
2429
|
break;
|
|
2275
2430
|
}
|
|
2431
|
+
case State.InPlainText: {
|
|
2432
|
+
this.index = this.buffer.length + this.offset - 1;
|
|
2433
|
+
break;
|
|
2434
|
+
}
|
|
2276
2435
|
case State.SpecialStartSequence: {
|
|
2277
2436
|
this.stateSpecialStartSequence(c);
|
|
2278
2437
|
break;
|
|
@@ -2285,6 +2444,10 @@ var Tokenizer = class {
|
|
|
2285
2444
|
this.stateCDATASequence(c);
|
|
2286
2445
|
break;
|
|
2287
2446
|
}
|
|
2447
|
+
case State.DeclarationSequence: {
|
|
2448
|
+
this.stateDeclarationSequence(c);
|
|
2449
|
+
break;
|
|
2450
|
+
}
|
|
2288
2451
|
case State.InAttributeValueDq: {
|
|
2289
2452
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
2290
2453
|
break;
|
|
@@ -2337,14 +2500,6 @@ var Tokenizer = class {
|
|
|
2337
2500
|
this.stateAfterClosingTagName(c);
|
|
2338
2501
|
break;
|
|
2339
2502
|
}
|
|
2340
|
-
case State.BeforeSpecialS: {
|
|
2341
|
-
this.stateBeforeSpecialS(c);
|
|
2342
|
-
break;
|
|
2343
|
-
}
|
|
2344
|
-
case State.BeforeSpecialT: {
|
|
2345
|
-
this.stateBeforeSpecialT(c);
|
|
2346
|
-
break;
|
|
2347
|
-
}
|
|
2348
2503
|
case State.InAttributeValueNq: {
|
|
2349
2504
|
this.stateInAttributeValueNoQuotes(c);
|
|
2350
2505
|
break;
|
|
@@ -2386,21 +2541,87 @@ var Tokenizer = class {
|
|
|
2386
2541
|
this.handleTrailingData();
|
|
2387
2542
|
this.cbs.onend();
|
|
2388
2543
|
}
|
|
2544
|
+
handleTrailingCommentLikeData(endIndex) {
|
|
2545
|
+
if (this.state !== State.InCommentLike) {
|
|
2546
|
+
return false;
|
|
2547
|
+
}
|
|
2548
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2549
|
+
if (this.xmlMode) {
|
|
2550
|
+
if (this.sectionStart < endIndex) {
|
|
2551
|
+
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
2552
|
+
}
|
|
2553
|
+
} else {
|
|
2554
|
+
const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
|
|
2555
|
+
this.cbs.oncomment(cdataStart, endIndex, 0);
|
|
2556
|
+
}
|
|
2557
|
+
} else {
|
|
2558
|
+
const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
|
|
2559
|
+
this.cbs.oncomment(this.sectionStart, endIndex, offset);
|
|
2560
|
+
}
|
|
2561
|
+
return true;
|
|
2562
|
+
}
|
|
2563
|
+
handleTrailingMarkupDeclaration(endIndex) {
|
|
2564
|
+
if (this.xmlMode) {
|
|
2565
|
+
switch (this.state) {
|
|
2566
|
+
case State.InSpecialComment:
|
|
2567
|
+
case State.BeforeComment:
|
|
2568
|
+
case State.CDATASequence:
|
|
2569
|
+
case State.DeclarationSequence:
|
|
2570
|
+
case State.InDeclaration: {
|
|
2571
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2572
|
+
return true;
|
|
2573
|
+
}
|
|
2574
|
+
default: {
|
|
2575
|
+
return false;
|
|
2576
|
+
}
|
|
2577
|
+
}
|
|
2578
|
+
}
|
|
2579
|
+
switch (this.state) {
|
|
2580
|
+
case State.BeforeDeclaration:
|
|
2581
|
+
case State.InSpecialComment:
|
|
2582
|
+
case State.BeforeComment:
|
|
2583
|
+
case State.CDATASequence: {
|
|
2584
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2585
|
+
return true;
|
|
2586
|
+
}
|
|
2587
|
+
case State.DeclarationSequence: {
|
|
2588
|
+
if (this.sequenceIndex !== Sequences.Doctype.length) {
|
|
2589
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2590
|
+
}
|
|
2591
|
+
return true;
|
|
2592
|
+
}
|
|
2593
|
+
case State.InDeclaration: {
|
|
2594
|
+
return true;
|
|
2595
|
+
}
|
|
2596
|
+
default: {
|
|
2597
|
+
return false;
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
}
|
|
2389
2601
|
/** Handle any trailing data. */
|
|
2390
2602
|
handleTrailingData() {
|
|
2391
2603
|
const endIndex = this.buffer.length + this.offset;
|
|
2604
|
+
if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
|
|
2605
|
+
return;
|
|
2606
|
+
}
|
|
2392
2607
|
if (this.sectionStart >= endIndex) {
|
|
2393
2608
|
return;
|
|
2394
2609
|
}
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2610
|
+
switch (this.state) {
|
|
2611
|
+
case State.InTagName:
|
|
2612
|
+
case State.BeforeAttributeName:
|
|
2613
|
+
case State.BeforeAttributeValue:
|
|
2614
|
+
case State.AfterAttributeName:
|
|
2615
|
+
case State.InAttributeName:
|
|
2616
|
+
case State.InAttributeValueSq:
|
|
2617
|
+
case State.InAttributeValueDq:
|
|
2618
|
+
case State.InAttributeValueNq:
|
|
2619
|
+
case State.InClosingTagName: {
|
|
2620
|
+
break;
|
|
2621
|
+
}
|
|
2622
|
+
default: {
|
|
2623
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2400
2624
|
}
|
|
2401
|
-
} else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) {
|
|
2402
|
-
} else {
|
|
2403
|
-
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2404
2625
|
}
|
|
2405
2626
|
}
|
|
2406
2627
|
emitCodePoint(cp, consumed) {
|
|
@@ -2422,7 +2643,8 @@ var Tokenizer = class {
|
|
|
2422
2643
|
}
|
|
2423
2644
|
};
|
|
2424
2645
|
|
|
2425
|
-
// node_modules/.pnpm/htmlparser2@
|
|
2646
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Parser.js
|
|
2647
|
+
var { fromCodePoint } = String;
|
|
2426
2648
|
var formTags = /* @__PURE__ */ new Set([
|
|
2427
2649
|
"input",
|
|
2428
2650
|
"option",
|
|
@@ -2433,6 +2655,7 @@ var formTags = /* @__PURE__ */ new Set([
|
|
|
2433
2655
|
"textarea"
|
|
2434
2656
|
]);
|
|
2435
2657
|
var pTag = /* @__PURE__ */ new Set(["p"]);
|
|
2658
|
+
var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "p"]);
|
|
2436
2659
|
var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
|
|
2437
2660
|
var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
|
|
2438
2661
|
var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
|
|
@@ -2441,14 +2664,15 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2441
2664
|
["th", /* @__PURE__ */ new Set(["th"])],
|
|
2442
2665
|
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
|
|
2443
2666
|
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
|
|
2667
|
+
["a", /* @__PURE__ */ new Set(["a"])],
|
|
2444
2668
|
["li", /* @__PURE__ */ new Set(["li"])],
|
|
2445
2669
|
["p", pTag],
|
|
2446
|
-
["h1",
|
|
2447
|
-
["h2",
|
|
2448
|
-
["h3",
|
|
2449
|
-
["h4",
|
|
2450
|
-
["h5",
|
|
2451
|
-
["h6",
|
|
2670
|
+
["h1", headingTags],
|
|
2671
|
+
["h2", headingTags],
|
|
2672
|
+
["h3", headingTags],
|
|
2673
|
+
["h4", headingTags],
|
|
2674
|
+
["h5", headingTags],
|
|
2675
|
+
["h6", headingTags],
|
|
2452
2676
|
["select", formTags],
|
|
2453
2677
|
["input", formTags],
|
|
2454
2678
|
["output", formTags],
|
|
@@ -2485,6 +2709,7 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2485
2709
|
["tbody", tableSectionTags],
|
|
2486
2710
|
["tfoot", tableSectionTags]
|
|
2487
2711
|
]);
|
|
2712
|
+
var DOCUMENT_TYPE = "doctype";
|
|
2488
2713
|
var voidElements = /* @__PURE__ */ new Set([
|
|
2489
2714
|
"area",
|
|
2490
2715
|
"base",
|
|
@@ -2514,98 +2739,201 @@ var htmlIntegrationElements = /* @__PURE__ */ new Set([
|
|
|
2514
2739
|
"ms",
|
|
2515
2740
|
"mtext",
|
|
2516
2741
|
"annotation-xml",
|
|
2517
|
-
"
|
|
2742
|
+
"foreignObject",
|
|
2518
2743
|
"desc",
|
|
2519
2744
|
"title"
|
|
2520
2745
|
]);
|
|
2746
|
+
var svgTagNameAdjustments = /* @__PURE__ */ new Map([
|
|
2747
|
+
["altglyph", "altGlyph"],
|
|
2748
|
+
["altglyphdef", "altGlyphDef"],
|
|
2749
|
+
["altglyphitem", "altGlyphItem"],
|
|
2750
|
+
["animatecolor", "animateColor"],
|
|
2751
|
+
["animatemotion", "animateMotion"],
|
|
2752
|
+
["animatetransform", "animateTransform"],
|
|
2753
|
+
["clippath", "clipPath"],
|
|
2754
|
+
["feblend", "feBlend"],
|
|
2755
|
+
["fecolormatrix", "feColorMatrix"],
|
|
2756
|
+
["fecomponenttransfer", "feComponentTransfer"],
|
|
2757
|
+
["fecomposite", "feComposite"],
|
|
2758
|
+
["feconvolvematrix", "feConvolveMatrix"],
|
|
2759
|
+
["fediffuselighting", "feDiffuseLighting"],
|
|
2760
|
+
["fedisplacementmap", "feDisplacementMap"],
|
|
2761
|
+
["fedistantlight", "feDistantLight"],
|
|
2762
|
+
["fedropshadow", "feDropShadow"],
|
|
2763
|
+
["feflood", "feFlood"],
|
|
2764
|
+
["fefunca", "feFuncA"],
|
|
2765
|
+
["fefuncb", "feFuncB"],
|
|
2766
|
+
["fefuncg", "feFuncG"],
|
|
2767
|
+
["fefuncr", "feFuncR"],
|
|
2768
|
+
["fegaussianblur", "feGaussianBlur"],
|
|
2769
|
+
["feimage", "feImage"],
|
|
2770
|
+
["femerge", "feMerge"],
|
|
2771
|
+
["femergenode", "feMergeNode"],
|
|
2772
|
+
["femorphology", "feMorphology"],
|
|
2773
|
+
["feoffset", "feOffset"],
|
|
2774
|
+
["fepointlight", "fePointLight"],
|
|
2775
|
+
["fespecularlighting", "feSpecularLighting"],
|
|
2776
|
+
["fespotlight", "feSpotLight"],
|
|
2777
|
+
["fetile", "feTile"],
|
|
2778
|
+
["feturbulence", "feTurbulence"],
|
|
2779
|
+
["foreignobject", "foreignObject"],
|
|
2780
|
+
["glyphref", "glyphRef"],
|
|
2781
|
+
["lineargradient", "linearGradient"],
|
|
2782
|
+
["radialgradient", "radialGradient"],
|
|
2783
|
+
["textpath", "textPath"]
|
|
2784
|
+
]);
|
|
2785
|
+
var ForeignContext;
|
|
2786
|
+
(function(ForeignContext2) {
|
|
2787
|
+
ForeignContext2[ForeignContext2["None"] = 0] = "None";
|
|
2788
|
+
ForeignContext2[ForeignContext2["Svg"] = 1] = "Svg";
|
|
2789
|
+
ForeignContext2[ForeignContext2["MathML"] = 2] = "MathML";
|
|
2790
|
+
})(ForeignContext || (ForeignContext = {}));
|
|
2521
2791
|
var reNameEnd = /\s|\//;
|
|
2522
2792
|
var Parser = class {
|
|
2793
|
+
options;
|
|
2794
|
+
/** The start index of the last event. */
|
|
2795
|
+
startIndex = 0;
|
|
2796
|
+
/** The end index of the last event. */
|
|
2797
|
+
endIndex = 0;
|
|
2798
|
+
/**
|
|
2799
|
+
* Store the start index of the current open tag,
|
|
2800
|
+
* so we can update the start index for attributes.
|
|
2801
|
+
*/
|
|
2802
|
+
openTagStart = 0;
|
|
2803
|
+
tagname = "";
|
|
2804
|
+
attribname = "";
|
|
2805
|
+
attribvalue = "";
|
|
2806
|
+
attribs = null;
|
|
2807
|
+
stack = [];
|
|
2808
|
+
foreignContext;
|
|
2809
|
+
cbs;
|
|
2810
|
+
lowerCaseTagNames;
|
|
2811
|
+
lowerCaseAttributeNames;
|
|
2812
|
+
recognizeSelfClosing;
|
|
2813
|
+
/** We are parsing HTML. Inverse of the `xmlMode` option. */
|
|
2814
|
+
htmlMode;
|
|
2815
|
+
tokenizer;
|
|
2816
|
+
buffers = [];
|
|
2817
|
+
bufferOffset = 0;
|
|
2818
|
+
/** The index of the last written buffer. Used when resuming after a `pause()`. */
|
|
2819
|
+
writeIndex = 0;
|
|
2820
|
+
/** Indicates whether the parser has finished running / `.end` has been called. */
|
|
2821
|
+
ended = false;
|
|
2523
2822
|
constructor(cbs, options = {}) {
|
|
2524
|
-
var _a3, _b, _c, _d, _e, _f;
|
|
2525
2823
|
this.options = options;
|
|
2526
|
-
this.
|
|
2527
|
-
this.endIndex = 0;
|
|
2528
|
-
this.openTagStart = 0;
|
|
2529
|
-
this.tagname = "";
|
|
2530
|
-
this.attribname = "";
|
|
2531
|
-
this.attribvalue = "";
|
|
2532
|
-
this.attribs = null;
|
|
2533
|
-
this.stack = [];
|
|
2534
|
-
this.buffers = [];
|
|
2535
|
-
this.bufferOffset = 0;
|
|
2536
|
-
this.writeIndex = 0;
|
|
2537
|
-
this.ended = false;
|
|
2538
|
-
this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
|
|
2824
|
+
this.cbs = cbs ?? {};
|
|
2539
2825
|
this.htmlMode = !this.options.xmlMode;
|
|
2540
|
-
this.lowerCaseTagNames =
|
|
2541
|
-
this.lowerCaseAttributeNames =
|
|
2542
|
-
this.recognizeSelfClosing =
|
|
2543
|
-
this.tokenizer = new (
|
|
2544
|
-
this.foreignContext = [
|
|
2545
|
-
|
|
2826
|
+
this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;
|
|
2827
|
+
this.lowerCaseAttributeNames = options.lowerCaseAttributeNames ?? this.htmlMode;
|
|
2828
|
+
this.recognizeSelfClosing = options.recognizeSelfClosing ?? !this.htmlMode;
|
|
2829
|
+
this.tokenizer = new (options.Tokenizer ?? Tokenizer)(this.options, this);
|
|
2830
|
+
this.foreignContext = [ForeignContext.None];
|
|
2831
|
+
this.cbs.onparserinit?.(this);
|
|
2546
2832
|
}
|
|
2547
2833
|
// Tokenizer event handlers
|
|
2548
|
-
/**
|
|
2834
|
+
/**
|
|
2835
|
+
* @param start Start index for the current parser event.
|
|
2836
|
+
* @param endIndex End index for the current parser event.
|
|
2837
|
+
* @internal
|
|
2838
|
+
*/
|
|
2549
2839
|
ontext(start, endIndex) {
|
|
2550
|
-
var _a3, _b;
|
|
2551
2840
|
const data = this.getSlice(start, endIndex);
|
|
2552
2841
|
this.endIndex = endIndex - 1;
|
|
2553
|
-
|
|
2842
|
+
this.cbs.ontext?.(data);
|
|
2554
2843
|
this.startIndex = endIndex;
|
|
2555
2844
|
}
|
|
2556
|
-
/**
|
|
2845
|
+
/**
|
|
2846
|
+
* @param cp Current Unicode code point.
|
|
2847
|
+
* @param endIndex End index for the current parser event.
|
|
2848
|
+
* @internal
|
|
2849
|
+
*/
|
|
2557
2850
|
ontextentity(cp, endIndex) {
|
|
2558
|
-
var _a3, _b;
|
|
2559
2851
|
this.endIndex = endIndex - 1;
|
|
2560
|
-
|
|
2852
|
+
this.cbs.ontext?.(fromCodePoint(cp));
|
|
2561
2853
|
this.startIndex = endIndex;
|
|
2562
2854
|
}
|
|
2855
|
+
/** @internal */
|
|
2856
|
+
isInForeignContext() {
|
|
2857
|
+
return this.foreignContext[0] !== ForeignContext.None;
|
|
2858
|
+
}
|
|
2563
2859
|
/**
|
|
2564
2860
|
* Checks if the current tag is a void element. Override this if you want
|
|
2565
2861
|
* to specify your own additional void elements.
|
|
2862
|
+
* @param name Name of the pseudo selector.
|
|
2566
2863
|
*/
|
|
2567
2864
|
isVoidElement(name) {
|
|
2568
2865
|
return this.htmlMode && voidElements.has(name);
|
|
2569
2866
|
}
|
|
2570
|
-
/**
|
|
2867
|
+
/**
|
|
2868
|
+
* Read a tag name from the buffer.
|
|
2869
|
+
*
|
|
2870
|
+
* When `lowerCaseTagNames` is enabled (the default in HTML mode), the name
|
|
2871
|
+
* is lowercased and may be adjusted for SVG casing or the `image` → `img`
|
|
2872
|
+
* alias.
|
|
2873
|
+
* @param start Start index of the tag name in the buffer.
|
|
2874
|
+
* @param endIndex End index of the tag name in the buffer.
|
|
2875
|
+
*/
|
|
2876
|
+
readTagName(start, endIndex) {
|
|
2877
|
+
const name = this.lowerCaseTagNames ? this.getSlice(start, endIndex).toLowerCase() : this.getSlice(start, endIndex);
|
|
2878
|
+
if (!(this.lowerCaseTagNames && this.htmlMode)) {
|
|
2879
|
+
return name;
|
|
2880
|
+
}
|
|
2881
|
+
if (this.foreignContext[0] === ForeignContext.Svg) {
|
|
2882
|
+
return svgTagNameAdjustments.get(name) ?? name;
|
|
2883
|
+
}
|
|
2884
|
+
if (this.foreignContext.length > 1) {
|
|
2885
|
+
const adjusted = svgTagNameAdjustments.get(name);
|
|
2886
|
+
if (adjusted !== void 0 && this.stack.includes(adjusted)) {
|
|
2887
|
+
return adjusted;
|
|
2888
|
+
}
|
|
2889
|
+
}
|
|
2890
|
+
if (!this.isInForeignContext()) {
|
|
2891
|
+
return name === "image" ? "img" : name;
|
|
2892
|
+
}
|
|
2893
|
+
return name;
|
|
2894
|
+
}
|
|
2895
|
+
/**
|
|
2896
|
+
* @param start Start index for the current parser event.
|
|
2897
|
+
* @param endIndex End index for the current parser event.
|
|
2898
|
+
* @internal
|
|
2899
|
+
*/
|
|
2571
2900
|
onopentagname(start, endIndex) {
|
|
2572
2901
|
this.endIndex = endIndex;
|
|
2573
|
-
|
|
2574
|
-
if (this.lowerCaseTagNames) {
|
|
2575
|
-
name = name.toLowerCase();
|
|
2576
|
-
}
|
|
2577
|
-
this.emitOpenTag(name);
|
|
2902
|
+
this.emitOpenTag(this.readTagName(start, endIndex));
|
|
2578
2903
|
}
|
|
2579
2904
|
emitOpenTag(name) {
|
|
2580
|
-
var _a3, _b, _c, _d;
|
|
2581
2905
|
this.openTagStart = this.startIndex;
|
|
2582
2906
|
this.tagname = name;
|
|
2907
|
+
if (this.htmlMode && name === "form" && this.stack.includes("form")) {
|
|
2908
|
+
this.tagname = "";
|
|
2909
|
+
return;
|
|
2910
|
+
}
|
|
2583
2911
|
const impliesClose = this.htmlMode && openImpliesClose.get(name);
|
|
2584
2912
|
if (impliesClose) {
|
|
2585
2913
|
while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
|
|
2586
|
-
|
|
2587
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
|
|
2914
|
+
this.popElement(true);
|
|
2588
2915
|
}
|
|
2589
2916
|
}
|
|
2590
2917
|
if (!this.isVoidElement(name)) {
|
|
2591
2918
|
this.stack.unshift(name);
|
|
2592
2919
|
if (this.htmlMode) {
|
|
2593
|
-
if (
|
|
2594
|
-
this.foreignContext.unshift(
|
|
2920
|
+
if (name === "svg") {
|
|
2921
|
+
this.foreignContext.unshift(ForeignContext.Svg);
|
|
2922
|
+
} else if (name === "math") {
|
|
2923
|
+
this.foreignContext.unshift(ForeignContext.MathML);
|
|
2595
2924
|
} else if (htmlIntegrationElements.has(name)) {
|
|
2596
|
-
this.foreignContext.unshift(
|
|
2925
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2597
2926
|
}
|
|
2598
2927
|
}
|
|
2599
2928
|
}
|
|
2600
|
-
|
|
2929
|
+
this.cbs.onopentagname?.(name);
|
|
2601
2930
|
if (this.cbs.onopentag)
|
|
2602
2931
|
this.attribs = {};
|
|
2603
2932
|
}
|
|
2604
2933
|
endOpenTag(isImplied) {
|
|
2605
|
-
var _a3, _b;
|
|
2606
2934
|
this.startIndex = this.openTagStart;
|
|
2607
2935
|
if (this.attribs) {
|
|
2608
|
-
|
|
2936
|
+
this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);
|
|
2609
2937
|
this.attribs = null;
|
|
2610
2938
|
}
|
|
2611
2939
|
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
@@ -2613,80 +2941,107 @@ var Parser = class {
|
|
|
2613
2941
|
}
|
|
2614
2942
|
this.tagname = "";
|
|
2615
2943
|
}
|
|
2616
|
-
/**
|
|
2944
|
+
/**
|
|
2945
|
+
* @param endIndex End index for the current parser event.
|
|
2946
|
+
* @internal
|
|
2947
|
+
*/
|
|
2617
2948
|
onopentagend(endIndex) {
|
|
2618
2949
|
this.endIndex = endIndex;
|
|
2619
2950
|
this.endOpenTag(false);
|
|
2620
2951
|
this.startIndex = endIndex + 1;
|
|
2621
2952
|
}
|
|
2622
|
-
/**
|
|
2953
|
+
/**
|
|
2954
|
+
* @param start Start index for the current parser event.
|
|
2955
|
+
* @param endIndex End index for the current parser event.
|
|
2956
|
+
* @internal
|
|
2957
|
+
*/
|
|
2623
2958
|
onclosetag(start, endIndex) {
|
|
2624
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h;
|
|
2625
2959
|
this.endIndex = endIndex;
|
|
2626
|
-
|
|
2627
|
-
if (this.lowerCaseTagNames) {
|
|
2628
|
-
name = name.toLowerCase();
|
|
2629
|
-
}
|
|
2630
|
-
if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
|
|
2631
|
-
this.foreignContext.shift();
|
|
2632
|
-
}
|
|
2960
|
+
const name = this.readTagName(start, endIndex);
|
|
2633
2961
|
if (!this.isVoidElement(name)) {
|
|
2634
2962
|
const pos = this.stack.indexOf(name);
|
|
2635
2963
|
if (pos !== -1) {
|
|
2636
|
-
for (let index = 0; index
|
|
2637
|
-
|
|
2638
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
|
|
2964
|
+
for (let index = 0; index < pos; index++) {
|
|
2965
|
+
this.popElement(true);
|
|
2639
2966
|
}
|
|
2967
|
+
this.popElement(false);
|
|
2640
2968
|
} else if (this.htmlMode && name === "p") {
|
|
2641
2969
|
this.emitOpenTag("p");
|
|
2642
2970
|
this.closeCurrentTag(true);
|
|
2643
2971
|
}
|
|
2644
2972
|
} else if (this.htmlMode && name === "br") {
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2973
|
+
this.cbs.onopentagname?.("br");
|
|
2974
|
+
this.cbs.onopentag?.("br", {}, true);
|
|
2975
|
+
this.cbs.onclosetag?.("br", false);
|
|
2648
2976
|
}
|
|
2649
2977
|
this.startIndex = endIndex + 1;
|
|
2650
2978
|
}
|
|
2651
|
-
/**
|
|
2979
|
+
/**
|
|
2980
|
+
* @param endIndex End index for the current parser event.
|
|
2981
|
+
* @internal
|
|
2982
|
+
*/
|
|
2652
2983
|
onselfclosingtag(endIndex) {
|
|
2653
2984
|
this.endIndex = endIndex;
|
|
2654
|
-
if (this.recognizeSelfClosing || this.
|
|
2985
|
+
if (this.recognizeSelfClosing || this.isInForeignContext()) {
|
|
2655
2986
|
this.closeCurrentTag(false);
|
|
2656
2987
|
this.startIndex = endIndex + 1;
|
|
2657
2988
|
} else {
|
|
2658
2989
|
this.onopentagend(endIndex);
|
|
2659
2990
|
}
|
|
2660
2991
|
}
|
|
2992
|
+
/**
|
|
2993
|
+
* Pop the top element off the stack, emit a close event, and maintain
|
|
2994
|
+
* the foreign context stack.
|
|
2995
|
+
* @param implied Whether this close is implied (not from an explicit end tag).
|
|
2996
|
+
*/
|
|
2997
|
+
popElement(implied) {
|
|
2998
|
+
const element = this.stack.shift();
|
|
2999
|
+
if (this.htmlMode && (foreignContextElements.has(element) || htmlIntegrationElements.has(element))) {
|
|
3000
|
+
this.foreignContext.shift();
|
|
3001
|
+
}
|
|
3002
|
+
this.cbs.onclosetag?.(element, implied);
|
|
3003
|
+
}
|
|
2661
3004
|
closeCurrentTag(isOpenImplied) {
|
|
2662
|
-
var _a3, _b;
|
|
2663
3005
|
const name = this.tagname;
|
|
2664
3006
|
this.endOpenTag(isOpenImplied);
|
|
2665
3007
|
if (this.stack[0] === name) {
|
|
2666
|
-
|
|
2667
|
-
this.stack.shift();
|
|
3008
|
+
this.popElement(!isOpenImplied);
|
|
2668
3009
|
}
|
|
2669
3010
|
}
|
|
2670
|
-
/**
|
|
3011
|
+
/**
|
|
3012
|
+
* @param start Start index for the current parser event.
|
|
3013
|
+
* @param endIndex End index for the current parser event.
|
|
3014
|
+
* @internal
|
|
3015
|
+
*/
|
|
2671
3016
|
onattribname(start, endIndex) {
|
|
2672
3017
|
this.startIndex = start;
|
|
2673
3018
|
const name = this.getSlice(start, endIndex);
|
|
2674
3019
|
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
2675
3020
|
}
|
|
2676
|
-
/**
|
|
3021
|
+
/**
|
|
3022
|
+
* @param start Start index for the current parser event.
|
|
3023
|
+
* @param endIndex End index for the current parser event.
|
|
3024
|
+
* @internal
|
|
3025
|
+
*/
|
|
2677
3026
|
onattribdata(start, endIndex) {
|
|
2678
3027
|
this.attribvalue += this.getSlice(start, endIndex);
|
|
2679
3028
|
}
|
|
2680
|
-
/**
|
|
3029
|
+
/**
|
|
3030
|
+
* @param cp Current Unicode code point.
|
|
3031
|
+
* @internal
|
|
3032
|
+
*/
|
|
2681
3033
|
onattribentity(cp) {
|
|
2682
3034
|
this.attribvalue += fromCodePoint(cp);
|
|
2683
3035
|
}
|
|
2684
|
-
/**
|
|
3036
|
+
/**
|
|
3037
|
+
* @param quote Quote type used for the current attribute.
|
|
3038
|
+
* @param endIndex End index for the current parser event.
|
|
3039
|
+
* @internal
|
|
3040
|
+
*/
|
|
2685
3041
|
onattribend(quote2, endIndex) {
|
|
2686
|
-
var _a3, _b;
|
|
2687
3042
|
this.endIndex = endIndex;
|
|
2688
|
-
|
|
2689
|
-
if (this.attribs && !Object.
|
|
3043
|
+
this.cbs.onattribute?.(this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
|
|
3044
|
+
if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {
|
|
2690
3045
|
this.attribs[this.attribname] = this.attribvalue;
|
|
2691
3046
|
}
|
|
2692
3047
|
this.attribvalue = "";
|
|
@@ -2699,17 +3054,25 @@ var Parser = class {
|
|
|
2699
3054
|
}
|
|
2700
3055
|
return name;
|
|
2701
3056
|
}
|
|
2702
|
-
/**
|
|
3057
|
+
/**
|
|
3058
|
+
* @param start Start index for the current parser event.
|
|
3059
|
+
* @param endIndex End index for the current parser event.
|
|
3060
|
+
* @internal
|
|
3061
|
+
*/
|
|
2703
3062
|
ondeclaration(start, endIndex) {
|
|
2704
3063
|
this.endIndex = endIndex;
|
|
2705
3064
|
const value = this.getSlice(start, endIndex);
|
|
2706
3065
|
if (this.cbs.onprocessinginstruction) {
|
|
2707
|
-
const name = this.getInstructionName(value);
|
|
3066
|
+
const name = this.htmlMode ? this.lowerCaseTagNames ? DOCUMENT_TYPE : value.slice(0, DOCUMENT_TYPE.length) : this.getInstructionName(value);
|
|
2708
3067
|
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
|
|
2709
3068
|
}
|
|
2710
3069
|
this.startIndex = endIndex + 1;
|
|
2711
3070
|
}
|
|
2712
|
-
/**
|
|
3071
|
+
/**
|
|
3072
|
+
* @param start Start index for the current parser event.
|
|
3073
|
+
* @param endIndex End index for the current parser event.
|
|
3074
|
+
* @internal
|
|
3075
|
+
*/
|
|
2713
3076
|
onprocessinginstruction(start, endIndex) {
|
|
2714
3077
|
this.endIndex = endIndex;
|
|
2715
3078
|
const value = this.getSlice(start, endIndex);
|
|
@@ -2719,57 +3082,66 @@ var Parser = class {
|
|
|
2719
3082
|
}
|
|
2720
3083
|
this.startIndex = endIndex + 1;
|
|
2721
3084
|
}
|
|
2722
|
-
/**
|
|
3085
|
+
/**
|
|
3086
|
+
* @param start Start index for the current parser event.
|
|
3087
|
+
* @param endIndex End index for the current parser event.
|
|
3088
|
+
* @param offset Offset applied when computing parser indices.
|
|
3089
|
+
* @internal
|
|
3090
|
+
*/
|
|
2723
3091
|
oncomment(start, endIndex, offset) {
|
|
2724
|
-
var _a3, _b, _c, _d;
|
|
2725
3092
|
this.endIndex = endIndex;
|
|
2726
|
-
|
|
2727
|
-
|
|
3093
|
+
this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));
|
|
3094
|
+
this.cbs.oncommentend?.();
|
|
2728
3095
|
this.startIndex = endIndex + 1;
|
|
2729
3096
|
}
|
|
2730
|
-
/**
|
|
3097
|
+
/**
|
|
3098
|
+
* @param start Start index for the current parser event.
|
|
3099
|
+
* @param endIndex End index for the current parser event.
|
|
3100
|
+
* @param offset Offset applied when computing parser indices.
|
|
3101
|
+
* @internal
|
|
3102
|
+
*/
|
|
2731
3103
|
oncdata(start, endIndex, offset) {
|
|
2732
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
2733
3104
|
this.endIndex = endIndex;
|
|
2734
3105
|
const value = this.getSlice(start, endIndex - offset);
|
|
2735
3106
|
if (!this.htmlMode || this.options.recognizeCDATA) {
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
3107
|
+
this.cbs.oncdatastart?.();
|
|
3108
|
+
this.cbs.ontext?.(value);
|
|
3109
|
+
this.cbs.oncdataend?.();
|
|
3110
|
+
} else if (this.isInForeignContext()) {
|
|
3111
|
+
this.cbs.ontext?.(value);
|
|
2739
3112
|
} else {
|
|
2740
|
-
|
|
2741
|
-
|
|
3113
|
+
this.cbs.oncomment?.(`[CDATA[${value}]]`);
|
|
3114
|
+
this.cbs.oncommentend?.();
|
|
2742
3115
|
}
|
|
2743
3116
|
this.startIndex = endIndex + 1;
|
|
2744
3117
|
}
|
|
2745
3118
|
/** @internal */
|
|
2746
3119
|
onend() {
|
|
2747
|
-
var _a3, _b;
|
|
2748
3120
|
if (this.cbs.onclosetag) {
|
|
2749
3121
|
this.endIndex = this.startIndex;
|
|
2750
3122
|
for (let index = 0; index < this.stack.length; index++) {
|
|
2751
3123
|
this.cbs.onclosetag(this.stack[index], true);
|
|
2752
3124
|
}
|
|
2753
3125
|
}
|
|
2754
|
-
|
|
3126
|
+
this.cbs.onend?.();
|
|
2755
3127
|
}
|
|
2756
3128
|
/**
|
|
2757
3129
|
* Resets the parser to a blank state, ready to parse a new HTML document
|
|
2758
3130
|
*/
|
|
2759
3131
|
reset() {
|
|
2760
|
-
|
|
2761
|
-
(_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
3132
|
+
this.cbs.onreset?.();
|
|
2762
3133
|
this.tokenizer.reset();
|
|
2763
3134
|
this.tagname = "";
|
|
2764
3135
|
this.attribname = "";
|
|
3136
|
+
this.attribvalue = "";
|
|
2765
3137
|
this.attribs = null;
|
|
2766
3138
|
this.stack.length = 0;
|
|
2767
3139
|
this.startIndex = 0;
|
|
2768
3140
|
this.endIndex = 0;
|
|
2769
|
-
|
|
3141
|
+
this.cbs.onparserinit?.(this);
|
|
2770
3142
|
this.buffers.length = 0;
|
|
2771
3143
|
this.foreignContext.length = 0;
|
|
2772
|
-
this.foreignContext.unshift(
|
|
3144
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2773
3145
|
this.bufferOffset = 0;
|
|
2774
3146
|
this.writeIndex = 0;
|
|
2775
3147
|
this.ended = false;
|
|
@@ -2777,7 +3149,6 @@ var Parser = class {
|
|
|
2777
3149
|
/**
|
|
2778
3150
|
* Resets the parser, then parses a complete document and
|
|
2779
3151
|
* pushes it to the handler.
|
|
2780
|
-
*
|
|
2781
3152
|
* @param data Document to parse.
|
|
2782
3153
|
*/
|
|
2783
3154
|
parseComplete(data) {
|
|
@@ -2785,6 +3156,9 @@ var Parser = class {
|
|
|
2785
3156
|
this.end(data);
|
|
2786
3157
|
}
|
|
2787
3158
|
getSlice(start, end) {
|
|
3159
|
+
if (start === end) {
|
|
3160
|
+
return "";
|
|
3161
|
+
}
|
|
2788
3162
|
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
2789
3163
|
this.shiftBuffer();
|
|
2790
3164
|
}
|
|
@@ -2802,13 +3176,11 @@ var Parser = class {
|
|
|
2802
3176
|
}
|
|
2803
3177
|
/**
|
|
2804
3178
|
* Parses a chunk of data and calls the corresponding callbacks.
|
|
2805
|
-
*
|
|
2806
3179
|
* @param chunk Chunk to parse.
|
|
2807
3180
|
*/
|
|
2808
3181
|
write(chunk) {
|
|
2809
|
-
var _a3, _b;
|
|
2810
3182
|
if (this.ended) {
|
|
2811
|
-
|
|
3183
|
+
this.cbs.onerror?.(new Error(".write() after done!"));
|
|
2812
3184
|
return;
|
|
2813
3185
|
}
|
|
2814
3186
|
this.buffers.push(chunk);
|
|
@@ -2819,13 +3191,11 @@ var Parser = class {
|
|
|
2819
3191
|
}
|
|
2820
3192
|
/**
|
|
2821
3193
|
* Parses the end of the buffer and clears the stack, calls onend.
|
|
2822
|
-
*
|
|
2823
3194
|
* @param chunk Optional final chunk to parse.
|
|
2824
3195
|
*/
|
|
2825
3196
|
end(chunk) {
|
|
2826
|
-
var _a3, _b;
|
|
2827
3197
|
if (this.ended) {
|
|
2828
|
-
|
|
3198
|
+
this.cbs.onerror?.(new Error(".end() after done!"));
|
|
2829
3199
|
return;
|
|
2830
3200
|
}
|
|
2831
3201
|
if (chunk)
|
|
@@ -2850,27 +3220,9 @@ var Parser = class {
|
|
|
2850
3220
|
if (this.ended)
|
|
2851
3221
|
this.tokenizer.end();
|
|
2852
3222
|
}
|
|
2853
|
-
/**
|
|
2854
|
-
* Alias of `write`, for backwards compatibility.
|
|
2855
|
-
*
|
|
2856
|
-
* @param chunk Chunk to parse.
|
|
2857
|
-
* @deprecated
|
|
2858
|
-
*/
|
|
2859
|
-
parseChunk(chunk) {
|
|
2860
|
-
this.write(chunk);
|
|
2861
|
-
}
|
|
2862
|
-
/**
|
|
2863
|
-
* Alias of `end`, for backwards compatibility.
|
|
2864
|
-
*
|
|
2865
|
-
* @param chunk Optional final chunk to parse.
|
|
2866
|
-
* @deprecated
|
|
2867
|
-
*/
|
|
2868
|
-
done(chunk) {
|
|
2869
|
-
this.end(chunk);
|
|
2870
|
-
}
|
|
2871
3223
|
};
|
|
2872
3224
|
|
|
2873
|
-
// node_modules/.pnpm/domelementtype@
|
|
3225
|
+
// node_modules/.pnpm/domelementtype@3.0.0/node_modules/domelementtype/dist/index.js
|
|
2874
3226
|
var ElementType;
|
|
2875
3227
|
(function(ElementType2) {
|
|
2876
3228
|
ElementType2["Root"] = "root";
|
|
@@ -2883,8 +3235,8 @@ var ElementType;
|
|
|
2883
3235
|
ElementType2["CDATA"] = "cdata";
|
|
2884
3236
|
ElementType2["Doctype"] = "doctype";
|
|
2885
3237
|
})(ElementType || (ElementType = {}));
|
|
2886
|
-
function isTag(
|
|
2887
|
-
return
|
|
3238
|
+
function isTag(element) {
|
|
3239
|
+
return element.type === ElementType.Tag || element.type === ElementType.Script || element.type === ElementType.Style;
|
|
2888
3240
|
}
|
|
2889
3241
|
var Root = ElementType.Root;
|
|
2890
3242
|
var Text = ElementType.Text;
|
|
@@ -2896,15 +3248,18 @@ var Tag = ElementType.Tag;
|
|
|
2896
3248
|
var CDATA = ElementType.CDATA;
|
|
2897
3249
|
var Doctype = ElementType.Doctype;
|
|
2898
3250
|
|
|
2899
|
-
// node_modules/.pnpm/domhandler@
|
|
3251
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/node.js
|
|
2900
3252
|
var Node = class {
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
3253
|
+
/** Parent of the node */
|
|
3254
|
+
parent = null;
|
|
3255
|
+
/** Previous sibling */
|
|
3256
|
+
prev = null;
|
|
3257
|
+
/** Next sibling */
|
|
3258
|
+
next = null;
|
|
3259
|
+
/** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
|
|
3260
|
+
startIndex = null;
|
|
3261
|
+
/** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
|
|
3262
|
+
endIndex = null;
|
|
2908
3263
|
// Read-write aliases for properties
|
|
2909
3264
|
/**
|
|
2910
3265
|
* Same as {@link parent}.
|
|
@@ -2923,8 +3278,8 @@ var Node = class {
|
|
|
2923
3278
|
get previousSibling() {
|
|
2924
3279
|
return this.prev;
|
|
2925
3280
|
}
|
|
2926
|
-
set previousSibling(
|
|
2927
|
-
this.prev =
|
|
3281
|
+
set previousSibling(previous) {
|
|
3282
|
+
this.prev = previous;
|
|
2928
3283
|
}
|
|
2929
3284
|
/**
|
|
2930
3285
|
* Same as {@link next}.
|
|
@@ -2938,7 +3293,6 @@ var Node = class {
|
|
|
2938
3293
|
}
|
|
2939
3294
|
/**
|
|
2940
3295
|
* Clone this node, and optionally its children.
|
|
2941
|
-
*
|
|
2942
3296
|
* @param recursive Clone child nodes as well.
|
|
2943
3297
|
* @returns A clone of the node.
|
|
2944
3298
|
*/
|
|
@@ -2947,6 +3301,7 @@ var Node = class {
|
|
|
2947
3301
|
}
|
|
2948
3302
|
};
|
|
2949
3303
|
var DataNode = class extends Node {
|
|
3304
|
+
data;
|
|
2950
3305
|
/**
|
|
2951
3306
|
* @param data The content of the data node
|
|
2952
3307
|
*/
|
|
@@ -2966,34 +3321,36 @@ var DataNode = class extends Node {
|
|
|
2966
3321
|
}
|
|
2967
3322
|
};
|
|
2968
3323
|
var Text2 = class extends DataNode {
|
|
2969
|
-
|
|
2970
|
-
super(...arguments);
|
|
2971
|
-
this.type = ElementType.Text;
|
|
2972
|
-
}
|
|
3324
|
+
type = ElementType.Text;
|
|
2973
3325
|
get nodeType() {
|
|
2974
3326
|
return 3;
|
|
2975
3327
|
}
|
|
2976
3328
|
};
|
|
2977
3329
|
var Comment2 = class extends DataNode {
|
|
2978
|
-
|
|
2979
|
-
super(...arguments);
|
|
2980
|
-
this.type = ElementType.Comment;
|
|
2981
|
-
}
|
|
3330
|
+
type = ElementType.Comment;
|
|
2982
3331
|
get nodeType() {
|
|
2983
3332
|
return 8;
|
|
2984
3333
|
}
|
|
2985
3334
|
};
|
|
2986
3335
|
var ProcessingInstruction = class extends DataNode {
|
|
3336
|
+
type = ElementType.Directive;
|
|
3337
|
+
name;
|
|
2987
3338
|
constructor(name, data) {
|
|
2988
3339
|
super(data);
|
|
2989
3340
|
this.name = name;
|
|
2990
|
-
this.type = ElementType.Directive;
|
|
2991
3341
|
}
|
|
2992
3342
|
get nodeType() {
|
|
2993
3343
|
return 1;
|
|
2994
3344
|
}
|
|
3345
|
+
/** If this is a doctype, the document type name (parse5 only). */
|
|
3346
|
+
"x-name";
|
|
3347
|
+
/** If this is a doctype, the document type public identifier (parse5 only). */
|
|
3348
|
+
"x-publicId";
|
|
3349
|
+
/** If this is a doctype, the document type system identifier (parse5 only). */
|
|
3350
|
+
"x-systemId";
|
|
2995
3351
|
};
|
|
2996
3352
|
var NodeWithChildren = class extends Node {
|
|
3353
|
+
children;
|
|
2997
3354
|
/**
|
|
2998
3355
|
* @param children Children of the node. Only certain node types can have children.
|
|
2999
3356
|
*/
|
|
@@ -3004,8 +3361,7 @@ var NodeWithChildren = class extends Node {
|
|
|
3004
3361
|
// Aliases
|
|
3005
3362
|
/** First child of the node. */
|
|
3006
3363
|
get firstChild() {
|
|
3007
|
-
|
|
3008
|
-
return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
|
|
3364
|
+
return this.children[0] ?? null;
|
|
3009
3365
|
}
|
|
3010
3366
|
/** Last child of the node. */
|
|
3011
3367
|
get lastChild() {
|
|
@@ -3023,28 +3379,26 @@ var NodeWithChildren = class extends Node {
|
|
|
3023
3379
|
}
|
|
3024
3380
|
};
|
|
3025
3381
|
var CDATA2 = class extends NodeWithChildren {
|
|
3026
|
-
|
|
3027
|
-
super(...arguments);
|
|
3028
|
-
this.type = ElementType.CDATA;
|
|
3029
|
-
}
|
|
3382
|
+
type = ElementType.CDATA;
|
|
3030
3383
|
get nodeType() {
|
|
3031
3384
|
return 4;
|
|
3032
3385
|
}
|
|
3033
3386
|
};
|
|
3034
3387
|
var Document = class extends NodeWithChildren {
|
|
3035
|
-
|
|
3036
|
-
super(...arguments);
|
|
3037
|
-
this.type = ElementType.Root;
|
|
3038
|
-
}
|
|
3388
|
+
type = ElementType.Root;
|
|
3039
3389
|
get nodeType() {
|
|
3040
3390
|
return 9;
|
|
3041
3391
|
}
|
|
3042
3392
|
};
|
|
3043
3393
|
var Element = class extends NodeWithChildren {
|
|
3394
|
+
name;
|
|
3395
|
+
attribs;
|
|
3396
|
+
type;
|
|
3044
3397
|
/**
|
|
3045
3398
|
* @param name Name of the tag, eg. `div`, `span`.
|
|
3046
3399
|
* @param attribs Object mapping attribute names to attribute values.
|
|
3047
3400
|
* @param children Children of the node.
|
|
3401
|
+
* @param type Node type used for the new node instance.
|
|
3048
3402
|
*/
|
|
3049
3403
|
constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
|
|
3050
3404
|
super(children);
|
|
@@ -3067,16 +3421,19 @@ var Element = class extends NodeWithChildren {
|
|
|
3067
3421
|
this.name = name;
|
|
3068
3422
|
}
|
|
3069
3423
|
get attributes() {
|
|
3070
|
-
return Object.keys(this.attribs).map((name) => {
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3424
|
+
return Object.keys(this.attribs).map((name) => ({
|
|
3425
|
+
name,
|
|
3426
|
+
value: this.attribs[name],
|
|
3427
|
+
namespace: this["x-attribsNamespace"]?.[name],
|
|
3428
|
+
prefix: this["x-attribsPrefix"]?.[name]
|
|
3429
|
+
}));
|
|
3430
|
+
}
|
|
3431
|
+
/** Element namespace (parse5 only). */
|
|
3432
|
+
namespace;
|
|
3433
|
+
/** Element attribute namespaces (parse5 only). */
|
|
3434
|
+
"x-attribsNamespace";
|
|
3435
|
+
/** Element attribute namespace-related prefixes (parse5 only). */
|
|
3436
|
+
"x-attribsPrefix";
|
|
3080
3437
|
};
|
|
3081
3438
|
function isTag2(node) {
|
|
3082
3439
|
return isTag(node);
|
|
@@ -3105,7 +3462,9 @@ function cloneNode(node, recursive = false) {
|
|
|
3105
3462
|
} else if (isTag2(node)) {
|
|
3106
3463
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3107
3464
|
const clone = new Element(node.name, { ...node.attribs }, children);
|
|
3108
|
-
|
|
3465
|
+
for (const child of children) {
|
|
3466
|
+
child.parent = clone;
|
|
3467
|
+
}
|
|
3109
3468
|
if (node.namespace != null) {
|
|
3110
3469
|
clone.namespace = node.namespace;
|
|
3111
3470
|
}
|
|
@@ -3119,12 +3478,16 @@ function cloneNode(node, recursive = false) {
|
|
|
3119
3478
|
} else if (isCDATA(node)) {
|
|
3120
3479
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3121
3480
|
const clone = new CDATA2(children);
|
|
3122
|
-
|
|
3481
|
+
for (const child of children) {
|
|
3482
|
+
child.parent = clone;
|
|
3483
|
+
}
|
|
3123
3484
|
result = clone;
|
|
3124
3485
|
} else if (isDocument(node)) {
|
|
3125
3486
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3126
3487
|
const clone = new Document(children);
|
|
3127
|
-
|
|
3488
|
+
for (const child of children) {
|
|
3489
|
+
child.parent = clone;
|
|
3490
|
+
}
|
|
3128
3491
|
if (node["x-mode"]) {
|
|
3129
3492
|
clone["x-mode"] = node["x-mode"];
|
|
3130
3493
|
}
|
|
@@ -3149,43 +3512,55 @@ function cloneNode(node, recursive = false) {
|
|
|
3149
3512
|
}
|
|
3150
3513
|
function cloneChildren(childs) {
|
|
3151
3514
|
const children = childs.map((child) => cloneNode(child, true));
|
|
3152
|
-
for (let
|
|
3153
|
-
children[
|
|
3154
|
-
children[
|
|
3515
|
+
for (let index = 1; index < children.length; index++) {
|
|
3516
|
+
children[index].prev = children[index - 1];
|
|
3517
|
+
children[index - 1].next = children[index];
|
|
3155
3518
|
}
|
|
3156
3519
|
return children;
|
|
3157
3520
|
}
|
|
3158
3521
|
|
|
3159
|
-
// node_modules/.pnpm/domhandler@
|
|
3160
|
-
var
|
|
3522
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/index.js
|
|
3523
|
+
var defaultOptions = {
|
|
3161
3524
|
withStartIndices: false,
|
|
3162
3525
|
withEndIndices: false,
|
|
3163
3526
|
xmlMode: false
|
|
3164
3527
|
};
|
|
3165
3528
|
var DomHandler = class {
|
|
3529
|
+
/** The elements of the DOM */
|
|
3530
|
+
dom = [];
|
|
3531
|
+
/** The root element for the DOM */
|
|
3532
|
+
root = new Document(this.dom);
|
|
3533
|
+
/** Called once parsing has completed. */
|
|
3534
|
+
callback;
|
|
3535
|
+
/** Settings for the handler. */
|
|
3536
|
+
options;
|
|
3537
|
+
/** Callback whenever a tag is closed. */
|
|
3538
|
+
elementCB;
|
|
3539
|
+
/** Indicated whether parsing has been completed. */
|
|
3540
|
+
done = false;
|
|
3541
|
+
/** Stack of open tags. */
|
|
3542
|
+
tagStack = [this.root];
|
|
3543
|
+
/** A data node that is still being written to. */
|
|
3544
|
+
lastNode = null;
|
|
3545
|
+
/** Reference to the parser instance. Used for location information. */
|
|
3546
|
+
parser = null;
|
|
3166
3547
|
/**
|
|
3167
3548
|
* @param callback Called once parsing has completed.
|
|
3168
3549
|
* @param options Settings for the handler.
|
|
3169
3550
|
* @param elementCB Callback whenever a tag is closed.
|
|
3170
3551
|
*/
|
|
3171
3552
|
constructor(callback, options, elementCB) {
|
|
3172
|
-
this.dom = [];
|
|
3173
|
-
this.root = new Document(this.dom);
|
|
3174
|
-
this.done = false;
|
|
3175
|
-
this.tagStack = [this.root];
|
|
3176
|
-
this.lastNode = null;
|
|
3177
|
-
this.parser = null;
|
|
3178
3553
|
if (typeof options === "function") {
|
|
3179
3554
|
elementCB = options;
|
|
3180
|
-
options =
|
|
3555
|
+
options = defaultOptions;
|
|
3181
3556
|
}
|
|
3182
3557
|
if (typeof callback === "object") {
|
|
3183
3558
|
options = callback;
|
|
3184
3559
|
callback = void 0;
|
|
3185
3560
|
}
|
|
3186
|
-
this.callback = callback
|
|
3187
|
-
this.options = options
|
|
3188
|
-
this.elementCB = elementCB
|
|
3561
|
+
this.callback = callback ?? null;
|
|
3562
|
+
this.options = options ?? defaultOptions;
|
|
3563
|
+
this.elementCB = elementCB ?? null;
|
|
3189
3564
|
}
|
|
3190
3565
|
onparserinit(parser) {
|
|
3191
3566
|
this.parser = parser;
|
|
@@ -3212,12 +3587,12 @@ var DomHandler = class {
|
|
|
3212
3587
|
}
|
|
3213
3588
|
onclosetag() {
|
|
3214
3589
|
this.lastNode = null;
|
|
3215
|
-
const
|
|
3216
|
-
if (this.options.withEndIndices) {
|
|
3217
|
-
|
|
3590
|
+
const element = this.tagStack.pop();
|
|
3591
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3592
|
+
element.endIndex = this.parser.endIndex;
|
|
3218
3593
|
}
|
|
3219
3594
|
if (this.elementCB)
|
|
3220
|
-
this.elementCB(
|
|
3595
|
+
this.elementCB(element);
|
|
3221
3596
|
}
|
|
3222
3597
|
onopentag(name, attribs) {
|
|
3223
3598
|
const type = this.options.xmlMode ? ElementType.Tag : void 0;
|
|
@@ -3229,7 +3604,7 @@ var DomHandler = class {
|
|
|
3229
3604
|
const { lastNode } = this;
|
|
3230
3605
|
if (lastNode && lastNode.type === ElementType.Text) {
|
|
3231
3606
|
lastNode.data += data;
|
|
3232
|
-
if (this.options.withEndIndices) {
|
|
3607
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3233
3608
|
lastNode.endIndex = this.parser.endIndex;
|
|
3234
3609
|
}
|
|
3235
3610
|
} else {
|
|
@@ -3274,10 +3649,10 @@ var DomHandler = class {
|
|
|
3274
3649
|
addNode(node) {
|
|
3275
3650
|
const parent = this.tagStack[this.tagStack.length - 1];
|
|
3276
3651
|
const previousSibling = parent.children[parent.children.length - 1];
|
|
3277
|
-
if (this.options.withStartIndices) {
|
|
3652
|
+
if (this.options.withStartIndices && this.parser) {
|
|
3278
3653
|
node.startIndex = this.parser.startIndex;
|
|
3279
3654
|
}
|
|
3280
|
-
if (this.options.withEndIndices) {
|
|
3655
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3281
3656
|
node.endIndex = this.parser.endIndex;
|
|
3282
3657
|
}
|
|
3283
3658
|
parent.children.push(node);
|
|
@@ -3290,616 +3665,7 @@ var DomHandler = class {
|
|
|
3290
3665
|
}
|
|
3291
3666
|
};
|
|
3292
3667
|
|
|
3293
|
-
// node_modules/.pnpm/
|
|
3294
|
-
var decode_data_html_default = new Uint16Array(
|
|
3295
|
-
// prettier-ignore
|
|
3296
|
-
'\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
|
|
3297
|
-
);
|
|
3298
|
-
|
|
3299
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
|
|
3300
|
-
var decode_data_xml_default = new Uint16Array(
|
|
3301
|
-
// prettier-ignore
|
|
3302
|
-
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
|
|
3303
|
-
);
|
|
3304
|
-
|
|
3305
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
|
|
3306
|
-
var _a2;
|
|
3307
|
-
var decodeMap2 = /* @__PURE__ */ new Map([
|
|
3308
|
-
[0, 65533],
|
|
3309
|
-
// C1 Unicode control character reference replacements
|
|
3310
|
-
[128, 8364],
|
|
3311
|
-
[130, 8218],
|
|
3312
|
-
[131, 402],
|
|
3313
|
-
[132, 8222],
|
|
3314
|
-
[133, 8230],
|
|
3315
|
-
[134, 8224],
|
|
3316
|
-
[135, 8225],
|
|
3317
|
-
[136, 710],
|
|
3318
|
-
[137, 8240],
|
|
3319
|
-
[138, 352],
|
|
3320
|
-
[139, 8249],
|
|
3321
|
-
[140, 338],
|
|
3322
|
-
[142, 381],
|
|
3323
|
-
[145, 8216],
|
|
3324
|
-
[146, 8217],
|
|
3325
|
-
[147, 8220],
|
|
3326
|
-
[148, 8221],
|
|
3327
|
-
[149, 8226],
|
|
3328
|
-
[150, 8211],
|
|
3329
|
-
[151, 8212],
|
|
3330
|
-
[152, 732],
|
|
3331
|
-
[153, 8482],
|
|
3332
|
-
[154, 353],
|
|
3333
|
-
[155, 8250],
|
|
3334
|
-
[156, 339],
|
|
3335
|
-
[158, 382],
|
|
3336
|
-
[159, 376]
|
|
3337
|
-
]);
|
|
3338
|
-
var fromCodePoint2 = (
|
|
3339
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
|
|
3340
|
-
(_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
|
|
3341
|
-
let output = "";
|
|
3342
|
-
if (codePoint > 65535) {
|
|
3343
|
-
codePoint -= 65536;
|
|
3344
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
3345
|
-
codePoint = 56320 | codePoint & 1023;
|
|
3346
|
-
}
|
|
3347
|
-
output += String.fromCharCode(codePoint);
|
|
3348
|
-
return output;
|
|
3349
|
-
}
|
|
3350
|
-
);
|
|
3351
|
-
function replaceCodePoint2(codePoint) {
|
|
3352
|
-
var _a3;
|
|
3353
|
-
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
3354
|
-
return 65533;
|
|
3355
|
-
}
|
|
3356
|
-
return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
|
|
3357
|
-
}
|
|
3358
|
-
|
|
3359
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
|
|
3360
|
-
var CharCodes3;
|
|
3361
|
-
(function(CharCodes4) {
|
|
3362
|
-
CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
|
|
3363
|
-
CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
|
|
3364
|
-
CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
|
|
3365
|
-
CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
|
|
3366
|
-
CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
|
|
3367
|
-
CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
|
|
3368
|
-
CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
|
|
3369
|
-
CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
|
|
3370
|
-
CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
|
|
3371
|
-
CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
|
|
3372
|
-
CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
|
|
3373
|
-
CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
|
|
3374
|
-
})(CharCodes3 || (CharCodes3 = {}));
|
|
3375
|
-
var TO_LOWER_BIT2 = 32;
|
|
3376
|
-
var BinTrieFlags2;
|
|
3377
|
-
(function(BinTrieFlags3) {
|
|
3378
|
-
BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
3379
|
-
BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
|
3380
|
-
BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
3381
|
-
})(BinTrieFlags2 || (BinTrieFlags2 = {}));
|
|
3382
|
-
function isNumber2(code) {
|
|
3383
|
-
return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
|
|
3384
|
-
}
|
|
3385
|
-
function isHexadecimalCharacter2(code) {
|
|
3386
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
|
|
3387
|
-
}
|
|
3388
|
-
function isAsciiAlphaNumeric2(code) {
|
|
3389
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
|
|
3390
|
-
}
|
|
3391
|
-
function isEntityInAttributeInvalidEnd2(code) {
|
|
3392
|
-
return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
|
|
3393
|
-
}
|
|
3394
|
-
var EntityDecoderState2;
|
|
3395
|
-
(function(EntityDecoderState3) {
|
|
3396
|
-
EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
|
|
3397
|
-
EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
|
|
3398
|
-
EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
|
|
3399
|
-
EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
|
|
3400
|
-
EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
|
|
3401
|
-
})(EntityDecoderState2 || (EntityDecoderState2 = {}));
|
|
3402
|
-
var DecodingMode2;
|
|
3403
|
-
(function(DecodingMode3) {
|
|
3404
|
-
DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
|
|
3405
|
-
DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
|
|
3406
|
-
DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
|
|
3407
|
-
})(DecodingMode2 || (DecodingMode2 = {}));
|
|
3408
|
-
var EntityDecoder2 = class {
|
|
3409
|
-
constructor(decodeTree, emitCodePoint, errors) {
|
|
3410
|
-
this.decodeTree = decodeTree;
|
|
3411
|
-
this.emitCodePoint = emitCodePoint;
|
|
3412
|
-
this.errors = errors;
|
|
3413
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3414
|
-
this.consumed = 1;
|
|
3415
|
-
this.result = 0;
|
|
3416
|
-
this.treeIndex = 0;
|
|
3417
|
-
this.excess = 1;
|
|
3418
|
-
this.decodeMode = DecodingMode2.Strict;
|
|
3419
|
-
}
|
|
3420
|
-
/** Resets the instance to make it reusable. */
|
|
3421
|
-
startEntity(decodeMode) {
|
|
3422
|
-
this.decodeMode = decodeMode;
|
|
3423
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3424
|
-
this.result = 0;
|
|
3425
|
-
this.treeIndex = 0;
|
|
3426
|
-
this.excess = 1;
|
|
3427
|
-
this.consumed = 1;
|
|
3428
|
-
}
|
|
3429
|
-
/**
|
|
3430
|
-
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
3431
|
-
* If the entity is incomplete, the decoder will return -1.
|
|
3432
|
-
*
|
|
3433
|
-
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
3434
|
-
* entity is incomplete, and resume when the next string is written.
|
|
3435
|
-
*
|
|
3436
|
-
* @param string The string containing the entity (or a continuation of the entity).
|
|
3437
|
-
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
3438
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3439
|
-
*/
|
|
3440
|
-
write(str, offset) {
|
|
3441
|
-
switch (this.state) {
|
|
3442
|
-
case EntityDecoderState2.EntityStart: {
|
|
3443
|
-
if (str.charCodeAt(offset) === CharCodes3.NUM) {
|
|
3444
|
-
this.state = EntityDecoderState2.NumericStart;
|
|
3445
|
-
this.consumed += 1;
|
|
3446
|
-
return this.stateNumericStart(str, offset + 1);
|
|
3447
|
-
}
|
|
3448
|
-
this.state = EntityDecoderState2.NamedEntity;
|
|
3449
|
-
return this.stateNamedEntity(str, offset);
|
|
3450
|
-
}
|
|
3451
|
-
case EntityDecoderState2.NumericStart: {
|
|
3452
|
-
return this.stateNumericStart(str, offset);
|
|
3453
|
-
}
|
|
3454
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3455
|
-
return this.stateNumericDecimal(str, offset);
|
|
3456
|
-
}
|
|
3457
|
-
case EntityDecoderState2.NumericHex: {
|
|
3458
|
-
return this.stateNumericHex(str, offset);
|
|
3459
|
-
}
|
|
3460
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3461
|
-
return this.stateNamedEntity(str, offset);
|
|
3462
|
-
}
|
|
3463
|
-
}
|
|
3464
|
-
}
|
|
3465
|
-
/**
|
|
3466
|
-
* Switches between the numeric decimal and hexadecimal states.
|
|
3467
|
-
*
|
|
3468
|
-
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
3469
|
-
*
|
|
3470
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3471
|
-
* @param offset The current offset.
|
|
3472
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3473
|
-
*/
|
|
3474
|
-
stateNumericStart(str, offset) {
|
|
3475
|
-
if (offset >= str.length) {
|
|
3476
|
-
return -1;
|
|
3477
|
-
}
|
|
3478
|
-
if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
|
|
3479
|
-
this.state = EntityDecoderState2.NumericHex;
|
|
3480
|
-
this.consumed += 1;
|
|
3481
|
-
return this.stateNumericHex(str, offset + 1);
|
|
3482
|
-
}
|
|
3483
|
-
this.state = EntityDecoderState2.NumericDecimal;
|
|
3484
|
-
return this.stateNumericDecimal(str, offset);
|
|
3485
|
-
}
|
|
3486
|
-
addToNumericResult(str, start, end, base) {
|
|
3487
|
-
if (start !== end) {
|
|
3488
|
-
const digitCount = end - start;
|
|
3489
|
-
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
|
|
3490
|
-
this.consumed += digitCount;
|
|
3491
|
-
}
|
|
3492
|
-
}
|
|
3493
|
-
/**
|
|
3494
|
-
* Parses a hexadecimal numeric entity.
|
|
3495
|
-
*
|
|
3496
|
-
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
3497
|
-
*
|
|
3498
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3499
|
-
* @param offset The current offset.
|
|
3500
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3501
|
-
*/
|
|
3502
|
-
stateNumericHex(str, offset) {
|
|
3503
|
-
const startIdx = offset;
|
|
3504
|
-
while (offset < str.length) {
|
|
3505
|
-
const char = str.charCodeAt(offset);
|
|
3506
|
-
if (isNumber2(char) || isHexadecimalCharacter2(char)) {
|
|
3507
|
-
offset += 1;
|
|
3508
|
-
} else {
|
|
3509
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3510
|
-
return this.emitNumericEntity(char, 3);
|
|
3511
|
-
}
|
|
3512
|
-
}
|
|
3513
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3514
|
-
return -1;
|
|
3515
|
-
}
|
|
3516
|
-
/**
|
|
3517
|
-
* Parses a decimal numeric entity.
|
|
3518
|
-
*
|
|
3519
|
-
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
3520
|
-
*
|
|
3521
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3522
|
-
* @param offset The current offset.
|
|
3523
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3524
|
-
*/
|
|
3525
|
-
stateNumericDecimal(str, offset) {
|
|
3526
|
-
const startIdx = offset;
|
|
3527
|
-
while (offset < str.length) {
|
|
3528
|
-
const char = str.charCodeAt(offset);
|
|
3529
|
-
if (isNumber2(char)) {
|
|
3530
|
-
offset += 1;
|
|
3531
|
-
} else {
|
|
3532
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3533
|
-
return this.emitNumericEntity(char, 2);
|
|
3534
|
-
}
|
|
3535
|
-
}
|
|
3536
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3537
|
-
return -1;
|
|
3538
|
-
}
|
|
3539
|
-
/**
|
|
3540
|
-
* Validate and emit a numeric entity.
|
|
3541
|
-
*
|
|
3542
|
-
* Implements the logic from the `Hexademical character reference start
|
|
3543
|
-
* state` and `Numeric character reference end state` in the HTML spec.
|
|
3544
|
-
*
|
|
3545
|
-
* @param lastCp The last code point of the entity. Used to see if the
|
|
3546
|
-
* entity was terminated with a semicolon.
|
|
3547
|
-
* @param expectedLength The minimum number of characters that should be
|
|
3548
|
-
* consumed. Used to validate that at least one digit
|
|
3549
|
-
* was consumed.
|
|
3550
|
-
* @returns The number of characters that were consumed.
|
|
3551
|
-
*/
|
|
3552
|
-
emitNumericEntity(lastCp, expectedLength) {
|
|
3553
|
-
var _a3;
|
|
3554
|
-
if (this.consumed <= expectedLength) {
|
|
3555
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3556
|
-
return 0;
|
|
3557
|
-
}
|
|
3558
|
-
if (lastCp === CharCodes3.SEMI) {
|
|
3559
|
-
this.consumed += 1;
|
|
3560
|
-
} else if (this.decodeMode === DecodingMode2.Strict) {
|
|
3561
|
-
return 0;
|
|
3562
|
-
}
|
|
3563
|
-
this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
|
|
3564
|
-
if (this.errors) {
|
|
3565
|
-
if (lastCp !== CharCodes3.SEMI) {
|
|
3566
|
-
this.errors.missingSemicolonAfterCharacterReference();
|
|
3567
|
-
}
|
|
3568
|
-
this.errors.validateNumericCharacterReference(this.result);
|
|
3569
|
-
}
|
|
3570
|
-
return this.consumed;
|
|
3571
|
-
}
|
|
3572
|
-
/**
|
|
3573
|
-
* Parses a named entity.
|
|
3574
|
-
*
|
|
3575
|
-
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
3576
|
-
*
|
|
3577
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3578
|
-
* @param offset The current offset.
|
|
3579
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3580
|
-
*/
|
|
3581
|
-
stateNamedEntity(str, offset) {
|
|
3582
|
-
const { decodeTree } = this;
|
|
3583
|
-
let current = decodeTree[this.treeIndex];
|
|
3584
|
-
let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3585
|
-
for (; offset < str.length; offset++, this.excess++) {
|
|
3586
|
-
const char = str.charCodeAt(offset);
|
|
3587
|
-
this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
3588
|
-
if (this.treeIndex < 0) {
|
|
3589
|
-
return this.result === 0 || // If we are parsing an attribute
|
|
3590
|
-
this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
3591
|
-
(valueLength === 0 || // And there should be no invalid characters.
|
|
3592
|
-
isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
3593
|
-
}
|
|
3594
|
-
current = decodeTree[this.treeIndex];
|
|
3595
|
-
valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3596
|
-
if (valueLength !== 0) {
|
|
3597
|
-
if (char === CharCodes3.SEMI) {
|
|
3598
|
-
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
3599
|
-
}
|
|
3600
|
-
if (this.decodeMode !== DecodingMode2.Strict) {
|
|
3601
|
-
this.result = this.treeIndex;
|
|
3602
|
-
this.consumed += this.excess;
|
|
3603
|
-
this.excess = 0;
|
|
3604
|
-
}
|
|
3605
|
-
}
|
|
3606
|
-
}
|
|
3607
|
-
return -1;
|
|
3608
|
-
}
|
|
3609
|
-
/**
|
|
3610
|
-
* Emit a named entity that was not terminated with a semicolon.
|
|
3611
|
-
*
|
|
3612
|
-
* @returns The number of characters consumed.
|
|
3613
|
-
*/
|
|
3614
|
-
emitNotTerminatedNamedEntity() {
|
|
3615
|
-
var _a3;
|
|
3616
|
-
const { result, decodeTree } = this;
|
|
3617
|
-
const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3618
|
-
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
3619
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
|
|
3620
|
-
return this.consumed;
|
|
3621
|
-
}
|
|
3622
|
-
/**
|
|
3623
|
-
* Emit a named entity.
|
|
3624
|
-
*
|
|
3625
|
-
* @param result The index of the entity in the decode tree.
|
|
3626
|
-
* @param valueLength The number of bytes in the entity.
|
|
3627
|
-
* @param consumed The number of characters consumed.
|
|
3628
|
-
*
|
|
3629
|
-
* @returns The number of characters consumed.
|
|
3630
|
-
*/
|
|
3631
|
-
emitNamedEntityData(result, valueLength, consumed) {
|
|
3632
|
-
const { decodeTree } = this;
|
|
3633
|
-
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
|
3634
|
-
if (valueLength === 3) {
|
|
3635
|
-
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
3636
|
-
}
|
|
3637
|
-
return consumed;
|
|
3638
|
-
}
|
|
3639
|
-
/**
|
|
3640
|
-
* Signal to the parser that the end of the input was reached.
|
|
3641
|
-
*
|
|
3642
|
-
* Remaining data will be emitted and relevant errors will be produced.
|
|
3643
|
-
*
|
|
3644
|
-
* @returns The number of characters consumed.
|
|
3645
|
-
*/
|
|
3646
|
-
end() {
|
|
3647
|
-
var _a3;
|
|
3648
|
-
switch (this.state) {
|
|
3649
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3650
|
-
return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
3651
|
-
}
|
|
3652
|
-
// Otherwise, emit a numeric entity if we have one.
|
|
3653
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3654
|
-
return this.emitNumericEntity(0, 2);
|
|
3655
|
-
}
|
|
3656
|
-
case EntityDecoderState2.NumericHex: {
|
|
3657
|
-
return this.emitNumericEntity(0, 3);
|
|
3658
|
-
}
|
|
3659
|
-
case EntityDecoderState2.NumericStart: {
|
|
3660
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3661
|
-
return 0;
|
|
3662
|
-
}
|
|
3663
|
-
case EntityDecoderState2.EntityStart: {
|
|
3664
|
-
return 0;
|
|
3665
|
-
}
|
|
3666
|
-
}
|
|
3667
|
-
}
|
|
3668
|
-
};
|
|
3669
|
-
function getDecoder(decodeTree) {
|
|
3670
|
-
let ret = "";
|
|
3671
|
-
const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
|
|
3672
|
-
return function decodeWithTrie(str, decodeMode) {
|
|
3673
|
-
let lastIndex = 0;
|
|
3674
|
-
let offset = 0;
|
|
3675
|
-
while ((offset = str.indexOf("&", offset)) >= 0) {
|
|
3676
|
-
ret += str.slice(lastIndex, offset);
|
|
3677
|
-
decoder.startEntity(decodeMode);
|
|
3678
|
-
const len = decoder.write(
|
|
3679
|
-
str,
|
|
3680
|
-
// Skip the "&"
|
|
3681
|
-
offset + 1
|
|
3682
|
-
);
|
|
3683
|
-
if (len < 0) {
|
|
3684
|
-
lastIndex = offset + decoder.end();
|
|
3685
|
-
break;
|
|
3686
|
-
}
|
|
3687
|
-
lastIndex = offset + len;
|
|
3688
|
-
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
|
3689
|
-
}
|
|
3690
|
-
const result = ret + str.slice(lastIndex);
|
|
3691
|
-
ret = "";
|
|
3692
|
-
return result;
|
|
3693
|
-
};
|
|
3694
|
-
}
|
|
3695
|
-
function determineBranch2(decodeTree, current, nodeIdx, char) {
|
|
3696
|
-
const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
|
|
3697
|
-
const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
|
|
3698
|
-
if (branchCount === 0) {
|
|
3699
|
-
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
|
3700
|
-
}
|
|
3701
|
-
if (jumpOffset) {
|
|
3702
|
-
const value = char - jumpOffset;
|
|
3703
|
-
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
|
3704
|
-
}
|
|
3705
|
-
let lo = nodeIdx;
|
|
3706
|
-
let hi = lo + branchCount - 1;
|
|
3707
|
-
while (lo <= hi) {
|
|
3708
|
-
const mid = lo + hi >>> 1;
|
|
3709
|
-
const midVal = decodeTree[mid];
|
|
3710
|
-
if (midVal < char) {
|
|
3711
|
-
lo = mid + 1;
|
|
3712
|
-
} else if (midVal > char) {
|
|
3713
|
-
hi = mid - 1;
|
|
3714
|
-
} else {
|
|
3715
|
-
return decodeTree[mid + branchCount];
|
|
3716
|
-
}
|
|
3717
|
-
}
|
|
3718
|
-
return -1;
|
|
3719
|
-
}
|
|
3720
|
-
var htmlDecoder = getDecoder(decode_data_html_default);
|
|
3721
|
-
var xmlDecoder = getDecoder(decode_data_xml_default);
|
|
3722
|
-
|
|
3723
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
|
|
3724
|
-
function restoreDiff(arr) {
|
|
3725
|
-
for (let i = 1; i < arr.length; i++) {
|
|
3726
|
-
arr[i][0] += arr[i - 1][0] + 1;
|
|
3727
|
-
}
|
|
3728
|
-
return arr;
|
|
3729
|
-
}
|
|
3730
|
-
var encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
|
|
3731
|
-
|
|
3732
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
|
|
3733
|
-
var xmlCodeMap = /* @__PURE__ */ new Map([
|
|
3734
|
-
[34, """],
|
|
3735
|
-
[38, "&"],
|
|
3736
|
-
[39, "'"],
|
|
3737
|
-
[60, "<"],
|
|
3738
|
-
[62, ">"]
|
|
3739
|
-
]);
|
|
3740
|
-
var getCodePoint = (
|
|
3741
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
3742
|
-
String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
|
|
3743
|
-
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
3744
|
-
(c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
|
|
3745
|
-
)
|
|
3746
|
-
);
|
|
3747
|
-
function getEscaper(regex, map) {
|
|
3748
|
-
return function escape2(data) {
|
|
3749
|
-
let match;
|
|
3750
|
-
let lastIdx = 0;
|
|
3751
|
-
let result = "";
|
|
3752
|
-
while (match = regex.exec(data)) {
|
|
3753
|
-
if (lastIdx !== match.index) {
|
|
3754
|
-
result += data.substring(lastIdx, match.index);
|
|
3755
|
-
}
|
|
3756
|
-
result += map.get(match[0].charCodeAt(0));
|
|
3757
|
-
lastIdx = match.index + 1;
|
|
3758
|
-
}
|
|
3759
|
-
return result + data.substring(lastIdx);
|
|
3760
|
-
};
|
|
3761
|
-
}
|
|
3762
|
-
var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
3763
|
-
var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3764
|
-
[34, """],
|
|
3765
|
-
[38, "&"],
|
|
3766
|
-
[160, " "]
|
|
3767
|
-
]));
|
|
3768
|
-
var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3769
|
-
[38, "&"],
|
|
3770
|
-
[60, "<"],
|
|
3771
|
-
[62, ">"],
|
|
3772
|
-
[160, " "]
|
|
3773
|
-
]));
|
|
3774
|
-
|
|
3775
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
|
|
3776
|
-
var EntityLevel;
|
|
3777
|
-
(function(EntityLevel2) {
|
|
3778
|
-
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
|
|
3779
|
-
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
|
|
3780
|
-
})(EntityLevel || (EntityLevel = {}));
|
|
3781
|
-
var EncodingMode;
|
|
3782
|
-
(function(EncodingMode2) {
|
|
3783
|
-
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
|
|
3784
|
-
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
|
|
3785
|
-
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
|
|
3786
|
-
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
|
|
3787
|
-
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
|
|
3788
|
-
})(EncodingMode || (EncodingMode = {}));
|
|
3789
|
-
|
|
3790
|
-
// node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
|
|
3791
|
-
var elementNames = new Map([
|
|
3792
|
-
"altGlyph",
|
|
3793
|
-
"altGlyphDef",
|
|
3794
|
-
"altGlyphItem",
|
|
3795
|
-
"animateColor",
|
|
3796
|
-
"animateMotion",
|
|
3797
|
-
"animateTransform",
|
|
3798
|
-
"clipPath",
|
|
3799
|
-
"feBlend",
|
|
3800
|
-
"feColorMatrix",
|
|
3801
|
-
"feComponentTransfer",
|
|
3802
|
-
"feComposite",
|
|
3803
|
-
"feConvolveMatrix",
|
|
3804
|
-
"feDiffuseLighting",
|
|
3805
|
-
"feDisplacementMap",
|
|
3806
|
-
"feDistantLight",
|
|
3807
|
-
"feDropShadow",
|
|
3808
|
-
"feFlood",
|
|
3809
|
-
"feFuncA",
|
|
3810
|
-
"feFuncB",
|
|
3811
|
-
"feFuncG",
|
|
3812
|
-
"feFuncR",
|
|
3813
|
-
"feGaussianBlur",
|
|
3814
|
-
"feImage",
|
|
3815
|
-
"feMerge",
|
|
3816
|
-
"feMergeNode",
|
|
3817
|
-
"feMorphology",
|
|
3818
|
-
"feOffset",
|
|
3819
|
-
"fePointLight",
|
|
3820
|
-
"feSpecularLighting",
|
|
3821
|
-
"feSpotLight",
|
|
3822
|
-
"feTile",
|
|
3823
|
-
"feTurbulence",
|
|
3824
|
-
"foreignObject",
|
|
3825
|
-
"glyphRef",
|
|
3826
|
-
"linearGradient",
|
|
3827
|
-
"radialGradient",
|
|
3828
|
-
"textPath"
|
|
3829
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
3830
|
-
var attributeNames = new Map([
|
|
3831
|
-
"definitionURL",
|
|
3832
|
-
"attributeName",
|
|
3833
|
-
"attributeType",
|
|
3834
|
-
"baseFrequency",
|
|
3835
|
-
"baseProfile",
|
|
3836
|
-
"calcMode",
|
|
3837
|
-
"clipPathUnits",
|
|
3838
|
-
"diffuseConstant",
|
|
3839
|
-
"edgeMode",
|
|
3840
|
-
"filterUnits",
|
|
3841
|
-
"glyphRef",
|
|
3842
|
-
"gradientTransform",
|
|
3843
|
-
"gradientUnits",
|
|
3844
|
-
"kernelMatrix",
|
|
3845
|
-
"kernelUnitLength",
|
|
3846
|
-
"keyPoints",
|
|
3847
|
-
"keySplines",
|
|
3848
|
-
"keyTimes",
|
|
3849
|
-
"lengthAdjust",
|
|
3850
|
-
"limitingConeAngle",
|
|
3851
|
-
"markerHeight",
|
|
3852
|
-
"markerUnits",
|
|
3853
|
-
"markerWidth",
|
|
3854
|
-
"maskContentUnits",
|
|
3855
|
-
"maskUnits",
|
|
3856
|
-
"numOctaves",
|
|
3857
|
-
"pathLength",
|
|
3858
|
-
"patternContentUnits",
|
|
3859
|
-
"patternTransform",
|
|
3860
|
-
"patternUnits",
|
|
3861
|
-
"pointsAtX",
|
|
3862
|
-
"pointsAtY",
|
|
3863
|
-
"pointsAtZ",
|
|
3864
|
-
"preserveAlpha",
|
|
3865
|
-
"preserveAspectRatio",
|
|
3866
|
-
"primitiveUnits",
|
|
3867
|
-
"refX",
|
|
3868
|
-
"refY",
|
|
3869
|
-
"repeatCount",
|
|
3870
|
-
"repeatDur",
|
|
3871
|
-
"requiredExtensions",
|
|
3872
|
-
"requiredFeatures",
|
|
3873
|
-
"specularConstant",
|
|
3874
|
-
"specularExponent",
|
|
3875
|
-
"spreadMethod",
|
|
3876
|
-
"startOffset",
|
|
3877
|
-
"stdDeviation",
|
|
3878
|
-
"stitchTiles",
|
|
3879
|
-
"surfaceScale",
|
|
3880
|
-
"systemLanguage",
|
|
3881
|
-
"tableValues",
|
|
3882
|
-
"targetX",
|
|
3883
|
-
"targetY",
|
|
3884
|
-
"textLength",
|
|
3885
|
-
"viewBox",
|
|
3886
|
-
"viewTarget",
|
|
3887
|
-
"xChannelSelector",
|
|
3888
|
-
"yChannelSelector",
|
|
3889
|
-
"zoomAndPan"
|
|
3890
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
3891
|
-
|
|
3892
|
-
// node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
|
|
3893
|
-
var DocumentPosition;
|
|
3894
|
-
(function(DocumentPosition2) {
|
|
3895
|
-
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
3896
|
-
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
|
|
3897
|
-
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
|
|
3898
|
-
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
|
|
3899
|
-
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
|
|
3900
|
-
})(DocumentPosition || (DocumentPosition = {}));
|
|
3901
|
-
|
|
3902
|
-
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
|
|
3668
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/index.js
|
|
3903
3669
|
function parseDocument(data, options) {
|
|
3904
3670
|
const handler = new DomHandler(void 0, options);
|
|
3905
3671
|
new Parser(handler, options).end(data);
|
|
@@ -4143,17 +3909,35 @@ function loadInlineSources(story, sources, opts, diagnostics) {
|
|
|
4143
3909
|
}
|
|
4144
3910
|
const content = typeof source.content === "string" ? source.content : source.content.toString("utf-8");
|
|
4145
3911
|
const ext = normalizedFileExt(source.filename);
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
3912
|
+
switch (ext) {
|
|
3913
|
+
case "":
|
|
3914
|
+
case "tw":
|
|
3915
|
+
case "twee":
|
|
3916
|
+
case "tw2":
|
|
3917
|
+
case "twee2": {
|
|
3918
|
+
const twee2 = ext === "tw2" || ext === "twee2" || opts.twee2Compat;
|
|
3919
|
+
const result = parseTwee(content, {
|
|
3920
|
+
filename: source.filename,
|
|
3921
|
+
trim: opts.trim ?? true,
|
|
3922
|
+
twee2Compat: twee2
|
|
3923
|
+
});
|
|
3924
|
+
diagnostics.push(...result.diagnostics);
|
|
3925
|
+
for (const p of result.passages) {
|
|
3926
|
+
storyAdd(story, p, diagnostics);
|
|
3927
|
+
}
|
|
3928
|
+
break;
|
|
4156
3929
|
}
|
|
3930
|
+
case "css":
|
|
3931
|
+
storyAdd(story, { name: basename(source.filename), tags: ["stylesheet"], text: content }, diagnostics);
|
|
3932
|
+
break;
|
|
3933
|
+
case "js":
|
|
3934
|
+
storyAdd(story, { name: basename(source.filename), tags: ["script"], text: content }, diagnostics);
|
|
3935
|
+
break;
|
|
3936
|
+
default:
|
|
3937
|
+
diagnostics.push({
|
|
3938
|
+
level: "warning",
|
|
3939
|
+
message: `load ${source.filename}: in-memory sources of type .${ext} are not supported; skipped.`
|
|
3940
|
+
});
|
|
4157
3941
|
}
|
|
4158
3942
|
}
|
|
4159
3943
|
}
|
|
@@ -4351,7 +4135,27 @@ function loadSourcesCached(story, filenames, opts, diagnostics, processedFiles,
|
|
|
4351
4135
|
}
|
|
4352
4136
|
|
|
4353
4137
|
// src/version.ts
|
|
4354
|
-
|
|
4138
|
+
import { readFileSync as readFileSync2 } from "fs";
|
|
4139
|
+
import { dirname, join as join3 } from "path";
|
|
4140
|
+
import { fileURLToPath } from "url";
|
|
4141
|
+
var PACKAGE_NAME = "@rohal12/twee-ts";
|
|
4142
|
+
function findPackageVersion(startDir) {
|
|
4143
|
+
let dir = startDir;
|
|
4144
|
+
for (; ; ) {
|
|
4145
|
+
try {
|
|
4146
|
+
const pkg = JSON.parse(readFileSync2(join3(dir, "package.json"), "utf-8"));
|
|
4147
|
+
if (pkg.name === PACKAGE_NAME && typeof pkg.version === "string") return pkg.version;
|
|
4148
|
+
} catch {
|
|
4149
|
+
}
|
|
4150
|
+
const parent = dirname(dir);
|
|
4151
|
+
if (parent === dir) return void 0;
|
|
4152
|
+
dir = parent;
|
|
4153
|
+
}
|
|
4154
|
+
}
|
|
4155
|
+
function moduleDir() {
|
|
4156
|
+
return typeof __dirname === "string" ? __dirname : dirname(fileURLToPath(import.meta.url));
|
|
4157
|
+
}
|
|
4158
|
+
var VERSION = findPackageVersion(moduleDir()) ?? "0.0.0";
|
|
4355
4159
|
|
|
4356
4160
|
// src/output-twine2.ts
|
|
4357
4161
|
var CREATOR_NAME = "Twee-ts";
|
|
@@ -4441,8 +4245,8 @@ function getTwine2DataChunk(story, startName, options) {
|
|
|
4441
4245
|
}
|
|
4442
4246
|
|
|
4443
4247
|
// src/output-twine1.ts
|
|
4444
|
-
import { readFileSync as
|
|
4445
|
-
import { join as
|
|
4248
|
+
import { readFileSync as readFileSync3 } from "fs";
|
|
4249
|
+
import { join as join4, dirname as dirname2 } from "path";
|
|
4446
4250
|
var CREATOR_NAME2 = "twee-ts";
|
|
4447
4251
|
function toTwine1Archive(story, _startName) {
|
|
4448
4252
|
const { data, count } = getTwine1PassageChunk(story);
|
|
@@ -4450,19 +4254,19 @@ function toTwine1Archive(story, _startName) {
|
|
|
4450
4254
|
`;
|
|
4451
4255
|
}
|
|
4452
4256
|
function toTwine1HTML(story, format, startName) {
|
|
4453
|
-
const formatDir =
|
|
4454
|
-
const parentDir =
|
|
4257
|
+
const formatDir = dirname2(format.filename);
|
|
4258
|
+
const parentDir = dirname2(formatDir);
|
|
4455
4259
|
let template = readFormatSource(format);
|
|
4456
4260
|
const { data, count } = getTwine1PassageChunk(story);
|
|
4457
|
-
template = tryReplaceComponent(template, '"USER_LIB"',
|
|
4458
|
-
template = tryReplaceComponent(template, '"ENGINE"',
|
|
4459
|
-
template = tryReplaceComponent(template, '"SUGARCANE"',
|
|
4460
|
-
template = tryReplaceComponent(template, '"JONAH"',
|
|
4261
|
+
template = tryReplaceComponent(template, '"USER_LIB"', join4(formatDir, "userlib.js"), false);
|
|
4262
|
+
template = tryReplaceComponent(template, '"ENGINE"', join4(parentDir, "engine.js"), true);
|
|
4263
|
+
template = tryReplaceComponent(template, '"SUGARCANE"', join4(formatDir, "code.js"), true);
|
|
4264
|
+
template = tryReplaceComponent(template, '"JONAH"', join4(formatDir, "code.js"), true);
|
|
4461
4265
|
if (story.twine1.settings.get("jquery") === "on") {
|
|
4462
|
-
template = tryReplaceComponent(template, '"JQUERY"',
|
|
4266
|
+
template = tryReplaceComponent(template, '"JQUERY"', join4(parentDir, "jquery.js"), true);
|
|
4463
4267
|
}
|
|
4464
4268
|
if (story.twine1.settings.get("modernizr") === "on") {
|
|
4465
|
-
template = tryReplaceComponent(template, '"MODERNIZR"',
|
|
4269
|
+
template = tryReplaceComponent(template, '"MODERNIZR"', join4(parentDir, "modernizr.js"), true);
|
|
4466
4270
|
}
|
|
4467
4271
|
const displayStart = startName === "Start" ? "" : startName;
|
|
4468
4272
|
template = template.replace('"VERSION"', `Compiled with ${CREATOR_NAME2}, ${VERSION}`);
|
|
@@ -4475,7 +4279,7 @@ function toTwine1HTML(story, format, startName) {
|
|
|
4475
4279
|
} else {
|
|
4476
4280
|
let footer;
|
|
4477
4281
|
try {
|
|
4478
|
-
footer =
|
|
4282
|
+
footer = readFileSync3(join4(formatDir, "footer.html"), "utf-8");
|
|
4479
4283
|
} catch {
|
|
4480
4284
|
footer = "</div>\n</body>\n</html>\n";
|
|
4481
4285
|
}
|
|
@@ -4505,7 +4309,7 @@ function getTwine1PassageChunk(story) {
|
|
|
4505
4309
|
function tryReplaceComponent(template, placeholder, componentPath, required) {
|
|
4506
4310
|
if (!template.includes(placeholder)) return template;
|
|
4507
4311
|
try {
|
|
4508
|
-
let content =
|
|
4312
|
+
let content = readFileSync3(componentPath, "utf-8");
|
|
4509
4313
|
if (content.charCodeAt(0) === 65279) content = content.slice(1);
|
|
4510
4314
|
return template.replace(placeholder, () => content);
|
|
4511
4315
|
} catch (e) {
|
|
@@ -4602,8 +4406,8 @@ function modifyHead(html, modulePaths, headFile, diagnostics) {
|
|
|
4602
4406
|
}
|
|
4603
4407
|
|
|
4604
4408
|
// src/remote-formats.ts
|
|
4605
|
-
import { mkdirSync, readFileSync as
|
|
4606
|
-
import { join as
|
|
4409
|
+
import { mkdirSync, readFileSync as readFileSync4, writeFileSync, existsSync, readdirSync as readdirSync3, statSync as statSync4, rmSync } from "fs";
|
|
4410
|
+
import { join as join5 } from "path";
|
|
4607
4411
|
import { homedir as homedir2 } from "os";
|
|
4608
4412
|
var DEFAULT_SFA_INDICES = [
|
|
4609
4413
|
"https://videlais.github.io/story-formats-archive/official/index.json",
|
|
@@ -4611,8 +4415,8 @@ var DEFAULT_SFA_INDICES = [
|
|
|
4611
4415
|
];
|
|
4612
4416
|
function getCacheDir() {
|
|
4613
4417
|
const xdg = process.env["XDG_CACHE_HOME"];
|
|
4614
|
-
const base = xdg ||
|
|
4615
|
-
return
|
|
4418
|
+
const base = xdg || join5(homedir2(), ".cache");
|
|
4419
|
+
return join5(base, "twee-ts", "storyformats");
|
|
4616
4420
|
}
|
|
4617
4421
|
var indexCache = /* @__PURE__ */ new Map();
|
|
4618
4422
|
function clearIndexCache() {
|
|
@@ -4702,9 +4506,9 @@ async function fetchAndCacheFormat(entry, downloadUrl) {
|
|
|
4702
4506
|
throw new Error(`Failed to parse format JSON from ${downloadUrl}`);
|
|
4703
4507
|
}
|
|
4704
4508
|
const cacheDir = getCacheDir();
|
|
4705
|
-
const formatDir =
|
|
4509
|
+
const formatDir = join5(cacheDir, entry.name, entry.version);
|
|
4706
4510
|
mkdirSync(formatDir, { recursive: true });
|
|
4707
|
-
const formatPath =
|
|
4511
|
+
const formatPath = join5(formatDir, "format.js");
|
|
4708
4512
|
writeFileSync(formatPath, text, "utf-8");
|
|
4709
4513
|
return {
|
|
4710
4514
|
id,
|
|
@@ -4728,9 +4532,9 @@ async function fetchDirectFormat(url) {
|
|
|
4728
4532
|
}
|
|
4729
4533
|
const id = makeFormatId(data.name, data.version);
|
|
4730
4534
|
const cacheDir = getCacheDir();
|
|
4731
|
-
const formatDir =
|
|
4535
|
+
const formatDir = join5(cacheDir, data.name, data.version);
|
|
4732
4536
|
mkdirSync(formatDir, { recursive: true });
|
|
4733
|
-
const formatPath =
|
|
4537
|
+
const formatPath = join5(formatDir, "format.js");
|
|
4734
4538
|
writeFileSync(formatPath, text, "utf-8");
|
|
4735
4539
|
return {
|
|
4736
4540
|
id,
|
|
@@ -4778,10 +4582,10 @@ async function resolveRemoteFormat(name, version, indices, urls) {
|
|
|
4778
4582
|
return void 0;
|
|
4779
4583
|
}
|
|
4780
4584
|
function getCachedFormat(name, version) {
|
|
4781
|
-
const formatPath =
|
|
4585
|
+
const formatPath = join5(getCacheDir(), name, version, "format.js");
|
|
4782
4586
|
try {
|
|
4783
4587
|
if (!existsSync(formatPath)) return void 0;
|
|
4784
|
-
const source =
|
|
4588
|
+
const source = readFileSync4(formatPath, "utf-8");
|
|
4785
4589
|
const id = makeFormatId(name, version);
|
|
4786
4590
|
const data = parseFormatJSON(source, id);
|
|
4787
4591
|
if (!data) return void 0;
|
|
@@ -4997,7 +4801,9 @@ function storyToJSON(story) {
|
|
|
4997
4801
|
}
|
|
4998
4802
|
|
|
4999
4803
|
export {
|
|
4804
|
+
mediaTypeFromFilename,
|
|
4805
|
+
TweeTsError,
|
|
5000
4806
|
compile,
|
|
5001
4807
|
compileIncremental
|
|
5002
4808
|
};
|
|
5003
|
-
//# sourceMappingURL=chunk-
|
|
4809
|
+
//# sourceMappingURL=chunk-W3SNMQO4.js.map
|