@rohal12/twee-ts 1.13.0 → 1.14.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 +861 -1089
- package/dist/bin/twee-ts.js.map +1 -1
- package/dist/{chunk-ORMESTR7.js → chunk-Z2CNKPVJ.js} +863 -1091
- package/dist/chunk-Z2CNKPVJ.js.map +1 -0
- package/dist/index.cjs +861 -1089
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +861 -1089
- package/dist/index.js.map +1 -1
- package/dist/plugins/rollup.js +1 -1
- package/dist/plugins/vite.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-ORMESTR7.js.map +0 -1
|
@@ -1253,8 +1253,7 @@ function parseTwee(source, options = {}) {
|
|
|
1253
1253
|
return { passages, diagnostics };
|
|
1254
1254
|
}
|
|
1255
1255
|
|
|
1256
|
-
// node_modules/.pnpm/entities@
|
|
1257
|
-
var _a;
|
|
1256
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js
|
|
1258
1257
|
var decodeMap = /* @__PURE__ */ new Map([
|
|
1259
1258
|
[0, 65533],
|
|
1260
1259
|
// C1 Unicode control character reference replacements
|
|
@@ -1286,47 +1285,16 @@ var decodeMap = /* @__PURE__ */ new Map([
|
|
|
1286
1285
|
[158, 382],
|
|
1287
1286
|
[159, 376]
|
|
1288
1287
|
]);
|
|
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
1288
|
function replaceCodePoint(codePoint) {
|
|
1303
|
-
var _a3;
|
|
1304
1289
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
1305
1290
|
return 65533;
|
|
1306
1291
|
}
|
|
1307
|
-
return
|
|
1292
|
+
return decodeMap.get(codePoint) ?? codePoint;
|
|
1308
1293
|
}
|
|
1309
1294
|
|
|
1310
|
-
// node_modules/.pnpm/entities@
|
|
1295
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js
|
|
1311
1296
|
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
|
-
);
|
|
1297
|
+
const binary = atob(input);
|
|
1330
1298
|
const evenLength = binary.length & ~1;
|
|
1331
1299
|
const out = new Uint16Array(evenLength / 2);
|
|
1332
1300
|
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
@@ -1337,36 +1305,36 @@ function decodeBase64(input) {
|
|
|
1337
1305
|
return out;
|
|
1338
1306
|
}
|
|
1339
1307
|
|
|
1340
|
-
// node_modules/.pnpm/entities@
|
|
1308
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js
|
|
1341
1309
|
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
1310
|
|
|
1343
|
-
// node_modules/.pnpm/entities@
|
|
1311
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-xml.js
|
|
1344
1312
|
var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
|
|
1345
1313
|
|
|
1346
|
-
// node_modules/.pnpm/entities@
|
|
1314
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js
|
|
1347
1315
|
var BinTrieFlags;
|
|
1348
|
-
(function(
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1316
|
+
(function(BinTrieFlags2) {
|
|
1317
|
+
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1318
|
+
BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
|
|
1319
|
+
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1320
|
+
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1353
1321
|
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1354
1322
|
|
|
1355
|
-
// node_modules/.pnpm/entities@
|
|
1323
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js
|
|
1356
1324
|
var CharCodes;
|
|
1357
|
-
(function(
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1325
|
+
(function(CharCodes3) {
|
|
1326
|
+
CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
|
|
1327
|
+
CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
|
|
1328
|
+
CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
|
|
1329
|
+
CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
|
|
1330
|
+
CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
|
|
1331
|
+
CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
|
|
1332
|
+
CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
|
|
1333
|
+
CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
|
|
1334
|
+
CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1335
|
+
CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
|
|
1336
|
+
CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
|
|
1337
|
+
CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1370
1338
|
})(CharCodes || (CharCodes = {}));
|
|
1371
1339
|
var TO_LOWER_BIT = 32;
|
|
1372
1340
|
function isNumber(code) {
|
|
@@ -1382,33 +1350,51 @@ function isEntityInAttributeInvalidEnd(code) {
|
|
|
1382
1350
|
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1383
1351
|
}
|
|
1384
1352
|
var EntityDecoderState;
|
|
1385
|
-
(function(
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1353
|
+
(function(EntityDecoderState2) {
|
|
1354
|
+
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
1355
|
+
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
1356
|
+
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1357
|
+
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
1358
|
+
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
1391
1359
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1392
1360
|
var DecodingMode;
|
|
1393
|
-
(function(
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1361
|
+
(function(DecodingMode2) {
|
|
1362
|
+
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
1363
|
+
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
1364
|
+
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
1397
1365
|
})(DecodingMode || (DecodingMode = {}));
|
|
1398
1366
|
var EntityDecoder = class {
|
|
1367
|
+
decodeTree;
|
|
1368
|
+
emitCodePoint;
|
|
1369
|
+
errors;
|
|
1399
1370
|
constructor(decodeTree, emitCodePoint, errors) {
|
|
1400
1371
|
this.decodeTree = decodeTree;
|
|
1401
1372
|
this.emitCodePoint = emitCodePoint;
|
|
1402
1373
|
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
1374
|
}
|
|
1411
|
-
/**
|
|
1375
|
+
/** The current state of the decoder. */
|
|
1376
|
+
state = EntityDecoderState.EntityStart;
|
|
1377
|
+
/** Characters that were consumed while parsing an entity. */
|
|
1378
|
+
consumed = 1;
|
|
1379
|
+
/**
|
|
1380
|
+
* The result of the entity.
|
|
1381
|
+
*
|
|
1382
|
+
* Either the result index of a numeric entity, or the codepoint of a
|
|
1383
|
+
* numeric entity.
|
|
1384
|
+
*/
|
|
1385
|
+
result = 0;
|
|
1386
|
+
/** The current index in the decode tree. */
|
|
1387
|
+
treeIndex = 0;
|
|
1388
|
+
/** The number of characters that were consumed in excess. */
|
|
1389
|
+
excess = 1;
|
|
1390
|
+
/** The mode in which the decoder is operating. */
|
|
1391
|
+
decodeMode = DecodingMode.Strict;
|
|
1392
|
+
/** The number of characters that have been consumed in the current run. */
|
|
1393
|
+
runConsumed = 0;
|
|
1394
|
+
/**
|
|
1395
|
+
* Resets the instance to make it reusable.
|
|
1396
|
+
* @param decodeMode Entity decoding mode to use.
|
|
1397
|
+
*/
|
|
1412
1398
|
startEntity(decodeMode) {
|
|
1413
1399
|
this.decodeMode = decodeMode;
|
|
1414
1400
|
this.state = EntityDecoderState.EntityStart;
|
|
@@ -1424,7 +1410,6 @@ var EntityDecoder = class {
|
|
|
1424
1410
|
*
|
|
1425
1411
|
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
1426
1412
|
* entity is incomplete, and resume when the next string is written.
|
|
1427
|
-
*
|
|
1428
1413
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1429
1414
|
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
1430
1415
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1458,7 +1443,6 @@ var EntityDecoder = class {
|
|
|
1458
1443
|
* Switches between the numeric decimal and hexadecimal states.
|
|
1459
1444
|
*
|
|
1460
1445
|
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
1461
|
-
*
|
|
1462
1446
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1463
1447
|
* @param offset The current offset.
|
|
1464
1448
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1479,7 +1463,6 @@ var EntityDecoder = class {
|
|
|
1479
1463
|
* Parses a hexadecimal numeric entity.
|
|
1480
1464
|
*
|
|
1481
1465
|
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
1482
|
-
*
|
|
1483
1466
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1484
1467
|
* @param offset The current offset.
|
|
1485
1468
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1502,7 +1485,6 @@ var EntityDecoder = class {
|
|
|
1502
1485
|
* Parses a decimal numeric entity.
|
|
1503
1486
|
*
|
|
1504
1487
|
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
1505
|
-
*
|
|
1506
1488
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1507
1489
|
* @param offset The current offset.
|
|
1508
1490
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1525,7 +1507,6 @@ var EntityDecoder = class {
|
|
|
1525
1507
|
*
|
|
1526
1508
|
* Implements the logic from the `Hexademical character reference start
|
|
1527
1509
|
* state` and `Numeric character reference end state` in the HTML spec.
|
|
1528
|
-
*
|
|
1529
1510
|
* @param lastCp The last code point of the entity. Used to see if the
|
|
1530
1511
|
* entity was terminated with a semicolon.
|
|
1531
1512
|
* @param expectedLength The minimum number of characters that should be
|
|
@@ -1534,9 +1515,8 @@ var EntityDecoder = class {
|
|
|
1534
1515
|
* @returns The number of characters that were consumed.
|
|
1535
1516
|
*/
|
|
1536
1517
|
emitNumericEntity(lastCp, expectedLength) {
|
|
1537
|
-
var _a3;
|
|
1538
1518
|
if (this.consumed <= expectedLength) {
|
|
1539
|
-
|
|
1519
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1540
1520
|
return 0;
|
|
1541
1521
|
}
|
|
1542
1522
|
if (lastCp === CharCodes.SEMI) {
|
|
@@ -1557,7 +1537,6 @@ var EntityDecoder = class {
|
|
|
1557
1537
|
* Parses a named entity.
|
|
1558
1538
|
*
|
|
1559
1539
|
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
1560
|
-
*
|
|
1561
1540
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1562
1541
|
* @param offset The current offset.
|
|
1563
1542
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1630,24 +1609,20 @@ var EntityDecoder = class {
|
|
|
1630
1609
|
}
|
|
1631
1610
|
/**
|
|
1632
1611
|
* Emit a named entity that was not terminated with a semicolon.
|
|
1633
|
-
*
|
|
1634
1612
|
* @returns The number of characters consumed.
|
|
1635
1613
|
*/
|
|
1636
1614
|
emitNotTerminatedNamedEntity() {
|
|
1637
|
-
var _a3;
|
|
1638
1615
|
const { result, decodeTree } = this;
|
|
1639
1616
|
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1640
1617
|
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1641
|
-
|
|
1618
|
+
this.errors?.missingSemicolonAfterCharacterReference();
|
|
1642
1619
|
return this.consumed;
|
|
1643
1620
|
}
|
|
1644
1621
|
/**
|
|
1645
1622
|
* Emit a named entity.
|
|
1646
|
-
*
|
|
1647
1623
|
* @param result The index of the entity in the decode tree.
|
|
1648
1624
|
* @param valueLength The number of bytes in the entity.
|
|
1649
1625
|
* @param consumed The number of characters consumed.
|
|
1650
|
-
*
|
|
1651
1626
|
* @returns The number of characters consumed.
|
|
1652
1627
|
*/
|
|
1653
1628
|
emitNamedEntityData(result, valueLength, consumed) {
|
|
@@ -1662,11 +1637,9 @@ var EntityDecoder = class {
|
|
|
1662
1637
|
* Signal to the parser that the end of the input was reached.
|
|
1663
1638
|
*
|
|
1664
1639
|
* Remaining data will be emitted and relevant errors will be produced.
|
|
1665
|
-
*
|
|
1666
1640
|
* @returns The number of characters consumed.
|
|
1667
1641
|
*/
|
|
1668
1642
|
end() {
|
|
1669
|
-
var _a3;
|
|
1670
1643
|
switch (this.state) {
|
|
1671
1644
|
case EntityDecoderState.NamedEntity: {
|
|
1672
1645
|
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
@@ -1679,7 +1652,7 @@ var EntityDecoder = class {
|
|
|
1679
1652
|
return this.emitNumericEntity(0, 3);
|
|
1680
1653
|
}
|
|
1681
1654
|
case EntityDecoderState.NumericStart: {
|
|
1682
|
-
|
|
1655
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1683
1656
|
return 0;
|
|
1684
1657
|
}
|
|
1685
1658
|
case EntityDecoderState.EntityStart: {
|
|
@@ -1717,36 +1690,36 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
|
1717
1690
|
return -1;
|
|
1718
1691
|
}
|
|
1719
1692
|
|
|
1720
|
-
// node_modules/.pnpm/htmlparser2@
|
|
1693
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Tokenizer.js
|
|
1721
1694
|
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
|
-
|
|
1695
|
+
(function(CharCodes3) {
|
|
1696
|
+
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
|
|
1697
|
+
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
|
|
1698
|
+
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
|
|
1699
|
+
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
|
|
1700
|
+
CharCodes3[CharCodes3["Space"] = 32] = "Space";
|
|
1701
|
+
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
|
|
1702
|
+
CharCodes3[CharCodes3["Number"] = 35] = "Number";
|
|
1703
|
+
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
|
|
1704
|
+
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
|
|
1705
|
+
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
|
|
1706
|
+
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
|
|
1707
|
+
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
|
|
1708
|
+
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
|
|
1709
|
+
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
|
|
1710
|
+
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
|
|
1711
|
+
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
|
|
1712
|
+
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
|
|
1713
|
+
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
|
|
1714
|
+
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
|
|
1715
|
+
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
|
|
1716
|
+
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
|
|
1717
|
+
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
|
|
1718
|
+
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
|
|
1719
|
+
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
|
|
1720
|
+
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
|
|
1721
|
+
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
|
|
1722
|
+
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
1750
1723
|
})(CharCodes2 || (CharCodes2 = {}));
|
|
1751
1724
|
var State;
|
|
1752
1725
|
(function(State2) {
|
|
@@ -1769,12 +1742,12 @@ var State;
|
|
|
1769
1742
|
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
1770
1743
|
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
1771
1744
|
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
1772
|
-
State2[State2["
|
|
1773
|
-
State2[State2["
|
|
1774
|
-
State2[State2["
|
|
1775
|
-
State2[State2["
|
|
1776
|
-
State2[State2["
|
|
1777
|
-
State2[State2["
|
|
1745
|
+
State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
|
|
1746
|
+
State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
|
|
1747
|
+
State2[State2["InCommentLike"] = 22] = "InCommentLike";
|
|
1748
|
+
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
1749
|
+
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
1750
|
+
State2[State2["InPlainText"] = 25] = "InPlainText";
|
|
1778
1751
|
State2[State2["InEntity"] = 26] = "InEntity";
|
|
1779
1752
|
})(State || (State = {}));
|
|
1780
1753
|
function isWhitespace(c) {
|
|
@@ -1794,12 +1767,56 @@ var QuoteType;
|
|
|
1794
1767
|
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
1795
1768
|
})(QuoteType || (QuoteType = {}));
|
|
1796
1769
|
var Sequences = {
|
|
1770
|
+
Empty: new Uint8Array(0),
|
|
1797
1771
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
1798
1772
|
// CDATA[
|
|
1799
1773
|
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
1800
1774
|
// ]]>
|
|
1801
|
-
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
1802
|
-
//
|
|
1775
|
+
CommentEnd: new Uint8Array([45, 45, 33, 62]),
|
|
1776
|
+
// `--!>`
|
|
1777
|
+
Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
|
|
1778
|
+
// `doctype`
|
|
1779
|
+
IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
|
|
1780
|
+
// `</iframe`
|
|
1781
|
+
NoembedEnd: new Uint8Array([
|
|
1782
|
+
60,
|
|
1783
|
+
47,
|
|
1784
|
+
110,
|
|
1785
|
+
111,
|
|
1786
|
+
101,
|
|
1787
|
+
109,
|
|
1788
|
+
98,
|
|
1789
|
+
101,
|
|
1790
|
+
100
|
|
1791
|
+
]),
|
|
1792
|
+
// `</noembed`
|
|
1793
|
+
NoframesEnd: new Uint8Array([
|
|
1794
|
+
60,
|
|
1795
|
+
47,
|
|
1796
|
+
110,
|
|
1797
|
+
111,
|
|
1798
|
+
102,
|
|
1799
|
+
114,
|
|
1800
|
+
97,
|
|
1801
|
+
109,
|
|
1802
|
+
101,
|
|
1803
|
+
115
|
|
1804
|
+
]),
|
|
1805
|
+
// `</noframes`
|
|
1806
|
+
Plaintext: new Uint8Array([
|
|
1807
|
+
60,
|
|
1808
|
+
47,
|
|
1809
|
+
112,
|
|
1810
|
+
108,
|
|
1811
|
+
97,
|
|
1812
|
+
105,
|
|
1813
|
+
110,
|
|
1814
|
+
116,
|
|
1815
|
+
101,
|
|
1816
|
+
120,
|
|
1817
|
+
116
|
|
1818
|
+
]),
|
|
1819
|
+
// `</plaintext`
|
|
1803
1820
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
1804
1821
|
// `</script`
|
|
1805
1822
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
@@ -1822,22 +1839,43 @@ var Sequences = {
|
|
|
1822
1839
|
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
1823
1840
|
// `</xmp`
|
|
1824
1841
|
};
|
|
1842
|
+
var specialStartSequences = /* @__PURE__ */ new Map([
|
|
1843
|
+
[Sequences.IframeEnd[2], Sequences.IframeEnd],
|
|
1844
|
+
[Sequences.NoembedEnd[2], Sequences.NoembedEnd],
|
|
1845
|
+
[Sequences.Plaintext[2], Sequences.Plaintext],
|
|
1846
|
+
[Sequences.ScriptEnd[2], Sequences.ScriptEnd],
|
|
1847
|
+
[Sequences.TitleEnd[2], Sequences.TitleEnd],
|
|
1848
|
+
[Sequences.XmpEnd[2], Sequences.XmpEnd]
|
|
1849
|
+
]);
|
|
1825
1850
|
var Tokenizer = class {
|
|
1826
|
-
|
|
1851
|
+
cbs;
|
|
1852
|
+
/** The current state the tokenizer is in. */
|
|
1853
|
+
state = State.Text;
|
|
1854
|
+
/** The read buffer. */
|
|
1855
|
+
buffer = "";
|
|
1856
|
+
/** The beginning of the section that is currently being read. */
|
|
1857
|
+
sectionStart = 0;
|
|
1858
|
+
/** The index within the buffer that we are currently looking at. */
|
|
1859
|
+
index = 0;
|
|
1860
|
+
/** The start of the last entity. */
|
|
1861
|
+
entityStart = 0;
|
|
1862
|
+
/** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
|
|
1863
|
+
baseState = State.Text;
|
|
1864
|
+
/** For special parsing behavior inside of script and style tags. */
|
|
1865
|
+
isSpecial = false;
|
|
1866
|
+
/** Indicates whether the tokenizer has been paused. */
|
|
1867
|
+
running = true;
|
|
1868
|
+
/** The offset of the current buffer. */
|
|
1869
|
+
offset = 0;
|
|
1870
|
+
xmlMode;
|
|
1871
|
+
decodeEntities;
|
|
1872
|
+
recognizeSelfClosing;
|
|
1873
|
+
entityDecoder;
|
|
1874
|
+
constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
|
|
1827
1875
|
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
1876
|
this.xmlMode = xmlMode;
|
|
1840
1877
|
this.decodeEntities = decodeEntities;
|
|
1878
|
+
this.recognizeSelfClosing = recognizeSelfClosing;
|
|
1841
1879
|
this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
|
|
1842
1880
|
}
|
|
1843
1881
|
reset() {
|
|
@@ -1846,7 +1884,9 @@ var Tokenizer = class {
|
|
|
1846
1884
|
this.sectionStart = 0;
|
|
1847
1885
|
this.index = 0;
|
|
1848
1886
|
this.baseState = State.Text;
|
|
1849
|
-
this.
|
|
1887
|
+
this.isSpecial = false;
|
|
1888
|
+
this.currentSequence = Sequences.Empty;
|
|
1889
|
+
this.sequenceIndex = 0;
|
|
1850
1890
|
this.running = true;
|
|
1851
1891
|
this.offset = 0;
|
|
1852
1892
|
}
|
|
@@ -1879,56 +1919,63 @@ var Tokenizer = class {
|
|
|
1879
1919
|
this.startEntity();
|
|
1880
1920
|
}
|
|
1881
1921
|
}
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
this.
|
|
1893
|
-
} else if (!isEnd) {
|
|
1894
|
-
this.sequenceIndex++;
|
|
1895
|
-
return;
|
|
1922
|
+
currentSequence = Sequences.Empty;
|
|
1923
|
+
sequenceIndex = 0;
|
|
1924
|
+
enterTagBody() {
|
|
1925
|
+
if (this.currentSequence === Sequences.Plaintext) {
|
|
1926
|
+
this.currentSequence = Sequences.Empty;
|
|
1927
|
+
this.state = State.InPlainText;
|
|
1928
|
+
} else if (this.isSpecial) {
|
|
1929
|
+
this.state = State.InSpecialTag;
|
|
1930
|
+
this.sequenceIndex = 0;
|
|
1931
|
+
} else {
|
|
1932
|
+
this.state = State.Text;
|
|
1896
1933
|
}
|
|
1897
|
-
this.sequenceIndex = 0;
|
|
1898
|
-
this.state = State.InTagName;
|
|
1899
|
-
this.stateInTagName(c);
|
|
1900
1934
|
}
|
|
1901
|
-
/**
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1935
|
+
/**
|
|
1936
|
+
* Match the opening tag name against an HTML text-only tag sequence.
|
|
1937
|
+
*
|
|
1938
|
+
* Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,
|
|
1939
|
+
* `noembed`/`noframes`), so we may switch to an alternate sequence at the
|
|
1940
|
+
* first distinguishing byte. On a successful full match we fall back to
|
|
1941
|
+
* the normal tag-name state; a later `>` will enter raw-text, RCDATA, or
|
|
1942
|
+
* plaintext mode based on `currentSequence` / `isSpecial`.
|
|
1943
|
+
* @param c Current character code point.
|
|
1944
|
+
*/
|
|
1945
|
+
stateSpecialStartSequence(c) {
|
|
1946
|
+
const lower = c | 32;
|
|
1947
|
+
if (this.sequenceIndex < this.currentSequence.length) {
|
|
1948
|
+
if (lower === this.currentSequence[this.sequenceIndex]) {
|
|
1949
|
+
this.sequenceIndex++;
|
|
1915
1950
|
return;
|
|
1916
1951
|
}
|
|
1917
|
-
this.sequenceIndex
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
if (this.currentSequence === Sequences.TitleEnd) {
|
|
1923
|
-
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
1924
|
-
this.startEntity();
|
|
1952
|
+
if (this.sequenceIndex === 3) {
|
|
1953
|
+
if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
|
|
1954
|
+
this.currentSequence = Sequences.StyleEnd;
|
|
1955
|
+
this.sequenceIndex = 4;
|
|
1956
|
+
return;
|
|
1925
1957
|
}
|
|
1926
|
-
|
|
1927
|
-
|
|
1958
|
+
if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
|
|
1959
|
+
this.currentSequence = Sequences.TextareaEnd;
|
|
1960
|
+
this.sequenceIndex = 4;
|
|
1961
|
+
return;
|
|
1962
|
+
}
|
|
1963
|
+
} else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
|
|
1964
|
+
this.currentSequence = Sequences.NoframesEnd;
|
|
1965
|
+
this.sequenceIndex = 5;
|
|
1966
|
+
return;
|
|
1928
1967
|
}
|
|
1929
|
-
} else {
|
|
1930
|
-
this.sequenceIndex =
|
|
1968
|
+
} else if (isEndOfTagSection(c)) {
|
|
1969
|
+
this.sequenceIndex = 0;
|
|
1970
|
+
this.state = State.InTagName;
|
|
1971
|
+
this.stateInTagName(c);
|
|
1972
|
+
return;
|
|
1931
1973
|
}
|
|
1974
|
+
this.isSpecial = false;
|
|
1975
|
+
this.currentSequence = Sequences.Empty;
|
|
1976
|
+
this.sequenceIndex = 0;
|
|
1977
|
+
this.state = State.InTagName;
|
|
1978
|
+
this.stateInTagName(c);
|
|
1932
1979
|
}
|
|
1933
1980
|
stateCDATASequence(c) {
|
|
1934
1981
|
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
@@ -1940,14 +1987,19 @@ var Tokenizer = class {
|
|
|
1940
1987
|
}
|
|
1941
1988
|
} else {
|
|
1942
1989
|
this.sequenceIndex = 0;
|
|
1943
|
-
this.
|
|
1944
|
-
|
|
1990
|
+
if (this.xmlMode) {
|
|
1991
|
+
this.state = State.InDeclaration;
|
|
1992
|
+
this.stateInDeclaration(c);
|
|
1993
|
+
} else {
|
|
1994
|
+
this.state = State.InSpecialComment;
|
|
1995
|
+
this.stateInSpecialComment(c);
|
|
1996
|
+
}
|
|
1945
1997
|
}
|
|
1946
1998
|
}
|
|
1947
1999
|
/**
|
|
1948
2000
|
* When we wait for one specific character, we can speed things up
|
|
1949
2001
|
* by skipping through the buffer until we find it.
|
|
1950
|
-
*
|
|
2002
|
+
* @param c Current character code point.
|
|
1951
2003
|
* @returns Whether the character was found.
|
|
1952
2004
|
*/
|
|
1953
2005
|
fastForwardTo(c) {
|
|
@@ -1959,6 +2011,16 @@ var Tokenizer = class {
|
|
|
1959
2011
|
this.index = this.buffer.length + this.offset - 1;
|
|
1960
2012
|
return false;
|
|
1961
2013
|
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Emit a comment token and return to the text state.
|
|
2016
|
+
* @param offset Number of characters in the end sequence that have already been matched.
|
|
2017
|
+
*/
|
|
2018
|
+
emitComment(offset) {
|
|
2019
|
+
this.cbs.oncomment(this.sectionStart, this.index, offset);
|
|
2020
|
+
this.sequenceIndex = 0;
|
|
2021
|
+
this.sectionStart = this.index + 1;
|
|
2022
|
+
this.state = State.Text;
|
|
2023
|
+
}
|
|
1962
2024
|
/**
|
|
1963
2025
|
* Comments and CDATA end with `-->` and `]]>`.
|
|
1964
2026
|
*
|
|
@@ -1966,14 +2028,26 @@ var Tokenizer = class {
|
|
|
1966
2028
|
* - Their end sequences have a distinct character they start with.
|
|
1967
2029
|
* - That character is then repeated, so we have to check multiple repeats.
|
|
1968
2030
|
* - All characters but the start character of the sequence can be skipped.
|
|
2031
|
+
* @param c Current character code point.
|
|
1969
2032
|
*/
|
|
1970
2033
|
stateInCommentLike(c) {
|
|
1971
|
-
if (
|
|
2034
|
+
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && /*
|
|
2035
|
+
* We're still at the very start of the comment: the only
|
|
2036
|
+
* characters consumed since `<!--` are the dashes that
|
|
2037
|
+
* advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).
|
|
2038
|
+
*/
|
|
2039
|
+
this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
|
|
2040
|
+
this.emitComment(this.sequenceIndex);
|
|
2041
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
|
|
2042
|
+
this.emitComment(2);
|
|
2043
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
|
|
2044
|
+
this.sequenceIndex = Number(c === CharCodes2.Dash);
|
|
2045
|
+
} else if (c === this.currentSequence[this.sequenceIndex]) {
|
|
1972
2046
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
1973
2047
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
1974
2048
|
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
1975
2049
|
} else {
|
|
1976
|
-
this.cbs.oncomment(this.sectionStart, this.index,
|
|
2050
|
+
this.cbs.oncomment(this.sectionStart, this.index, 3);
|
|
1977
2051
|
}
|
|
1978
2052
|
this.sequenceIndex = 0;
|
|
1979
2053
|
this.sectionStart = this.index + 1;
|
|
@@ -1992,34 +2066,72 @@ var Tokenizer = class {
|
|
|
1992
2066
|
*
|
|
1993
2067
|
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
|
|
1994
2068
|
* We allow anything that wouldn't end the tag.
|
|
2069
|
+
* @param c Current character code point.
|
|
1995
2070
|
*/
|
|
1996
2071
|
isTagStartChar(c) {
|
|
1997
2072
|
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
1998
2073
|
}
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2074
|
+
/**
|
|
2075
|
+
* Scan raw-text / RCDATA content for the matching end tag.
|
|
2076
|
+
*
|
|
2077
|
+
* For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.
|
|
2078
|
+
* For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.
|
|
2079
|
+
* @param c Current character code point.
|
|
2080
|
+
*/
|
|
2081
|
+
stateInSpecialTag(c) {
|
|
2082
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2083
|
+
if (isEndOfTagSection(c)) {
|
|
2084
|
+
const endOfText = this.index - this.currentSequence.length;
|
|
2085
|
+
if (this.sectionStart < endOfText) {
|
|
2086
|
+
const actualIndex = this.index;
|
|
2087
|
+
this.index = endOfText;
|
|
2088
|
+
this.cbs.ontext(this.sectionStart, endOfText);
|
|
2089
|
+
this.index = actualIndex;
|
|
2090
|
+
}
|
|
2091
|
+
this.isSpecial = false;
|
|
2092
|
+
this.sectionStart = endOfText + 2;
|
|
2093
|
+
this.stateInClosingTagName(c);
|
|
2094
|
+
return;
|
|
2095
|
+
}
|
|
2096
|
+
this.sequenceIndex = 0;
|
|
2097
|
+
}
|
|
2098
|
+
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2099
|
+
this.sequenceIndex += 1;
|
|
2100
|
+
} else if (this.sequenceIndex === 0) {
|
|
2101
|
+
if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
|
|
2102
|
+
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2103
|
+
this.startEntity();
|
|
2104
|
+
}
|
|
2105
|
+
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
2106
|
+
this.sequenceIndex = 1;
|
|
2107
|
+
}
|
|
2108
|
+
} else {
|
|
2109
|
+
this.sequenceIndex = Number(c === CharCodes2.Lt);
|
|
2110
|
+
}
|
|
2004
2111
|
}
|
|
2005
2112
|
stateBeforeTagName(c) {
|
|
2006
2113
|
if (c === CharCodes2.ExclamationMark) {
|
|
2007
2114
|
this.state = State.BeforeDeclaration;
|
|
2008
2115
|
this.sectionStart = this.index + 1;
|
|
2009
2116
|
} else if (c === CharCodes2.Questionmark) {
|
|
2010
|
-
this.
|
|
2011
|
-
|
|
2117
|
+
if (this.xmlMode) {
|
|
2118
|
+
this.state = State.InProcessingInstruction;
|
|
2119
|
+
this.sequenceIndex = 0;
|
|
2120
|
+
this.sectionStart = this.index + 1;
|
|
2121
|
+
} else {
|
|
2122
|
+
this.state = State.InSpecialComment;
|
|
2123
|
+
this.sectionStart = this.index;
|
|
2124
|
+
}
|
|
2012
2125
|
} else if (this.isTagStartChar(c)) {
|
|
2013
|
-
const lower = c | 32;
|
|
2014
2126
|
this.sectionStart = this.index;
|
|
2015
|
-
|
|
2127
|
+
const special = this.xmlMode || this.cbs.isInForeignContext?.() ? void 0 : specialStartSequences.get(c | 32);
|
|
2128
|
+
if (special === void 0) {
|
|
2016
2129
|
this.state = State.InTagName;
|
|
2017
|
-
} else if (lower === Sequences.ScriptEnd[2]) {
|
|
2018
|
-
this.state = State.BeforeSpecialS;
|
|
2019
|
-
} else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
|
|
2020
|
-
this.state = State.BeforeSpecialT;
|
|
2021
2130
|
} else {
|
|
2022
|
-
this.
|
|
2131
|
+
this.isSpecial = true;
|
|
2132
|
+
this.currentSequence = special;
|
|
2133
|
+
this.sequenceIndex = 3;
|
|
2134
|
+
this.state = State.SpecialStartSequence;
|
|
2023
2135
|
}
|
|
2024
2136
|
} else if (c === CharCodes2.Slash) {
|
|
2025
2137
|
this.state = State.BeforeClosingTagName;
|
|
@@ -2038,15 +2150,23 @@ var Tokenizer = class {
|
|
|
2038
2150
|
}
|
|
2039
2151
|
stateBeforeClosingTagName(c) {
|
|
2040
2152
|
if (isWhitespace(c)) {
|
|
2153
|
+
if (this.xmlMode) {
|
|
2154
|
+
} else {
|
|
2155
|
+
this.state = State.InSpecialComment;
|
|
2156
|
+
this.sectionStart = this.index;
|
|
2157
|
+
}
|
|
2041
2158
|
} else if (c === CharCodes2.Gt) {
|
|
2042
2159
|
this.state = State.Text;
|
|
2160
|
+
if (!this.xmlMode) {
|
|
2161
|
+
this.sectionStart = this.index + 1;
|
|
2162
|
+
}
|
|
2043
2163
|
} else {
|
|
2044
2164
|
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
2045
2165
|
this.sectionStart = this.index;
|
|
2046
2166
|
}
|
|
2047
2167
|
}
|
|
2048
2168
|
stateInClosingTagName(c) {
|
|
2049
|
-
if (
|
|
2169
|
+
if (isEndOfTagSection(c)) {
|
|
2050
2170
|
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
2051
2171
|
this.sectionStart = -1;
|
|
2052
2172
|
this.state = State.AfterClosingTagName;
|
|
@@ -2062,12 +2182,7 @@ var Tokenizer = class {
|
|
|
2062
2182
|
stateBeforeAttributeName(c) {
|
|
2063
2183
|
if (c === CharCodes2.Gt) {
|
|
2064
2184
|
this.cbs.onopentagend(this.index);
|
|
2065
|
-
|
|
2066
|
-
this.state = State.InSpecialTag;
|
|
2067
|
-
this.sequenceIndex = 0;
|
|
2068
|
-
} else {
|
|
2069
|
-
this.state = State.Text;
|
|
2070
|
-
}
|
|
2185
|
+
this.enterTagBody();
|
|
2071
2186
|
this.sectionStart = this.index + 1;
|
|
2072
2187
|
} else if (c === CharCodes2.Slash) {
|
|
2073
2188
|
this.state = State.InSelfClosingTag;
|
|
@@ -2076,12 +2191,26 @@ var Tokenizer = class {
|
|
|
2076
2191
|
this.sectionStart = this.index;
|
|
2077
2192
|
}
|
|
2078
2193
|
}
|
|
2194
|
+
/**
|
|
2195
|
+
* Handle `/` before `>` in an opening tag.
|
|
2196
|
+
*
|
|
2197
|
+
* In HTML mode, text-only tags ignore the self-closing flag and still enter
|
|
2198
|
+
* their raw-text/RCDATA/plaintext state unless self-closing tags are being
|
|
2199
|
+
* recognized. In XML mode, or for ordinary tags, the tokenizer returns to
|
|
2200
|
+
* regular text parsing after emitting the self-closing callback.
|
|
2201
|
+
* @param c Current character code point.
|
|
2202
|
+
*/
|
|
2079
2203
|
stateInSelfClosingTag(c) {
|
|
2080
2204
|
if (c === CharCodes2.Gt) {
|
|
2081
2205
|
this.cbs.onselfclosingtag(this.index);
|
|
2082
|
-
this.state = State.Text;
|
|
2083
2206
|
this.sectionStart = this.index + 1;
|
|
2207
|
+
if (!this.recognizeSelfClosing) {
|
|
2208
|
+
this.enterTagBody();
|
|
2209
|
+
return;
|
|
2210
|
+
}
|
|
2211
|
+
this.state = State.Text;
|
|
2084
2212
|
this.isSpecial = false;
|
|
2213
|
+
this.currentSequence = Sequences.Empty;
|
|
2085
2214
|
} else if (!isWhitespace(c)) {
|
|
2086
2215
|
this.state = State.BeforeAttributeName;
|
|
2087
2216
|
this.stateBeforeAttributeName(c);
|
|
@@ -2149,12 +2278,54 @@ var Tokenizer = class {
|
|
|
2149
2278
|
this.startEntity();
|
|
2150
2279
|
}
|
|
2151
2280
|
}
|
|
2281
|
+
/**
|
|
2282
|
+
* Distinguish between CDATA, declarations, HTML comments, and HTML bogus
|
|
2283
|
+
* comments after `<!`.
|
|
2284
|
+
*
|
|
2285
|
+
* In HTML mode, only real comments and doctypes stay on declaration paths;
|
|
2286
|
+
* everything else becomes a bogus comment terminated by the next `>`.
|
|
2287
|
+
* @param c Current character code point.
|
|
2288
|
+
*/
|
|
2152
2289
|
stateBeforeDeclaration(c) {
|
|
2153
2290
|
if (c === CharCodes2.OpeningSquareBracket) {
|
|
2154
2291
|
this.state = State.CDATASequence;
|
|
2155
2292
|
this.sequenceIndex = 0;
|
|
2156
|
-
} else {
|
|
2293
|
+
} else if (this.xmlMode) {
|
|
2157
2294
|
this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2295
|
+
} else if ((c | 32) === Sequences.Doctype[0]) {
|
|
2296
|
+
this.state = State.DeclarationSequence;
|
|
2297
|
+
this.currentSequence = Sequences.Doctype;
|
|
2298
|
+
this.sequenceIndex = 1;
|
|
2299
|
+
} else if (c === CharCodes2.Gt) {
|
|
2300
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2301
|
+
this.state = State.Text;
|
|
2302
|
+
this.sectionStart = this.index + 1;
|
|
2303
|
+
} else if (c === CharCodes2.Dash) {
|
|
2304
|
+
this.state = State.BeforeComment;
|
|
2305
|
+
} else {
|
|
2306
|
+
this.state = State.InSpecialComment;
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
/**
|
|
2310
|
+
* Continue matching `doctype` after `<!d`.
|
|
2311
|
+
*
|
|
2312
|
+
* A full `doctype` match stays on the declaration path; any other name falls
|
|
2313
|
+
* back to an HTML bogus comment, which matches browser behavior for
|
|
2314
|
+
* non-doctype `<!...>` constructs.
|
|
2315
|
+
* @param c Current character code point.
|
|
2316
|
+
*/
|
|
2317
|
+
stateDeclarationSequence(c) {
|
|
2318
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2319
|
+
this.state = State.InDeclaration;
|
|
2320
|
+
this.stateInDeclaration(c);
|
|
2321
|
+
} else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2322
|
+
this.sequenceIndex += 1;
|
|
2323
|
+
} else if (c === CharCodes2.Gt) {
|
|
2324
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2325
|
+
this.state = State.Text;
|
|
2326
|
+
this.sectionStart = this.index + 1;
|
|
2327
|
+
} else {
|
|
2328
|
+
this.state = State.InSpecialComment;
|
|
2158
2329
|
}
|
|
2159
2330
|
}
|
|
2160
2331
|
stateInDeclaration(c) {
|
|
@@ -2164,21 +2335,39 @@ var Tokenizer = class {
|
|
|
2164
2335
|
this.sectionStart = this.index + 1;
|
|
2165
2336
|
}
|
|
2166
2337
|
}
|
|
2338
|
+
/**
|
|
2339
|
+
* XML processing instructions (`<?...?>`).
|
|
2340
|
+
*
|
|
2341
|
+
* In HTML mode `<?` is routed to `InSpecialComment` instead, so this
|
|
2342
|
+
* state is only reachable in XML mode.
|
|
2343
|
+
* @param c Current character code point.
|
|
2344
|
+
*/
|
|
2167
2345
|
stateInProcessingInstruction(c) {
|
|
2168
|
-
if (c === CharCodes2.
|
|
2169
|
-
this.
|
|
2346
|
+
if (c === CharCodes2.Questionmark) {
|
|
2347
|
+
this.sequenceIndex = 1;
|
|
2348
|
+
} else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
|
|
2349
|
+
this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
|
|
2350
|
+
this.sequenceIndex = 0;
|
|
2170
2351
|
this.state = State.Text;
|
|
2171
2352
|
this.sectionStart = this.index + 1;
|
|
2353
|
+
} else {
|
|
2354
|
+
this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
|
|
2172
2355
|
}
|
|
2173
2356
|
}
|
|
2174
2357
|
stateBeforeComment(c) {
|
|
2175
2358
|
if (c === CharCodes2.Dash) {
|
|
2176
2359
|
this.state = State.InCommentLike;
|
|
2177
2360
|
this.currentSequence = Sequences.CommentEnd;
|
|
2178
|
-
this.sequenceIndex =
|
|
2361
|
+
this.sequenceIndex = 0;
|
|
2179
2362
|
this.sectionStart = this.index + 1;
|
|
2180
|
-
} else {
|
|
2363
|
+
} else if (this.xmlMode) {
|
|
2181
2364
|
this.state = State.InDeclaration;
|
|
2365
|
+
} else if (c === CharCodes2.Gt) {
|
|
2366
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2367
|
+
this.state = State.Text;
|
|
2368
|
+
this.sectionStart = this.index + 1;
|
|
2369
|
+
} else {
|
|
2370
|
+
this.state = State.InSpecialComment;
|
|
2182
2371
|
}
|
|
2183
2372
|
}
|
|
2184
2373
|
stateInSpecialComment(c) {
|
|
@@ -2188,38 +2377,6 @@ var Tokenizer = class {
|
|
|
2188
2377
|
this.sectionStart = this.index + 1;
|
|
2189
2378
|
}
|
|
2190
2379
|
}
|
|
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
2380
|
startEntity() {
|
|
2224
2381
|
this.baseState = this.state;
|
|
2225
2382
|
this.state = State.InEntity;
|
|
@@ -2248,7 +2405,7 @@ var Tokenizer = class {
|
|
|
2248
2405
|
*/
|
|
2249
2406
|
cleanup() {
|
|
2250
2407
|
if (this.running && this.sectionStart !== this.index) {
|
|
2251
|
-
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2408
|
+
if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2252
2409
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
2253
2410
|
this.sectionStart = this.index;
|
|
2254
2411
|
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
@@ -2273,6 +2430,10 @@ var Tokenizer = class {
|
|
|
2273
2430
|
this.stateText(c);
|
|
2274
2431
|
break;
|
|
2275
2432
|
}
|
|
2433
|
+
case State.InPlainText: {
|
|
2434
|
+
this.index = this.buffer.length + this.offset - 1;
|
|
2435
|
+
break;
|
|
2436
|
+
}
|
|
2276
2437
|
case State.SpecialStartSequence: {
|
|
2277
2438
|
this.stateSpecialStartSequence(c);
|
|
2278
2439
|
break;
|
|
@@ -2285,6 +2446,10 @@ var Tokenizer = class {
|
|
|
2285
2446
|
this.stateCDATASequence(c);
|
|
2286
2447
|
break;
|
|
2287
2448
|
}
|
|
2449
|
+
case State.DeclarationSequence: {
|
|
2450
|
+
this.stateDeclarationSequence(c);
|
|
2451
|
+
break;
|
|
2452
|
+
}
|
|
2288
2453
|
case State.InAttributeValueDq: {
|
|
2289
2454
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
2290
2455
|
break;
|
|
@@ -2337,14 +2502,6 @@ var Tokenizer = class {
|
|
|
2337
2502
|
this.stateAfterClosingTagName(c);
|
|
2338
2503
|
break;
|
|
2339
2504
|
}
|
|
2340
|
-
case State.BeforeSpecialS: {
|
|
2341
|
-
this.stateBeforeSpecialS(c);
|
|
2342
|
-
break;
|
|
2343
|
-
}
|
|
2344
|
-
case State.BeforeSpecialT: {
|
|
2345
|
-
this.stateBeforeSpecialT(c);
|
|
2346
|
-
break;
|
|
2347
|
-
}
|
|
2348
2505
|
case State.InAttributeValueNq: {
|
|
2349
2506
|
this.stateInAttributeValueNoQuotes(c);
|
|
2350
2507
|
break;
|
|
@@ -2386,43 +2543,110 @@ var Tokenizer = class {
|
|
|
2386
2543
|
this.handleTrailingData();
|
|
2387
2544
|
this.cbs.onend();
|
|
2388
2545
|
}
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
if (this.sectionStart >= endIndex) {
|
|
2393
|
-
return;
|
|
2546
|
+
handleTrailingCommentLikeData(endIndex) {
|
|
2547
|
+
if (this.state !== State.InCommentLike) {
|
|
2548
|
+
return false;
|
|
2394
2549
|
}
|
|
2395
|
-
if (this.
|
|
2396
|
-
if (this.
|
|
2397
|
-
|
|
2550
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2551
|
+
if (this.xmlMode) {
|
|
2552
|
+
if (this.sectionStart < endIndex) {
|
|
2553
|
+
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
2554
|
+
}
|
|
2398
2555
|
} else {
|
|
2399
|
-
this.
|
|
2556
|
+
const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
|
|
2557
|
+
this.cbs.oncomment(cdataStart, endIndex, 0);
|
|
2400
2558
|
}
|
|
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
2559
|
} else {
|
|
2403
|
-
this.
|
|
2560
|
+
const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
|
|
2561
|
+
this.cbs.oncomment(this.sectionStart, endIndex, offset);
|
|
2404
2562
|
}
|
|
2563
|
+
return true;
|
|
2405
2564
|
}
|
|
2406
|
-
|
|
2407
|
-
if (this.
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2565
|
+
handleTrailingMarkupDeclaration(endIndex) {
|
|
2566
|
+
if (this.xmlMode) {
|
|
2567
|
+
switch (this.state) {
|
|
2568
|
+
case State.InSpecialComment:
|
|
2569
|
+
case State.BeforeComment:
|
|
2570
|
+
case State.CDATASequence:
|
|
2571
|
+
case State.DeclarationSequence:
|
|
2572
|
+
case State.InDeclaration: {
|
|
2573
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2574
|
+
return true;
|
|
2575
|
+
}
|
|
2576
|
+
default: {
|
|
2577
|
+
return false;
|
|
2578
|
+
}
|
|
2417
2579
|
}
|
|
2418
|
-
this.sectionStart = this.entityStart + consumed;
|
|
2419
|
-
this.index = this.sectionStart - 1;
|
|
2420
|
-
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2421
2580
|
}
|
|
2422
|
-
|
|
2581
|
+
switch (this.state) {
|
|
2582
|
+
case State.BeforeDeclaration:
|
|
2583
|
+
case State.InSpecialComment:
|
|
2584
|
+
case State.BeforeComment:
|
|
2585
|
+
case State.CDATASequence: {
|
|
2586
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2587
|
+
return true;
|
|
2588
|
+
}
|
|
2589
|
+
case State.DeclarationSequence: {
|
|
2590
|
+
if (this.sequenceIndex !== Sequences.Doctype.length) {
|
|
2591
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2592
|
+
}
|
|
2593
|
+
return true;
|
|
2594
|
+
}
|
|
2595
|
+
case State.InDeclaration: {
|
|
2596
|
+
return true;
|
|
2597
|
+
}
|
|
2598
|
+
default: {
|
|
2599
|
+
return false;
|
|
2600
|
+
}
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
/** Handle any trailing data. */
|
|
2604
|
+
handleTrailingData() {
|
|
2605
|
+
const endIndex = this.buffer.length + this.offset;
|
|
2606
|
+
if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
|
|
2607
|
+
return;
|
|
2608
|
+
}
|
|
2609
|
+
if (this.sectionStart >= endIndex) {
|
|
2610
|
+
return;
|
|
2611
|
+
}
|
|
2612
|
+
switch (this.state) {
|
|
2613
|
+
case State.InTagName:
|
|
2614
|
+
case State.BeforeAttributeName:
|
|
2615
|
+
case State.BeforeAttributeValue:
|
|
2616
|
+
case State.AfterAttributeName:
|
|
2617
|
+
case State.InAttributeName:
|
|
2618
|
+
case State.InAttributeValueSq:
|
|
2619
|
+
case State.InAttributeValueDq:
|
|
2620
|
+
case State.InAttributeValueNq:
|
|
2621
|
+
case State.InClosingTagName: {
|
|
2622
|
+
break;
|
|
2623
|
+
}
|
|
2624
|
+
default: {
|
|
2625
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
}
|
|
2629
|
+
emitCodePoint(cp, consumed) {
|
|
2630
|
+
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
2631
|
+
if (this.sectionStart < this.entityStart) {
|
|
2632
|
+
this.cbs.onattribdata(this.sectionStart, this.entityStart);
|
|
2633
|
+
}
|
|
2634
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2635
|
+
this.index = this.sectionStart - 1;
|
|
2636
|
+
this.cbs.onattribentity(cp);
|
|
2637
|
+
} else {
|
|
2638
|
+
if (this.sectionStart < this.entityStart) {
|
|
2639
|
+
this.cbs.ontext(this.sectionStart, this.entityStart);
|
|
2640
|
+
}
|
|
2641
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2642
|
+
this.index = this.sectionStart - 1;
|
|
2643
|
+
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2423
2646
|
};
|
|
2424
2647
|
|
|
2425
|
-
// node_modules/.pnpm/htmlparser2@
|
|
2648
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Parser.js
|
|
2649
|
+
var { fromCodePoint } = String;
|
|
2426
2650
|
var formTags = /* @__PURE__ */ new Set([
|
|
2427
2651
|
"input",
|
|
2428
2652
|
"option",
|
|
@@ -2433,6 +2657,7 @@ var formTags = /* @__PURE__ */ new Set([
|
|
|
2433
2657
|
"textarea"
|
|
2434
2658
|
]);
|
|
2435
2659
|
var pTag = /* @__PURE__ */ new Set(["p"]);
|
|
2660
|
+
var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "p"]);
|
|
2436
2661
|
var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
|
|
2437
2662
|
var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
|
|
2438
2663
|
var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
|
|
@@ -2441,14 +2666,15 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2441
2666
|
["th", /* @__PURE__ */ new Set(["th"])],
|
|
2442
2667
|
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
|
|
2443
2668
|
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
|
|
2669
|
+
["a", /* @__PURE__ */ new Set(["a"])],
|
|
2444
2670
|
["li", /* @__PURE__ */ new Set(["li"])],
|
|
2445
2671
|
["p", pTag],
|
|
2446
|
-
["h1",
|
|
2447
|
-
["h2",
|
|
2448
|
-
["h3",
|
|
2449
|
-
["h4",
|
|
2450
|
-
["h5",
|
|
2451
|
-
["h6",
|
|
2672
|
+
["h1", headingTags],
|
|
2673
|
+
["h2", headingTags],
|
|
2674
|
+
["h3", headingTags],
|
|
2675
|
+
["h4", headingTags],
|
|
2676
|
+
["h5", headingTags],
|
|
2677
|
+
["h6", headingTags],
|
|
2452
2678
|
["select", formTags],
|
|
2453
2679
|
["input", formTags],
|
|
2454
2680
|
["output", formTags],
|
|
@@ -2485,6 +2711,7 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2485
2711
|
["tbody", tableSectionTags],
|
|
2486
2712
|
["tfoot", tableSectionTags]
|
|
2487
2713
|
]);
|
|
2714
|
+
var DOCUMENT_TYPE = "doctype";
|
|
2488
2715
|
var voidElements = /* @__PURE__ */ new Set([
|
|
2489
2716
|
"area",
|
|
2490
2717
|
"base",
|
|
@@ -2514,98 +2741,201 @@ var htmlIntegrationElements = /* @__PURE__ */ new Set([
|
|
|
2514
2741
|
"ms",
|
|
2515
2742
|
"mtext",
|
|
2516
2743
|
"annotation-xml",
|
|
2517
|
-
"
|
|
2744
|
+
"foreignObject",
|
|
2518
2745
|
"desc",
|
|
2519
2746
|
"title"
|
|
2520
2747
|
]);
|
|
2748
|
+
var svgTagNameAdjustments = /* @__PURE__ */ new Map([
|
|
2749
|
+
["altglyph", "altGlyph"],
|
|
2750
|
+
["altglyphdef", "altGlyphDef"],
|
|
2751
|
+
["altglyphitem", "altGlyphItem"],
|
|
2752
|
+
["animatecolor", "animateColor"],
|
|
2753
|
+
["animatemotion", "animateMotion"],
|
|
2754
|
+
["animatetransform", "animateTransform"],
|
|
2755
|
+
["clippath", "clipPath"],
|
|
2756
|
+
["feblend", "feBlend"],
|
|
2757
|
+
["fecolormatrix", "feColorMatrix"],
|
|
2758
|
+
["fecomponenttransfer", "feComponentTransfer"],
|
|
2759
|
+
["fecomposite", "feComposite"],
|
|
2760
|
+
["feconvolvematrix", "feConvolveMatrix"],
|
|
2761
|
+
["fediffuselighting", "feDiffuseLighting"],
|
|
2762
|
+
["fedisplacementmap", "feDisplacementMap"],
|
|
2763
|
+
["fedistantlight", "feDistantLight"],
|
|
2764
|
+
["fedropshadow", "feDropShadow"],
|
|
2765
|
+
["feflood", "feFlood"],
|
|
2766
|
+
["fefunca", "feFuncA"],
|
|
2767
|
+
["fefuncb", "feFuncB"],
|
|
2768
|
+
["fefuncg", "feFuncG"],
|
|
2769
|
+
["fefuncr", "feFuncR"],
|
|
2770
|
+
["fegaussianblur", "feGaussianBlur"],
|
|
2771
|
+
["feimage", "feImage"],
|
|
2772
|
+
["femerge", "feMerge"],
|
|
2773
|
+
["femergenode", "feMergeNode"],
|
|
2774
|
+
["femorphology", "feMorphology"],
|
|
2775
|
+
["feoffset", "feOffset"],
|
|
2776
|
+
["fepointlight", "fePointLight"],
|
|
2777
|
+
["fespecularlighting", "feSpecularLighting"],
|
|
2778
|
+
["fespotlight", "feSpotLight"],
|
|
2779
|
+
["fetile", "feTile"],
|
|
2780
|
+
["feturbulence", "feTurbulence"],
|
|
2781
|
+
["foreignobject", "foreignObject"],
|
|
2782
|
+
["glyphref", "glyphRef"],
|
|
2783
|
+
["lineargradient", "linearGradient"],
|
|
2784
|
+
["radialgradient", "radialGradient"],
|
|
2785
|
+
["textpath", "textPath"]
|
|
2786
|
+
]);
|
|
2787
|
+
var ForeignContext;
|
|
2788
|
+
(function(ForeignContext2) {
|
|
2789
|
+
ForeignContext2[ForeignContext2["None"] = 0] = "None";
|
|
2790
|
+
ForeignContext2[ForeignContext2["Svg"] = 1] = "Svg";
|
|
2791
|
+
ForeignContext2[ForeignContext2["MathML"] = 2] = "MathML";
|
|
2792
|
+
})(ForeignContext || (ForeignContext = {}));
|
|
2521
2793
|
var reNameEnd = /\s|\//;
|
|
2522
2794
|
var Parser = class {
|
|
2795
|
+
options;
|
|
2796
|
+
/** The start index of the last event. */
|
|
2797
|
+
startIndex = 0;
|
|
2798
|
+
/** The end index of the last event. */
|
|
2799
|
+
endIndex = 0;
|
|
2800
|
+
/**
|
|
2801
|
+
* Store the start index of the current open tag,
|
|
2802
|
+
* so we can update the start index for attributes.
|
|
2803
|
+
*/
|
|
2804
|
+
openTagStart = 0;
|
|
2805
|
+
tagname = "";
|
|
2806
|
+
attribname = "";
|
|
2807
|
+
attribvalue = "";
|
|
2808
|
+
attribs = null;
|
|
2809
|
+
stack = [];
|
|
2810
|
+
foreignContext;
|
|
2811
|
+
cbs;
|
|
2812
|
+
lowerCaseTagNames;
|
|
2813
|
+
lowerCaseAttributeNames;
|
|
2814
|
+
recognizeSelfClosing;
|
|
2815
|
+
/** We are parsing HTML. Inverse of the `xmlMode` option. */
|
|
2816
|
+
htmlMode;
|
|
2817
|
+
tokenizer;
|
|
2818
|
+
buffers = [];
|
|
2819
|
+
bufferOffset = 0;
|
|
2820
|
+
/** The index of the last written buffer. Used when resuming after a `pause()`. */
|
|
2821
|
+
writeIndex = 0;
|
|
2822
|
+
/** Indicates whether the parser has finished running / `.end` has been called. */
|
|
2823
|
+
ended = false;
|
|
2523
2824
|
constructor(cbs, options = {}) {
|
|
2524
|
-
var _a3, _b, _c, _d, _e, _f;
|
|
2525
2825
|
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 : {};
|
|
2826
|
+
this.cbs = cbs ?? {};
|
|
2539
2827
|
this.htmlMode = !this.options.xmlMode;
|
|
2540
|
-
this.lowerCaseTagNames =
|
|
2541
|
-
this.lowerCaseAttributeNames =
|
|
2542
|
-
this.recognizeSelfClosing =
|
|
2543
|
-
this.tokenizer = new (
|
|
2544
|
-
this.foreignContext = [
|
|
2545
|
-
|
|
2828
|
+
this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;
|
|
2829
|
+
this.lowerCaseAttributeNames = options.lowerCaseAttributeNames ?? this.htmlMode;
|
|
2830
|
+
this.recognizeSelfClosing = options.recognizeSelfClosing ?? !this.htmlMode;
|
|
2831
|
+
this.tokenizer = new (options.Tokenizer ?? Tokenizer)(this.options, this);
|
|
2832
|
+
this.foreignContext = [ForeignContext.None];
|
|
2833
|
+
this.cbs.onparserinit?.(this);
|
|
2546
2834
|
}
|
|
2547
2835
|
// Tokenizer event handlers
|
|
2548
|
-
/**
|
|
2836
|
+
/**
|
|
2837
|
+
* @param start Start index for the current parser event.
|
|
2838
|
+
* @param endIndex End index for the current parser event.
|
|
2839
|
+
* @internal
|
|
2840
|
+
*/
|
|
2549
2841
|
ontext(start, endIndex) {
|
|
2550
|
-
var _a3, _b;
|
|
2551
2842
|
const data = this.getSlice(start, endIndex);
|
|
2552
2843
|
this.endIndex = endIndex - 1;
|
|
2553
|
-
|
|
2844
|
+
this.cbs.ontext?.(data);
|
|
2554
2845
|
this.startIndex = endIndex;
|
|
2555
2846
|
}
|
|
2556
|
-
/**
|
|
2847
|
+
/**
|
|
2848
|
+
* @param cp Current Unicode code point.
|
|
2849
|
+
* @param endIndex End index for the current parser event.
|
|
2850
|
+
* @internal
|
|
2851
|
+
*/
|
|
2557
2852
|
ontextentity(cp, endIndex) {
|
|
2558
|
-
var _a3, _b;
|
|
2559
2853
|
this.endIndex = endIndex - 1;
|
|
2560
|
-
|
|
2854
|
+
this.cbs.ontext?.(fromCodePoint(cp));
|
|
2561
2855
|
this.startIndex = endIndex;
|
|
2562
2856
|
}
|
|
2857
|
+
/** @internal */
|
|
2858
|
+
isInForeignContext() {
|
|
2859
|
+
return this.foreignContext[0] !== ForeignContext.None;
|
|
2860
|
+
}
|
|
2563
2861
|
/**
|
|
2564
2862
|
* Checks if the current tag is a void element. Override this if you want
|
|
2565
2863
|
* to specify your own additional void elements.
|
|
2864
|
+
* @param name Name of the pseudo selector.
|
|
2566
2865
|
*/
|
|
2567
2866
|
isVoidElement(name) {
|
|
2568
2867
|
return this.htmlMode && voidElements.has(name);
|
|
2569
2868
|
}
|
|
2570
|
-
/**
|
|
2869
|
+
/**
|
|
2870
|
+
* Read a tag name from the buffer.
|
|
2871
|
+
*
|
|
2872
|
+
* When `lowerCaseTagNames` is enabled (the default in HTML mode), the name
|
|
2873
|
+
* is lowercased and may be adjusted for SVG casing or the `image` → `img`
|
|
2874
|
+
* alias.
|
|
2875
|
+
* @param start Start index of the tag name in the buffer.
|
|
2876
|
+
* @param endIndex End index of the tag name in the buffer.
|
|
2877
|
+
*/
|
|
2878
|
+
readTagName(start, endIndex) {
|
|
2879
|
+
const name = this.lowerCaseTagNames ? this.getSlice(start, endIndex).toLowerCase() : this.getSlice(start, endIndex);
|
|
2880
|
+
if (!(this.lowerCaseTagNames && this.htmlMode)) {
|
|
2881
|
+
return name;
|
|
2882
|
+
}
|
|
2883
|
+
if (this.foreignContext[0] === ForeignContext.Svg) {
|
|
2884
|
+
return svgTagNameAdjustments.get(name) ?? name;
|
|
2885
|
+
}
|
|
2886
|
+
if (this.foreignContext.length > 1) {
|
|
2887
|
+
const adjusted = svgTagNameAdjustments.get(name);
|
|
2888
|
+
if (adjusted !== void 0 && this.stack.includes(adjusted)) {
|
|
2889
|
+
return adjusted;
|
|
2890
|
+
}
|
|
2891
|
+
}
|
|
2892
|
+
if (!this.isInForeignContext()) {
|
|
2893
|
+
return name === "image" ? "img" : name;
|
|
2894
|
+
}
|
|
2895
|
+
return name;
|
|
2896
|
+
}
|
|
2897
|
+
/**
|
|
2898
|
+
* @param start Start index for the current parser event.
|
|
2899
|
+
* @param endIndex End index for the current parser event.
|
|
2900
|
+
* @internal
|
|
2901
|
+
*/
|
|
2571
2902
|
onopentagname(start, endIndex) {
|
|
2572
2903
|
this.endIndex = endIndex;
|
|
2573
|
-
|
|
2574
|
-
if (this.lowerCaseTagNames) {
|
|
2575
|
-
name = name.toLowerCase();
|
|
2576
|
-
}
|
|
2577
|
-
this.emitOpenTag(name);
|
|
2904
|
+
this.emitOpenTag(this.readTagName(start, endIndex));
|
|
2578
2905
|
}
|
|
2579
2906
|
emitOpenTag(name) {
|
|
2580
|
-
var _a3, _b, _c, _d;
|
|
2581
2907
|
this.openTagStart = this.startIndex;
|
|
2582
2908
|
this.tagname = name;
|
|
2909
|
+
if (this.htmlMode && name === "form" && this.stack.includes("form")) {
|
|
2910
|
+
this.tagname = "";
|
|
2911
|
+
return;
|
|
2912
|
+
}
|
|
2583
2913
|
const impliesClose = this.htmlMode && openImpliesClose.get(name);
|
|
2584
2914
|
if (impliesClose) {
|
|
2585
2915
|
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);
|
|
2916
|
+
this.popElement(true);
|
|
2588
2917
|
}
|
|
2589
2918
|
}
|
|
2590
2919
|
if (!this.isVoidElement(name)) {
|
|
2591
2920
|
this.stack.unshift(name);
|
|
2592
2921
|
if (this.htmlMode) {
|
|
2593
|
-
if (
|
|
2594
|
-
this.foreignContext.unshift(
|
|
2922
|
+
if (name === "svg") {
|
|
2923
|
+
this.foreignContext.unshift(ForeignContext.Svg);
|
|
2924
|
+
} else if (name === "math") {
|
|
2925
|
+
this.foreignContext.unshift(ForeignContext.MathML);
|
|
2595
2926
|
} else if (htmlIntegrationElements.has(name)) {
|
|
2596
|
-
this.foreignContext.unshift(
|
|
2927
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2597
2928
|
}
|
|
2598
2929
|
}
|
|
2599
2930
|
}
|
|
2600
|
-
|
|
2931
|
+
this.cbs.onopentagname?.(name);
|
|
2601
2932
|
if (this.cbs.onopentag)
|
|
2602
2933
|
this.attribs = {};
|
|
2603
2934
|
}
|
|
2604
2935
|
endOpenTag(isImplied) {
|
|
2605
|
-
var _a3, _b;
|
|
2606
2936
|
this.startIndex = this.openTagStart;
|
|
2607
2937
|
if (this.attribs) {
|
|
2608
|
-
|
|
2938
|
+
this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);
|
|
2609
2939
|
this.attribs = null;
|
|
2610
2940
|
}
|
|
2611
2941
|
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
@@ -2613,80 +2943,107 @@ var Parser = class {
|
|
|
2613
2943
|
}
|
|
2614
2944
|
this.tagname = "";
|
|
2615
2945
|
}
|
|
2616
|
-
/**
|
|
2946
|
+
/**
|
|
2947
|
+
* @param endIndex End index for the current parser event.
|
|
2948
|
+
* @internal
|
|
2949
|
+
*/
|
|
2617
2950
|
onopentagend(endIndex) {
|
|
2618
2951
|
this.endIndex = endIndex;
|
|
2619
2952
|
this.endOpenTag(false);
|
|
2620
2953
|
this.startIndex = endIndex + 1;
|
|
2621
2954
|
}
|
|
2622
|
-
/**
|
|
2955
|
+
/**
|
|
2956
|
+
* @param start Start index for the current parser event.
|
|
2957
|
+
* @param endIndex End index for the current parser event.
|
|
2958
|
+
* @internal
|
|
2959
|
+
*/
|
|
2623
2960
|
onclosetag(start, endIndex) {
|
|
2624
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h;
|
|
2625
2961
|
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
|
-
}
|
|
2962
|
+
const name = this.readTagName(start, endIndex);
|
|
2633
2963
|
if (!this.isVoidElement(name)) {
|
|
2634
2964
|
const pos = this.stack.indexOf(name);
|
|
2635
2965
|
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);
|
|
2966
|
+
for (let index = 0; index < pos; index++) {
|
|
2967
|
+
this.popElement(true);
|
|
2639
2968
|
}
|
|
2969
|
+
this.popElement(false);
|
|
2640
2970
|
} else if (this.htmlMode && name === "p") {
|
|
2641
2971
|
this.emitOpenTag("p");
|
|
2642
2972
|
this.closeCurrentTag(true);
|
|
2643
2973
|
}
|
|
2644
2974
|
} else if (this.htmlMode && name === "br") {
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2975
|
+
this.cbs.onopentagname?.("br");
|
|
2976
|
+
this.cbs.onopentag?.("br", {}, true);
|
|
2977
|
+
this.cbs.onclosetag?.("br", false);
|
|
2648
2978
|
}
|
|
2649
2979
|
this.startIndex = endIndex + 1;
|
|
2650
2980
|
}
|
|
2651
|
-
/**
|
|
2981
|
+
/**
|
|
2982
|
+
* @param endIndex End index for the current parser event.
|
|
2983
|
+
* @internal
|
|
2984
|
+
*/
|
|
2652
2985
|
onselfclosingtag(endIndex) {
|
|
2653
2986
|
this.endIndex = endIndex;
|
|
2654
|
-
if (this.recognizeSelfClosing || this.
|
|
2987
|
+
if (this.recognizeSelfClosing || this.isInForeignContext()) {
|
|
2655
2988
|
this.closeCurrentTag(false);
|
|
2656
2989
|
this.startIndex = endIndex + 1;
|
|
2657
2990
|
} else {
|
|
2658
2991
|
this.onopentagend(endIndex);
|
|
2659
2992
|
}
|
|
2660
2993
|
}
|
|
2994
|
+
/**
|
|
2995
|
+
* Pop the top element off the stack, emit a close event, and maintain
|
|
2996
|
+
* the foreign context stack.
|
|
2997
|
+
* @param implied Whether this close is implied (not from an explicit end tag).
|
|
2998
|
+
*/
|
|
2999
|
+
popElement(implied) {
|
|
3000
|
+
const element = this.stack.shift();
|
|
3001
|
+
if (this.htmlMode && (foreignContextElements.has(element) || htmlIntegrationElements.has(element))) {
|
|
3002
|
+
this.foreignContext.shift();
|
|
3003
|
+
}
|
|
3004
|
+
this.cbs.onclosetag?.(element, implied);
|
|
3005
|
+
}
|
|
2661
3006
|
closeCurrentTag(isOpenImplied) {
|
|
2662
|
-
var _a3, _b;
|
|
2663
3007
|
const name = this.tagname;
|
|
2664
3008
|
this.endOpenTag(isOpenImplied);
|
|
2665
3009
|
if (this.stack[0] === name) {
|
|
2666
|
-
|
|
2667
|
-
this.stack.shift();
|
|
3010
|
+
this.popElement(!isOpenImplied);
|
|
2668
3011
|
}
|
|
2669
3012
|
}
|
|
2670
|
-
/**
|
|
3013
|
+
/**
|
|
3014
|
+
* @param start Start index for the current parser event.
|
|
3015
|
+
* @param endIndex End index for the current parser event.
|
|
3016
|
+
* @internal
|
|
3017
|
+
*/
|
|
2671
3018
|
onattribname(start, endIndex) {
|
|
2672
3019
|
this.startIndex = start;
|
|
2673
3020
|
const name = this.getSlice(start, endIndex);
|
|
2674
3021
|
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
2675
3022
|
}
|
|
2676
|
-
/**
|
|
3023
|
+
/**
|
|
3024
|
+
* @param start Start index for the current parser event.
|
|
3025
|
+
* @param endIndex End index for the current parser event.
|
|
3026
|
+
* @internal
|
|
3027
|
+
*/
|
|
2677
3028
|
onattribdata(start, endIndex) {
|
|
2678
3029
|
this.attribvalue += this.getSlice(start, endIndex);
|
|
2679
3030
|
}
|
|
2680
|
-
/**
|
|
3031
|
+
/**
|
|
3032
|
+
* @param cp Current Unicode code point.
|
|
3033
|
+
* @internal
|
|
3034
|
+
*/
|
|
2681
3035
|
onattribentity(cp) {
|
|
2682
3036
|
this.attribvalue += fromCodePoint(cp);
|
|
2683
3037
|
}
|
|
2684
|
-
/**
|
|
3038
|
+
/**
|
|
3039
|
+
* @param quote Quote type used for the current attribute.
|
|
3040
|
+
* @param endIndex End index for the current parser event.
|
|
3041
|
+
* @internal
|
|
3042
|
+
*/
|
|
2685
3043
|
onattribend(quote2, endIndex) {
|
|
2686
|
-
var _a3, _b;
|
|
2687
3044
|
this.endIndex = endIndex;
|
|
2688
|
-
|
|
2689
|
-
if (this.attribs && !Object.
|
|
3045
|
+
this.cbs.onattribute?.(this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
|
|
3046
|
+
if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {
|
|
2690
3047
|
this.attribs[this.attribname] = this.attribvalue;
|
|
2691
3048
|
}
|
|
2692
3049
|
this.attribvalue = "";
|
|
@@ -2699,17 +3056,25 @@ var Parser = class {
|
|
|
2699
3056
|
}
|
|
2700
3057
|
return name;
|
|
2701
3058
|
}
|
|
2702
|
-
/**
|
|
3059
|
+
/**
|
|
3060
|
+
* @param start Start index for the current parser event.
|
|
3061
|
+
* @param endIndex End index for the current parser event.
|
|
3062
|
+
* @internal
|
|
3063
|
+
*/
|
|
2703
3064
|
ondeclaration(start, endIndex) {
|
|
2704
3065
|
this.endIndex = endIndex;
|
|
2705
3066
|
const value = this.getSlice(start, endIndex);
|
|
2706
3067
|
if (this.cbs.onprocessinginstruction) {
|
|
2707
|
-
const name = this.getInstructionName(value);
|
|
3068
|
+
const name = this.htmlMode ? this.lowerCaseTagNames ? DOCUMENT_TYPE : value.slice(0, DOCUMENT_TYPE.length) : this.getInstructionName(value);
|
|
2708
3069
|
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
|
|
2709
3070
|
}
|
|
2710
3071
|
this.startIndex = endIndex + 1;
|
|
2711
3072
|
}
|
|
2712
|
-
/**
|
|
3073
|
+
/**
|
|
3074
|
+
* @param start Start index for the current parser event.
|
|
3075
|
+
* @param endIndex End index for the current parser event.
|
|
3076
|
+
* @internal
|
|
3077
|
+
*/
|
|
2713
3078
|
onprocessinginstruction(start, endIndex) {
|
|
2714
3079
|
this.endIndex = endIndex;
|
|
2715
3080
|
const value = this.getSlice(start, endIndex);
|
|
@@ -2719,57 +3084,66 @@ var Parser = class {
|
|
|
2719
3084
|
}
|
|
2720
3085
|
this.startIndex = endIndex + 1;
|
|
2721
3086
|
}
|
|
2722
|
-
/**
|
|
3087
|
+
/**
|
|
3088
|
+
* @param start Start index for the current parser event.
|
|
3089
|
+
* @param endIndex End index for the current parser event.
|
|
3090
|
+
* @param offset Offset applied when computing parser indices.
|
|
3091
|
+
* @internal
|
|
3092
|
+
*/
|
|
2723
3093
|
oncomment(start, endIndex, offset) {
|
|
2724
|
-
var _a3, _b, _c, _d;
|
|
2725
3094
|
this.endIndex = endIndex;
|
|
2726
|
-
|
|
2727
|
-
|
|
3095
|
+
this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));
|
|
3096
|
+
this.cbs.oncommentend?.();
|
|
2728
3097
|
this.startIndex = endIndex + 1;
|
|
2729
3098
|
}
|
|
2730
|
-
/**
|
|
3099
|
+
/**
|
|
3100
|
+
* @param start Start index for the current parser event.
|
|
3101
|
+
* @param endIndex End index for the current parser event.
|
|
3102
|
+
* @param offset Offset applied when computing parser indices.
|
|
3103
|
+
* @internal
|
|
3104
|
+
*/
|
|
2731
3105
|
oncdata(start, endIndex, offset) {
|
|
2732
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
2733
3106
|
this.endIndex = endIndex;
|
|
2734
3107
|
const value = this.getSlice(start, endIndex - offset);
|
|
2735
3108
|
if (!this.htmlMode || this.options.recognizeCDATA) {
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
3109
|
+
this.cbs.oncdatastart?.();
|
|
3110
|
+
this.cbs.ontext?.(value);
|
|
3111
|
+
this.cbs.oncdataend?.();
|
|
3112
|
+
} else if (this.isInForeignContext()) {
|
|
3113
|
+
this.cbs.ontext?.(value);
|
|
2739
3114
|
} else {
|
|
2740
|
-
|
|
2741
|
-
|
|
3115
|
+
this.cbs.oncomment?.(`[CDATA[${value}]]`);
|
|
3116
|
+
this.cbs.oncommentend?.();
|
|
2742
3117
|
}
|
|
2743
3118
|
this.startIndex = endIndex + 1;
|
|
2744
3119
|
}
|
|
2745
3120
|
/** @internal */
|
|
2746
3121
|
onend() {
|
|
2747
|
-
var _a3, _b;
|
|
2748
3122
|
if (this.cbs.onclosetag) {
|
|
2749
3123
|
this.endIndex = this.startIndex;
|
|
2750
3124
|
for (let index = 0; index < this.stack.length; index++) {
|
|
2751
3125
|
this.cbs.onclosetag(this.stack[index], true);
|
|
2752
3126
|
}
|
|
2753
3127
|
}
|
|
2754
|
-
|
|
3128
|
+
this.cbs.onend?.();
|
|
2755
3129
|
}
|
|
2756
3130
|
/**
|
|
2757
3131
|
* Resets the parser to a blank state, ready to parse a new HTML document
|
|
2758
3132
|
*/
|
|
2759
3133
|
reset() {
|
|
2760
|
-
|
|
2761
|
-
(_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
3134
|
+
this.cbs.onreset?.();
|
|
2762
3135
|
this.tokenizer.reset();
|
|
2763
3136
|
this.tagname = "";
|
|
2764
3137
|
this.attribname = "";
|
|
3138
|
+
this.attribvalue = "";
|
|
2765
3139
|
this.attribs = null;
|
|
2766
3140
|
this.stack.length = 0;
|
|
2767
3141
|
this.startIndex = 0;
|
|
2768
3142
|
this.endIndex = 0;
|
|
2769
|
-
|
|
3143
|
+
this.cbs.onparserinit?.(this);
|
|
2770
3144
|
this.buffers.length = 0;
|
|
2771
3145
|
this.foreignContext.length = 0;
|
|
2772
|
-
this.foreignContext.unshift(
|
|
3146
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2773
3147
|
this.bufferOffset = 0;
|
|
2774
3148
|
this.writeIndex = 0;
|
|
2775
3149
|
this.ended = false;
|
|
@@ -2777,7 +3151,6 @@ var Parser = class {
|
|
|
2777
3151
|
/**
|
|
2778
3152
|
* Resets the parser, then parses a complete document and
|
|
2779
3153
|
* pushes it to the handler.
|
|
2780
|
-
*
|
|
2781
3154
|
* @param data Document to parse.
|
|
2782
3155
|
*/
|
|
2783
3156
|
parseComplete(data) {
|
|
@@ -2785,6 +3158,9 @@ var Parser = class {
|
|
|
2785
3158
|
this.end(data);
|
|
2786
3159
|
}
|
|
2787
3160
|
getSlice(start, end) {
|
|
3161
|
+
if (start === end) {
|
|
3162
|
+
return "";
|
|
3163
|
+
}
|
|
2788
3164
|
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
2789
3165
|
this.shiftBuffer();
|
|
2790
3166
|
}
|
|
@@ -2802,13 +3178,11 @@ var Parser = class {
|
|
|
2802
3178
|
}
|
|
2803
3179
|
/**
|
|
2804
3180
|
* Parses a chunk of data and calls the corresponding callbacks.
|
|
2805
|
-
*
|
|
2806
3181
|
* @param chunk Chunk to parse.
|
|
2807
3182
|
*/
|
|
2808
3183
|
write(chunk) {
|
|
2809
|
-
var _a3, _b;
|
|
2810
3184
|
if (this.ended) {
|
|
2811
|
-
|
|
3185
|
+
this.cbs.onerror?.(new Error(".write() after done!"));
|
|
2812
3186
|
return;
|
|
2813
3187
|
}
|
|
2814
3188
|
this.buffers.push(chunk);
|
|
@@ -2819,13 +3193,11 @@ var Parser = class {
|
|
|
2819
3193
|
}
|
|
2820
3194
|
/**
|
|
2821
3195
|
* Parses the end of the buffer and clears the stack, calls onend.
|
|
2822
|
-
*
|
|
2823
3196
|
* @param chunk Optional final chunk to parse.
|
|
2824
3197
|
*/
|
|
2825
3198
|
end(chunk) {
|
|
2826
|
-
var _a3, _b;
|
|
2827
3199
|
if (this.ended) {
|
|
2828
|
-
|
|
3200
|
+
this.cbs.onerror?.(new Error(".end() after done!"));
|
|
2829
3201
|
return;
|
|
2830
3202
|
}
|
|
2831
3203
|
if (chunk)
|
|
@@ -2850,27 +3222,9 @@ var Parser = class {
|
|
|
2850
3222
|
if (this.ended)
|
|
2851
3223
|
this.tokenizer.end();
|
|
2852
3224
|
}
|
|
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
3225
|
};
|
|
2872
3226
|
|
|
2873
|
-
// node_modules/.pnpm/domelementtype@
|
|
3227
|
+
// node_modules/.pnpm/domelementtype@3.0.0/node_modules/domelementtype/dist/index.js
|
|
2874
3228
|
var ElementType;
|
|
2875
3229
|
(function(ElementType2) {
|
|
2876
3230
|
ElementType2["Root"] = "root";
|
|
@@ -2883,8 +3237,8 @@ var ElementType;
|
|
|
2883
3237
|
ElementType2["CDATA"] = "cdata";
|
|
2884
3238
|
ElementType2["Doctype"] = "doctype";
|
|
2885
3239
|
})(ElementType || (ElementType = {}));
|
|
2886
|
-
function isTag(
|
|
2887
|
-
return
|
|
3240
|
+
function isTag(element) {
|
|
3241
|
+
return element.type === ElementType.Tag || element.type === ElementType.Script || element.type === ElementType.Style;
|
|
2888
3242
|
}
|
|
2889
3243
|
var Root = ElementType.Root;
|
|
2890
3244
|
var Text = ElementType.Text;
|
|
@@ -2896,15 +3250,18 @@ var Tag = ElementType.Tag;
|
|
|
2896
3250
|
var CDATA = ElementType.CDATA;
|
|
2897
3251
|
var Doctype = ElementType.Doctype;
|
|
2898
3252
|
|
|
2899
|
-
// node_modules/.pnpm/domhandler@
|
|
3253
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/node.js
|
|
2900
3254
|
var Node = class {
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
3255
|
+
/** Parent of the node */
|
|
3256
|
+
parent = null;
|
|
3257
|
+
/** Previous sibling */
|
|
3258
|
+
prev = null;
|
|
3259
|
+
/** Next sibling */
|
|
3260
|
+
next = null;
|
|
3261
|
+
/** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
|
|
3262
|
+
startIndex = null;
|
|
3263
|
+
/** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
|
|
3264
|
+
endIndex = null;
|
|
2908
3265
|
// Read-write aliases for properties
|
|
2909
3266
|
/**
|
|
2910
3267
|
* Same as {@link parent}.
|
|
@@ -2923,8 +3280,8 @@ var Node = class {
|
|
|
2923
3280
|
get previousSibling() {
|
|
2924
3281
|
return this.prev;
|
|
2925
3282
|
}
|
|
2926
|
-
set previousSibling(
|
|
2927
|
-
this.prev =
|
|
3283
|
+
set previousSibling(previous) {
|
|
3284
|
+
this.prev = previous;
|
|
2928
3285
|
}
|
|
2929
3286
|
/**
|
|
2930
3287
|
* Same as {@link next}.
|
|
@@ -2938,7 +3295,6 @@ var Node = class {
|
|
|
2938
3295
|
}
|
|
2939
3296
|
/**
|
|
2940
3297
|
* Clone this node, and optionally its children.
|
|
2941
|
-
*
|
|
2942
3298
|
* @param recursive Clone child nodes as well.
|
|
2943
3299
|
* @returns A clone of the node.
|
|
2944
3300
|
*/
|
|
@@ -2947,6 +3303,7 @@ var Node = class {
|
|
|
2947
3303
|
}
|
|
2948
3304
|
};
|
|
2949
3305
|
var DataNode = class extends Node {
|
|
3306
|
+
data;
|
|
2950
3307
|
/**
|
|
2951
3308
|
* @param data The content of the data node
|
|
2952
3309
|
*/
|
|
@@ -2966,34 +3323,36 @@ var DataNode = class extends Node {
|
|
|
2966
3323
|
}
|
|
2967
3324
|
};
|
|
2968
3325
|
var Text2 = class extends DataNode {
|
|
2969
|
-
|
|
2970
|
-
super(...arguments);
|
|
2971
|
-
this.type = ElementType.Text;
|
|
2972
|
-
}
|
|
3326
|
+
type = ElementType.Text;
|
|
2973
3327
|
get nodeType() {
|
|
2974
3328
|
return 3;
|
|
2975
3329
|
}
|
|
2976
3330
|
};
|
|
2977
3331
|
var Comment2 = class extends DataNode {
|
|
2978
|
-
|
|
2979
|
-
super(...arguments);
|
|
2980
|
-
this.type = ElementType.Comment;
|
|
2981
|
-
}
|
|
3332
|
+
type = ElementType.Comment;
|
|
2982
3333
|
get nodeType() {
|
|
2983
3334
|
return 8;
|
|
2984
3335
|
}
|
|
2985
3336
|
};
|
|
2986
3337
|
var ProcessingInstruction = class extends DataNode {
|
|
3338
|
+
type = ElementType.Directive;
|
|
3339
|
+
name;
|
|
2987
3340
|
constructor(name, data) {
|
|
2988
3341
|
super(data);
|
|
2989
3342
|
this.name = name;
|
|
2990
|
-
this.type = ElementType.Directive;
|
|
2991
3343
|
}
|
|
2992
3344
|
get nodeType() {
|
|
2993
3345
|
return 1;
|
|
2994
3346
|
}
|
|
3347
|
+
/** If this is a doctype, the document type name (parse5 only). */
|
|
3348
|
+
"x-name";
|
|
3349
|
+
/** If this is a doctype, the document type public identifier (parse5 only). */
|
|
3350
|
+
"x-publicId";
|
|
3351
|
+
/** If this is a doctype, the document type system identifier (parse5 only). */
|
|
3352
|
+
"x-systemId";
|
|
2995
3353
|
};
|
|
2996
3354
|
var NodeWithChildren = class extends Node {
|
|
3355
|
+
children;
|
|
2997
3356
|
/**
|
|
2998
3357
|
* @param children Children of the node. Only certain node types can have children.
|
|
2999
3358
|
*/
|
|
@@ -3004,8 +3363,7 @@ var NodeWithChildren = class extends Node {
|
|
|
3004
3363
|
// Aliases
|
|
3005
3364
|
/** First child of the node. */
|
|
3006
3365
|
get firstChild() {
|
|
3007
|
-
|
|
3008
|
-
return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
|
|
3366
|
+
return this.children[0] ?? null;
|
|
3009
3367
|
}
|
|
3010
3368
|
/** Last child of the node. */
|
|
3011
3369
|
get lastChild() {
|
|
@@ -3023,28 +3381,26 @@ var NodeWithChildren = class extends Node {
|
|
|
3023
3381
|
}
|
|
3024
3382
|
};
|
|
3025
3383
|
var CDATA2 = class extends NodeWithChildren {
|
|
3026
|
-
|
|
3027
|
-
super(...arguments);
|
|
3028
|
-
this.type = ElementType.CDATA;
|
|
3029
|
-
}
|
|
3384
|
+
type = ElementType.CDATA;
|
|
3030
3385
|
get nodeType() {
|
|
3031
3386
|
return 4;
|
|
3032
3387
|
}
|
|
3033
3388
|
};
|
|
3034
3389
|
var Document = class extends NodeWithChildren {
|
|
3035
|
-
|
|
3036
|
-
super(...arguments);
|
|
3037
|
-
this.type = ElementType.Root;
|
|
3038
|
-
}
|
|
3390
|
+
type = ElementType.Root;
|
|
3039
3391
|
get nodeType() {
|
|
3040
3392
|
return 9;
|
|
3041
3393
|
}
|
|
3042
3394
|
};
|
|
3043
3395
|
var Element = class extends NodeWithChildren {
|
|
3396
|
+
name;
|
|
3397
|
+
attribs;
|
|
3398
|
+
type;
|
|
3044
3399
|
/**
|
|
3045
3400
|
* @param name Name of the tag, eg. `div`, `span`.
|
|
3046
3401
|
* @param attribs Object mapping attribute names to attribute values.
|
|
3047
3402
|
* @param children Children of the node.
|
|
3403
|
+
* @param type Node type used for the new node instance.
|
|
3048
3404
|
*/
|
|
3049
3405
|
constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
|
|
3050
3406
|
super(children);
|
|
@@ -3067,16 +3423,19 @@ var Element = class extends NodeWithChildren {
|
|
|
3067
3423
|
this.name = name;
|
|
3068
3424
|
}
|
|
3069
3425
|
get attributes() {
|
|
3070
|
-
return Object.keys(this.attribs).map((name) => {
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3426
|
+
return Object.keys(this.attribs).map((name) => ({
|
|
3427
|
+
name,
|
|
3428
|
+
value: this.attribs[name],
|
|
3429
|
+
namespace: this["x-attribsNamespace"]?.[name],
|
|
3430
|
+
prefix: this["x-attribsPrefix"]?.[name]
|
|
3431
|
+
}));
|
|
3432
|
+
}
|
|
3433
|
+
/** Element namespace (parse5 only). */
|
|
3434
|
+
namespace;
|
|
3435
|
+
/** Element attribute namespaces (parse5 only). */
|
|
3436
|
+
"x-attribsNamespace";
|
|
3437
|
+
/** Element attribute namespace-related prefixes (parse5 only). */
|
|
3438
|
+
"x-attribsPrefix";
|
|
3080
3439
|
};
|
|
3081
3440
|
function isTag2(node) {
|
|
3082
3441
|
return isTag(node);
|
|
@@ -3105,7 +3464,9 @@ function cloneNode(node, recursive = false) {
|
|
|
3105
3464
|
} else if (isTag2(node)) {
|
|
3106
3465
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3107
3466
|
const clone = new Element(node.name, { ...node.attribs }, children);
|
|
3108
|
-
|
|
3467
|
+
for (const child of children) {
|
|
3468
|
+
child.parent = clone;
|
|
3469
|
+
}
|
|
3109
3470
|
if (node.namespace != null) {
|
|
3110
3471
|
clone.namespace = node.namespace;
|
|
3111
3472
|
}
|
|
@@ -3119,12 +3480,16 @@ function cloneNode(node, recursive = false) {
|
|
|
3119
3480
|
} else if (isCDATA(node)) {
|
|
3120
3481
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3121
3482
|
const clone = new CDATA2(children);
|
|
3122
|
-
|
|
3483
|
+
for (const child of children) {
|
|
3484
|
+
child.parent = clone;
|
|
3485
|
+
}
|
|
3123
3486
|
result = clone;
|
|
3124
3487
|
} else if (isDocument(node)) {
|
|
3125
3488
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3126
3489
|
const clone = new Document(children);
|
|
3127
|
-
|
|
3490
|
+
for (const child of children) {
|
|
3491
|
+
child.parent = clone;
|
|
3492
|
+
}
|
|
3128
3493
|
if (node["x-mode"]) {
|
|
3129
3494
|
clone["x-mode"] = node["x-mode"];
|
|
3130
3495
|
}
|
|
@@ -3149,43 +3514,55 @@ function cloneNode(node, recursive = false) {
|
|
|
3149
3514
|
}
|
|
3150
3515
|
function cloneChildren(childs) {
|
|
3151
3516
|
const children = childs.map((child) => cloneNode(child, true));
|
|
3152
|
-
for (let
|
|
3153
|
-
children[
|
|
3154
|
-
children[
|
|
3517
|
+
for (let index = 1; index < children.length; index++) {
|
|
3518
|
+
children[index].prev = children[index - 1];
|
|
3519
|
+
children[index - 1].next = children[index];
|
|
3155
3520
|
}
|
|
3156
3521
|
return children;
|
|
3157
3522
|
}
|
|
3158
3523
|
|
|
3159
|
-
// node_modules/.pnpm/domhandler@
|
|
3160
|
-
var
|
|
3524
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/index.js
|
|
3525
|
+
var defaultOptions = {
|
|
3161
3526
|
withStartIndices: false,
|
|
3162
3527
|
withEndIndices: false,
|
|
3163
3528
|
xmlMode: false
|
|
3164
3529
|
};
|
|
3165
3530
|
var DomHandler = class {
|
|
3531
|
+
/** The elements of the DOM */
|
|
3532
|
+
dom = [];
|
|
3533
|
+
/** The root element for the DOM */
|
|
3534
|
+
root = new Document(this.dom);
|
|
3535
|
+
/** Called once parsing has completed. */
|
|
3536
|
+
callback;
|
|
3537
|
+
/** Settings for the handler. */
|
|
3538
|
+
options;
|
|
3539
|
+
/** Callback whenever a tag is closed. */
|
|
3540
|
+
elementCB;
|
|
3541
|
+
/** Indicated whether parsing has been completed. */
|
|
3542
|
+
done = false;
|
|
3543
|
+
/** Stack of open tags. */
|
|
3544
|
+
tagStack = [this.root];
|
|
3545
|
+
/** A data node that is still being written to. */
|
|
3546
|
+
lastNode = null;
|
|
3547
|
+
/** Reference to the parser instance. Used for location information. */
|
|
3548
|
+
parser = null;
|
|
3166
3549
|
/**
|
|
3167
3550
|
* @param callback Called once parsing has completed.
|
|
3168
3551
|
* @param options Settings for the handler.
|
|
3169
3552
|
* @param elementCB Callback whenever a tag is closed.
|
|
3170
3553
|
*/
|
|
3171
3554
|
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
3555
|
if (typeof options === "function") {
|
|
3179
3556
|
elementCB = options;
|
|
3180
|
-
options =
|
|
3557
|
+
options = defaultOptions;
|
|
3181
3558
|
}
|
|
3182
3559
|
if (typeof callback === "object") {
|
|
3183
3560
|
options = callback;
|
|
3184
3561
|
callback = void 0;
|
|
3185
3562
|
}
|
|
3186
|
-
this.callback = callback
|
|
3187
|
-
this.options = options
|
|
3188
|
-
this.elementCB = elementCB
|
|
3563
|
+
this.callback = callback ?? null;
|
|
3564
|
+
this.options = options ?? defaultOptions;
|
|
3565
|
+
this.elementCB = elementCB ?? null;
|
|
3189
3566
|
}
|
|
3190
3567
|
onparserinit(parser) {
|
|
3191
3568
|
this.parser = parser;
|
|
@@ -3212,12 +3589,12 @@ var DomHandler = class {
|
|
|
3212
3589
|
}
|
|
3213
3590
|
onclosetag() {
|
|
3214
3591
|
this.lastNode = null;
|
|
3215
|
-
const
|
|
3216
|
-
if (this.options.withEndIndices) {
|
|
3217
|
-
|
|
3592
|
+
const element = this.tagStack.pop();
|
|
3593
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3594
|
+
element.endIndex = this.parser.endIndex;
|
|
3218
3595
|
}
|
|
3219
3596
|
if (this.elementCB)
|
|
3220
|
-
this.elementCB(
|
|
3597
|
+
this.elementCB(element);
|
|
3221
3598
|
}
|
|
3222
3599
|
onopentag(name, attribs) {
|
|
3223
3600
|
const type = this.options.xmlMode ? ElementType.Tag : void 0;
|
|
@@ -3229,7 +3606,7 @@ var DomHandler = class {
|
|
|
3229
3606
|
const { lastNode } = this;
|
|
3230
3607
|
if (lastNode && lastNode.type === ElementType.Text) {
|
|
3231
3608
|
lastNode.data += data;
|
|
3232
|
-
if (this.options.withEndIndices) {
|
|
3609
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3233
3610
|
lastNode.endIndex = this.parser.endIndex;
|
|
3234
3611
|
}
|
|
3235
3612
|
} else {
|
|
@@ -3274,10 +3651,10 @@ var DomHandler = class {
|
|
|
3274
3651
|
addNode(node) {
|
|
3275
3652
|
const parent = this.tagStack[this.tagStack.length - 1];
|
|
3276
3653
|
const previousSibling = parent.children[parent.children.length - 1];
|
|
3277
|
-
if (this.options.withStartIndices) {
|
|
3654
|
+
if (this.options.withStartIndices && this.parser) {
|
|
3278
3655
|
node.startIndex = this.parser.startIndex;
|
|
3279
3656
|
}
|
|
3280
|
-
if (this.options.withEndIndices) {
|
|
3657
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3281
3658
|
node.endIndex = this.parser.endIndex;
|
|
3282
3659
|
}
|
|
3283
3660
|
parent.children.push(node);
|
|
@@ -3290,616 +3667,7 @@ var DomHandler = class {
|
|
|
3290
3667
|
}
|
|
3291
3668
|
};
|
|
3292
3669
|
|
|
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
|
|
3670
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/index.js
|
|
3903
3671
|
function parseDocument(data, options) {
|
|
3904
3672
|
const handler = new DomHandler(void 0, options);
|
|
3905
3673
|
new Parser(handler, options).end(data);
|
|
@@ -4361,10 +4129,12 @@ function toTwine2Archive(story, startName, options) {
|
|
|
4361
4129
|
function toTwine2HTML(story, format, startName, options) {
|
|
4362
4130
|
let template = readFormatSource(format);
|
|
4363
4131
|
if (template.includes("{{STORY_NAME}}")) {
|
|
4364
|
-
|
|
4132
|
+
const name = htmlEscape(story.name);
|
|
4133
|
+
template = template.replaceAll("{{STORY_NAME}}", () => name);
|
|
4365
4134
|
}
|
|
4366
4135
|
if (template.includes("{{STORY_DATA}}")) {
|
|
4367
|
-
|
|
4136
|
+
const data = getTwine2DataChunk(story, startName, options);
|
|
4137
|
+
template = template.replace("{{STORY_DATA}}", () => data);
|
|
4368
4138
|
}
|
|
4369
4139
|
return template;
|
|
4370
4140
|
}
|
|
@@ -4465,10 +4235,11 @@ function toTwine1HTML(story, format, startName) {
|
|
|
4465
4235
|
const displayStart = startName === "Start" ? "" : startName;
|
|
4466
4236
|
template = template.replace('"VERSION"', `Compiled with ${CREATOR_NAME2}, ${VERSION}`);
|
|
4467
4237
|
template = template.replace('"TIME"', `Built on ${(/* @__PURE__ */ new Date()).toUTCString()}`);
|
|
4468
|
-
|
|
4238
|
+
const startAtValue = `"${jsStringEscape(displayStart)}"`;
|
|
4239
|
+
template = template.replace('"START_AT"', () => startAtValue);
|
|
4469
4240
|
template = template.replace('"STORY_SIZE"', `"${count}"`);
|
|
4470
4241
|
if (template.includes('"STORY"')) {
|
|
4471
|
-
template = template.replace('"STORY"', data);
|
|
4242
|
+
template = template.replace('"STORY"', () => data);
|
|
4472
4243
|
} else {
|
|
4473
4244
|
let footer;
|
|
4474
4245
|
try {
|
|
@@ -4504,7 +4275,7 @@ function tryReplaceComponent(template, placeholder, componentPath, required) {
|
|
|
4504
4275
|
try {
|
|
4505
4276
|
let content = readFileSync2(componentPath, "utf-8");
|
|
4506
4277
|
if (content.charCodeAt(0) === 65279) content = content.slice(1);
|
|
4507
|
-
return template.replace(placeholder, content);
|
|
4278
|
+
return template.replace(placeholder, () => content);
|
|
4508
4279
|
} catch (e) {
|
|
4509
4280
|
if (required) {
|
|
4510
4281
|
throw new Error(
|
|
@@ -4592,7 +4363,8 @@ function modifyHead(html, modulePaths, headFile, diagnostics) {
|
|
|
4592
4363
|
}
|
|
4593
4364
|
if (parts.length > 0) {
|
|
4594
4365
|
parts.push("</head>");
|
|
4595
|
-
|
|
4366
|
+
const replacement = parts.join("\n");
|
|
4367
|
+
return html.replace("</head>", () => replacement);
|
|
4596
4368
|
}
|
|
4597
4369
|
return html;
|
|
4598
4370
|
}
|
|
@@ -4996,4 +4768,4 @@ export {
|
|
|
4996
4768
|
compile,
|
|
4997
4769
|
compileIncremental
|
|
4998
4770
|
};
|
|
4999
|
-
//# sourceMappingURL=chunk-
|
|
4771
|
+
//# sourceMappingURL=chunk-Z2CNKPVJ.js.map
|