@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
package/dist/index.cjs
CHANGED
|
@@ -1436,8 +1436,7 @@ function parseTwee(source, options = {}) {
|
|
|
1436
1436
|
return { passages, diagnostics };
|
|
1437
1437
|
}
|
|
1438
1438
|
|
|
1439
|
-
// node_modules/.pnpm/entities@
|
|
1440
|
-
var _a;
|
|
1439
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js
|
|
1441
1440
|
var decodeMap = /* @__PURE__ */ new Map([
|
|
1442
1441
|
[0, 65533],
|
|
1443
1442
|
// C1 Unicode control character reference replacements
|
|
@@ -1469,47 +1468,16 @@ var decodeMap = /* @__PURE__ */ new Map([
|
|
|
1469
1468
|
[158, 382],
|
|
1470
1469
|
[159, 376]
|
|
1471
1470
|
]);
|
|
1472
|
-
var fromCodePoint = (
|
|
1473
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
|
|
1474
|
-
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
|
|
1475
|
-
let output = "";
|
|
1476
|
-
if (codePoint > 65535) {
|
|
1477
|
-
codePoint -= 65536;
|
|
1478
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
1479
|
-
codePoint = 56320 | codePoint & 1023;
|
|
1480
|
-
}
|
|
1481
|
-
output += String.fromCharCode(codePoint);
|
|
1482
|
-
return output;
|
|
1483
|
-
})
|
|
1484
|
-
);
|
|
1485
1471
|
function replaceCodePoint(codePoint) {
|
|
1486
|
-
var _a3;
|
|
1487
1472
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
1488
1473
|
return 65533;
|
|
1489
1474
|
}
|
|
1490
|
-
return
|
|
1475
|
+
return decodeMap.get(codePoint) ?? codePoint;
|
|
1491
1476
|
}
|
|
1492
1477
|
|
|
1493
|
-
// node_modules/.pnpm/entities@
|
|
1478
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js
|
|
1494
1479
|
function decodeBase64(input) {
|
|
1495
|
-
const binary = (
|
|
1496
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1497
|
-
typeof atob === "function" ? (
|
|
1498
|
-
// Browser (and Node >=16)
|
|
1499
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1500
|
-
atob(input)
|
|
1501
|
-
) : (
|
|
1502
|
-
// Older Node versions (<16)
|
|
1503
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1504
|
-
typeof Buffer.from === "function" ? (
|
|
1505
|
-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
1506
|
-
Buffer.from(input, "base64").toString("binary")
|
|
1507
|
-
) : (
|
|
1508
|
-
// eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
|
|
1509
|
-
new Buffer(input, "base64").toString("binary")
|
|
1510
|
-
)
|
|
1511
|
-
)
|
|
1512
|
-
);
|
|
1480
|
+
const binary = atob(input);
|
|
1513
1481
|
const evenLength = binary.length & ~1;
|
|
1514
1482
|
const out = new Uint16Array(evenLength / 2);
|
|
1515
1483
|
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
@@ -1520,36 +1488,36 @@ function decodeBase64(input) {
|
|
|
1520
1488
|
return out;
|
|
1521
1489
|
}
|
|
1522
1490
|
|
|
1523
|
-
// node_modules/.pnpm/entities@
|
|
1491
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js
|
|
1524
1492
|
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");
|
|
1525
1493
|
|
|
1526
|
-
// node_modules/.pnpm/entities@
|
|
1494
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-xml.js
|
|
1527
1495
|
var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
|
|
1528
1496
|
|
|
1529
|
-
// node_modules/.pnpm/entities@
|
|
1497
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js
|
|
1530
1498
|
var BinTrieFlags;
|
|
1531
|
-
(function(
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1499
|
+
(function(BinTrieFlags2) {
|
|
1500
|
+
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1501
|
+
BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
|
|
1502
|
+
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1503
|
+
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1536
1504
|
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1537
1505
|
|
|
1538
|
-
// node_modules/.pnpm/entities@
|
|
1506
|
+
// node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js
|
|
1539
1507
|
var CharCodes;
|
|
1540
|
-
(function(
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1508
|
+
(function(CharCodes3) {
|
|
1509
|
+
CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
|
|
1510
|
+
CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
|
|
1511
|
+
CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
|
|
1512
|
+
CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
|
|
1513
|
+
CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
|
|
1514
|
+
CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
|
|
1515
|
+
CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
|
|
1516
|
+
CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
|
|
1517
|
+
CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1518
|
+
CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
|
|
1519
|
+
CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
|
|
1520
|
+
CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1553
1521
|
})(CharCodes || (CharCodes = {}));
|
|
1554
1522
|
var TO_LOWER_BIT = 32;
|
|
1555
1523
|
function isNumber(code) {
|
|
@@ -1565,33 +1533,51 @@ function isEntityInAttributeInvalidEnd(code) {
|
|
|
1565
1533
|
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1566
1534
|
}
|
|
1567
1535
|
var EntityDecoderState;
|
|
1568
|
-
(function(
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1536
|
+
(function(EntityDecoderState2) {
|
|
1537
|
+
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
1538
|
+
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
1539
|
+
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1540
|
+
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
1541
|
+
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
1574
1542
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1575
1543
|
var DecodingMode;
|
|
1576
|
-
(function(
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1544
|
+
(function(DecodingMode2) {
|
|
1545
|
+
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
1546
|
+
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
1547
|
+
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
1580
1548
|
})(DecodingMode || (DecodingMode = {}));
|
|
1581
1549
|
var EntityDecoder = class {
|
|
1550
|
+
decodeTree;
|
|
1551
|
+
emitCodePoint;
|
|
1552
|
+
errors;
|
|
1582
1553
|
constructor(decodeTree, emitCodePoint, errors) {
|
|
1583
1554
|
this.decodeTree = decodeTree;
|
|
1584
1555
|
this.emitCodePoint = emitCodePoint;
|
|
1585
1556
|
this.errors = errors;
|
|
1586
|
-
this.state = EntityDecoderState.EntityStart;
|
|
1587
|
-
this.consumed = 1;
|
|
1588
|
-
this.result = 0;
|
|
1589
|
-
this.treeIndex = 0;
|
|
1590
|
-
this.excess = 1;
|
|
1591
|
-
this.decodeMode = DecodingMode.Strict;
|
|
1592
|
-
this.runConsumed = 0;
|
|
1593
1557
|
}
|
|
1594
|
-
/**
|
|
1558
|
+
/** The current state of the decoder. */
|
|
1559
|
+
state = EntityDecoderState.EntityStart;
|
|
1560
|
+
/** Characters that were consumed while parsing an entity. */
|
|
1561
|
+
consumed = 1;
|
|
1562
|
+
/**
|
|
1563
|
+
* The result of the entity.
|
|
1564
|
+
*
|
|
1565
|
+
* Either the result index of a numeric entity, or the codepoint of a
|
|
1566
|
+
* numeric entity.
|
|
1567
|
+
*/
|
|
1568
|
+
result = 0;
|
|
1569
|
+
/** The current index in the decode tree. */
|
|
1570
|
+
treeIndex = 0;
|
|
1571
|
+
/** The number of characters that were consumed in excess. */
|
|
1572
|
+
excess = 1;
|
|
1573
|
+
/** The mode in which the decoder is operating. */
|
|
1574
|
+
decodeMode = DecodingMode.Strict;
|
|
1575
|
+
/** The number of characters that have been consumed in the current run. */
|
|
1576
|
+
runConsumed = 0;
|
|
1577
|
+
/**
|
|
1578
|
+
* Resets the instance to make it reusable.
|
|
1579
|
+
* @param decodeMode Entity decoding mode to use.
|
|
1580
|
+
*/
|
|
1595
1581
|
startEntity(decodeMode) {
|
|
1596
1582
|
this.decodeMode = decodeMode;
|
|
1597
1583
|
this.state = EntityDecoderState.EntityStart;
|
|
@@ -1607,7 +1593,6 @@ var EntityDecoder = class {
|
|
|
1607
1593
|
*
|
|
1608
1594
|
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
1609
1595
|
* entity is incomplete, and resume when the next string is written.
|
|
1610
|
-
*
|
|
1611
1596
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1612
1597
|
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
1613
1598
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1641,7 +1626,6 @@ var EntityDecoder = class {
|
|
|
1641
1626
|
* Switches between the numeric decimal and hexadecimal states.
|
|
1642
1627
|
*
|
|
1643
1628
|
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
1644
|
-
*
|
|
1645
1629
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1646
1630
|
* @param offset The current offset.
|
|
1647
1631
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1662,7 +1646,6 @@ var EntityDecoder = class {
|
|
|
1662
1646
|
* Parses a hexadecimal numeric entity.
|
|
1663
1647
|
*
|
|
1664
1648
|
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
1665
|
-
*
|
|
1666
1649
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1667
1650
|
* @param offset The current offset.
|
|
1668
1651
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1685,7 +1668,6 @@ var EntityDecoder = class {
|
|
|
1685
1668
|
* Parses a decimal numeric entity.
|
|
1686
1669
|
*
|
|
1687
1670
|
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
1688
|
-
*
|
|
1689
1671
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1690
1672
|
* @param offset The current offset.
|
|
1691
1673
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1708,7 +1690,6 @@ var EntityDecoder = class {
|
|
|
1708
1690
|
*
|
|
1709
1691
|
* Implements the logic from the `Hexademical character reference start
|
|
1710
1692
|
* state` and `Numeric character reference end state` in the HTML spec.
|
|
1711
|
-
*
|
|
1712
1693
|
* @param lastCp The last code point of the entity. Used to see if the
|
|
1713
1694
|
* entity was terminated with a semicolon.
|
|
1714
1695
|
* @param expectedLength The minimum number of characters that should be
|
|
@@ -1717,9 +1698,8 @@ var EntityDecoder = class {
|
|
|
1717
1698
|
* @returns The number of characters that were consumed.
|
|
1718
1699
|
*/
|
|
1719
1700
|
emitNumericEntity(lastCp, expectedLength) {
|
|
1720
|
-
var _a3;
|
|
1721
1701
|
if (this.consumed <= expectedLength) {
|
|
1722
|
-
|
|
1702
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1723
1703
|
return 0;
|
|
1724
1704
|
}
|
|
1725
1705
|
if (lastCp === CharCodes.SEMI) {
|
|
@@ -1740,7 +1720,6 @@ var EntityDecoder = class {
|
|
|
1740
1720
|
* Parses a named entity.
|
|
1741
1721
|
*
|
|
1742
1722
|
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
1743
|
-
*
|
|
1744
1723
|
* @param input The string containing the entity (or a continuation of the entity).
|
|
1745
1724
|
* @param offset The current offset.
|
|
1746
1725
|
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
@@ -1813,24 +1792,20 @@ var EntityDecoder = class {
|
|
|
1813
1792
|
}
|
|
1814
1793
|
/**
|
|
1815
1794
|
* Emit a named entity that was not terminated with a semicolon.
|
|
1816
|
-
*
|
|
1817
1795
|
* @returns The number of characters consumed.
|
|
1818
1796
|
*/
|
|
1819
1797
|
emitNotTerminatedNamedEntity() {
|
|
1820
|
-
var _a3;
|
|
1821
1798
|
const { result, decodeTree } = this;
|
|
1822
1799
|
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1823
1800
|
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1824
|
-
|
|
1801
|
+
this.errors?.missingSemicolonAfterCharacterReference();
|
|
1825
1802
|
return this.consumed;
|
|
1826
1803
|
}
|
|
1827
1804
|
/**
|
|
1828
1805
|
* Emit a named entity.
|
|
1829
|
-
*
|
|
1830
1806
|
* @param result The index of the entity in the decode tree.
|
|
1831
1807
|
* @param valueLength The number of bytes in the entity.
|
|
1832
1808
|
* @param consumed The number of characters consumed.
|
|
1833
|
-
*
|
|
1834
1809
|
* @returns The number of characters consumed.
|
|
1835
1810
|
*/
|
|
1836
1811
|
emitNamedEntityData(result, valueLength, consumed) {
|
|
@@ -1845,11 +1820,9 @@ var EntityDecoder = class {
|
|
|
1845
1820
|
* Signal to the parser that the end of the input was reached.
|
|
1846
1821
|
*
|
|
1847
1822
|
* Remaining data will be emitted and relevant errors will be produced.
|
|
1848
|
-
*
|
|
1849
1823
|
* @returns The number of characters consumed.
|
|
1850
1824
|
*/
|
|
1851
1825
|
end() {
|
|
1852
|
-
var _a3;
|
|
1853
1826
|
switch (this.state) {
|
|
1854
1827
|
case EntityDecoderState.NamedEntity: {
|
|
1855
1828
|
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
@@ -1862,7 +1835,7 @@ var EntityDecoder = class {
|
|
|
1862
1835
|
return this.emitNumericEntity(0, 3);
|
|
1863
1836
|
}
|
|
1864
1837
|
case EntityDecoderState.NumericStart: {
|
|
1865
|
-
|
|
1838
|
+
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1866
1839
|
return 0;
|
|
1867
1840
|
}
|
|
1868
1841
|
case EntityDecoderState.EntityStart: {
|
|
@@ -1900,36 +1873,36 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
|
1900
1873
|
return -1;
|
|
1901
1874
|
}
|
|
1902
1875
|
|
|
1903
|
-
// node_modules/.pnpm/htmlparser2@
|
|
1876
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Tokenizer.js
|
|
1904
1877
|
var CharCodes2;
|
|
1905
|
-
(function(
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1878
|
+
(function(CharCodes3) {
|
|
1879
|
+
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
|
|
1880
|
+
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
|
|
1881
|
+
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
|
|
1882
|
+
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
|
|
1883
|
+
CharCodes3[CharCodes3["Space"] = 32] = "Space";
|
|
1884
|
+
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
|
|
1885
|
+
CharCodes3[CharCodes3["Number"] = 35] = "Number";
|
|
1886
|
+
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
|
|
1887
|
+
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
|
|
1888
|
+
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
|
|
1889
|
+
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
|
|
1890
|
+
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
|
|
1891
|
+
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
|
|
1892
|
+
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
|
|
1893
|
+
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
|
|
1894
|
+
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
|
|
1895
|
+
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
|
|
1896
|
+
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
|
|
1897
|
+
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
|
|
1898
|
+
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
|
|
1899
|
+
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
|
|
1900
|
+
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
|
|
1901
|
+
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
|
|
1902
|
+
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
|
|
1903
|
+
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
|
|
1904
|
+
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
|
|
1905
|
+
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
1933
1906
|
})(CharCodes2 || (CharCodes2 = {}));
|
|
1934
1907
|
var State;
|
|
1935
1908
|
(function(State2) {
|
|
@@ -1952,12 +1925,12 @@ var State;
|
|
|
1952
1925
|
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
1953
1926
|
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
1954
1927
|
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
1955
|
-
State2[State2["
|
|
1956
|
-
State2[State2["
|
|
1957
|
-
State2[State2["
|
|
1958
|
-
State2[State2["
|
|
1959
|
-
State2[State2["
|
|
1960
|
-
State2[State2["
|
|
1928
|
+
State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
|
|
1929
|
+
State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
|
|
1930
|
+
State2[State2["InCommentLike"] = 22] = "InCommentLike";
|
|
1931
|
+
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
1932
|
+
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
1933
|
+
State2[State2["InPlainText"] = 25] = "InPlainText";
|
|
1961
1934
|
State2[State2["InEntity"] = 26] = "InEntity";
|
|
1962
1935
|
})(State || (State = {}));
|
|
1963
1936
|
function isWhitespace(c) {
|
|
@@ -1977,12 +1950,56 @@ var QuoteType;
|
|
|
1977
1950
|
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
1978
1951
|
})(QuoteType || (QuoteType = {}));
|
|
1979
1952
|
var Sequences = {
|
|
1953
|
+
Empty: new Uint8Array(0),
|
|
1980
1954
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
1981
1955
|
// CDATA[
|
|
1982
1956
|
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
1983
1957
|
// ]]>
|
|
1984
|
-
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
1985
|
-
//
|
|
1958
|
+
CommentEnd: new Uint8Array([45, 45, 33, 62]),
|
|
1959
|
+
// `--!>`
|
|
1960
|
+
Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
|
|
1961
|
+
// `doctype`
|
|
1962
|
+
IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
|
|
1963
|
+
// `</iframe`
|
|
1964
|
+
NoembedEnd: new Uint8Array([
|
|
1965
|
+
60,
|
|
1966
|
+
47,
|
|
1967
|
+
110,
|
|
1968
|
+
111,
|
|
1969
|
+
101,
|
|
1970
|
+
109,
|
|
1971
|
+
98,
|
|
1972
|
+
101,
|
|
1973
|
+
100
|
|
1974
|
+
]),
|
|
1975
|
+
// `</noembed`
|
|
1976
|
+
NoframesEnd: new Uint8Array([
|
|
1977
|
+
60,
|
|
1978
|
+
47,
|
|
1979
|
+
110,
|
|
1980
|
+
111,
|
|
1981
|
+
102,
|
|
1982
|
+
114,
|
|
1983
|
+
97,
|
|
1984
|
+
109,
|
|
1985
|
+
101,
|
|
1986
|
+
115
|
|
1987
|
+
]),
|
|
1988
|
+
// `</noframes`
|
|
1989
|
+
Plaintext: new Uint8Array([
|
|
1990
|
+
60,
|
|
1991
|
+
47,
|
|
1992
|
+
112,
|
|
1993
|
+
108,
|
|
1994
|
+
97,
|
|
1995
|
+
105,
|
|
1996
|
+
110,
|
|
1997
|
+
116,
|
|
1998
|
+
101,
|
|
1999
|
+
120,
|
|
2000
|
+
116
|
|
2001
|
+
]),
|
|
2002
|
+
// `</plaintext`
|
|
1986
2003
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
1987
2004
|
// `</script`
|
|
1988
2005
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
@@ -2005,22 +2022,43 @@ var Sequences = {
|
|
|
2005
2022
|
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
2006
2023
|
// `</xmp`
|
|
2007
2024
|
};
|
|
2025
|
+
var specialStartSequences = /* @__PURE__ */ new Map([
|
|
2026
|
+
[Sequences.IframeEnd[2], Sequences.IframeEnd],
|
|
2027
|
+
[Sequences.NoembedEnd[2], Sequences.NoembedEnd],
|
|
2028
|
+
[Sequences.Plaintext[2], Sequences.Plaintext],
|
|
2029
|
+
[Sequences.ScriptEnd[2], Sequences.ScriptEnd],
|
|
2030
|
+
[Sequences.TitleEnd[2], Sequences.TitleEnd],
|
|
2031
|
+
[Sequences.XmpEnd[2], Sequences.XmpEnd]
|
|
2032
|
+
]);
|
|
2008
2033
|
var Tokenizer = class {
|
|
2009
|
-
|
|
2034
|
+
cbs;
|
|
2035
|
+
/** The current state the tokenizer is in. */
|
|
2036
|
+
state = State.Text;
|
|
2037
|
+
/** The read buffer. */
|
|
2038
|
+
buffer = "";
|
|
2039
|
+
/** The beginning of the section that is currently being read. */
|
|
2040
|
+
sectionStart = 0;
|
|
2041
|
+
/** The index within the buffer that we are currently looking at. */
|
|
2042
|
+
index = 0;
|
|
2043
|
+
/** The start of the last entity. */
|
|
2044
|
+
entityStart = 0;
|
|
2045
|
+
/** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
|
|
2046
|
+
baseState = State.Text;
|
|
2047
|
+
/** For special parsing behavior inside of script and style tags. */
|
|
2048
|
+
isSpecial = false;
|
|
2049
|
+
/** Indicates whether the tokenizer has been paused. */
|
|
2050
|
+
running = true;
|
|
2051
|
+
/** The offset of the current buffer. */
|
|
2052
|
+
offset = 0;
|
|
2053
|
+
xmlMode;
|
|
2054
|
+
decodeEntities;
|
|
2055
|
+
recognizeSelfClosing;
|
|
2056
|
+
entityDecoder;
|
|
2057
|
+
constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
|
|
2010
2058
|
this.cbs = cbs;
|
|
2011
|
-
this.state = State.Text;
|
|
2012
|
-
this.buffer = "";
|
|
2013
|
-
this.sectionStart = 0;
|
|
2014
|
-
this.index = 0;
|
|
2015
|
-
this.entityStart = 0;
|
|
2016
|
-
this.baseState = State.Text;
|
|
2017
|
-
this.isSpecial = false;
|
|
2018
|
-
this.running = true;
|
|
2019
|
-
this.offset = 0;
|
|
2020
|
-
this.currentSequence = void 0;
|
|
2021
|
-
this.sequenceIndex = 0;
|
|
2022
2059
|
this.xmlMode = xmlMode;
|
|
2023
2060
|
this.decodeEntities = decodeEntities;
|
|
2061
|
+
this.recognizeSelfClosing = recognizeSelfClosing;
|
|
2024
2062
|
this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
|
|
2025
2063
|
}
|
|
2026
2064
|
reset() {
|
|
@@ -2029,7 +2067,9 @@ var Tokenizer = class {
|
|
|
2029
2067
|
this.sectionStart = 0;
|
|
2030
2068
|
this.index = 0;
|
|
2031
2069
|
this.baseState = State.Text;
|
|
2032
|
-
this.
|
|
2070
|
+
this.isSpecial = false;
|
|
2071
|
+
this.currentSequence = Sequences.Empty;
|
|
2072
|
+
this.sequenceIndex = 0;
|
|
2033
2073
|
this.running = true;
|
|
2034
2074
|
this.offset = 0;
|
|
2035
2075
|
}
|
|
@@ -2062,56 +2102,63 @@ var Tokenizer = class {
|
|
|
2062
2102
|
this.startEntity();
|
|
2063
2103
|
}
|
|
2064
2104
|
}
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
this.
|
|
2076
|
-
} else if (!isEnd) {
|
|
2077
|
-
this.sequenceIndex++;
|
|
2078
|
-
return;
|
|
2105
|
+
currentSequence = Sequences.Empty;
|
|
2106
|
+
sequenceIndex = 0;
|
|
2107
|
+
enterTagBody() {
|
|
2108
|
+
if (this.currentSequence === Sequences.Plaintext) {
|
|
2109
|
+
this.currentSequence = Sequences.Empty;
|
|
2110
|
+
this.state = State.InPlainText;
|
|
2111
|
+
} else if (this.isSpecial) {
|
|
2112
|
+
this.state = State.InSpecialTag;
|
|
2113
|
+
this.sequenceIndex = 0;
|
|
2114
|
+
} else {
|
|
2115
|
+
this.state = State.Text;
|
|
2079
2116
|
}
|
|
2080
|
-
this.sequenceIndex = 0;
|
|
2081
|
-
this.state = State.InTagName;
|
|
2082
|
-
this.stateInTagName(c);
|
|
2083
2117
|
}
|
|
2084
|
-
/**
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2118
|
+
/**
|
|
2119
|
+
* Match the opening tag name against an HTML text-only tag sequence.
|
|
2120
|
+
*
|
|
2121
|
+
* Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,
|
|
2122
|
+
* `noembed`/`noframes`), so we may switch to an alternate sequence at the
|
|
2123
|
+
* first distinguishing byte. On a successful full match we fall back to
|
|
2124
|
+
* the normal tag-name state; a later `>` will enter raw-text, RCDATA, or
|
|
2125
|
+
* plaintext mode based on `currentSequence` / `isSpecial`.
|
|
2126
|
+
* @param c Current character code point.
|
|
2127
|
+
*/
|
|
2128
|
+
stateSpecialStartSequence(c) {
|
|
2129
|
+
const lower = c | 32;
|
|
2130
|
+
if (this.sequenceIndex < this.currentSequence.length) {
|
|
2131
|
+
if (lower === this.currentSequence[this.sequenceIndex]) {
|
|
2132
|
+
this.sequenceIndex++;
|
|
2098
2133
|
return;
|
|
2099
2134
|
}
|
|
2100
|
-
this.sequenceIndex
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
if (this.currentSequence === Sequences.TitleEnd) {
|
|
2106
|
-
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2107
|
-
this.startEntity();
|
|
2135
|
+
if (this.sequenceIndex === 3) {
|
|
2136
|
+
if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
|
|
2137
|
+
this.currentSequence = Sequences.StyleEnd;
|
|
2138
|
+
this.sequenceIndex = 4;
|
|
2139
|
+
return;
|
|
2108
2140
|
}
|
|
2109
|
-
|
|
2110
|
-
|
|
2141
|
+
if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
|
|
2142
|
+
this.currentSequence = Sequences.TextareaEnd;
|
|
2143
|
+
this.sequenceIndex = 4;
|
|
2144
|
+
return;
|
|
2145
|
+
}
|
|
2146
|
+
} else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
|
|
2147
|
+
this.currentSequence = Sequences.NoframesEnd;
|
|
2148
|
+
this.sequenceIndex = 5;
|
|
2149
|
+
return;
|
|
2111
2150
|
}
|
|
2112
|
-
} else {
|
|
2113
|
-
this.sequenceIndex =
|
|
2151
|
+
} else if (isEndOfTagSection(c)) {
|
|
2152
|
+
this.sequenceIndex = 0;
|
|
2153
|
+
this.state = State.InTagName;
|
|
2154
|
+
this.stateInTagName(c);
|
|
2155
|
+
return;
|
|
2114
2156
|
}
|
|
2157
|
+
this.isSpecial = false;
|
|
2158
|
+
this.currentSequence = Sequences.Empty;
|
|
2159
|
+
this.sequenceIndex = 0;
|
|
2160
|
+
this.state = State.InTagName;
|
|
2161
|
+
this.stateInTagName(c);
|
|
2115
2162
|
}
|
|
2116
2163
|
stateCDATASequence(c) {
|
|
2117
2164
|
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
@@ -2123,14 +2170,19 @@ var Tokenizer = class {
|
|
|
2123
2170
|
}
|
|
2124
2171
|
} else {
|
|
2125
2172
|
this.sequenceIndex = 0;
|
|
2126
|
-
this.
|
|
2127
|
-
|
|
2173
|
+
if (this.xmlMode) {
|
|
2174
|
+
this.state = State.InDeclaration;
|
|
2175
|
+
this.stateInDeclaration(c);
|
|
2176
|
+
} else {
|
|
2177
|
+
this.state = State.InSpecialComment;
|
|
2178
|
+
this.stateInSpecialComment(c);
|
|
2179
|
+
}
|
|
2128
2180
|
}
|
|
2129
2181
|
}
|
|
2130
2182
|
/**
|
|
2131
2183
|
* When we wait for one specific character, we can speed things up
|
|
2132
2184
|
* by skipping through the buffer until we find it.
|
|
2133
|
-
*
|
|
2185
|
+
* @param c Current character code point.
|
|
2134
2186
|
* @returns Whether the character was found.
|
|
2135
2187
|
*/
|
|
2136
2188
|
fastForwardTo(c) {
|
|
@@ -2142,6 +2194,16 @@ var Tokenizer = class {
|
|
|
2142
2194
|
this.index = this.buffer.length + this.offset - 1;
|
|
2143
2195
|
return false;
|
|
2144
2196
|
}
|
|
2197
|
+
/**
|
|
2198
|
+
* Emit a comment token and return to the text state.
|
|
2199
|
+
* @param offset Number of characters in the end sequence that have already been matched.
|
|
2200
|
+
*/
|
|
2201
|
+
emitComment(offset) {
|
|
2202
|
+
this.cbs.oncomment(this.sectionStart, this.index, offset);
|
|
2203
|
+
this.sequenceIndex = 0;
|
|
2204
|
+
this.sectionStart = this.index + 1;
|
|
2205
|
+
this.state = State.Text;
|
|
2206
|
+
}
|
|
2145
2207
|
/**
|
|
2146
2208
|
* Comments and CDATA end with `-->` and `]]>`.
|
|
2147
2209
|
*
|
|
@@ -2149,14 +2211,26 @@ var Tokenizer = class {
|
|
|
2149
2211
|
* - Their end sequences have a distinct character they start with.
|
|
2150
2212
|
* - That character is then repeated, so we have to check multiple repeats.
|
|
2151
2213
|
* - All characters but the start character of the sequence can be skipped.
|
|
2214
|
+
* @param c Current character code point.
|
|
2152
2215
|
*/
|
|
2153
2216
|
stateInCommentLike(c) {
|
|
2154
|
-
if (
|
|
2217
|
+
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && /*
|
|
2218
|
+
* We're still at the very start of the comment: the only
|
|
2219
|
+
* characters consumed since `<!--` are the dashes that
|
|
2220
|
+
* advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).
|
|
2221
|
+
*/
|
|
2222
|
+
this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
|
|
2223
|
+
this.emitComment(this.sequenceIndex);
|
|
2224
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
|
|
2225
|
+
this.emitComment(2);
|
|
2226
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
|
|
2227
|
+
this.sequenceIndex = Number(c === CharCodes2.Dash);
|
|
2228
|
+
} else if (c === this.currentSequence[this.sequenceIndex]) {
|
|
2155
2229
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
2156
2230
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2157
2231
|
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
2158
2232
|
} else {
|
|
2159
|
-
this.cbs.oncomment(this.sectionStart, this.index,
|
|
2233
|
+
this.cbs.oncomment(this.sectionStart, this.index, 3);
|
|
2160
2234
|
}
|
|
2161
2235
|
this.sequenceIndex = 0;
|
|
2162
2236
|
this.sectionStart = this.index + 1;
|
|
@@ -2175,34 +2249,72 @@ var Tokenizer = class {
|
|
|
2175
2249
|
*
|
|
2176
2250
|
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
|
|
2177
2251
|
* We allow anything that wouldn't end the tag.
|
|
2252
|
+
* @param c Current character code point.
|
|
2178
2253
|
*/
|
|
2179
2254
|
isTagStartChar(c) {
|
|
2180
2255
|
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
2181
2256
|
}
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2257
|
+
/**
|
|
2258
|
+
* Scan raw-text / RCDATA content for the matching end tag.
|
|
2259
|
+
*
|
|
2260
|
+
* For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.
|
|
2261
|
+
* For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.
|
|
2262
|
+
* @param c Current character code point.
|
|
2263
|
+
*/
|
|
2264
|
+
stateInSpecialTag(c) {
|
|
2265
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2266
|
+
if (isEndOfTagSection(c)) {
|
|
2267
|
+
const endOfText = this.index - this.currentSequence.length;
|
|
2268
|
+
if (this.sectionStart < endOfText) {
|
|
2269
|
+
const actualIndex = this.index;
|
|
2270
|
+
this.index = endOfText;
|
|
2271
|
+
this.cbs.ontext(this.sectionStart, endOfText);
|
|
2272
|
+
this.index = actualIndex;
|
|
2273
|
+
}
|
|
2274
|
+
this.isSpecial = false;
|
|
2275
|
+
this.sectionStart = endOfText + 2;
|
|
2276
|
+
this.stateInClosingTagName(c);
|
|
2277
|
+
return;
|
|
2278
|
+
}
|
|
2279
|
+
this.sequenceIndex = 0;
|
|
2280
|
+
}
|
|
2281
|
+
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2282
|
+
this.sequenceIndex += 1;
|
|
2283
|
+
} else if (this.sequenceIndex === 0) {
|
|
2284
|
+
if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
|
|
2285
|
+
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2286
|
+
this.startEntity();
|
|
2287
|
+
}
|
|
2288
|
+
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
2289
|
+
this.sequenceIndex = 1;
|
|
2290
|
+
}
|
|
2291
|
+
} else {
|
|
2292
|
+
this.sequenceIndex = Number(c === CharCodes2.Lt);
|
|
2293
|
+
}
|
|
2187
2294
|
}
|
|
2188
2295
|
stateBeforeTagName(c) {
|
|
2189
2296
|
if (c === CharCodes2.ExclamationMark) {
|
|
2190
2297
|
this.state = State.BeforeDeclaration;
|
|
2191
2298
|
this.sectionStart = this.index + 1;
|
|
2192
2299
|
} else if (c === CharCodes2.Questionmark) {
|
|
2193
|
-
this.
|
|
2194
|
-
|
|
2300
|
+
if (this.xmlMode) {
|
|
2301
|
+
this.state = State.InProcessingInstruction;
|
|
2302
|
+
this.sequenceIndex = 0;
|
|
2303
|
+
this.sectionStart = this.index + 1;
|
|
2304
|
+
} else {
|
|
2305
|
+
this.state = State.InSpecialComment;
|
|
2306
|
+
this.sectionStart = this.index;
|
|
2307
|
+
}
|
|
2195
2308
|
} else if (this.isTagStartChar(c)) {
|
|
2196
|
-
const lower = c | 32;
|
|
2197
2309
|
this.sectionStart = this.index;
|
|
2198
|
-
|
|
2310
|
+
const special = this.xmlMode || this.cbs.isInForeignContext?.() ? void 0 : specialStartSequences.get(c | 32);
|
|
2311
|
+
if (special === void 0) {
|
|
2199
2312
|
this.state = State.InTagName;
|
|
2200
|
-
} else if (lower === Sequences.ScriptEnd[2]) {
|
|
2201
|
-
this.state = State.BeforeSpecialS;
|
|
2202
|
-
} else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
|
|
2203
|
-
this.state = State.BeforeSpecialT;
|
|
2204
2313
|
} else {
|
|
2205
|
-
this.
|
|
2314
|
+
this.isSpecial = true;
|
|
2315
|
+
this.currentSequence = special;
|
|
2316
|
+
this.sequenceIndex = 3;
|
|
2317
|
+
this.state = State.SpecialStartSequence;
|
|
2206
2318
|
}
|
|
2207
2319
|
} else if (c === CharCodes2.Slash) {
|
|
2208
2320
|
this.state = State.BeforeClosingTagName;
|
|
@@ -2221,15 +2333,23 @@ var Tokenizer = class {
|
|
|
2221
2333
|
}
|
|
2222
2334
|
stateBeforeClosingTagName(c) {
|
|
2223
2335
|
if (isWhitespace(c)) {
|
|
2336
|
+
if (this.xmlMode) {
|
|
2337
|
+
} else {
|
|
2338
|
+
this.state = State.InSpecialComment;
|
|
2339
|
+
this.sectionStart = this.index;
|
|
2340
|
+
}
|
|
2224
2341
|
} else if (c === CharCodes2.Gt) {
|
|
2225
2342
|
this.state = State.Text;
|
|
2343
|
+
if (!this.xmlMode) {
|
|
2344
|
+
this.sectionStart = this.index + 1;
|
|
2345
|
+
}
|
|
2226
2346
|
} else {
|
|
2227
2347
|
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
2228
2348
|
this.sectionStart = this.index;
|
|
2229
2349
|
}
|
|
2230
2350
|
}
|
|
2231
2351
|
stateInClosingTagName(c) {
|
|
2232
|
-
if (
|
|
2352
|
+
if (isEndOfTagSection(c)) {
|
|
2233
2353
|
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
2234
2354
|
this.sectionStart = -1;
|
|
2235
2355
|
this.state = State.AfterClosingTagName;
|
|
@@ -2245,12 +2365,7 @@ var Tokenizer = class {
|
|
|
2245
2365
|
stateBeforeAttributeName(c) {
|
|
2246
2366
|
if (c === CharCodes2.Gt) {
|
|
2247
2367
|
this.cbs.onopentagend(this.index);
|
|
2248
|
-
|
|
2249
|
-
this.state = State.InSpecialTag;
|
|
2250
|
-
this.sequenceIndex = 0;
|
|
2251
|
-
} else {
|
|
2252
|
-
this.state = State.Text;
|
|
2253
|
-
}
|
|
2368
|
+
this.enterTagBody();
|
|
2254
2369
|
this.sectionStart = this.index + 1;
|
|
2255
2370
|
} else if (c === CharCodes2.Slash) {
|
|
2256
2371
|
this.state = State.InSelfClosingTag;
|
|
@@ -2259,12 +2374,26 @@ var Tokenizer = class {
|
|
|
2259
2374
|
this.sectionStart = this.index;
|
|
2260
2375
|
}
|
|
2261
2376
|
}
|
|
2377
|
+
/**
|
|
2378
|
+
* Handle `/` before `>` in an opening tag.
|
|
2379
|
+
*
|
|
2380
|
+
* In HTML mode, text-only tags ignore the self-closing flag and still enter
|
|
2381
|
+
* their raw-text/RCDATA/plaintext state unless self-closing tags are being
|
|
2382
|
+
* recognized. In XML mode, or for ordinary tags, the tokenizer returns to
|
|
2383
|
+
* regular text parsing after emitting the self-closing callback.
|
|
2384
|
+
* @param c Current character code point.
|
|
2385
|
+
*/
|
|
2262
2386
|
stateInSelfClosingTag(c) {
|
|
2263
2387
|
if (c === CharCodes2.Gt) {
|
|
2264
2388
|
this.cbs.onselfclosingtag(this.index);
|
|
2265
|
-
this.state = State.Text;
|
|
2266
2389
|
this.sectionStart = this.index + 1;
|
|
2390
|
+
if (!this.recognizeSelfClosing) {
|
|
2391
|
+
this.enterTagBody();
|
|
2392
|
+
return;
|
|
2393
|
+
}
|
|
2394
|
+
this.state = State.Text;
|
|
2267
2395
|
this.isSpecial = false;
|
|
2396
|
+
this.currentSequence = Sequences.Empty;
|
|
2268
2397
|
} else if (!isWhitespace(c)) {
|
|
2269
2398
|
this.state = State.BeforeAttributeName;
|
|
2270
2399
|
this.stateBeforeAttributeName(c);
|
|
@@ -2332,12 +2461,54 @@ var Tokenizer = class {
|
|
|
2332
2461
|
this.startEntity();
|
|
2333
2462
|
}
|
|
2334
2463
|
}
|
|
2464
|
+
/**
|
|
2465
|
+
* Distinguish between CDATA, declarations, HTML comments, and HTML bogus
|
|
2466
|
+
* comments after `<!`.
|
|
2467
|
+
*
|
|
2468
|
+
* In HTML mode, only real comments and doctypes stay on declaration paths;
|
|
2469
|
+
* everything else becomes a bogus comment terminated by the next `>`.
|
|
2470
|
+
* @param c Current character code point.
|
|
2471
|
+
*/
|
|
2335
2472
|
stateBeforeDeclaration(c) {
|
|
2336
2473
|
if (c === CharCodes2.OpeningSquareBracket) {
|
|
2337
2474
|
this.state = State.CDATASequence;
|
|
2338
2475
|
this.sequenceIndex = 0;
|
|
2339
|
-
} else {
|
|
2476
|
+
} else if (this.xmlMode) {
|
|
2340
2477
|
this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2478
|
+
} else if ((c | 32) === Sequences.Doctype[0]) {
|
|
2479
|
+
this.state = State.DeclarationSequence;
|
|
2480
|
+
this.currentSequence = Sequences.Doctype;
|
|
2481
|
+
this.sequenceIndex = 1;
|
|
2482
|
+
} else if (c === CharCodes2.Gt) {
|
|
2483
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2484
|
+
this.state = State.Text;
|
|
2485
|
+
this.sectionStart = this.index + 1;
|
|
2486
|
+
} else if (c === CharCodes2.Dash) {
|
|
2487
|
+
this.state = State.BeforeComment;
|
|
2488
|
+
} else {
|
|
2489
|
+
this.state = State.InSpecialComment;
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
/**
|
|
2493
|
+
* Continue matching `doctype` after `<!d`.
|
|
2494
|
+
*
|
|
2495
|
+
* A full `doctype` match stays on the declaration path; any other name falls
|
|
2496
|
+
* back to an HTML bogus comment, which matches browser behavior for
|
|
2497
|
+
* non-doctype `<!...>` constructs.
|
|
2498
|
+
* @param c Current character code point.
|
|
2499
|
+
*/
|
|
2500
|
+
stateDeclarationSequence(c) {
|
|
2501
|
+
if (this.sequenceIndex === this.currentSequence.length) {
|
|
2502
|
+
this.state = State.InDeclaration;
|
|
2503
|
+
this.stateInDeclaration(c);
|
|
2504
|
+
} else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2505
|
+
this.sequenceIndex += 1;
|
|
2506
|
+
} else if (c === CharCodes2.Gt) {
|
|
2507
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2508
|
+
this.state = State.Text;
|
|
2509
|
+
this.sectionStart = this.index + 1;
|
|
2510
|
+
} else {
|
|
2511
|
+
this.state = State.InSpecialComment;
|
|
2341
2512
|
}
|
|
2342
2513
|
}
|
|
2343
2514
|
stateInDeclaration(c) {
|
|
@@ -2347,21 +2518,39 @@ var Tokenizer = class {
|
|
|
2347
2518
|
this.sectionStart = this.index + 1;
|
|
2348
2519
|
}
|
|
2349
2520
|
}
|
|
2521
|
+
/**
|
|
2522
|
+
* XML processing instructions (`<?...?>`).
|
|
2523
|
+
*
|
|
2524
|
+
* In HTML mode `<?` is routed to `InSpecialComment` instead, so this
|
|
2525
|
+
* state is only reachable in XML mode.
|
|
2526
|
+
* @param c Current character code point.
|
|
2527
|
+
*/
|
|
2350
2528
|
stateInProcessingInstruction(c) {
|
|
2351
|
-
if (c === CharCodes2.
|
|
2352
|
-
this.
|
|
2529
|
+
if (c === CharCodes2.Questionmark) {
|
|
2530
|
+
this.sequenceIndex = 1;
|
|
2531
|
+
} else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
|
|
2532
|
+
this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
|
|
2533
|
+
this.sequenceIndex = 0;
|
|
2353
2534
|
this.state = State.Text;
|
|
2354
2535
|
this.sectionStart = this.index + 1;
|
|
2536
|
+
} else {
|
|
2537
|
+
this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
|
|
2355
2538
|
}
|
|
2356
2539
|
}
|
|
2357
2540
|
stateBeforeComment(c) {
|
|
2358
2541
|
if (c === CharCodes2.Dash) {
|
|
2359
2542
|
this.state = State.InCommentLike;
|
|
2360
2543
|
this.currentSequence = Sequences.CommentEnd;
|
|
2361
|
-
this.sequenceIndex =
|
|
2544
|
+
this.sequenceIndex = 0;
|
|
2362
2545
|
this.sectionStart = this.index + 1;
|
|
2363
|
-
} else {
|
|
2546
|
+
} else if (this.xmlMode) {
|
|
2364
2547
|
this.state = State.InDeclaration;
|
|
2548
|
+
} else if (c === CharCodes2.Gt) {
|
|
2549
|
+
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2550
|
+
this.state = State.Text;
|
|
2551
|
+
this.sectionStart = this.index + 1;
|
|
2552
|
+
} else {
|
|
2553
|
+
this.state = State.InSpecialComment;
|
|
2365
2554
|
}
|
|
2366
2555
|
}
|
|
2367
2556
|
stateInSpecialComment(c) {
|
|
@@ -2371,38 +2560,6 @@ var Tokenizer = class {
|
|
|
2371
2560
|
this.sectionStart = this.index + 1;
|
|
2372
2561
|
}
|
|
2373
2562
|
}
|
|
2374
|
-
stateBeforeSpecialS(c) {
|
|
2375
|
-
const lower = c | 32;
|
|
2376
|
-
if (lower === Sequences.ScriptEnd[3]) {
|
|
2377
|
-
this.startSpecial(Sequences.ScriptEnd, 4);
|
|
2378
|
-
} else if (lower === Sequences.StyleEnd[3]) {
|
|
2379
|
-
this.startSpecial(Sequences.StyleEnd, 4);
|
|
2380
|
-
} else {
|
|
2381
|
-
this.state = State.InTagName;
|
|
2382
|
-
this.stateInTagName(c);
|
|
2383
|
-
}
|
|
2384
|
-
}
|
|
2385
|
-
stateBeforeSpecialT(c) {
|
|
2386
|
-
const lower = c | 32;
|
|
2387
|
-
switch (lower) {
|
|
2388
|
-
case Sequences.TitleEnd[3]: {
|
|
2389
|
-
this.startSpecial(Sequences.TitleEnd, 4);
|
|
2390
|
-
break;
|
|
2391
|
-
}
|
|
2392
|
-
case Sequences.TextareaEnd[3]: {
|
|
2393
|
-
this.startSpecial(Sequences.TextareaEnd, 4);
|
|
2394
|
-
break;
|
|
2395
|
-
}
|
|
2396
|
-
case Sequences.XmpEnd[3]: {
|
|
2397
|
-
this.startSpecial(Sequences.XmpEnd, 4);
|
|
2398
|
-
break;
|
|
2399
|
-
}
|
|
2400
|
-
default: {
|
|
2401
|
-
this.state = State.InTagName;
|
|
2402
|
-
this.stateInTagName(c);
|
|
2403
|
-
}
|
|
2404
|
-
}
|
|
2405
|
-
}
|
|
2406
2563
|
startEntity() {
|
|
2407
2564
|
this.baseState = this.state;
|
|
2408
2565
|
this.state = State.InEntity;
|
|
@@ -2431,7 +2588,7 @@ var Tokenizer = class {
|
|
|
2431
2588
|
*/
|
|
2432
2589
|
cleanup() {
|
|
2433
2590
|
if (this.running && this.sectionStart !== this.index) {
|
|
2434
|
-
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2591
|
+
if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
2435
2592
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
2436
2593
|
this.sectionStart = this.index;
|
|
2437
2594
|
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
@@ -2456,6 +2613,10 @@ var Tokenizer = class {
|
|
|
2456
2613
|
this.stateText(c);
|
|
2457
2614
|
break;
|
|
2458
2615
|
}
|
|
2616
|
+
case State.InPlainText: {
|
|
2617
|
+
this.index = this.buffer.length + this.offset - 1;
|
|
2618
|
+
break;
|
|
2619
|
+
}
|
|
2459
2620
|
case State.SpecialStartSequence: {
|
|
2460
2621
|
this.stateSpecialStartSequence(c);
|
|
2461
2622
|
break;
|
|
@@ -2468,6 +2629,10 @@ var Tokenizer = class {
|
|
|
2468
2629
|
this.stateCDATASequence(c);
|
|
2469
2630
|
break;
|
|
2470
2631
|
}
|
|
2632
|
+
case State.DeclarationSequence: {
|
|
2633
|
+
this.stateDeclarationSequence(c);
|
|
2634
|
+
break;
|
|
2635
|
+
}
|
|
2471
2636
|
case State.InAttributeValueDq: {
|
|
2472
2637
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
2473
2638
|
break;
|
|
@@ -2520,14 +2685,6 @@ var Tokenizer = class {
|
|
|
2520
2685
|
this.stateAfterClosingTagName(c);
|
|
2521
2686
|
break;
|
|
2522
2687
|
}
|
|
2523
|
-
case State.BeforeSpecialS: {
|
|
2524
|
-
this.stateBeforeSpecialS(c);
|
|
2525
|
-
break;
|
|
2526
|
-
}
|
|
2527
|
-
case State.BeforeSpecialT: {
|
|
2528
|
-
this.stateBeforeSpecialT(c);
|
|
2529
|
-
break;
|
|
2530
|
-
}
|
|
2531
2688
|
case State.InAttributeValueNq: {
|
|
2532
2689
|
this.stateInAttributeValueNoQuotes(c);
|
|
2533
2690
|
break;
|
|
@@ -2569,43 +2726,110 @@ var Tokenizer = class {
|
|
|
2569
2726
|
this.handleTrailingData();
|
|
2570
2727
|
this.cbs.onend();
|
|
2571
2728
|
}
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
if (this.sectionStart >= endIndex) {
|
|
2576
|
-
return;
|
|
2729
|
+
handleTrailingCommentLikeData(endIndex) {
|
|
2730
|
+
if (this.state !== State.InCommentLike) {
|
|
2731
|
+
return false;
|
|
2577
2732
|
}
|
|
2578
|
-
if (this.
|
|
2579
|
-
if (this.
|
|
2580
|
-
|
|
2733
|
+
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2734
|
+
if (this.xmlMode) {
|
|
2735
|
+
if (this.sectionStart < endIndex) {
|
|
2736
|
+
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
2737
|
+
}
|
|
2581
2738
|
} else {
|
|
2582
|
-
this.
|
|
2739
|
+
const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
|
|
2740
|
+
this.cbs.oncomment(cdataStart, endIndex, 0);
|
|
2583
2741
|
}
|
|
2584
|
-
} 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) {
|
|
2585
2742
|
} else {
|
|
2586
|
-
this.
|
|
2743
|
+
const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
|
|
2744
|
+
this.cbs.oncomment(this.sectionStart, endIndex, offset);
|
|
2587
2745
|
}
|
|
2746
|
+
return true;
|
|
2588
2747
|
}
|
|
2589
|
-
|
|
2590
|
-
if (this.
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2748
|
+
handleTrailingMarkupDeclaration(endIndex) {
|
|
2749
|
+
if (this.xmlMode) {
|
|
2750
|
+
switch (this.state) {
|
|
2751
|
+
case State.InSpecialComment:
|
|
2752
|
+
case State.BeforeComment:
|
|
2753
|
+
case State.CDATASequence:
|
|
2754
|
+
case State.DeclarationSequence:
|
|
2755
|
+
case State.InDeclaration: {
|
|
2756
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2757
|
+
return true;
|
|
2758
|
+
}
|
|
2759
|
+
default: {
|
|
2760
|
+
return false;
|
|
2761
|
+
}
|
|
2762
|
+
}
|
|
2763
|
+
}
|
|
2764
|
+
switch (this.state) {
|
|
2765
|
+
case State.BeforeDeclaration:
|
|
2766
|
+
case State.InSpecialComment:
|
|
2767
|
+
case State.BeforeComment:
|
|
2768
|
+
case State.CDATASequence: {
|
|
2769
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2770
|
+
return true;
|
|
2771
|
+
}
|
|
2772
|
+
case State.DeclarationSequence: {
|
|
2773
|
+
if (this.sequenceIndex !== Sequences.Doctype.length) {
|
|
2774
|
+
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2775
|
+
}
|
|
2776
|
+
return true;
|
|
2777
|
+
}
|
|
2778
|
+
case State.InDeclaration: {
|
|
2779
|
+
return true;
|
|
2780
|
+
}
|
|
2781
|
+
default: {
|
|
2782
|
+
return false;
|
|
2783
|
+
}
|
|
2784
|
+
}
|
|
2785
|
+
}
|
|
2786
|
+
/** Handle any trailing data. */
|
|
2787
|
+
handleTrailingData() {
|
|
2788
|
+
const endIndex = this.buffer.length + this.offset;
|
|
2789
|
+
if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
|
|
2790
|
+
return;
|
|
2791
|
+
}
|
|
2792
|
+
if (this.sectionStart >= endIndex) {
|
|
2793
|
+
return;
|
|
2794
|
+
}
|
|
2795
|
+
switch (this.state) {
|
|
2796
|
+
case State.InTagName:
|
|
2797
|
+
case State.BeforeAttributeName:
|
|
2798
|
+
case State.BeforeAttributeValue:
|
|
2799
|
+
case State.AfterAttributeName:
|
|
2800
|
+
case State.InAttributeName:
|
|
2801
|
+
case State.InAttributeValueSq:
|
|
2802
|
+
case State.InAttributeValueDq:
|
|
2803
|
+
case State.InAttributeValueNq:
|
|
2804
|
+
case State.InClosingTagName: {
|
|
2805
|
+
break;
|
|
2806
|
+
}
|
|
2807
|
+
default: {
|
|
2808
|
+
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2600
2809
|
}
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2810
|
+
}
|
|
2811
|
+
}
|
|
2812
|
+
emitCodePoint(cp, consumed) {
|
|
2813
|
+
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
2814
|
+
if (this.sectionStart < this.entityStart) {
|
|
2815
|
+
this.cbs.onattribdata(this.sectionStart, this.entityStart);
|
|
2816
|
+
}
|
|
2817
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2818
|
+
this.index = this.sectionStart - 1;
|
|
2819
|
+
this.cbs.onattribentity(cp);
|
|
2820
|
+
} else {
|
|
2821
|
+
if (this.sectionStart < this.entityStart) {
|
|
2822
|
+
this.cbs.ontext(this.sectionStart, this.entityStart);
|
|
2823
|
+
}
|
|
2824
|
+
this.sectionStart = this.entityStart + consumed;
|
|
2825
|
+
this.index = this.sectionStart - 1;
|
|
2826
|
+
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2604
2827
|
}
|
|
2605
2828
|
}
|
|
2606
2829
|
};
|
|
2607
2830
|
|
|
2608
|
-
// node_modules/.pnpm/htmlparser2@
|
|
2831
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/Parser.js
|
|
2832
|
+
var { fromCodePoint } = String;
|
|
2609
2833
|
var formTags = /* @__PURE__ */ new Set([
|
|
2610
2834
|
"input",
|
|
2611
2835
|
"option",
|
|
@@ -2616,6 +2840,7 @@ var formTags = /* @__PURE__ */ new Set([
|
|
|
2616
2840
|
"textarea"
|
|
2617
2841
|
]);
|
|
2618
2842
|
var pTag = /* @__PURE__ */ new Set(["p"]);
|
|
2843
|
+
var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6", "p"]);
|
|
2619
2844
|
var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
|
|
2620
2845
|
var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
|
|
2621
2846
|
var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
|
|
@@ -2624,14 +2849,15 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2624
2849
|
["th", /* @__PURE__ */ new Set(["th"])],
|
|
2625
2850
|
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
|
|
2626
2851
|
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
|
|
2852
|
+
["a", /* @__PURE__ */ new Set(["a"])],
|
|
2627
2853
|
["li", /* @__PURE__ */ new Set(["li"])],
|
|
2628
2854
|
["p", pTag],
|
|
2629
|
-
["h1",
|
|
2630
|
-
["h2",
|
|
2631
|
-
["h3",
|
|
2632
|
-
["h4",
|
|
2633
|
-
["h5",
|
|
2634
|
-
["h6",
|
|
2855
|
+
["h1", headingTags],
|
|
2856
|
+
["h2", headingTags],
|
|
2857
|
+
["h3", headingTags],
|
|
2858
|
+
["h4", headingTags],
|
|
2859
|
+
["h5", headingTags],
|
|
2860
|
+
["h6", headingTags],
|
|
2635
2861
|
["select", formTags],
|
|
2636
2862
|
["input", formTags],
|
|
2637
2863
|
["output", formTags],
|
|
@@ -2668,6 +2894,7 @@ var openImpliesClose = /* @__PURE__ */ new Map([
|
|
|
2668
2894
|
["tbody", tableSectionTags],
|
|
2669
2895
|
["tfoot", tableSectionTags]
|
|
2670
2896
|
]);
|
|
2897
|
+
var DOCUMENT_TYPE = "doctype";
|
|
2671
2898
|
var voidElements = /* @__PURE__ */ new Set([
|
|
2672
2899
|
"area",
|
|
2673
2900
|
"base",
|
|
@@ -2697,98 +2924,201 @@ var htmlIntegrationElements = /* @__PURE__ */ new Set([
|
|
|
2697
2924
|
"ms",
|
|
2698
2925
|
"mtext",
|
|
2699
2926
|
"annotation-xml",
|
|
2700
|
-
"
|
|
2927
|
+
"foreignObject",
|
|
2701
2928
|
"desc",
|
|
2702
2929
|
"title"
|
|
2703
2930
|
]);
|
|
2931
|
+
var svgTagNameAdjustments = /* @__PURE__ */ new Map([
|
|
2932
|
+
["altglyph", "altGlyph"],
|
|
2933
|
+
["altglyphdef", "altGlyphDef"],
|
|
2934
|
+
["altglyphitem", "altGlyphItem"],
|
|
2935
|
+
["animatecolor", "animateColor"],
|
|
2936
|
+
["animatemotion", "animateMotion"],
|
|
2937
|
+
["animatetransform", "animateTransform"],
|
|
2938
|
+
["clippath", "clipPath"],
|
|
2939
|
+
["feblend", "feBlend"],
|
|
2940
|
+
["fecolormatrix", "feColorMatrix"],
|
|
2941
|
+
["fecomponenttransfer", "feComponentTransfer"],
|
|
2942
|
+
["fecomposite", "feComposite"],
|
|
2943
|
+
["feconvolvematrix", "feConvolveMatrix"],
|
|
2944
|
+
["fediffuselighting", "feDiffuseLighting"],
|
|
2945
|
+
["fedisplacementmap", "feDisplacementMap"],
|
|
2946
|
+
["fedistantlight", "feDistantLight"],
|
|
2947
|
+
["fedropshadow", "feDropShadow"],
|
|
2948
|
+
["feflood", "feFlood"],
|
|
2949
|
+
["fefunca", "feFuncA"],
|
|
2950
|
+
["fefuncb", "feFuncB"],
|
|
2951
|
+
["fefuncg", "feFuncG"],
|
|
2952
|
+
["fefuncr", "feFuncR"],
|
|
2953
|
+
["fegaussianblur", "feGaussianBlur"],
|
|
2954
|
+
["feimage", "feImage"],
|
|
2955
|
+
["femerge", "feMerge"],
|
|
2956
|
+
["femergenode", "feMergeNode"],
|
|
2957
|
+
["femorphology", "feMorphology"],
|
|
2958
|
+
["feoffset", "feOffset"],
|
|
2959
|
+
["fepointlight", "fePointLight"],
|
|
2960
|
+
["fespecularlighting", "feSpecularLighting"],
|
|
2961
|
+
["fespotlight", "feSpotLight"],
|
|
2962
|
+
["fetile", "feTile"],
|
|
2963
|
+
["feturbulence", "feTurbulence"],
|
|
2964
|
+
["foreignobject", "foreignObject"],
|
|
2965
|
+
["glyphref", "glyphRef"],
|
|
2966
|
+
["lineargradient", "linearGradient"],
|
|
2967
|
+
["radialgradient", "radialGradient"],
|
|
2968
|
+
["textpath", "textPath"]
|
|
2969
|
+
]);
|
|
2970
|
+
var ForeignContext;
|
|
2971
|
+
(function(ForeignContext2) {
|
|
2972
|
+
ForeignContext2[ForeignContext2["None"] = 0] = "None";
|
|
2973
|
+
ForeignContext2[ForeignContext2["Svg"] = 1] = "Svg";
|
|
2974
|
+
ForeignContext2[ForeignContext2["MathML"] = 2] = "MathML";
|
|
2975
|
+
})(ForeignContext || (ForeignContext = {}));
|
|
2704
2976
|
var reNameEnd = /\s|\//;
|
|
2705
2977
|
var Parser = class {
|
|
2978
|
+
options;
|
|
2979
|
+
/** The start index of the last event. */
|
|
2980
|
+
startIndex = 0;
|
|
2981
|
+
/** The end index of the last event. */
|
|
2982
|
+
endIndex = 0;
|
|
2983
|
+
/**
|
|
2984
|
+
* Store the start index of the current open tag,
|
|
2985
|
+
* so we can update the start index for attributes.
|
|
2986
|
+
*/
|
|
2987
|
+
openTagStart = 0;
|
|
2988
|
+
tagname = "";
|
|
2989
|
+
attribname = "";
|
|
2990
|
+
attribvalue = "";
|
|
2991
|
+
attribs = null;
|
|
2992
|
+
stack = [];
|
|
2993
|
+
foreignContext;
|
|
2994
|
+
cbs;
|
|
2995
|
+
lowerCaseTagNames;
|
|
2996
|
+
lowerCaseAttributeNames;
|
|
2997
|
+
recognizeSelfClosing;
|
|
2998
|
+
/** We are parsing HTML. Inverse of the `xmlMode` option. */
|
|
2999
|
+
htmlMode;
|
|
3000
|
+
tokenizer;
|
|
3001
|
+
buffers = [];
|
|
3002
|
+
bufferOffset = 0;
|
|
3003
|
+
/** The index of the last written buffer. Used when resuming after a `pause()`. */
|
|
3004
|
+
writeIndex = 0;
|
|
3005
|
+
/** Indicates whether the parser has finished running / `.end` has been called. */
|
|
3006
|
+
ended = false;
|
|
2706
3007
|
constructor(cbs, options = {}) {
|
|
2707
|
-
var _a3, _b, _c, _d, _e, _f;
|
|
2708
3008
|
this.options = options;
|
|
2709
|
-
this.
|
|
2710
|
-
this.endIndex = 0;
|
|
2711
|
-
this.openTagStart = 0;
|
|
2712
|
-
this.tagname = "";
|
|
2713
|
-
this.attribname = "";
|
|
2714
|
-
this.attribvalue = "";
|
|
2715
|
-
this.attribs = null;
|
|
2716
|
-
this.stack = [];
|
|
2717
|
-
this.buffers = [];
|
|
2718
|
-
this.bufferOffset = 0;
|
|
2719
|
-
this.writeIndex = 0;
|
|
2720
|
-
this.ended = false;
|
|
2721
|
-
this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
|
|
3009
|
+
this.cbs = cbs ?? {};
|
|
2722
3010
|
this.htmlMode = !this.options.xmlMode;
|
|
2723
|
-
this.lowerCaseTagNames =
|
|
2724
|
-
this.lowerCaseAttributeNames =
|
|
2725
|
-
this.recognizeSelfClosing =
|
|
2726
|
-
this.tokenizer = new (
|
|
2727
|
-
this.foreignContext = [
|
|
2728
|
-
|
|
3011
|
+
this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;
|
|
3012
|
+
this.lowerCaseAttributeNames = options.lowerCaseAttributeNames ?? this.htmlMode;
|
|
3013
|
+
this.recognizeSelfClosing = options.recognizeSelfClosing ?? !this.htmlMode;
|
|
3014
|
+
this.tokenizer = new (options.Tokenizer ?? Tokenizer)(this.options, this);
|
|
3015
|
+
this.foreignContext = [ForeignContext.None];
|
|
3016
|
+
this.cbs.onparserinit?.(this);
|
|
2729
3017
|
}
|
|
2730
3018
|
// Tokenizer event handlers
|
|
2731
|
-
/**
|
|
3019
|
+
/**
|
|
3020
|
+
* @param start Start index for the current parser event.
|
|
3021
|
+
* @param endIndex End index for the current parser event.
|
|
3022
|
+
* @internal
|
|
3023
|
+
*/
|
|
2732
3024
|
ontext(start, endIndex) {
|
|
2733
|
-
var _a3, _b;
|
|
2734
3025
|
const data = this.getSlice(start, endIndex);
|
|
2735
3026
|
this.endIndex = endIndex - 1;
|
|
2736
|
-
|
|
3027
|
+
this.cbs.ontext?.(data);
|
|
2737
3028
|
this.startIndex = endIndex;
|
|
2738
3029
|
}
|
|
2739
|
-
/**
|
|
3030
|
+
/**
|
|
3031
|
+
* @param cp Current Unicode code point.
|
|
3032
|
+
* @param endIndex End index for the current parser event.
|
|
3033
|
+
* @internal
|
|
3034
|
+
*/
|
|
2740
3035
|
ontextentity(cp, endIndex) {
|
|
2741
|
-
var _a3, _b;
|
|
2742
3036
|
this.endIndex = endIndex - 1;
|
|
2743
|
-
|
|
3037
|
+
this.cbs.ontext?.(fromCodePoint(cp));
|
|
2744
3038
|
this.startIndex = endIndex;
|
|
2745
3039
|
}
|
|
3040
|
+
/** @internal */
|
|
3041
|
+
isInForeignContext() {
|
|
3042
|
+
return this.foreignContext[0] !== ForeignContext.None;
|
|
3043
|
+
}
|
|
2746
3044
|
/**
|
|
2747
3045
|
* Checks if the current tag is a void element. Override this if you want
|
|
2748
3046
|
* to specify your own additional void elements.
|
|
3047
|
+
* @param name Name of the pseudo selector.
|
|
2749
3048
|
*/
|
|
2750
3049
|
isVoidElement(name) {
|
|
2751
3050
|
return this.htmlMode && voidElements.has(name);
|
|
2752
3051
|
}
|
|
2753
|
-
/**
|
|
3052
|
+
/**
|
|
3053
|
+
* Read a tag name from the buffer.
|
|
3054
|
+
*
|
|
3055
|
+
* When `lowerCaseTagNames` is enabled (the default in HTML mode), the name
|
|
3056
|
+
* is lowercased and may be adjusted for SVG casing or the `image` → `img`
|
|
3057
|
+
* alias.
|
|
3058
|
+
* @param start Start index of the tag name in the buffer.
|
|
3059
|
+
* @param endIndex End index of the tag name in the buffer.
|
|
3060
|
+
*/
|
|
3061
|
+
readTagName(start, endIndex) {
|
|
3062
|
+
const name = this.lowerCaseTagNames ? this.getSlice(start, endIndex).toLowerCase() : this.getSlice(start, endIndex);
|
|
3063
|
+
if (!(this.lowerCaseTagNames && this.htmlMode)) {
|
|
3064
|
+
return name;
|
|
3065
|
+
}
|
|
3066
|
+
if (this.foreignContext[0] === ForeignContext.Svg) {
|
|
3067
|
+
return svgTagNameAdjustments.get(name) ?? name;
|
|
3068
|
+
}
|
|
3069
|
+
if (this.foreignContext.length > 1) {
|
|
3070
|
+
const adjusted = svgTagNameAdjustments.get(name);
|
|
3071
|
+
if (adjusted !== void 0 && this.stack.includes(adjusted)) {
|
|
3072
|
+
return adjusted;
|
|
3073
|
+
}
|
|
3074
|
+
}
|
|
3075
|
+
if (!this.isInForeignContext()) {
|
|
3076
|
+
return name === "image" ? "img" : name;
|
|
3077
|
+
}
|
|
3078
|
+
return name;
|
|
3079
|
+
}
|
|
3080
|
+
/**
|
|
3081
|
+
* @param start Start index for the current parser event.
|
|
3082
|
+
* @param endIndex End index for the current parser event.
|
|
3083
|
+
* @internal
|
|
3084
|
+
*/
|
|
2754
3085
|
onopentagname(start, endIndex) {
|
|
2755
3086
|
this.endIndex = endIndex;
|
|
2756
|
-
|
|
2757
|
-
if (this.lowerCaseTagNames) {
|
|
2758
|
-
name = name.toLowerCase();
|
|
2759
|
-
}
|
|
2760
|
-
this.emitOpenTag(name);
|
|
3087
|
+
this.emitOpenTag(this.readTagName(start, endIndex));
|
|
2761
3088
|
}
|
|
2762
3089
|
emitOpenTag(name) {
|
|
2763
|
-
var _a3, _b, _c, _d;
|
|
2764
3090
|
this.openTagStart = this.startIndex;
|
|
2765
3091
|
this.tagname = name;
|
|
3092
|
+
if (this.htmlMode && name === "form" && this.stack.includes("form")) {
|
|
3093
|
+
this.tagname = "";
|
|
3094
|
+
return;
|
|
3095
|
+
}
|
|
2766
3096
|
const impliesClose = this.htmlMode && openImpliesClose.get(name);
|
|
2767
3097
|
if (impliesClose) {
|
|
2768
3098
|
while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
|
|
2769
|
-
|
|
2770
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
|
|
3099
|
+
this.popElement(true);
|
|
2771
3100
|
}
|
|
2772
3101
|
}
|
|
2773
3102
|
if (!this.isVoidElement(name)) {
|
|
2774
3103
|
this.stack.unshift(name);
|
|
2775
3104
|
if (this.htmlMode) {
|
|
2776
|
-
if (
|
|
2777
|
-
this.foreignContext.unshift(
|
|
3105
|
+
if (name === "svg") {
|
|
3106
|
+
this.foreignContext.unshift(ForeignContext.Svg);
|
|
3107
|
+
} else if (name === "math") {
|
|
3108
|
+
this.foreignContext.unshift(ForeignContext.MathML);
|
|
2778
3109
|
} else if (htmlIntegrationElements.has(name)) {
|
|
2779
|
-
this.foreignContext.unshift(
|
|
3110
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2780
3111
|
}
|
|
2781
3112
|
}
|
|
2782
3113
|
}
|
|
2783
|
-
|
|
3114
|
+
this.cbs.onopentagname?.(name);
|
|
2784
3115
|
if (this.cbs.onopentag)
|
|
2785
3116
|
this.attribs = {};
|
|
2786
3117
|
}
|
|
2787
3118
|
endOpenTag(isImplied) {
|
|
2788
|
-
var _a3, _b;
|
|
2789
3119
|
this.startIndex = this.openTagStart;
|
|
2790
3120
|
if (this.attribs) {
|
|
2791
|
-
|
|
3121
|
+
this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);
|
|
2792
3122
|
this.attribs = null;
|
|
2793
3123
|
}
|
|
2794
3124
|
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
@@ -2796,80 +3126,107 @@ var Parser = class {
|
|
|
2796
3126
|
}
|
|
2797
3127
|
this.tagname = "";
|
|
2798
3128
|
}
|
|
2799
|
-
/**
|
|
3129
|
+
/**
|
|
3130
|
+
* @param endIndex End index for the current parser event.
|
|
3131
|
+
* @internal
|
|
3132
|
+
*/
|
|
2800
3133
|
onopentagend(endIndex) {
|
|
2801
3134
|
this.endIndex = endIndex;
|
|
2802
3135
|
this.endOpenTag(false);
|
|
2803
3136
|
this.startIndex = endIndex + 1;
|
|
2804
3137
|
}
|
|
2805
|
-
/**
|
|
3138
|
+
/**
|
|
3139
|
+
* @param start Start index for the current parser event.
|
|
3140
|
+
* @param endIndex End index for the current parser event.
|
|
3141
|
+
* @internal
|
|
3142
|
+
*/
|
|
2806
3143
|
onclosetag(start, endIndex) {
|
|
2807
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h;
|
|
2808
3144
|
this.endIndex = endIndex;
|
|
2809
|
-
|
|
2810
|
-
if (this.lowerCaseTagNames) {
|
|
2811
|
-
name = name.toLowerCase();
|
|
2812
|
-
}
|
|
2813
|
-
if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
|
|
2814
|
-
this.foreignContext.shift();
|
|
2815
|
-
}
|
|
3145
|
+
const name = this.readTagName(start, endIndex);
|
|
2816
3146
|
if (!this.isVoidElement(name)) {
|
|
2817
3147
|
const pos = this.stack.indexOf(name);
|
|
2818
3148
|
if (pos !== -1) {
|
|
2819
|
-
for (let index = 0; index
|
|
2820
|
-
|
|
2821
|
-
(_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
|
|
3149
|
+
for (let index = 0; index < pos; index++) {
|
|
3150
|
+
this.popElement(true);
|
|
2822
3151
|
}
|
|
3152
|
+
this.popElement(false);
|
|
2823
3153
|
} else if (this.htmlMode && name === "p") {
|
|
2824
3154
|
this.emitOpenTag("p");
|
|
2825
3155
|
this.closeCurrentTag(true);
|
|
2826
3156
|
}
|
|
2827
3157
|
} else if (this.htmlMode && name === "br") {
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
3158
|
+
this.cbs.onopentagname?.("br");
|
|
3159
|
+
this.cbs.onopentag?.("br", {}, true);
|
|
3160
|
+
this.cbs.onclosetag?.("br", false);
|
|
2831
3161
|
}
|
|
2832
3162
|
this.startIndex = endIndex + 1;
|
|
2833
3163
|
}
|
|
2834
|
-
/**
|
|
3164
|
+
/**
|
|
3165
|
+
* @param endIndex End index for the current parser event.
|
|
3166
|
+
* @internal
|
|
3167
|
+
*/
|
|
2835
3168
|
onselfclosingtag(endIndex) {
|
|
2836
3169
|
this.endIndex = endIndex;
|
|
2837
|
-
if (this.recognizeSelfClosing || this.
|
|
3170
|
+
if (this.recognizeSelfClosing || this.isInForeignContext()) {
|
|
2838
3171
|
this.closeCurrentTag(false);
|
|
2839
3172
|
this.startIndex = endIndex + 1;
|
|
2840
3173
|
} else {
|
|
2841
3174
|
this.onopentagend(endIndex);
|
|
2842
3175
|
}
|
|
2843
3176
|
}
|
|
3177
|
+
/**
|
|
3178
|
+
* Pop the top element off the stack, emit a close event, and maintain
|
|
3179
|
+
* the foreign context stack.
|
|
3180
|
+
* @param implied Whether this close is implied (not from an explicit end tag).
|
|
3181
|
+
*/
|
|
3182
|
+
popElement(implied) {
|
|
3183
|
+
const element = this.stack.shift();
|
|
3184
|
+
if (this.htmlMode && (foreignContextElements.has(element) || htmlIntegrationElements.has(element))) {
|
|
3185
|
+
this.foreignContext.shift();
|
|
3186
|
+
}
|
|
3187
|
+
this.cbs.onclosetag?.(element, implied);
|
|
3188
|
+
}
|
|
2844
3189
|
closeCurrentTag(isOpenImplied) {
|
|
2845
|
-
var _a3, _b;
|
|
2846
3190
|
const name = this.tagname;
|
|
2847
3191
|
this.endOpenTag(isOpenImplied);
|
|
2848
3192
|
if (this.stack[0] === name) {
|
|
2849
|
-
|
|
2850
|
-
this.stack.shift();
|
|
3193
|
+
this.popElement(!isOpenImplied);
|
|
2851
3194
|
}
|
|
2852
3195
|
}
|
|
2853
|
-
/**
|
|
3196
|
+
/**
|
|
3197
|
+
* @param start Start index for the current parser event.
|
|
3198
|
+
* @param endIndex End index for the current parser event.
|
|
3199
|
+
* @internal
|
|
3200
|
+
*/
|
|
2854
3201
|
onattribname(start, endIndex) {
|
|
2855
3202
|
this.startIndex = start;
|
|
2856
3203
|
const name = this.getSlice(start, endIndex);
|
|
2857
3204
|
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
2858
3205
|
}
|
|
2859
|
-
/**
|
|
3206
|
+
/**
|
|
3207
|
+
* @param start Start index for the current parser event.
|
|
3208
|
+
* @param endIndex End index for the current parser event.
|
|
3209
|
+
* @internal
|
|
3210
|
+
*/
|
|
2860
3211
|
onattribdata(start, endIndex) {
|
|
2861
3212
|
this.attribvalue += this.getSlice(start, endIndex);
|
|
2862
3213
|
}
|
|
2863
|
-
/**
|
|
3214
|
+
/**
|
|
3215
|
+
* @param cp Current Unicode code point.
|
|
3216
|
+
* @internal
|
|
3217
|
+
*/
|
|
2864
3218
|
onattribentity(cp) {
|
|
2865
3219
|
this.attribvalue += fromCodePoint(cp);
|
|
2866
3220
|
}
|
|
2867
|
-
/**
|
|
3221
|
+
/**
|
|
3222
|
+
* @param quote Quote type used for the current attribute.
|
|
3223
|
+
* @param endIndex End index for the current parser event.
|
|
3224
|
+
* @internal
|
|
3225
|
+
*/
|
|
2868
3226
|
onattribend(quote2, endIndex) {
|
|
2869
|
-
var _a3, _b;
|
|
2870
3227
|
this.endIndex = endIndex;
|
|
2871
|
-
|
|
2872
|
-
if (this.attribs && !Object.
|
|
3228
|
+
this.cbs.onattribute?.(this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
|
|
3229
|
+
if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {
|
|
2873
3230
|
this.attribs[this.attribname] = this.attribvalue;
|
|
2874
3231
|
}
|
|
2875
3232
|
this.attribvalue = "";
|
|
@@ -2882,17 +3239,25 @@ var Parser = class {
|
|
|
2882
3239
|
}
|
|
2883
3240
|
return name;
|
|
2884
3241
|
}
|
|
2885
|
-
/**
|
|
3242
|
+
/**
|
|
3243
|
+
* @param start Start index for the current parser event.
|
|
3244
|
+
* @param endIndex End index for the current parser event.
|
|
3245
|
+
* @internal
|
|
3246
|
+
*/
|
|
2886
3247
|
ondeclaration(start, endIndex) {
|
|
2887
3248
|
this.endIndex = endIndex;
|
|
2888
3249
|
const value = this.getSlice(start, endIndex);
|
|
2889
3250
|
if (this.cbs.onprocessinginstruction) {
|
|
2890
|
-
const name = this.getInstructionName(value);
|
|
3251
|
+
const name = this.htmlMode ? this.lowerCaseTagNames ? DOCUMENT_TYPE : value.slice(0, DOCUMENT_TYPE.length) : this.getInstructionName(value);
|
|
2891
3252
|
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
|
|
2892
3253
|
}
|
|
2893
3254
|
this.startIndex = endIndex + 1;
|
|
2894
3255
|
}
|
|
2895
|
-
/**
|
|
3256
|
+
/**
|
|
3257
|
+
* @param start Start index for the current parser event.
|
|
3258
|
+
* @param endIndex End index for the current parser event.
|
|
3259
|
+
* @internal
|
|
3260
|
+
*/
|
|
2896
3261
|
onprocessinginstruction(start, endIndex) {
|
|
2897
3262
|
this.endIndex = endIndex;
|
|
2898
3263
|
const value = this.getSlice(start, endIndex);
|
|
@@ -2902,57 +3267,66 @@ var Parser = class {
|
|
|
2902
3267
|
}
|
|
2903
3268
|
this.startIndex = endIndex + 1;
|
|
2904
3269
|
}
|
|
2905
|
-
/**
|
|
3270
|
+
/**
|
|
3271
|
+
* @param start Start index for the current parser event.
|
|
3272
|
+
* @param endIndex End index for the current parser event.
|
|
3273
|
+
* @param offset Offset applied when computing parser indices.
|
|
3274
|
+
* @internal
|
|
3275
|
+
*/
|
|
2906
3276
|
oncomment(start, endIndex, offset) {
|
|
2907
|
-
var _a3, _b, _c, _d;
|
|
2908
3277
|
this.endIndex = endIndex;
|
|
2909
|
-
|
|
2910
|
-
|
|
3278
|
+
this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));
|
|
3279
|
+
this.cbs.oncommentend?.();
|
|
2911
3280
|
this.startIndex = endIndex + 1;
|
|
2912
3281
|
}
|
|
2913
|
-
/**
|
|
3282
|
+
/**
|
|
3283
|
+
* @param start Start index for the current parser event.
|
|
3284
|
+
* @param endIndex End index for the current parser event.
|
|
3285
|
+
* @param offset Offset applied when computing parser indices.
|
|
3286
|
+
* @internal
|
|
3287
|
+
*/
|
|
2914
3288
|
oncdata(start, endIndex, offset) {
|
|
2915
|
-
var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
2916
3289
|
this.endIndex = endIndex;
|
|
2917
3290
|
const value = this.getSlice(start, endIndex - offset);
|
|
2918
3291
|
if (!this.htmlMode || this.options.recognizeCDATA) {
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
3292
|
+
this.cbs.oncdatastart?.();
|
|
3293
|
+
this.cbs.ontext?.(value);
|
|
3294
|
+
this.cbs.oncdataend?.();
|
|
3295
|
+
} else if (this.isInForeignContext()) {
|
|
3296
|
+
this.cbs.ontext?.(value);
|
|
2922
3297
|
} else {
|
|
2923
|
-
|
|
2924
|
-
|
|
3298
|
+
this.cbs.oncomment?.(`[CDATA[${value}]]`);
|
|
3299
|
+
this.cbs.oncommentend?.();
|
|
2925
3300
|
}
|
|
2926
3301
|
this.startIndex = endIndex + 1;
|
|
2927
3302
|
}
|
|
2928
3303
|
/** @internal */
|
|
2929
3304
|
onend() {
|
|
2930
|
-
var _a3, _b;
|
|
2931
3305
|
if (this.cbs.onclosetag) {
|
|
2932
3306
|
this.endIndex = this.startIndex;
|
|
2933
3307
|
for (let index = 0; index < this.stack.length; index++) {
|
|
2934
3308
|
this.cbs.onclosetag(this.stack[index], true);
|
|
2935
3309
|
}
|
|
2936
3310
|
}
|
|
2937
|
-
|
|
3311
|
+
this.cbs.onend?.();
|
|
2938
3312
|
}
|
|
2939
3313
|
/**
|
|
2940
3314
|
* Resets the parser to a blank state, ready to parse a new HTML document
|
|
2941
3315
|
*/
|
|
2942
3316
|
reset() {
|
|
2943
|
-
|
|
2944
|
-
(_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
|
|
3317
|
+
this.cbs.onreset?.();
|
|
2945
3318
|
this.tokenizer.reset();
|
|
2946
3319
|
this.tagname = "";
|
|
2947
3320
|
this.attribname = "";
|
|
3321
|
+
this.attribvalue = "";
|
|
2948
3322
|
this.attribs = null;
|
|
2949
3323
|
this.stack.length = 0;
|
|
2950
3324
|
this.startIndex = 0;
|
|
2951
3325
|
this.endIndex = 0;
|
|
2952
|
-
|
|
3326
|
+
this.cbs.onparserinit?.(this);
|
|
2953
3327
|
this.buffers.length = 0;
|
|
2954
3328
|
this.foreignContext.length = 0;
|
|
2955
|
-
this.foreignContext.unshift(
|
|
3329
|
+
this.foreignContext.unshift(ForeignContext.None);
|
|
2956
3330
|
this.bufferOffset = 0;
|
|
2957
3331
|
this.writeIndex = 0;
|
|
2958
3332
|
this.ended = false;
|
|
@@ -2960,7 +3334,6 @@ var Parser = class {
|
|
|
2960
3334
|
/**
|
|
2961
3335
|
* Resets the parser, then parses a complete document and
|
|
2962
3336
|
* pushes it to the handler.
|
|
2963
|
-
*
|
|
2964
3337
|
* @param data Document to parse.
|
|
2965
3338
|
*/
|
|
2966
3339
|
parseComplete(data) {
|
|
@@ -2968,6 +3341,9 @@ var Parser = class {
|
|
|
2968
3341
|
this.end(data);
|
|
2969
3342
|
}
|
|
2970
3343
|
getSlice(start, end) {
|
|
3344
|
+
if (start === end) {
|
|
3345
|
+
return "";
|
|
3346
|
+
}
|
|
2971
3347
|
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
2972
3348
|
this.shiftBuffer();
|
|
2973
3349
|
}
|
|
@@ -2985,13 +3361,11 @@ var Parser = class {
|
|
|
2985
3361
|
}
|
|
2986
3362
|
/**
|
|
2987
3363
|
* Parses a chunk of data and calls the corresponding callbacks.
|
|
2988
|
-
*
|
|
2989
3364
|
* @param chunk Chunk to parse.
|
|
2990
3365
|
*/
|
|
2991
3366
|
write(chunk) {
|
|
2992
|
-
var _a3, _b;
|
|
2993
3367
|
if (this.ended) {
|
|
2994
|
-
|
|
3368
|
+
this.cbs.onerror?.(new Error(".write() after done!"));
|
|
2995
3369
|
return;
|
|
2996
3370
|
}
|
|
2997
3371
|
this.buffers.push(chunk);
|
|
@@ -3002,13 +3376,11 @@ var Parser = class {
|
|
|
3002
3376
|
}
|
|
3003
3377
|
/**
|
|
3004
3378
|
* Parses the end of the buffer and clears the stack, calls onend.
|
|
3005
|
-
*
|
|
3006
3379
|
* @param chunk Optional final chunk to parse.
|
|
3007
3380
|
*/
|
|
3008
3381
|
end(chunk) {
|
|
3009
|
-
var _a3, _b;
|
|
3010
3382
|
if (this.ended) {
|
|
3011
|
-
|
|
3383
|
+
this.cbs.onerror?.(new Error(".end() after done!"));
|
|
3012
3384
|
return;
|
|
3013
3385
|
}
|
|
3014
3386
|
if (chunk)
|
|
@@ -3033,27 +3405,9 @@ var Parser = class {
|
|
|
3033
3405
|
if (this.ended)
|
|
3034
3406
|
this.tokenizer.end();
|
|
3035
3407
|
}
|
|
3036
|
-
/**
|
|
3037
|
-
* Alias of `write`, for backwards compatibility.
|
|
3038
|
-
*
|
|
3039
|
-
* @param chunk Chunk to parse.
|
|
3040
|
-
* @deprecated
|
|
3041
|
-
*/
|
|
3042
|
-
parseChunk(chunk) {
|
|
3043
|
-
this.write(chunk);
|
|
3044
|
-
}
|
|
3045
|
-
/**
|
|
3046
|
-
* Alias of `end`, for backwards compatibility.
|
|
3047
|
-
*
|
|
3048
|
-
* @param chunk Optional final chunk to parse.
|
|
3049
|
-
* @deprecated
|
|
3050
|
-
*/
|
|
3051
|
-
done(chunk) {
|
|
3052
|
-
this.end(chunk);
|
|
3053
|
-
}
|
|
3054
3408
|
};
|
|
3055
3409
|
|
|
3056
|
-
// node_modules/.pnpm/domelementtype@
|
|
3410
|
+
// node_modules/.pnpm/domelementtype@3.0.0/node_modules/domelementtype/dist/index.js
|
|
3057
3411
|
var ElementType;
|
|
3058
3412
|
(function(ElementType2) {
|
|
3059
3413
|
ElementType2["Root"] = "root";
|
|
@@ -3066,8 +3420,8 @@ var ElementType;
|
|
|
3066
3420
|
ElementType2["CDATA"] = "cdata";
|
|
3067
3421
|
ElementType2["Doctype"] = "doctype";
|
|
3068
3422
|
})(ElementType || (ElementType = {}));
|
|
3069
|
-
function isTag(
|
|
3070
|
-
return
|
|
3423
|
+
function isTag(element) {
|
|
3424
|
+
return element.type === ElementType.Tag || element.type === ElementType.Script || element.type === ElementType.Style;
|
|
3071
3425
|
}
|
|
3072
3426
|
var Root = ElementType.Root;
|
|
3073
3427
|
var Text = ElementType.Text;
|
|
@@ -3079,15 +3433,18 @@ var Tag = ElementType.Tag;
|
|
|
3079
3433
|
var CDATA = ElementType.CDATA;
|
|
3080
3434
|
var Doctype = ElementType.Doctype;
|
|
3081
3435
|
|
|
3082
|
-
// node_modules/.pnpm/domhandler@
|
|
3436
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/node.js
|
|
3083
3437
|
var Node = class {
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3438
|
+
/** Parent of the node */
|
|
3439
|
+
parent = null;
|
|
3440
|
+
/** Previous sibling */
|
|
3441
|
+
prev = null;
|
|
3442
|
+
/** Next sibling */
|
|
3443
|
+
next = null;
|
|
3444
|
+
/** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
|
|
3445
|
+
startIndex = null;
|
|
3446
|
+
/** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
|
|
3447
|
+
endIndex = null;
|
|
3091
3448
|
// Read-write aliases for properties
|
|
3092
3449
|
/**
|
|
3093
3450
|
* Same as {@link parent}.
|
|
@@ -3106,8 +3463,8 @@ var Node = class {
|
|
|
3106
3463
|
get previousSibling() {
|
|
3107
3464
|
return this.prev;
|
|
3108
3465
|
}
|
|
3109
|
-
set previousSibling(
|
|
3110
|
-
this.prev =
|
|
3466
|
+
set previousSibling(previous) {
|
|
3467
|
+
this.prev = previous;
|
|
3111
3468
|
}
|
|
3112
3469
|
/**
|
|
3113
3470
|
* Same as {@link next}.
|
|
@@ -3121,7 +3478,6 @@ var Node = class {
|
|
|
3121
3478
|
}
|
|
3122
3479
|
/**
|
|
3123
3480
|
* Clone this node, and optionally its children.
|
|
3124
|
-
*
|
|
3125
3481
|
* @param recursive Clone child nodes as well.
|
|
3126
3482
|
* @returns A clone of the node.
|
|
3127
3483
|
*/
|
|
@@ -3130,6 +3486,7 @@ var Node = class {
|
|
|
3130
3486
|
}
|
|
3131
3487
|
};
|
|
3132
3488
|
var DataNode = class extends Node {
|
|
3489
|
+
data;
|
|
3133
3490
|
/**
|
|
3134
3491
|
* @param data The content of the data node
|
|
3135
3492
|
*/
|
|
@@ -3149,34 +3506,36 @@ var DataNode = class extends Node {
|
|
|
3149
3506
|
}
|
|
3150
3507
|
};
|
|
3151
3508
|
var Text2 = class extends DataNode {
|
|
3152
|
-
|
|
3153
|
-
super(...arguments);
|
|
3154
|
-
this.type = ElementType.Text;
|
|
3155
|
-
}
|
|
3509
|
+
type = ElementType.Text;
|
|
3156
3510
|
get nodeType() {
|
|
3157
3511
|
return 3;
|
|
3158
3512
|
}
|
|
3159
3513
|
};
|
|
3160
3514
|
var Comment2 = class extends DataNode {
|
|
3161
|
-
|
|
3162
|
-
super(...arguments);
|
|
3163
|
-
this.type = ElementType.Comment;
|
|
3164
|
-
}
|
|
3515
|
+
type = ElementType.Comment;
|
|
3165
3516
|
get nodeType() {
|
|
3166
3517
|
return 8;
|
|
3167
3518
|
}
|
|
3168
3519
|
};
|
|
3169
3520
|
var ProcessingInstruction = class extends DataNode {
|
|
3521
|
+
type = ElementType.Directive;
|
|
3522
|
+
name;
|
|
3170
3523
|
constructor(name, data) {
|
|
3171
3524
|
super(data);
|
|
3172
3525
|
this.name = name;
|
|
3173
|
-
this.type = ElementType.Directive;
|
|
3174
3526
|
}
|
|
3175
3527
|
get nodeType() {
|
|
3176
3528
|
return 1;
|
|
3177
3529
|
}
|
|
3530
|
+
/** If this is a doctype, the document type name (parse5 only). */
|
|
3531
|
+
"x-name";
|
|
3532
|
+
/** If this is a doctype, the document type public identifier (parse5 only). */
|
|
3533
|
+
"x-publicId";
|
|
3534
|
+
/** If this is a doctype, the document type system identifier (parse5 only). */
|
|
3535
|
+
"x-systemId";
|
|
3178
3536
|
};
|
|
3179
3537
|
var NodeWithChildren = class extends Node {
|
|
3538
|
+
children;
|
|
3180
3539
|
/**
|
|
3181
3540
|
* @param children Children of the node. Only certain node types can have children.
|
|
3182
3541
|
*/
|
|
@@ -3187,8 +3546,7 @@ var NodeWithChildren = class extends Node {
|
|
|
3187
3546
|
// Aliases
|
|
3188
3547
|
/** First child of the node. */
|
|
3189
3548
|
get firstChild() {
|
|
3190
|
-
|
|
3191
|
-
return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
|
|
3549
|
+
return this.children[0] ?? null;
|
|
3192
3550
|
}
|
|
3193
3551
|
/** Last child of the node. */
|
|
3194
3552
|
get lastChild() {
|
|
@@ -3206,28 +3564,26 @@ var NodeWithChildren = class extends Node {
|
|
|
3206
3564
|
}
|
|
3207
3565
|
};
|
|
3208
3566
|
var CDATA2 = class extends NodeWithChildren {
|
|
3209
|
-
|
|
3210
|
-
super(...arguments);
|
|
3211
|
-
this.type = ElementType.CDATA;
|
|
3212
|
-
}
|
|
3567
|
+
type = ElementType.CDATA;
|
|
3213
3568
|
get nodeType() {
|
|
3214
3569
|
return 4;
|
|
3215
3570
|
}
|
|
3216
3571
|
};
|
|
3217
3572
|
var Document = class extends NodeWithChildren {
|
|
3218
|
-
|
|
3219
|
-
super(...arguments);
|
|
3220
|
-
this.type = ElementType.Root;
|
|
3221
|
-
}
|
|
3573
|
+
type = ElementType.Root;
|
|
3222
3574
|
get nodeType() {
|
|
3223
3575
|
return 9;
|
|
3224
3576
|
}
|
|
3225
3577
|
};
|
|
3226
3578
|
var Element = class extends NodeWithChildren {
|
|
3579
|
+
name;
|
|
3580
|
+
attribs;
|
|
3581
|
+
type;
|
|
3227
3582
|
/**
|
|
3228
3583
|
* @param name Name of the tag, eg. `div`, `span`.
|
|
3229
3584
|
* @param attribs Object mapping attribute names to attribute values.
|
|
3230
3585
|
* @param children Children of the node.
|
|
3586
|
+
* @param type Node type used for the new node instance.
|
|
3231
3587
|
*/
|
|
3232
3588
|
constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
|
|
3233
3589
|
super(children);
|
|
@@ -3250,16 +3606,19 @@ var Element = class extends NodeWithChildren {
|
|
|
3250
3606
|
this.name = name;
|
|
3251
3607
|
}
|
|
3252
3608
|
get attributes() {
|
|
3253
|
-
return Object.keys(this.attribs).map((name) => {
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3609
|
+
return Object.keys(this.attribs).map((name) => ({
|
|
3610
|
+
name,
|
|
3611
|
+
value: this.attribs[name],
|
|
3612
|
+
namespace: this["x-attribsNamespace"]?.[name],
|
|
3613
|
+
prefix: this["x-attribsPrefix"]?.[name]
|
|
3614
|
+
}));
|
|
3615
|
+
}
|
|
3616
|
+
/** Element namespace (parse5 only). */
|
|
3617
|
+
namespace;
|
|
3618
|
+
/** Element attribute namespaces (parse5 only). */
|
|
3619
|
+
"x-attribsNamespace";
|
|
3620
|
+
/** Element attribute namespace-related prefixes (parse5 only). */
|
|
3621
|
+
"x-attribsPrefix";
|
|
3263
3622
|
};
|
|
3264
3623
|
function isTag2(node) {
|
|
3265
3624
|
return isTag(node);
|
|
@@ -3288,7 +3647,9 @@ function cloneNode(node, recursive = false) {
|
|
|
3288
3647
|
} else if (isTag2(node)) {
|
|
3289
3648
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3290
3649
|
const clone = new Element(node.name, { ...node.attribs }, children);
|
|
3291
|
-
|
|
3650
|
+
for (const child of children) {
|
|
3651
|
+
child.parent = clone;
|
|
3652
|
+
}
|
|
3292
3653
|
if (node.namespace != null) {
|
|
3293
3654
|
clone.namespace = node.namespace;
|
|
3294
3655
|
}
|
|
@@ -3302,12 +3663,16 @@ function cloneNode(node, recursive = false) {
|
|
|
3302
3663
|
} else if (isCDATA(node)) {
|
|
3303
3664
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3304
3665
|
const clone = new CDATA2(children);
|
|
3305
|
-
|
|
3666
|
+
for (const child of children) {
|
|
3667
|
+
child.parent = clone;
|
|
3668
|
+
}
|
|
3306
3669
|
result = clone;
|
|
3307
3670
|
} else if (isDocument(node)) {
|
|
3308
3671
|
const children = recursive ? cloneChildren(node.children) : [];
|
|
3309
3672
|
const clone = new Document(children);
|
|
3310
|
-
|
|
3673
|
+
for (const child of children) {
|
|
3674
|
+
child.parent = clone;
|
|
3675
|
+
}
|
|
3311
3676
|
if (node["x-mode"]) {
|
|
3312
3677
|
clone["x-mode"] = node["x-mode"];
|
|
3313
3678
|
}
|
|
@@ -3332,43 +3697,55 @@ function cloneNode(node, recursive = false) {
|
|
|
3332
3697
|
}
|
|
3333
3698
|
function cloneChildren(childs) {
|
|
3334
3699
|
const children = childs.map((child) => cloneNode(child, true));
|
|
3335
|
-
for (let
|
|
3336
|
-
children[
|
|
3337
|
-
children[
|
|
3700
|
+
for (let index = 1; index < children.length; index++) {
|
|
3701
|
+
children[index].prev = children[index - 1];
|
|
3702
|
+
children[index - 1].next = children[index];
|
|
3338
3703
|
}
|
|
3339
3704
|
return children;
|
|
3340
3705
|
}
|
|
3341
3706
|
|
|
3342
|
-
// node_modules/.pnpm/domhandler@
|
|
3343
|
-
var
|
|
3707
|
+
// node_modules/.pnpm/domhandler@6.0.1/node_modules/domhandler/dist/index.js
|
|
3708
|
+
var defaultOptions = {
|
|
3344
3709
|
withStartIndices: false,
|
|
3345
3710
|
withEndIndices: false,
|
|
3346
3711
|
xmlMode: false
|
|
3347
3712
|
};
|
|
3348
3713
|
var DomHandler = class {
|
|
3714
|
+
/** The elements of the DOM */
|
|
3715
|
+
dom = [];
|
|
3716
|
+
/** The root element for the DOM */
|
|
3717
|
+
root = new Document(this.dom);
|
|
3718
|
+
/** Called once parsing has completed. */
|
|
3719
|
+
callback;
|
|
3720
|
+
/** Settings for the handler. */
|
|
3721
|
+
options;
|
|
3722
|
+
/** Callback whenever a tag is closed. */
|
|
3723
|
+
elementCB;
|
|
3724
|
+
/** Indicated whether parsing has been completed. */
|
|
3725
|
+
done = false;
|
|
3726
|
+
/** Stack of open tags. */
|
|
3727
|
+
tagStack = [this.root];
|
|
3728
|
+
/** A data node that is still being written to. */
|
|
3729
|
+
lastNode = null;
|
|
3730
|
+
/** Reference to the parser instance. Used for location information. */
|
|
3731
|
+
parser = null;
|
|
3349
3732
|
/**
|
|
3350
3733
|
* @param callback Called once parsing has completed.
|
|
3351
3734
|
* @param options Settings for the handler.
|
|
3352
3735
|
* @param elementCB Callback whenever a tag is closed.
|
|
3353
3736
|
*/
|
|
3354
3737
|
constructor(callback, options, elementCB) {
|
|
3355
|
-
this.dom = [];
|
|
3356
|
-
this.root = new Document(this.dom);
|
|
3357
|
-
this.done = false;
|
|
3358
|
-
this.tagStack = [this.root];
|
|
3359
|
-
this.lastNode = null;
|
|
3360
|
-
this.parser = null;
|
|
3361
3738
|
if (typeof options === "function") {
|
|
3362
3739
|
elementCB = options;
|
|
3363
|
-
options =
|
|
3740
|
+
options = defaultOptions;
|
|
3364
3741
|
}
|
|
3365
3742
|
if (typeof callback === "object") {
|
|
3366
3743
|
options = callback;
|
|
3367
3744
|
callback = void 0;
|
|
3368
3745
|
}
|
|
3369
|
-
this.callback = callback
|
|
3370
|
-
this.options = options
|
|
3371
|
-
this.elementCB = elementCB
|
|
3746
|
+
this.callback = callback ?? null;
|
|
3747
|
+
this.options = options ?? defaultOptions;
|
|
3748
|
+
this.elementCB = elementCB ?? null;
|
|
3372
3749
|
}
|
|
3373
3750
|
onparserinit(parser) {
|
|
3374
3751
|
this.parser = parser;
|
|
@@ -3395,12 +3772,12 @@ var DomHandler = class {
|
|
|
3395
3772
|
}
|
|
3396
3773
|
onclosetag() {
|
|
3397
3774
|
this.lastNode = null;
|
|
3398
|
-
const
|
|
3399
|
-
if (this.options.withEndIndices) {
|
|
3400
|
-
|
|
3775
|
+
const element = this.tagStack.pop();
|
|
3776
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3777
|
+
element.endIndex = this.parser.endIndex;
|
|
3401
3778
|
}
|
|
3402
3779
|
if (this.elementCB)
|
|
3403
|
-
this.elementCB(
|
|
3780
|
+
this.elementCB(element);
|
|
3404
3781
|
}
|
|
3405
3782
|
onopentag(name, attribs) {
|
|
3406
3783
|
const type = this.options.xmlMode ? ElementType.Tag : void 0;
|
|
@@ -3412,7 +3789,7 @@ var DomHandler = class {
|
|
|
3412
3789
|
const { lastNode } = this;
|
|
3413
3790
|
if (lastNode && lastNode.type === ElementType.Text) {
|
|
3414
3791
|
lastNode.data += data;
|
|
3415
|
-
if (this.options.withEndIndices) {
|
|
3792
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3416
3793
|
lastNode.endIndex = this.parser.endIndex;
|
|
3417
3794
|
}
|
|
3418
3795
|
} else {
|
|
@@ -3457,10 +3834,10 @@ var DomHandler = class {
|
|
|
3457
3834
|
addNode(node) {
|
|
3458
3835
|
const parent = this.tagStack[this.tagStack.length - 1];
|
|
3459
3836
|
const previousSibling = parent.children[parent.children.length - 1];
|
|
3460
|
-
if (this.options.withStartIndices) {
|
|
3837
|
+
if (this.options.withStartIndices && this.parser) {
|
|
3461
3838
|
node.startIndex = this.parser.startIndex;
|
|
3462
3839
|
}
|
|
3463
|
-
if (this.options.withEndIndices) {
|
|
3840
|
+
if (this.options.withEndIndices && this.parser) {
|
|
3464
3841
|
node.endIndex = this.parser.endIndex;
|
|
3465
3842
|
}
|
|
3466
3843
|
parent.children.push(node);
|
|
@@ -3473,616 +3850,7 @@ var DomHandler = class {
|
|
|
3473
3850
|
}
|
|
3474
3851
|
};
|
|
3475
3852
|
|
|
3476
|
-
// node_modules/.pnpm/
|
|
3477
|
-
var decode_data_html_default = new Uint16Array(
|
|
3478
|
-
// prettier-ignore
|
|
3479
|
-
'\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))
|
|
3480
|
-
);
|
|
3481
|
-
|
|
3482
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
|
|
3483
|
-
var decode_data_xml_default = new Uint16Array(
|
|
3484
|
-
// prettier-ignore
|
|
3485
|
-
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
|
|
3486
|
-
);
|
|
3487
|
-
|
|
3488
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
|
|
3489
|
-
var _a2;
|
|
3490
|
-
var decodeMap2 = /* @__PURE__ */ new Map([
|
|
3491
|
-
[0, 65533],
|
|
3492
|
-
// C1 Unicode control character reference replacements
|
|
3493
|
-
[128, 8364],
|
|
3494
|
-
[130, 8218],
|
|
3495
|
-
[131, 402],
|
|
3496
|
-
[132, 8222],
|
|
3497
|
-
[133, 8230],
|
|
3498
|
-
[134, 8224],
|
|
3499
|
-
[135, 8225],
|
|
3500
|
-
[136, 710],
|
|
3501
|
-
[137, 8240],
|
|
3502
|
-
[138, 352],
|
|
3503
|
-
[139, 8249],
|
|
3504
|
-
[140, 338],
|
|
3505
|
-
[142, 381],
|
|
3506
|
-
[145, 8216],
|
|
3507
|
-
[146, 8217],
|
|
3508
|
-
[147, 8220],
|
|
3509
|
-
[148, 8221],
|
|
3510
|
-
[149, 8226],
|
|
3511
|
-
[150, 8211],
|
|
3512
|
-
[151, 8212],
|
|
3513
|
-
[152, 732],
|
|
3514
|
-
[153, 8482],
|
|
3515
|
-
[154, 353],
|
|
3516
|
-
[155, 8250],
|
|
3517
|
-
[156, 339],
|
|
3518
|
-
[158, 382],
|
|
3519
|
-
[159, 376]
|
|
3520
|
-
]);
|
|
3521
|
-
var fromCodePoint2 = (
|
|
3522
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
|
|
3523
|
-
(_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
|
|
3524
|
-
let output = "";
|
|
3525
|
-
if (codePoint > 65535) {
|
|
3526
|
-
codePoint -= 65536;
|
|
3527
|
-
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
3528
|
-
codePoint = 56320 | codePoint & 1023;
|
|
3529
|
-
}
|
|
3530
|
-
output += String.fromCharCode(codePoint);
|
|
3531
|
-
return output;
|
|
3532
|
-
}
|
|
3533
|
-
);
|
|
3534
|
-
function replaceCodePoint2(codePoint) {
|
|
3535
|
-
var _a3;
|
|
3536
|
-
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
3537
|
-
return 65533;
|
|
3538
|
-
}
|
|
3539
|
-
return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
|
|
3540
|
-
}
|
|
3541
|
-
|
|
3542
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
|
|
3543
|
-
var CharCodes3;
|
|
3544
|
-
(function(CharCodes4) {
|
|
3545
|
-
CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
|
|
3546
|
-
CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
|
|
3547
|
-
CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
|
|
3548
|
-
CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
|
|
3549
|
-
CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
|
|
3550
|
-
CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
|
|
3551
|
-
CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
|
|
3552
|
-
CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
|
|
3553
|
-
CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
|
|
3554
|
-
CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
|
|
3555
|
-
CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
|
|
3556
|
-
CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
|
|
3557
|
-
})(CharCodes3 || (CharCodes3 = {}));
|
|
3558
|
-
var TO_LOWER_BIT2 = 32;
|
|
3559
|
-
var BinTrieFlags2;
|
|
3560
|
-
(function(BinTrieFlags3) {
|
|
3561
|
-
BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
3562
|
-
BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
|
3563
|
-
BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
3564
|
-
})(BinTrieFlags2 || (BinTrieFlags2 = {}));
|
|
3565
|
-
function isNumber2(code) {
|
|
3566
|
-
return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
|
|
3567
|
-
}
|
|
3568
|
-
function isHexadecimalCharacter2(code) {
|
|
3569
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
|
|
3570
|
-
}
|
|
3571
|
-
function isAsciiAlphaNumeric2(code) {
|
|
3572
|
-
return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
|
|
3573
|
-
}
|
|
3574
|
-
function isEntityInAttributeInvalidEnd2(code) {
|
|
3575
|
-
return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
|
|
3576
|
-
}
|
|
3577
|
-
var EntityDecoderState2;
|
|
3578
|
-
(function(EntityDecoderState3) {
|
|
3579
|
-
EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
|
|
3580
|
-
EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
|
|
3581
|
-
EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
|
|
3582
|
-
EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
|
|
3583
|
-
EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
|
|
3584
|
-
})(EntityDecoderState2 || (EntityDecoderState2 = {}));
|
|
3585
|
-
var DecodingMode2;
|
|
3586
|
-
(function(DecodingMode3) {
|
|
3587
|
-
DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
|
|
3588
|
-
DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
|
|
3589
|
-
DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
|
|
3590
|
-
})(DecodingMode2 || (DecodingMode2 = {}));
|
|
3591
|
-
var EntityDecoder2 = class {
|
|
3592
|
-
constructor(decodeTree, emitCodePoint, errors) {
|
|
3593
|
-
this.decodeTree = decodeTree;
|
|
3594
|
-
this.emitCodePoint = emitCodePoint;
|
|
3595
|
-
this.errors = errors;
|
|
3596
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3597
|
-
this.consumed = 1;
|
|
3598
|
-
this.result = 0;
|
|
3599
|
-
this.treeIndex = 0;
|
|
3600
|
-
this.excess = 1;
|
|
3601
|
-
this.decodeMode = DecodingMode2.Strict;
|
|
3602
|
-
}
|
|
3603
|
-
/** Resets the instance to make it reusable. */
|
|
3604
|
-
startEntity(decodeMode) {
|
|
3605
|
-
this.decodeMode = decodeMode;
|
|
3606
|
-
this.state = EntityDecoderState2.EntityStart;
|
|
3607
|
-
this.result = 0;
|
|
3608
|
-
this.treeIndex = 0;
|
|
3609
|
-
this.excess = 1;
|
|
3610
|
-
this.consumed = 1;
|
|
3611
|
-
}
|
|
3612
|
-
/**
|
|
3613
|
-
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
3614
|
-
* If the entity is incomplete, the decoder will return -1.
|
|
3615
|
-
*
|
|
3616
|
-
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
3617
|
-
* entity is incomplete, and resume when the next string is written.
|
|
3618
|
-
*
|
|
3619
|
-
* @param string The string containing the entity (or a continuation of the entity).
|
|
3620
|
-
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
3621
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3622
|
-
*/
|
|
3623
|
-
write(str, offset) {
|
|
3624
|
-
switch (this.state) {
|
|
3625
|
-
case EntityDecoderState2.EntityStart: {
|
|
3626
|
-
if (str.charCodeAt(offset) === CharCodes3.NUM) {
|
|
3627
|
-
this.state = EntityDecoderState2.NumericStart;
|
|
3628
|
-
this.consumed += 1;
|
|
3629
|
-
return this.stateNumericStart(str, offset + 1);
|
|
3630
|
-
}
|
|
3631
|
-
this.state = EntityDecoderState2.NamedEntity;
|
|
3632
|
-
return this.stateNamedEntity(str, offset);
|
|
3633
|
-
}
|
|
3634
|
-
case EntityDecoderState2.NumericStart: {
|
|
3635
|
-
return this.stateNumericStart(str, offset);
|
|
3636
|
-
}
|
|
3637
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3638
|
-
return this.stateNumericDecimal(str, offset);
|
|
3639
|
-
}
|
|
3640
|
-
case EntityDecoderState2.NumericHex: {
|
|
3641
|
-
return this.stateNumericHex(str, offset);
|
|
3642
|
-
}
|
|
3643
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3644
|
-
return this.stateNamedEntity(str, offset);
|
|
3645
|
-
}
|
|
3646
|
-
}
|
|
3647
|
-
}
|
|
3648
|
-
/**
|
|
3649
|
-
* Switches between the numeric decimal and hexadecimal states.
|
|
3650
|
-
*
|
|
3651
|
-
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
3652
|
-
*
|
|
3653
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3654
|
-
* @param offset The current offset.
|
|
3655
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3656
|
-
*/
|
|
3657
|
-
stateNumericStart(str, offset) {
|
|
3658
|
-
if (offset >= str.length) {
|
|
3659
|
-
return -1;
|
|
3660
|
-
}
|
|
3661
|
-
if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
|
|
3662
|
-
this.state = EntityDecoderState2.NumericHex;
|
|
3663
|
-
this.consumed += 1;
|
|
3664
|
-
return this.stateNumericHex(str, offset + 1);
|
|
3665
|
-
}
|
|
3666
|
-
this.state = EntityDecoderState2.NumericDecimal;
|
|
3667
|
-
return this.stateNumericDecimal(str, offset);
|
|
3668
|
-
}
|
|
3669
|
-
addToNumericResult(str, start, end, base) {
|
|
3670
|
-
if (start !== end) {
|
|
3671
|
-
const digitCount = end - start;
|
|
3672
|
-
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
|
|
3673
|
-
this.consumed += digitCount;
|
|
3674
|
-
}
|
|
3675
|
-
}
|
|
3676
|
-
/**
|
|
3677
|
-
* Parses a hexadecimal numeric entity.
|
|
3678
|
-
*
|
|
3679
|
-
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
3680
|
-
*
|
|
3681
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3682
|
-
* @param offset The current offset.
|
|
3683
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3684
|
-
*/
|
|
3685
|
-
stateNumericHex(str, offset) {
|
|
3686
|
-
const startIdx = offset;
|
|
3687
|
-
while (offset < str.length) {
|
|
3688
|
-
const char = str.charCodeAt(offset);
|
|
3689
|
-
if (isNumber2(char) || isHexadecimalCharacter2(char)) {
|
|
3690
|
-
offset += 1;
|
|
3691
|
-
} else {
|
|
3692
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3693
|
-
return this.emitNumericEntity(char, 3);
|
|
3694
|
-
}
|
|
3695
|
-
}
|
|
3696
|
-
this.addToNumericResult(str, startIdx, offset, 16);
|
|
3697
|
-
return -1;
|
|
3698
|
-
}
|
|
3699
|
-
/**
|
|
3700
|
-
* Parses a decimal numeric entity.
|
|
3701
|
-
*
|
|
3702
|
-
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
3703
|
-
*
|
|
3704
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3705
|
-
* @param offset The current offset.
|
|
3706
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3707
|
-
*/
|
|
3708
|
-
stateNumericDecimal(str, offset) {
|
|
3709
|
-
const startIdx = offset;
|
|
3710
|
-
while (offset < str.length) {
|
|
3711
|
-
const char = str.charCodeAt(offset);
|
|
3712
|
-
if (isNumber2(char)) {
|
|
3713
|
-
offset += 1;
|
|
3714
|
-
} else {
|
|
3715
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3716
|
-
return this.emitNumericEntity(char, 2);
|
|
3717
|
-
}
|
|
3718
|
-
}
|
|
3719
|
-
this.addToNumericResult(str, startIdx, offset, 10);
|
|
3720
|
-
return -1;
|
|
3721
|
-
}
|
|
3722
|
-
/**
|
|
3723
|
-
* Validate and emit a numeric entity.
|
|
3724
|
-
*
|
|
3725
|
-
* Implements the logic from the `Hexademical character reference start
|
|
3726
|
-
* state` and `Numeric character reference end state` in the HTML spec.
|
|
3727
|
-
*
|
|
3728
|
-
* @param lastCp The last code point of the entity. Used to see if the
|
|
3729
|
-
* entity was terminated with a semicolon.
|
|
3730
|
-
* @param expectedLength The minimum number of characters that should be
|
|
3731
|
-
* consumed. Used to validate that at least one digit
|
|
3732
|
-
* was consumed.
|
|
3733
|
-
* @returns The number of characters that were consumed.
|
|
3734
|
-
*/
|
|
3735
|
-
emitNumericEntity(lastCp, expectedLength) {
|
|
3736
|
-
var _a3;
|
|
3737
|
-
if (this.consumed <= expectedLength) {
|
|
3738
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3739
|
-
return 0;
|
|
3740
|
-
}
|
|
3741
|
-
if (lastCp === CharCodes3.SEMI) {
|
|
3742
|
-
this.consumed += 1;
|
|
3743
|
-
} else if (this.decodeMode === DecodingMode2.Strict) {
|
|
3744
|
-
return 0;
|
|
3745
|
-
}
|
|
3746
|
-
this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
|
|
3747
|
-
if (this.errors) {
|
|
3748
|
-
if (lastCp !== CharCodes3.SEMI) {
|
|
3749
|
-
this.errors.missingSemicolonAfterCharacterReference();
|
|
3750
|
-
}
|
|
3751
|
-
this.errors.validateNumericCharacterReference(this.result);
|
|
3752
|
-
}
|
|
3753
|
-
return this.consumed;
|
|
3754
|
-
}
|
|
3755
|
-
/**
|
|
3756
|
-
* Parses a named entity.
|
|
3757
|
-
*
|
|
3758
|
-
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
3759
|
-
*
|
|
3760
|
-
* @param str The string containing the entity (or a continuation of the entity).
|
|
3761
|
-
* @param offset The current offset.
|
|
3762
|
-
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
3763
|
-
*/
|
|
3764
|
-
stateNamedEntity(str, offset) {
|
|
3765
|
-
const { decodeTree } = this;
|
|
3766
|
-
let current = decodeTree[this.treeIndex];
|
|
3767
|
-
let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3768
|
-
for (; offset < str.length; offset++, this.excess++) {
|
|
3769
|
-
const char = str.charCodeAt(offset);
|
|
3770
|
-
this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
3771
|
-
if (this.treeIndex < 0) {
|
|
3772
|
-
return this.result === 0 || // If we are parsing an attribute
|
|
3773
|
-
this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
3774
|
-
(valueLength === 0 || // And there should be no invalid characters.
|
|
3775
|
-
isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
3776
|
-
}
|
|
3777
|
-
current = decodeTree[this.treeIndex];
|
|
3778
|
-
valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3779
|
-
if (valueLength !== 0) {
|
|
3780
|
-
if (char === CharCodes3.SEMI) {
|
|
3781
|
-
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
3782
|
-
}
|
|
3783
|
-
if (this.decodeMode !== DecodingMode2.Strict) {
|
|
3784
|
-
this.result = this.treeIndex;
|
|
3785
|
-
this.consumed += this.excess;
|
|
3786
|
-
this.excess = 0;
|
|
3787
|
-
}
|
|
3788
|
-
}
|
|
3789
|
-
}
|
|
3790
|
-
return -1;
|
|
3791
|
-
}
|
|
3792
|
-
/**
|
|
3793
|
-
* Emit a named entity that was not terminated with a semicolon.
|
|
3794
|
-
*
|
|
3795
|
-
* @returns The number of characters consumed.
|
|
3796
|
-
*/
|
|
3797
|
-
emitNotTerminatedNamedEntity() {
|
|
3798
|
-
var _a3;
|
|
3799
|
-
const { result, decodeTree } = this;
|
|
3800
|
-
const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
|
|
3801
|
-
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
3802
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
|
|
3803
|
-
return this.consumed;
|
|
3804
|
-
}
|
|
3805
|
-
/**
|
|
3806
|
-
* Emit a named entity.
|
|
3807
|
-
*
|
|
3808
|
-
* @param result The index of the entity in the decode tree.
|
|
3809
|
-
* @param valueLength The number of bytes in the entity.
|
|
3810
|
-
* @param consumed The number of characters consumed.
|
|
3811
|
-
*
|
|
3812
|
-
* @returns The number of characters consumed.
|
|
3813
|
-
*/
|
|
3814
|
-
emitNamedEntityData(result, valueLength, consumed) {
|
|
3815
|
-
const { decodeTree } = this;
|
|
3816
|
-
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
|
3817
|
-
if (valueLength === 3) {
|
|
3818
|
-
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
3819
|
-
}
|
|
3820
|
-
return consumed;
|
|
3821
|
-
}
|
|
3822
|
-
/**
|
|
3823
|
-
* Signal to the parser that the end of the input was reached.
|
|
3824
|
-
*
|
|
3825
|
-
* Remaining data will be emitted and relevant errors will be produced.
|
|
3826
|
-
*
|
|
3827
|
-
* @returns The number of characters consumed.
|
|
3828
|
-
*/
|
|
3829
|
-
end() {
|
|
3830
|
-
var _a3;
|
|
3831
|
-
switch (this.state) {
|
|
3832
|
-
case EntityDecoderState2.NamedEntity: {
|
|
3833
|
-
return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
3834
|
-
}
|
|
3835
|
-
// Otherwise, emit a numeric entity if we have one.
|
|
3836
|
-
case EntityDecoderState2.NumericDecimal: {
|
|
3837
|
-
return this.emitNumericEntity(0, 2);
|
|
3838
|
-
}
|
|
3839
|
-
case EntityDecoderState2.NumericHex: {
|
|
3840
|
-
return this.emitNumericEntity(0, 3);
|
|
3841
|
-
}
|
|
3842
|
-
case EntityDecoderState2.NumericStart: {
|
|
3843
|
-
(_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
3844
|
-
return 0;
|
|
3845
|
-
}
|
|
3846
|
-
case EntityDecoderState2.EntityStart: {
|
|
3847
|
-
return 0;
|
|
3848
|
-
}
|
|
3849
|
-
}
|
|
3850
|
-
}
|
|
3851
|
-
};
|
|
3852
|
-
function getDecoder(decodeTree) {
|
|
3853
|
-
let ret = "";
|
|
3854
|
-
const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
|
|
3855
|
-
return function decodeWithTrie(str, decodeMode) {
|
|
3856
|
-
let lastIndex = 0;
|
|
3857
|
-
let offset = 0;
|
|
3858
|
-
while ((offset = str.indexOf("&", offset)) >= 0) {
|
|
3859
|
-
ret += str.slice(lastIndex, offset);
|
|
3860
|
-
decoder.startEntity(decodeMode);
|
|
3861
|
-
const len = decoder.write(
|
|
3862
|
-
str,
|
|
3863
|
-
// Skip the "&"
|
|
3864
|
-
offset + 1
|
|
3865
|
-
);
|
|
3866
|
-
if (len < 0) {
|
|
3867
|
-
lastIndex = offset + decoder.end();
|
|
3868
|
-
break;
|
|
3869
|
-
}
|
|
3870
|
-
lastIndex = offset + len;
|
|
3871
|
-
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
|
3872
|
-
}
|
|
3873
|
-
const result = ret + str.slice(lastIndex);
|
|
3874
|
-
ret = "";
|
|
3875
|
-
return result;
|
|
3876
|
-
};
|
|
3877
|
-
}
|
|
3878
|
-
function determineBranch2(decodeTree, current, nodeIdx, char) {
|
|
3879
|
-
const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
|
|
3880
|
-
const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
|
|
3881
|
-
if (branchCount === 0) {
|
|
3882
|
-
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
|
3883
|
-
}
|
|
3884
|
-
if (jumpOffset) {
|
|
3885
|
-
const value = char - jumpOffset;
|
|
3886
|
-
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
|
3887
|
-
}
|
|
3888
|
-
let lo = nodeIdx;
|
|
3889
|
-
let hi = lo + branchCount - 1;
|
|
3890
|
-
while (lo <= hi) {
|
|
3891
|
-
const mid = lo + hi >>> 1;
|
|
3892
|
-
const midVal = decodeTree[mid];
|
|
3893
|
-
if (midVal < char) {
|
|
3894
|
-
lo = mid + 1;
|
|
3895
|
-
} else if (midVal > char) {
|
|
3896
|
-
hi = mid - 1;
|
|
3897
|
-
} else {
|
|
3898
|
-
return decodeTree[mid + branchCount];
|
|
3899
|
-
}
|
|
3900
|
-
}
|
|
3901
|
-
return -1;
|
|
3902
|
-
}
|
|
3903
|
-
var htmlDecoder = getDecoder(decode_data_html_default);
|
|
3904
|
-
var xmlDecoder = getDecoder(decode_data_xml_default);
|
|
3905
|
-
|
|
3906
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
|
|
3907
|
-
function restoreDiff(arr) {
|
|
3908
|
-
for (let i = 1; i < arr.length; i++) {
|
|
3909
|
-
arr[i][0] += arr[i - 1][0] + 1;
|
|
3910
|
-
}
|
|
3911
|
-
return arr;
|
|
3912
|
-
}
|
|
3913
|
-
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"]]));
|
|
3914
|
-
|
|
3915
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
|
|
3916
|
-
var xmlCodeMap = /* @__PURE__ */ new Map([
|
|
3917
|
-
[34, """],
|
|
3918
|
-
[38, "&"],
|
|
3919
|
-
[39, "'"],
|
|
3920
|
-
[60, "<"],
|
|
3921
|
-
[62, ">"]
|
|
3922
|
-
]);
|
|
3923
|
-
var getCodePoint = (
|
|
3924
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
3925
|
-
String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
|
|
3926
|
-
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
3927
|
-
(c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
|
|
3928
|
-
)
|
|
3929
|
-
);
|
|
3930
|
-
function getEscaper(regex, map) {
|
|
3931
|
-
return function escape2(data) {
|
|
3932
|
-
let match;
|
|
3933
|
-
let lastIdx = 0;
|
|
3934
|
-
let result = "";
|
|
3935
|
-
while (match = regex.exec(data)) {
|
|
3936
|
-
if (lastIdx !== match.index) {
|
|
3937
|
-
result += data.substring(lastIdx, match.index);
|
|
3938
|
-
}
|
|
3939
|
-
result += map.get(match[0].charCodeAt(0));
|
|
3940
|
-
lastIdx = match.index + 1;
|
|
3941
|
-
}
|
|
3942
|
-
return result + data.substring(lastIdx);
|
|
3943
|
-
};
|
|
3944
|
-
}
|
|
3945
|
-
var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
3946
|
-
var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3947
|
-
[34, """],
|
|
3948
|
-
[38, "&"],
|
|
3949
|
-
[160, " "]
|
|
3950
|
-
]));
|
|
3951
|
-
var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
|
3952
|
-
[38, "&"],
|
|
3953
|
-
[60, "<"],
|
|
3954
|
-
[62, ">"],
|
|
3955
|
-
[160, " "]
|
|
3956
|
-
]));
|
|
3957
|
-
|
|
3958
|
-
// node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
|
|
3959
|
-
var EntityLevel;
|
|
3960
|
-
(function(EntityLevel2) {
|
|
3961
|
-
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
|
|
3962
|
-
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
|
|
3963
|
-
})(EntityLevel || (EntityLevel = {}));
|
|
3964
|
-
var EncodingMode;
|
|
3965
|
-
(function(EncodingMode2) {
|
|
3966
|
-
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
|
|
3967
|
-
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
|
|
3968
|
-
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
|
|
3969
|
-
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
|
|
3970
|
-
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
|
|
3971
|
-
})(EncodingMode || (EncodingMode = {}));
|
|
3972
|
-
|
|
3973
|
-
// node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
|
|
3974
|
-
var elementNames = new Map([
|
|
3975
|
-
"altGlyph",
|
|
3976
|
-
"altGlyphDef",
|
|
3977
|
-
"altGlyphItem",
|
|
3978
|
-
"animateColor",
|
|
3979
|
-
"animateMotion",
|
|
3980
|
-
"animateTransform",
|
|
3981
|
-
"clipPath",
|
|
3982
|
-
"feBlend",
|
|
3983
|
-
"feColorMatrix",
|
|
3984
|
-
"feComponentTransfer",
|
|
3985
|
-
"feComposite",
|
|
3986
|
-
"feConvolveMatrix",
|
|
3987
|
-
"feDiffuseLighting",
|
|
3988
|
-
"feDisplacementMap",
|
|
3989
|
-
"feDistantLight",
|
|
3990
|
-
"feDropShadow",
|
|
3991
|
-
"feFlood",
|
|
3992
|
-
"feFuncA",
|
|
3993
|
-
"feFuncB",
|
|
3994
|
-
"feFuncG",
|
|
3995
|
-
"feFuncR",
|
|
3996
|
-
"feGaussianBlur",
|
|
3997
|
-
"feImage",
|
|
3998
|
-
"feMerge",
|
|
3999
|
-
"feMergeNode",
|
|
4000
|
-
"feMorphology",
|
|
4001
|
-
"feOffset",
|
|
4002
|
-
"fePointLight",
|
|
4003
|
-
"feSpecularLighting",
|
|
4004
|
-
"feSpotLight",
|
|
4005
|
-
"feTile",
|
|
4006
|
-
"feTurbulence",
|
|
4007
|
-
"foreignObject",
|
|
4008
|
-
"glyphRef",
|
|
4009
|
-
"linearGradient",
|
|
4010
|
-
"radialGradient",
|
|
4011
|
-
"textPath"
|
|
4012
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
4013
|
-
var attributeNames = new Map([
|
|
4014
|
-
"definitionURL",
|
|
4015
|
-
"attributeName",
|
|
4016
|
-
"attributeType",
|
|
4017
|
-
"baseFrequency",
|
|
4018
|
-
"baseProfile",
|
|
4019
|
-
"calcMode",
|
|
4020
|
-
"clipPathUnits",
|
|
4021
|
-
"diffuseConstant",
|
|
4022
|
-
"edgeMode",
|
|
4023
|
-
"filterUnits",
|
|
4024
|
-
"glyphRef",
|
|
4025
|
-
"gradientTransform",
|
|
4026
|
-
"gradientUnits",
|
|
4027
|
-
"kernelMatrix",
|
|
4028
|
-
"kernelUnitLength",
|
|
4029
|
-
"keyPoints",
|
|
4030
|
-
"keySplines",
|
|
4031
|
-
"keyTimes",
|
|
4032
|
-
"lengthAdjust",
|
|
4033
|
-
"limitingConeAngle",
|
|
4034
|
-
"markerHeight",
|
|
4035
|
-
"markerUnits",
|
|
4036
|
-
"markerWidth",
|
|
4037
|
-
"maskContentUnits",
|
|
4038
|
-
"maskUnits",
|
|
4039
|
-
"numOctaves",
|
|
4040
|
-
"pathLength",
|
|
4041
|
-
"patternContentUnits",
|
|
4042
|
-
"patternTransform",
|
|
4043
|
-
"patternUnits",
|
|
4044
|
-
"pointsAtX",
|
|
4045
|
-
"pointsAtY",
|
|
4046
|
-
"pointsAtZ",
|
|
4047
|
-
"preserveAlpha",
|
|
4048
|
-
"preserveAspectRatio",
|
|
4049
|
-
"primitiveUnits",
|
|
4050
|
-
"refX",
|
|
4051
|
-
"refY",
|
|
4052
|
-
"repeatCount",
|
|
4053
|
-
"repeatDur",
|
|
4054
|
-
"requiredExtensions",
|
|
4055
|
-
"requiredFeatures",
|
|
4056
|
-
"specularConstant",
|
|
4057
|
-
"specularExponent",
|
|
4058
|
-
"spreadMethod",
|
|
4059
|
-
"startOffset",
|
|
4060
|
-
"stdDeviation",
|
|
4061
|
-
"stitchTiles",
|
|
4062
|
-
"surfaceScale",
|
|
4063
|
-
"systemLanguage",
|
|
4064
|
-
"tableValues",
|
|
4065
|
-
"targetX",
|
|
4066
|
-
"targetY",
|
|
4067
|
-
"textLength",
|
|
4068
|
-
"viewBox",
|
|
4069
|
-
"viewTarget",
|
|
4070
|
-
"xChannelSelector",
|
|
4071
|
-
"yChannelSelector",
|
|
4072
|
-
"zoomAndPan"
|
|
4073
|
-
].map((val) => [val.toLowerCase(), val]));
|
|
4074
|
-
|
|
4075
|
-
// node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
|
|
4076
|
-
var DocumentPosition;
|
|
4077
|
-
(function(DocumentPosition2) {
|
|
4078
|
-
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
4079
|
-
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
|
|
4080
|
-
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
|
|
4081
|
-
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
|
|
4082
|
-
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
|
|
4083
|
-
})(DocumentPosition || (DocumentPosition = {}));
|
|
4084
|
-
|
|
4085
|
-
// node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
|
|
3853
|
+
// node_modules/.pnpm/htmlparser2@12.0.0/node_modules/htmlparser2/dist/index.js
|
|
4086
3854
|
function parseDocument(data, options) {
|
|
4087
3855
|
const handler = new DomHandler(void 0, options);
|
|
4088
3856
|
new Parser(handler, options).end(data);
|
|
@@ -4544,10 +4312,12 @@ function toTwine2Archive(story, startName, options) {
|
|
|
4544
4312
|
function toTwine2HTML(story, format, startName, options) {
|
|
4545
4313
|
let template = readFormatSource(format);
|
|
4546
4314
|
if (template.includes("{{STORY_NAME}}")) {
|
|
4547
|
-
|
|
4315
|
+
const name = htmlEscape(story.name);
|
|
4316
|
+
template = template.replaceAll("{{STORY_NAME}}", () => name);
|
|
4548
4317
|
}
|
|
4549
4318
|
if (template.includes("{{STORY_DATA}}")) {
|
|
4550
|
-
|
|
4319
|
+
const data = getTwine2DataChunk(story, startName, options);
|
|
4320
|
+
template = template.replace("{{STORY_DATA}}", () => data);
|
|
4551
4321
|
}
|
|
4552
4322
|
return template;
|
|
4553
4323
|
}
|
|
@@ -4648,10 +4418,11 @@ function toTwine1HTML(story, format, startName) {
|
|
|
4648
4418
|
const displayStart = startName === "Start" ? "" : startName;
|
|
4649
4419
|
template = template.replace('"VERSION"', `Compiled with ${CREATOR_NAME2}, ${VERSION}`);
|
|
4650
4420
|
template = template.replace('"TIME"', `Built on ${(/* @__PURE__ */ new Date()).toUTCString()}`);
|
|
4651
|
-
|
|
4421
|
+
const startAtValue = `"${jsStringEscape(displayStart)}"`;
|
|
4422
|
+
template = template.replace('"START_AT"', () => startAtValue);
|
|
4652
4423
|
template = template.replace('"STORY_SIZE"', `"${count}"`);
|
|
4653
4424
|
if (template.includes('"STORY"')) {
|
|
4654
|
-
template = template.replace('"STORY"', data);
|
|
4425
|
+
template = template.replace('"STORY"', () => data);
|
|
4655
4426
|
} else {
|
|
4656
4427
|
let footer;
|
|
4657
4428
|
try {
|
|
@@ -4687,7 +4458,7 @@ function tryReplaceComponent(template, placeholder, componentPath, required) {
|
|
|
4687
4458
|
try {
|
|
4688
4459
|
let content = (0, import_node_fs5.readFileSync)(componentPath, "utf-8");
|
|
4689
4460
|
if (content.charCodeAt(0) === 65279) content = content.slice(1);
|
|
4690
|
-
return template.replace(placeholder, content);
|
|
4461
|
+
return template.replace(placeholder, () => content);
|
|
4691
4462
|
} catch (e) {
|
|
4692
4463
|
if (required) {
|
|
4693
4464
|
throw new Error(
|
|
@@ -4775,7 +4546,8 @@ function modifyHead(html, modulePaths, headFile, diagnostics) {
|
|
|
4775
4546
|
}
|
|
4776
4547
|
if (parts.length > 0) {
|
|
4777
4548
|
parts.push("</head>");
|
|
4778
|
-
|
|
4549
|
+
const replacement = parts.join("\n");
|
|
4550
|
+
return html.replace("</head>", () => replacement);
|
|
4779
4551
|
}
|
|
4780
4552
|
return html;
|
|
4781
4553
|
}
|