tutuca 0.9.37 → 0.9.38
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/tutuca-cli.js +164 -742
- package/dist/tutuca-dev.js +160 -655
- package/dist/tutuca-dev.min.js +2 -2
- package/package.json +2 -2
package/dist/tutuca-dev.js
CHANGED
|
@@ -1644,428 +1644,77 @@ class ParseCtxClassSetCollector extends ParseContext {
|
|
|
1644
1644
|
}
|
|
1645
1645
|
}
|
|
1646
1646
|
|
|
1647
|
-
//
|
|
1648
|
-
var
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
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");
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
// node_modules/entities/dist/internal/bin-trie-flags.js
|
|
1705
|
-
var BinTrieFlags;
|
|
1706
|
-
(function(BinTrieFlags2) {
|
|
1707
|
-
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
1708
|
-
BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
|
|
1709
|
-
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
|
|
1710
|
-
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
1711
|
-
})(BinTrieFlags || (BinTrieFlags = {}));
|
|
1712
|
-
|
|
1713
|
-
// node_modules/entities/dist/decode.js
|
|
1714
|
-
var CharCodes;
|
|
1715
|
-
(function(CharCodes2) {
|
|
1716
|
-
CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
|
|
1717
|
-
CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
|
|
1718
|
-
CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
|
|
1719
|
-
CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
|
|
1720
|
-
CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
|
|
1721
|
-
CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
|
|
1722
|
-
CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
|
|
1723
|
-
CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
|
|
1724
|
-
CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
|
|
1725
|
-
CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
|
|
1726
|
-
CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
|
|
1727
|
-
CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
|
|
1728
|
-
})(CharCodes || (CharCodes = {}));
|
|
1729
|
-
var TO_LOWER_BIT = 32;
|
|
1730
|
-
function isNumber(code) {
|
|
1731
|
-
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
|
|
1732
|
-
}
|
|
1733
|
-
function isHexadecimalCharacter(code) {
|
|
1734
|
-
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
|
|
1735
|
-
}
|
|
1736
|
-
function isAsciiAlphaNumeric(code) {
|
|
1737
|
-
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
|
|
1738
|
-
}
|
|
1739
|
-
function isEntityInAttributeInvalidEnd(code) {
|
|
1740
|
-
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
1741
|
-
}
|
|
1742
|
-
var EntityDecoderState;
|
|
1743
|
-
(function(EntityDecoderState2) {
|
|
1744
|
-
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
1745
|
-
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
1746
|
-
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
1747
|
-
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
1748
|
-
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
1749
|
-
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
1750
|
-
var DecodingMode;
|
|
1751
|
-
(function(DecodingMode2) {
|
|
1752
|
-
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
1753
|
-
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
1754
|
-
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
1755
|
-
})(DecodingMode || (DecodingMode = {}));
|
|
1756
|
-
|
|
1757
|
-
class EntityDecoder {
|
|
1758
|
-
decodeTree;
|
|
1759
|
-
emitCodePoint;
|
|
1760
|
-
errors;
|
|
1761
|
-
constructor(decodeTree, emitCodePoint, errors) {
|
|
1762
|
-
this.decodeTree = decodeTree;
|
|
1763
|
-
this.emitCodePoint = emitCodePoint;
|
|
1764
|
-
this.errors = errors;
|
|
1765
|
-
}
|
|
1766
|
-
state = EntityDecoderState.EntityStart;
|
|
1767
|
-
consumed = 1;
|
|
1768
|
-
result = 0;
|
|
1769
|
-
treeIndex = 0;
|
|
1770
|
-
excess = 1;
|
|
1771
|
-
decodeMode = DecodingMode.Strict;
|
|
1772
|
-
runConsumed = 0;
|
|
1773
|
-
startEntity(decodeMode) {
|
|
1774
|
-
this.decodeMode = decodeMode;
|
|
1775
|
-
this.state = EntityDecoderState.EntityStart;
|
|
1776
|
-
this.result = 0;
|
|
1777
|
-
this.treeIndex = 0;
|
|
1778
|
-
this.excess = 1;
|
|
1779
|
-
this.consumed = 1;
|
|
1780
|
-
this.runConsumed = 0;
|
|
1781
|
-
}
|
|
1782
|
-
write(input, offset) {
|
|
1783
|
-
switch (this.state) {
|
|
1784
|
-
case EntityDecoderState.EntityStart: {
|
|
1785
|
-
if (input.charCodeAt(offset) === CharCodes.NUM) {
|
|
1786
|
-
this.state = EntityDecoderState.NumericStart;
|
|
1787
|
-
this.consumed += 1;
|
|
1788
|
-
return this.stateNumericStart(input, offset + 1);
|
|
1789
|
-
}
|
|
1790
|
-
this.state = EntityDecoderState.NamedEntity;
|
|
1791
|
-
return this.stateNamedEntity(input, offset);
|
|
1792
|
-
}
|
|
1793
|
-
case EntityDecoderState.NumericStart: {
|
|
1794
|
-
return this.stateNumericStart(input, offset);
|
|
1795
|
-
}
|
|
1796
|
-
case EntityDecoderState.NumericDecimal: {
|
|
1797
|
-
return this.stateNumericDecimal(input, offset);
|
|
1798
|
-
}
|
|
1799
|
-
case EntityDecoderState.NumericHex: {
|
|
1800
|
-
return this.stateNumericHex(input, offset);
|
|
1801
|
-
}
|
|
1802
|
-
case EntityDecoderState.NamedEntity: {
|
|
1803
|
-
return this.stateNamedEntity(input, offset);
|
|
1804
|
-
}
|
|
1805
|
-
}
|
|
1806
|
-
}
|
|
1807
|
-
stateNumericStart(input, offset) {
|
|
1808
|
-
if (offset >= input.length) {
|
|
1809
|
-
return -1;
|
|
1810
|
-
}
|
|
1811
|
-
if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
|
|
1812
|
-
this.state = EntityDecoderState.NumericHex;
|
|
1813
|
-
this.consumed += 1;
|
|
1814
|
-
return this.stateNumericHex(input, offset + 1);
|
|
1815
|
-
}
|
|
1816
|
-
this.state = EntityDecoderState.NumericDecimal;
|
|
1817
|
-
return this.stateNumericDecimal(input, offset);
|
|
1818
|
-
}
|
|
1819
|
-
stateNumericHex(input, offset) {
|
|
1820
|
-
while (offset < input.length) {
|
|
1821
|
-
const char = input.charCodeAt(offset);
|
|
1822
|
-
if (isNumber(char) || isHexadecimalCharacter(char)) {
|
|
1823
|
-
const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
|
|
1824
|
-
this.result = this.result * 16 + digit;
|
|
1825
|
-
this.consumed++;
|
|
1826
|
-
offset++;
|
|
1827
|
-
} else {
|
|
1828
|
-
return this.emitNumericEntity(char, 3);
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
|
-
return -1;
|
|
1832
|
-
}
|
|
1833
|
-
stateNumericDecimal(input, offset) {
|
|
1834
|
-
while (offset < input.length) {
|
|
1835
|
-
const char = input.charCodeAt(offset);
|
|
1836
|
-
if (isNumber(char)) {
|
|
1837
|
-
this.result = this.result * 10 + (char - CharCodes.ZERO);
|
|
1838
|
-
this.consumed++;
|
|
1839
|
-
offset++;
|
|
1840
|
-
} else {
|
|
1841
|
-
return this.emitNumericEntity(char, 2);
|
|
1842
|
-
}
|
|
1843
|
-
}
|
|
1844
|
-
return -1;
|
|
1845
|
-
}
|
|
1846
|
-
emitNumericEntity(lastCp, expectedLength) {
|
|
1847
|
-
if (this.consumed <= expectedLength) {
|
|
1848
|
-
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1849
|
-
return 0;
|
|
1850
|
-
}
|
|
1851
|
-
if (lastCp === CharCodes.SEMI) {
|
|
1852
|
-
this.consumed += 1;
|
|
1853
|
-
} else if (this.decodeMode === DecodingMode.Strict) {
|
|
1854
|
-
return 0;
|
|
1855
|
-
}
|
|
1856
|
-
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
|
|
1857
|
-
if (this.errors) {
|
|
1858
|
-
if (lastCp !== CharCodes.SEMI) {
|
|
1859
|
-
this.errors.missingSemicolonAfterCharacterReference();
|
|
1860
|
-
}
|
|
1861
|
-
this.errors.validateNumericCharacterReference(this.result);
|
|
1862
|
-
}
|
|
1863
|
-
return this.consumed;
|
|
1864
|
-
}
|
|
1865
|
-
stateNamedEntity(input, offset) {
|
|
1866
|
-
const { decodeTree } = this;
|
|
1867
|
-
let current = decodeTree[this.treeIndex];
|
|
1868
|
-
let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1869
|
-
while (offset < input.length) {
|
|
1870
|
-
if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
|
|
1871
|
-
const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
|
1872
|
-
if (this.runConsumed === 0) {
|
|
1873
|
-
const firstChar = current & BinTrieFlags.JUMP_TABLE;
|
|
1874
|
-
if (input.charCodeAt(offset) !== firstChar) {
|
|
1875
|
-
return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1876
|
-
}
|
|
1877
|
-
offset++;
|
|
1878
|
-
this.excess++;
|
|
1879
|
-
this.runConsumed++;
|
|
1880
|
-
}
|
|
1881
|
-
while (this.runConsumed < runLength) {
|
|
1882
|
-
if (offset >= input.length) {
|
|
1883
|
-
return -1;
|
|
1884
|
-
}
|
|
1885
|
-
const charIndexInPacked = this.runConsumed - 1;
|
|
1886
|
-
const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
|
|
1887
|
-
const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
|
|
1888
|
-
if (input.charCodeAt(offset) !== expectedChar) {
|
|
1889
|
-
this.runConsumed = 0;
|
|
1890
|
-
return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1891
|
-
}
|
|
1892
|
-
offset++;
|
|
1893
|
-
this.excess++;
|
|
1894
|
-
this.runConsumed++;
|
|
1895
|
-
}
|
|
1896
|
-
this.runConsumed = 0;
|
|
1897
|
-
this.treeIndex += 1 + (runLength >> 1);
|
|
1898
|
-
current = decodeTree[this.treeIndex];
|
|
1899
|
-
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1900
|
-
}
|
|
1901
|
-
if (offset >= input.length)
|
|
1902
|
-
break;
|
|
1903
|
-
const char = input.charCodeAt(offset);
|
|
1904
|
-
if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
|
|
1905
|
-
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
1906
|
-
}
|
|
1907
|
-
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
1908
|
-
if (this.treeIndex < 0) {
|
|
1909
|
-
return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
1910
|
-
}
|
|
1911
|
-
current = decodeTree[this.treeIndex];
|
|
1912
|
-
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1913
|
-
if (valueLength !== 0) {
|
|
1914
|
-
if (char === CharCodes.SEMI) {
|
|
1915
|
-
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
1916
|
-
}
|
|
1917
|
-
if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
|
|
1918
|
-
this.result = this.treeIndex;
|
|
1919
|
-
this.consumed += this.excess;
|
|
1920
|
-
this.excess = 0;
|
|
1921
|
-
}
|
|
1922
|
-
}
|
|
1923
|
-
offset++;
|
|
1924
|
-
this.excess++;
|
|
1925
|
-
}
|
|
1926
|
-
return -1;
|
|
1927
|
-
}
|
|
1928
|
-
emitNotTerminatedNamedEntity() {
|
|
1929
|
-
const { result, decodeTree } = this;
|
|
1930
|
-
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
1931
|
-
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
1932
|
-
this.errors?.missingSemicolonAfterCharacterReference();
|
|
1933
|
-
return this.consumed;
|
|
1934
|
-
}
|
|
1935
|
-
emitNamedEntityData(result, valueLength, consumed) {
|
|
1936
|
-
const { decodeTree } = this;
|
|
1937
|
-
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
|
|
1938
|
-
if (valueLength === 3) {
|
|
1939
|
-
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
1940
|
-
}
|
|
1941
|
-
return consumed;
|
|
1942
|
-
}
|
|
1943
|
-
end() {
|
|
1944
|
-
switch (this.state) {
|
|
1945
|
-
case EntityDecoderState.NamedEntity: {
|
|
1946
|
-
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
1947
|
-
}
|
|
1948
|
-
case EntityDecoderState.NumericDecimal: {
|
|
1949
|
-
return this.emitNumericEntity(0, 2);
|
|
1950
|
-
}
|
|
1951
|
-
case EntityDecoderState.NumericHex: {
|
|
1952
|
-
return this.emitNumericEntity(0, 3);
|
|
1953
|
-
}
|
|
1954
|
-
case EntityDecoderState.NumericStart: {
|
|
1955
|
-
this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
1956
|
-
return 0;
|
|
1957
|
-
}
|
|
1958
|
-
case EntityDecoderState.EntityStart: {
|
|
1959
|
-
return 0;
|
|
1960
|
-
}
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
1963
|
-
}
|
|
1964
|
-
function determineBranch(decodeTree, current, nodeIndex, char) {
|
|
1965
|
-
const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
|
1966
|
-
const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
|
|
1967
|
-
if (branchCount === 0) {
|
|
1968
|
-
return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
|
|
1969
|
-
}
|
|
1970
|
-
if (jumpOffset) {
|
|
1971
|
-
const value = char - jumpOffset;
|
|
1972
|
-
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
|
|
1973
|
-
}
|
|
1974
|
-
const packedKeySlots = branchCount + 1 >> 1;
|
|
1975
|
-
let lo = 0;
|
|
1976
|
-
let hi = branchCount - 1;
|
|
1977
|
-
while (lo <= hi) {
|
|
1978
|
-
const mid = lo + hi >>> 1;
|
|
1979
|
-
const slot = mid >> 1;
|
|
1980
|
-
const packed = decodeTree[nodeIndex + slot];
|
|
1981
|
-
const midKey = packed >> (mid & 1) * 8 & 255;
|
|
1982
|
-
if (midKey < char) {
|
|
1983
|
-
lo = mid + 1;
|
|
1984
|
-
} else if (midKey > char) {
|
|
1985
|
-
hi = mid - 1;
|
|
1986
|
-
} else {
|
|
1987
|
-
return decodeTree[nodeIndex + packedKeySlots + mid];
|
|
1988
|
-
}
|
|
1989
|
-
}
|
|
1990
|
-
return -1;
|
|
1991
|
-
}
|
|
1992
|
-
|
|
1993
|
-
// node_modules/htmlparser2/dist/Tokenizer.js
|
|
1994
|
-
var CharCodes2;
|
|
1995
|
-
(function(CharCodes3) {
|
|
1996
|
-
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
|
|
1997
|
-
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
|
|
1998
|
-
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
|
|
1999
|
-
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
|
|
2000
|
-
CharCodes3[CharCodes3["Space"] = 32] = "Space";
|
|
2001
|
-
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
|
|
2002
|
-
CharCodes3[CharCodes3["Number"] = 35] = "Number";
|
|
2003
|
-
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
|
|
2004
|
-
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
|
|
2005
|
-
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
|
|
2006
|
-
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
|
|
2007
|
-
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
|
|
2008
|
-
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
|
|
2009
|
-
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
|
|
2010
|
-
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
|
|
2011
|
-
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
|
|
2012
|
-
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
|
|
2013
|
-
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
|
|
2014
|
-
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
|
|
2015
|
-
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
|
|
2016
|
-
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
|
|
2017
|
-
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
|
|
2018
|
-
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
|
|
2019
|
-
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
|
|
2020
|
-
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
|
|
2021
|
-
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
|
|
2022
|
-
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
2023
|
-
})(CharCodes2 || (CharCodes2 = {}));
|
|
2024
|
-
var State;
|
|
2025
|
-
(function(State2) {
|
|
2026
|
-
State2[State2["Text"] = 1] = "Text";
|
|
2027
|
-
State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
|
|
2028
|
-
State2[State2["InTagName"] = 3] = "InTagName";
|
|
2029
|
-
State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
|
|
2030
|
-
State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
|
|
2031
|
-
State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
|
|
2032
|
-
State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
|
|
2033
|
-
State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
|
|
2034
|
-
State2[State2["InAttributeName"] = 9] = "InAttributeName";
|
|
2035
|
-
State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
|
|
2036
|
-
State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
|
|
2037
|
-
State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
|
|
2038
|
-
State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
|
|
2039
|
-
State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
|
|
2040
|
-
State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
|
|
2041
|
-
State2[State2["InDeclaration"] = 16] = "InDeclaration";
|
|
2042
|
-
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
2043
|
-
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
2044
|
-
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
2045
|
-
State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
|
|
2046
|
-
State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
|
|
2047
|
-
State2[State2["InCommentLike"] = 22] = "InCommentLike";
|
|
2048
|
-
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
2049
|
-
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
2050
|
-
State2[State2["InPlainText"] = 25] = "InPlainText";
|
|
2051
|
-
State2[State2["InEntity"] = 26] = "InEntity";
|
|
2052
|
-
})(State || (State = {}));
|
|
1647
|
+
// tools/core/html-tokenizer.js
|
|
1648
|
+
var CharCodes = {
|
|
1649
|
+
Tab: 9,
|
|
1650
|
+
NewLine: 10,
|
|
1651
|
+
FormFeed: 12,
|
|
1652
|
+
CarriageReturn: 13,
|
|
1653
|
+
Space: 32,
|
|
1654
|
+
ExclamationMark: 33,
|
|
1655
|
+
Number: 35,
|
|
1656
|
+
SingleQuote: 39,
|
|
1657
|
+
DoubleQuote: 34,
|
|
1658
|
+
Dash: 45,
|
|
1659
|
+
Slash: 47,
|
|
1660
|
+
Zero: 48,
|
|
1661
|
+
Nine: 57,
|
|
1662
|
+
Semi: 59,
|
|
1663
|
+
Lt: 60,
|
|
1664
|
+
Eq: 61,
|
|
1665
|
+
Gt: 62,
|
|
1666
|
+
Questionmark: 63,
|
|
1667
|
+
UpperA: 65,
|
|
1668
|
+
LowerA: 97,
|
|
1669
|
+
UpperF: 70,
|
|
1670
|
+
LowerF: 102,
|
|
1671
|
+
UpperZ: 90,
|
|
1672
|
+
LowerZ: 122,
|
|
1673
|
+
LowerX: 120,
|
|
1674
|
+
OpeningSquareBracket: 91
|
|
1675
|
+
};
|
|
1676
|
+
var State = {
|
|
1677
|
+
Text: 1,
|
|
1678
|
+
BeforeTagName: 2,
|
|
1679
|
+
InTagName: 3,
|
|
1680
|
+
InSelfClosingTag: 4,
|
|
1681
|
+
BeforeClosingTagName: 5,
|
|
1682
|
+
InClosingTagName: 6,
|
|
1683
|
+
AfterClosingTagName: 7,
|
|
1684
|
+
BeforeAttributeName: 8,
|
|
1685
|
+
InAttributeName: 9,
|
|
1686
|
+
AfterAttributeName: 10,
|
|
1687
|
+
BeforeAttributeValue: 11,
|
|
1688
|
+
InAttributeValueDq: 12,
|
|
1689
|
+
InAttributeValueSq: 13,
|
|
1690
|
+
InAttributeValueNq: 14,
|
|
1691
|
+
BeforeDeclaration: 15,
|
|
1692
|
+
InDeclaration: 16,
|
|
1693
|
+
InProcessingInstruction: 17,
|
|
1694
|
+
BeforeComment: 18,
|
|
1695
|
+
CDATASequence: 19,
|
|
1696
|
+
DeclarationSequence: 20,
|
|
1697
|
+
InSpecialComment: 21,
|
|
1698
|
+
InCommentLike: 22,
|
|
1699
|
+
SpecialStartSequence: 23,
|
|
1700
|
+
InSpecialTag: 24,
|
|
1701
|
+
InPlainText: 25
|
|
1702
|
+
};
|
|
2053
1703
|
function isWhitespace(c) {
|
|
2054
|
-
return c ===
|
|
1704
|
+
return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
|
|
2055
1705
|
}
|
|
2056
1706
|
function isEndOfTagSection(c) {
|
|
2057
|
-
return c ===
|
|
1707
|
+
return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
|
|
2058
1708
|
}
|
|
2059
1709
|
function isASCIIAlpha(c) {
|
|
2060
|
-
return c >=
|
|
2061
|
-
}
|
|
2062
|
-
var QuoteType
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
})(QuoteType || (QuoteType = {}));
|
|
1710
|
+
return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
|
|
1711
|
+
}
|
|
1712
|
+
var QuoteType = {
|
|
1713
|
+
NoValue: 0,
|
|
1714
|
+
Unquoted: 1,
|
|
1715
|
+
Single: 2,
|
|
1716
|
+
Double: 3
|
|
1717
|
+
};
|
|
2069
1718
|
var Sequences = {
|
|
2070
1719
|
Empty: new Uint8Array(0),
|
|
2071
1720
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
@@ -2073,57 +1722,13 @@ var Sequences = {
|
|
|
2073
1722
|
CommentEnd: new Uint8Array([45, 45, 33, 62]),
|
|
2074
1723
|
Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
|
|
2075
1724
|
IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
|
|
2076
|
-
NoembedEnd: new Uint8Array([
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
110,
|
|
2080
|
-
111,
|
|
2081
|
-
101,
|
|
2082
|
-
109,
|
|
2083
|
-
98,
|
|
2084
|
-
101,
|
|
2085
|
-
100
|
|
2086
|
-
]),
|
|
2087
|
-
NoframesEnd: new Uint8Array([
|
|
2088
|
-
60,
|
|
2089
|
-
47,
|
|
2090
|
-
110,
|
|
2091
|
-
111,
|
|
2092
|
-
102,
|
|
2093
|
-
114,
|
|
2094
|
-
97,
|
|
2095
|
-
109,
|
|
2096
|
-
101,
|
|
2097
|
-
115
|
|
2098
|
-
]),
|
|
2099
|
-
Plaintext: new Uint8Array([
|
|
2100
|
-
60,
|
|
2101
|
-
47,
|
|
2102
|
-
112,
|
|
2103
|
-
108,
|
|
2104
|
-
97,
|
|
2105
|
-
105,
|
|
2106
|
-
110,
|
|
2107
|
-
116,
|
|
2108
|
-
101,
|
|
2109
|
-
120,
|
|
2110
|
-
116
|
|
2111
|
-
]),
|
|
1725
|
+
NoembedEnd: new Uint8Array([60, 47, 110, 111, 101, 109, 98, 101, 100]),
|
|
1726
|
+
NoframesEnd: new Uint8Array([60, 47, 110, 111, 102, 114, 97, 109, 101, 115]),
|
|
1727
|
+
Plaintext: new Uint8Array([60, 47, 112, 108, 97, 105, 110, 116, 101, 120, 116]),
|
|
2112
1728
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
2113
1729
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
2114
1730
|
TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
|
|
2115
|
-
TextareaEnd: new Uint8Array([
|
|
2116
|
-
60,
|
|
2117
|
-
47,
|
|
2118
|
-
116,
|
|
2119
|
-
101,
|
|
2120
|
-
120,
|
|
2121
|
-
116,
|
|
2122
|
-
97,
|
|
2123
|
-
114,
|
|
2124
|
-
101,
|
|
2125
|
-
97
|
|
2126
|
-
]),
|
|
1731
|
+
TextareaEnd: new Uint8Array([60, 47, 116, 101, 120, 116, 97, 114, 101, 97]),
|
|
2127
1732
|
XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
|
|
2128
1733
|
};
|
|
2129
1734
|
var specialStartSequences = new Map([
|
|
@@ -2135,34 +1740,26 @@ var specialStartSequences = new Map([
|
|
|
2135
1740
|
[Sequences.XmpEnd[2], Sequences.XmpEnd]
|
|
2136
1741
|
]);
|
|
2137
1742
|
|
|
2138
|
-
class
|
|
2139
|
-
cbs
|
|
2140
|
-
state = State.Text;
|
|
2141
|
-
buffer = "";
|
|
2142
|
-
sectionStart = 0;
|
|
2143
|
-
index = 0;
|
|
2144
|
-
entityStart = 0;
|
|
2145
|
-
baseState = State.Text;
|
|
2146
|
-
isSpecial = false;
|
|
2147
|
-
running = true;
|
|
2148
|
-
offset = 0;
|
|
2149
|
-
xmlMode;
|
|
2150
|
-
decodeEntities;
|
|
2151
|
-
recognizeSelfClosing;
|
|
2152
|
-
entityDecoder;
|
|
2153
|
-
constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
|
|
1743
|
+
class HtmlTokenizer {
|
|
1744
|
+
constructor({ xmlMode = false, recognizeSelfClosing = xmlMode } = {}, cbs) {
|
|
2154
1745
|
this.cbs = cbs;
|
|
2155
1746
|
this.xmlMode = xmlMode;
|
|
2156
|
-
this.decodeEntities = decodeEntities;
|
|
2157
1747
|
this.recognizeSelfClosing = recognizeSelfClosing;
|
|
2158
|
-
this.
|
|
1748
|
+
this.state = State.Text;
|
|
1749
|
+
this.buffer = "";
|
|
1750
|
+
this.sectionStart = 0;
|
|
1751
|
+
this.index = 0;
|
|
1752
|
+
this.isSpecial = false;
|
|
1753
|
+
this.running = true;
|
|
1754
|
+
this.offset = 0;
|
|
1755
|
+
this.currentSequence = Sequences.Empty;
|
|
1756
|
+
this.sequenceIndex = 0;
|
|
2159
1757
|
}
|
|
2160
1758
|
reset() {
|
|
2161
1759
|
this.state = State.Text;
|
|
2162
1760
|
this.buffer = "";
|
|
2163
1761
|
this.sectionStart = 0;
|
|
2164
1762
|
this.index = 0;
|
|
2165
|
-
this.baseState = State.Text;
|
|
2166
1763
|
this.isSpecial = false;
|
|
2167
1764
|
this.currentSequence = Sequences.Empty;
|
|
2168
1765
|
this.sequenceIndex = 0;
|
|
@@ -2188,18 +1785,14 @@ class Tokenizer {
|
|
|
2188
1785
|
}
|
|
2189
1786
|
}
|
|
2190
1787
|
stateText(c) {
|
|
2191
|
-
if (c ===
|
|
1788
|
+
if (c === CharCodes.Lt || this.fastForwardTo(CharCodes.Lt)) {
|
|
2192
1789
|
if (this.index > this.sectionStart) {
|
|
2193
1790
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
2194
1791
|
}
|
|
2195
1792
|
this.state = State.BeforeTagName;
|
|
2196
1793
|
this.sectionStart = this.index;
|
|
2197
|
-
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2198
|
-
this.startEntity();
|
|
2199
1794
|
}
|
|
2200
1795
|
}
|
|
2201
|
-
currentSequence = Sequences.Empty;
|
|
2202
|
-
sequenceIndex = 0;
|
|
2203
1796
|
enterTagBody() {
|
|
2204
1797
|
if (this.currentSequence === Sequences.Plaintext) {
|
|
2205
1798
|
this.currentSequence = Sequences.Empty;
|
|
@@ -2281,12 +1874,12 @@ class Tokenizer {
|
|
|
2281
1874
|
this.state = State.Text;
|
|
2282
1875
|
}
|
|
2283
1876
|
stateInCommentLike(c) {
|
|
2284
|
-
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c ===
|
|
1877
|
+
if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes.Gt) {
|
|
2285
1878
|
this.emitComment(this.sequenceIndex);
|
|
2286
|
-
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c ===
|
|
1879
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes.Gt) {
|
|
2287
1880
|
this.emitComment(2);
|
|
2288
|
-
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !==
|
|
2289
|
-
this.sequenceIndex = Number(c ===
|
|
1881
|
+
} else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes.Gt) {
|
|
1882
|
+
this.sequenceIndex = Number(c === CharCodes.Dash);
|
|
2290
1883
|
} else if (c === this.currentSequence[this.sequenceIndex]) {
|
|
2291
1884
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
2292
1885
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
@@ -2329,22 +1922,18 @@ class Tokenizer {
|
|
|
2329
1922
|
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2330
1923
|
this.sequenceIndex += 1;
|
|
2331
1924
|
} else if (this.sequenceIndex === 0) {
|
|
2332
|
-
if (this.
|
|
2333
|
-
if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2334
|
-
this.startEntity();
|
|
2335
|
-
}
|
|
2336
|
-
} else if (this.fastForwardTo(CharCodes2.Lt)) {
|
|
1925
|
+
if (this.fastForwardTo(CharCodes.Lt)) {
|
|
2337
1926
|
this.sequenceIndex = 1;
|
|
2338
1927
|
}
|
|
2339
1928
|
} else {
|
|
2340
|
-
this.sequenceIndex = Number(c ===
|
|
1929
|
+
this.sequenceIndex = Number(c === CharCodes.Lt);
|
|
2341
1930
|
}
|
|
2342
1931
|
}
|
|
2343
1932
|
stateBeforeTagName(c) {
|
|
2344
|
-
if (c ===
|
|
1933
|
+
if (c === CharCodes.ExclamationMark) {
|
|
2345
1934
|
this.state = State.BeforeDeclaration;
|
|
2346
1935
|
this.sectionStart = this.index + 1;
|
|
2347
|
-
} else if (c ===
|
|
1936
|
+
} else if (c === CharCodes.Questionmark) {
|
|
2348
1937
|
if (this.xmlMode) {
|
|
2349
1938
|
this.state = State.InProcessingInstruction;
|
|
2350
1939
|
this.sequenceIndex = 0;
|
|
@@ -2364,7 +1953,7 @@ class Tokenizer {
|
|
|
2364
1953
|
this.sequenceIndex = 3;
|
|
2365
1954
|
this.state = State.SpecialStartSequence;
|
|
2366
1955
|
}
|
|
2367
|
-
} else if (c ===
|
|
1956
|
+
} else if (c === CharCodes.Slash) {
|
|
2368
1957
|
this.state = State.BeforeClosingTagName;
|
|
2369
1958
|
} else {
|
|
2370
1959
|
this.state = State.Text;
|
|
@@ -2381,11 +1970,11 @@ class Tokenizer {
|
|
|
2381
1970
|
}
|
|
2382
1971
|
stateBeforeClosingTagName(c) {
|
|
2383
1972
|
if (isWhitespace(c)) {
|
|
2384
|
-
if (this.xmlMode) {
|
|
1973
|
+
if (!this.xmlMode) {
|
|
2385
1974
|
this.state = State.InSpecialComment;
|
|
2386
1975
|
this.sectionStart = this.index;
|
|
2387
1976
|
}
|
|
2388
|
-
} else if (c ===
|
|
1977
|
+
} else if (c === CharCodes.Gt) {
|
|
2389
1978
|
this.state = State.Text;
|
|
2390
1979
|
if (!this.xmlMode) {
|
|
2391
1980
|
this.sectionStart = this.index + 1;
|
|
@@ -2404,17 +1993,17 @@ class Tokenizer {
|
|
|
2404
1993
|
}
|
|
2405
1994
|
}
|
|
2406
1995
|
stateAfterClosingTagName(c) {
|
|
2407
|
-
if (c ===
|
|
1996
|
+
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
2408
1997
|
this.state = State.Text;
|
|
2409
1998
|
this.sectionStart = this.index + 1;
|
|
2410
1999
|
}
|
|
2411
2000
|
}
|
|
2412
2001
|
stateBeforeAttributeName(c) {
|
|
2413
|
-
if (c ===
|
|
2002
|
+
if (c === CharCodes.Gt) {
|
|
2414
2003
|
this.cbs.onopentagend(this.index);
|
|
2415
2004
|
this.enterTagBody();
|
|
2416
2005
|
this.sectionStart = this.index + 1;
|
|
2417
|
-
} else if (c ===
|
|
2006
|
+
} else if (c === CharCodes.Slash) {
|
|
2418
2007
|
this.state = State.InSelfClosingTag;
|
|
2419
2008
|
} else if (!isWhitespace(c)) {
|
|
2420
2009
|
this.state = State.InAttributeName;
|
|
@@ -2422,7 +2011,7 @@ class Tokenizer {
|
|
|
2422
2011
|
}
|
|
2423
2012
|
}
|
|
2424
2013
|
stateInSelfClosingTag(c) {
|
|
2425
|
-
if (c ===
|
|
2014
|
+
if (c === CharCodes.Gt) {
|
|
2426
2015
|
this.cbs.onselfclosingtag(this.index);
|
|
2427
2016
|
this.sectionStart = this.index + 1;
|
|
2428
2017
|
if (!this.recognizeSelfClosing) {
|
|
@@ -2438,7 +2027,7 @@ class Tokenizer {
|
|
|
2438
2027
|
}
|
|
2439
2028
|
}
|
|
2440
2029
|
stateInAttributeName(c) {
|
|
2441
|
-
if (c ===
|
|
2030
|
+
if (c === CharCodes.Eq || isEndOfTagSection(c)) {
|
|
2442
2031
|
this.cbs.onattribname(this.sectionStart, this.index);
|
|
2443
2032
|
this.sectionStart = this.index;
|
|
2444
2033
|
this.state = State.AfterAttributeName;
|
|
@@ -2446,9 +2035,9 @@ class Tokenizer {
|
|
|
2446
2035
|
}
|
|
2447
2036
|
}
|
|
2448
2037
|
stateAfterAttributeName(c) {
|
|
2449
|
-
if (c ===
|
|
2038
|
+
if (c === CharCodes.Eq) {
|
|
2450
2039
|
this.state = State.BeforeAttributeValue;
|
|
2451
|
-
} else if (c ===
|
|
2040
|
+
} else if (c === CharCodes.Slash || c === CharCodes.Gt) {
|
|
2452
2041
|
this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
|
|
2453
2042
|
this.sectionStart = -1;
|
|
2454
2043
|
this.state = State.BeforeAttributeName;
|
|
@@ -2460,10 +2049,10 @@ class Tokenizer {
|
|
|
2460
2049
|
}
|
|
2461
2050
|
}
|
|
2462
2051
|
stateBeforeAttributeValue(c) {
|
|
2463
|
-
if (c ===
|
|
2052
|
+
if (c === CharCodes.DoubleQuote) {
|
|
2464
2053
|
this.state = State.InAttributeValueDq;
|
|
2465
2054
|
this.sectionStart = this.index + 1;
|
|
2466
|
-
} else if (c ===
|
|
2055
|
+
} else if (c === CharCodes.SingleQuote) {
|
|
2467
2056
|
this.state = State.InAttributeValueSq;
|
|
2468
2057
|
this.sectionStart = this.index + 1;
|
|
2469
2058
|
} else if (!isWhitespace(c)) {
|
|
@@ -2473,47 +2062,43 @@ class Tokenizer {
|
|
|
2473
2062
|
}
|
|
2474
2063
|
}
|
|
2475
2064
|
handleInAttributeValue(c, quote) {
|
|
2476
|
-
if (c === quote ||
|
|
2065
|
+
if (c === quote || this.fastForwardTo(quote)) {
|
|
2477
2066
|
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
2478
2067
|
this.sectionStart = -1;
|
|
2479
|
-
this.cbs.onattribend(quote ===
|
|
2068
|
+
this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
|
|
2480
2069
|
this.state = State.BeforeAttributeName;
|
|
2481
|
-
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2482
|
-
this.startEntity();
|
|
2483
2070
|
}
|
|
2484
2071
|
}
|
|
2485
2072
|
stateInAttributeValueDoubleQuotes(c) {
|
|
2486
|
-
this.handleInAttributeValue(c,
|
|
2073
|
+
this.handleInAttributeValue(c, CharCodes.DoubleQuote);
|
|
2487
2074
|
}
|
|
2488
2075
|
stateInAttributeValueSingleQuotes(c) {
|
|
2489
|
-
this.handleInAttributeValue(c,
|
|
2076
|
+
this.handleInAttributeValue(c, CharCodes.SingleQuote);
|
|
2490
2077
|
}
|
|
2491
2078
|
stateInAttributeValueNoQuotes(c) {
|
|
2492
|
-
if (isWhitespace(c) || c ===
|
|
2079
|
+
if (isWhitespace(c) || c === CharCodes.Gt) {
|
|
2493
2080
|
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
2494
2081
|
this.sectionStart = -1;
|
|
2495
2082
|
this.cbs.onattribend(QuoteType.Unquoted, this.index);
|
|
2496
2083
|
this.state = State.BeforeAttributeName;
|
|
2497
2084
|
this.stateBeforeAttributeName(c);
|
|
2498
|
-
} else if (this.decodeEntities && c === CharCodes2.Amp) {
|
|
2499
|
-
this.startEntity();
|
|
2500
2085
|
}
|
|
2501
2086
|
}
|
|
2502
2087
|
stateBeforeDeclaration(c) {
|
|
2503
|
-
if (c ===
|
|
2088
|
+
if (c === CharCodes.OpeningSquareBracket) {
|
|
2504
2089
|
this.state = State.CDATASequence;
|
|
2505
2090
|
this.sequenceIndex = 0;
|
|
2506
2091
|
} else if (this.xmlMode) {
|
|
2507
|
-
this.state = c ===
|
|
2092
|
+
this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
|
|
2508
2093
|
} else if ((c | 32) === Sequences.Doctype[0]) {
|
|
2509
2094
|
this.state = State.DeclarationSequence;
|
|
2510
2095
|
this.currentSequence = Sequences.Doctype;
|
|
2511
2096
|
this.sequenceIndex = 1;
|
|
2512
|
-
} else if (c ===
|
|
2097
|
+
} else if (c === CharCodes.Gt) {
|
|
2513
2098
|
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2514
2099
|
this.state = State.Text;
|
|
2515
2100
|
this.sectionStart = this.index + 1;
|
|
2516
|
-
} else if (c ===
|
|
2101
|
+
} else if (c === CharCodes.Dash) {
|
|
2517
2102
|
this.state = State.BeforeComment;
|
|
2518
2103
|
} else {
|
|
2519
2104
|
this.state = State.InSpecialComment;
|
|
@@ -2525,7 +2110,7 @@ class Tokenizer {
|
|
|
2525
2110
|
this.stateInDeclaration(c);
|
|
2526
2111
|
} else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
2527
2112
|
this.sequenceIndex += 1;
|
|
2528
|
-
} else if (c ===
|
|
2113
|
+
} else if (c === CharCodes.Gt) {
|
|
2529
2114
|
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2530
2115
|
this.state = State.Text;
|
|
2531
2116
|
this.sectionStart = this.index + 1;
|
|
@@ -2534,33 +2119,33 @@ class Tokenizer {
|
|
|
2534
2119
|
}
|
|
2535
2120
|
}
|
|
2536
2121
|
stateInDeclaration(c) {
|
|
2537
|
-
if (c ===
|
|
2122
|
+
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
2538
2123
|
this.cbs.ondeclaration(this.sectionStart, this.index);
|
|
2539
2124
|
this.state = State.Text;
|
|
2540
2125
|
this.sectionStart = this.index + 1;
|
|
2541
2126
|
}
|
|
2542
2127
|
}
|
|
2543
2128
|
stateInProcessingInstruction(c) {
|
|
2544
|
-
if (c ===
|
|
2129
|
+
if (c === CharCodes.Questionmark) {
|
|
2545
2130
|
this.sequenceIndex = 1;
|
|
2546
|
-
} else if (c ===
|
|
2131
|
+
} else if (c === CharCodes.Gt && this.sequenceIndex === 1) {
|
|
2547
2132
|
this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
|
|
2548
2133
|
this.sequenceIndex = 0;
|
|
2549
2134
|
this.state = State.Text;
|
|
2550
2135
|
this.sectionStart = this.index + 1;
|
|
2551
2136
|
} else {
|
|
2552
|
-
this.sequenceIndex = Number(this.fastForwardTo(
|
|
2137
|
+
this.sequenceIndex = Number(this.fastForwardTo(CharCodes.Questionmark));
|
|
2553
2138
|
}
|
|
2554
2139
|
}
|
|
2555
2140
|
stateBeforeComment(c) {
|
|
2556
|
-
if (c ===
|
|
2141
|
+
if (c === CharCodes.Dash) {
|
|
2557
2142
|
this.state = State.InCommentLike;
|
|
2558
2143
|
this.currentSequence = Sequences.CommentEnd;
|
|
2559
2144
|
this.sequenceIndex = 0;
|
|
2560
2145
|
this.sectionStart = this.index + 1;
|
|
2561
2146
|
} else if (this.xmlMode) {
|
|
2562
2147
|
this.state = State.InDeclaration;
|
|
2563
|
-
} else if (c ===
|
|
2148
|
+
} else if (c === CharCodes.Gt) {
|
|
2564
2149
|
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2565
2150
|
this.state = State.Text;
|
|
2566
2151
|
this.sectionStart = this.index + 1;
|
|
@@ -2569,35 +2154,12 @@ class Tokenizer {
|
|
|
2569
2154
|
}
|
|
2570
2155
|
}
|
|
2571
2156
|
stateInSpecialComment(c) {
|
|
2572
|
-
if (c ===
|
|
2157
|
+
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
2573
2158
|
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
2574
2159
|
this.state = State.Text;
|
|
2575
2160
|
this.sectionStart = this.index + 1;
|
|
2576
2161
|
}
|
|
2577
2162
|
}
|
|
2578
|
-
startEntity() {
|
|
2579
|
-
this.baseState = this.state;
|
|
2580
|
-
this.state = State.InEntity;
|
|
2581
|
-
this.entityStart = this.index;
|
|
2582
|
-
this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
|
|
2583
|
-
}
|
|
2584
|
-
stateInEntity() {
|
|
2585
|
-
const indexInBuffer = this.index - this.offset;
|
|
2586
|
-
const length = this.entityDecoder.write(this.buffer, indexInBuffer);
|
|
2587
|
-
if (length >= 0) {
|
|
2588
|
-
this.state = this.baseState;
|
|
2589
|
-
if (length === 0) {
|
|
2590
|
-
this.index -= 1;
|
|
2591
|
-
}
|
|
2592
|
-
} else {
|
|
2593
|
-
if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
|
|
2594
|
-
this.state = this.baseState;
|
|
2595
|
-
this.index -= 1;
|
|
2596
|
-
return;
|
|
2597
|
-
}
|
|
2598
|
-
this.index = this.offset + this.buffer.length - 1;
|
|
2599
|
-
}
|
|
2600
|
-
}
|
|
2601
2163
|
cleanup() {
|
|
2602
2164
|
if (this.running && this.sectionStart !== this.index) {
|
|
2603
2165
|
if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
@@ -2616,127 +2178,93 @@ class Tokenizer {
|
|
|
2616
2178
|
while (this.shouldContinue()) {
|
|
2617
2179
|
const c = this.buffer.charCodeAt(this.index - this.offset);
|
|
2618
2180
|
switch (this.state) {
|
|
2619
|
-
case State.Text:
|
|
2181
|
+
case State.Text:
|
|
2620
2182
|
this.stateText(c);
|
|
2621
2183
|
break;
|
|
2622
|
-
|
|
2623
|
-
case State.InPlainText: {
|
|
2184
|
+
case State.InPlainText:
|
|
2624
2185
|
this.index = this.buffer.length + this.offset - 1;
|
|
2625
2186
|
break;
|
|
2626
|
-
|
|
2627
|
-
case State.SpecialStartSequence: {
|
|
2187
|
+
case State.SpecialStartSequence:
|
|
2628
2188
|
this.stateSpecialStartSequence(c);
|
|
2629
2189
|
break;
|
|
2630
|
-
|
|
2631
|
-
case State.InSpecialTag: {
|
|
2190
|
+
case State.InSpecialTag:
|
|
2632
2191
|
this.stateInSpecialTag(c);
|
|
2633
2192
|
break;
|
|
2634
|
-
|
|
2635
|
-
case State.CDATASequence: {
|
|
2193
|
+
case State.CDATASequence:
|
|
2636
2194
|
this.stateCDATASequence(c);
|
|
2637
2195
|
break;
|
|
2638
|
-
|
|
2639
|
-
case State.DeclarationSequence: {
|
|
2196
|
+
case State.DeclarationSequence:
|
|
2640
2197
|
this.stateDeclarationSequence(c);
|
|
2641
2198
|
break;
|
|
2642
|
-
|
|
2643
|
-
case State.InAttributeValueDq: {
|
|
2199
|
+
case State.InAttributeValueDq:
|
|
2644
2200
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
2645
2201
|
break;
|
|
2646
|
-
|
|
2647
|
-
case State.InAttributeName: {
|
|
2202
|
+
case State.InAttributeName:
|
|
2648
2203
|
this.stateInAttributeName(c);
|
|
2649
2204
|
break;
|
|
2650
|
-
|
|
2651
|
-
case State.InCommentLike: {
|
|
2205
|
+
case State.InCommentLike:
|
|
2652
2206
|
this.stateInCommentLike(c);
|
|
2653
2207
|
break;
|
|
2654
|
-
|
|
2655
|
-
case State.InSpecialComment: {
|
|
2208
|
+
case State.InSpecialComment:
|
|
2656
2209
|
this.stateInSpecialComment(c);
|
|
2657
2210
|
break;
|
|
2658
|
-
|
|
2659
|
-
case State.BeforeAttributeName: {
|
|
2211
|
+
case State.BeforeAttributeName:
|
|
2660
2212
|
this.stateBeforeAttributeName(c);
|
|
2661
2213
|
break;
|
|
2662
|
-
|
|
2663
|
-
case State.InTagName: {
|
|
2214
|
+
case State.InTagName:
|
|
2664
2215
|
this.stateInTagName(c);
|
|
2665
2216
|
break;
|
|
2666
|
-
|
|
2667
|
-
case State.InClosingTagName: {
|
|
2217
|
+
case State.InClosingTagName:
|
|
2668
2218
|
this.stateInClosingTagName(c);
|
|
2669
2219
|
break;
|
|
2670
|
-
|
|
2671
|
-
case State.BeforeTagName: {
|
|
2220
|
+
case State.BeforeTagName:
|
|
2672
2221
|
this.stateBeforeTagName(c);
|
|
2673
2222
|
break;
|
|
2674
|
-
|
|
2675
|
-
case State.AfterAttributeName: {
|
|
2223
|
+
case State.AfterAttributeName:
|
|
2676
2224
|
this.stateAfterAttributeName(c);
|
|
2677
2225
|
break;
|
|
2678
|
-
|
|
2679
|
-
case State.InAttributeValueSq: {
|
|
2226
|
+
case State.InAttributeValueSq:
|
|
2680
2227
|
this.stateInAttributeValueSingleQuotes(c);
|
|
2681
2228
|
break;
|
|
2682
|
-
|
|
2683
|
-
case State.BeforeAttributeValue: {
|
|
2229
|
+
case State.BeforeAttributeValue:
|
|
2684
2230
|
this.stateBeforeAttributeValue(c);
|
|
2685
2231
|
break;
|
|
2686
|
-
|
|
2687
|
-
case State.BeforeClosingTagName: {
|
|
2232
|
+
case State.BeforeClosingTagName:
|
|
2688
2233
|
this.stateBeforeClosingTagName(c);
|
|
2689
2234
|
break;
|
|
2690
|
-
|
|
2691
|
-
case State.AfterClosingTagName: {
|
|
2235
|
+
case State.AfterClosingTagName:
|
|
2692
2236
|
this.stateAfterClosingTagName(c);
|
|
2693
2237
|
break;
|
|
2694
|
-
|
|
2695
|
-
case State.InAttributeValueNq: {
|
|
2238
|
+
case State.InAttributeValueNq:
|
|
2696
2239
|
this.stateInAttributeValueNoQuotes(c);
|
|
2697
2240
|
break;
|
|
2698
|
-
|
|
2699
|
-
case State.InSelfClosingTag: {
|
|
2241
|
+
case State.InSelfClosingTag:
|
|
2700
2242
|
this.stateInSelfClosingTag(c);
|
|
2701
2243
|
break;
|
|
2702
|
-
|
|
2703
|
-
case State.InDeclaration: {
|
|
2244
|
+
case State.InDeclaration:
|
|
2704
2245
|
this.stateInDeclaration(c);
|
|
2705
2246
|
break;
|
|
2706
|
-
|
|
2707
|
-
case State.BeforeDeclaration: {
|
|
2247
|
+
case State.BeforeDeclaration:
|
|
2708
2248
|
this.stateBeforeDeclaration(c);
|
|
2709
2249
|
break;
|
|
2710
|
-
|
|
2711
|
-
case State.BeforeComment: {
|
|
2250
|
+
case State.BeforeComment:
|
|
2712
2251
|
this.stateBeforeComment(c);
|
|
2713
2252
|
break;
|
|
2714
|
-
|
|
2715
|
-
case State.InProcessingInstruction: {
|
|
2253
|
+
case State.InProcessingInstruction:
|
|
2716
2254
|
this.stateInProcessingInstruction(c);
|
|
2717
2255
|
break;
|
|
2718
|
-
}
|
|
2719
|
-
case State.InEntity: {
|
|
2720
|
-
this.stateInEntity();
|
|
2721
|
-
break;
|
|
2722
|
-
}
|
|
2723
2256
|
}
|
|
2724
2257
|
this.index++;
|
|
2725
2258
|
}
|
|
2726
2259
|
this.cleanup();
|
|
2727
2260
|
}
|
|
2728
2261
|
finish() {
|
|
2729
|
-
if (this.state === State.InEntity) {
|
|
2730
|
-
this.entityDecoder.end();
|
|
2731
|
-
this.state = this.baseState;
|
|
2732
|
-
}
|
|
2733
2262
|
this.handleTrailingData();
|
|
2734
2263
|
this.cbs.onend();
|
|
2735
2264
|
}
|
|
2736
2265
|
handleTrailingCommentLikeData(endIndex) {
|
|
2737
|
-
if (this.state !== State.InCommentLike)
|
|
2266
|
+
if (this.state !== State.InCommentLike)
|
|
2738
2267
|
return false;
|
|
2739
|
-
}
|
|
2740
2268
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
2741
2269
|
if (this.xmlMode) {
|
|
2742
2270
|
if (this.sectionStart < endIndex) {
|
|
@@ -2759,35 +2287,29 @@ class Tokenizer {
|
|
|
2759
2287
|
case State.BeforeComment:
|
|
2760
2288
|
case State.CDATASequence:
|
|
2761
2289
|
case State.DeclarationSequence:
|
|
2762
|
-
case State.InDeclaration:
|
|
2290
|
+
case State.InDeclaration:
|
|
2763
2291
|
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2764
2292
|
return true;
|
|
2765
|
-
|
|
2766
|
-
default: {
|
|
2293
|
+
default:
|
|
2767
2294
|
return false;
|
|
2768
|
-
}
|
|
2769
2295
|
}
|
|
2770
2296
|
}
|
|
2771
2297
|
switch (this.state) {
|
|
2772
2298
|
case State.BeforeDeclaration:
|
|
2773
2299
|
case State.InSpecialComment:
|
|
2774
2300
|
case State.BeforeComment:
|
|
2775
|
-
case State.CDATASequence:
|
|
2301
|
+
case State.CDATASequence:
|
|
2776
2302
|
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2777
2303
|
return true;
|
|
2778
|
-
|
|
2779
|
-
case State.DeclarationSequence: {
|
|
2304
|
+
case State.DeclarationSequence:
|
|
2780
2305
|
if (this.sequenceIndex !== Sequences.Doctype.length) {
|
|
2781
2306
|
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
2782
2307
|
}
|
|
2783
2308
|
return true;
|
|
2784
|
-
|
|
2785
|
-
case State.InDeclaration: {
|
|
2309
|
+
case State.InDeclaration:
|
|
2786
2310
|
return true;
|
|
2787
|
-
|
|
2788
|
-
default: {
|
|
2311
|
+
default:
|
|
2789
2312
|
return false;
|
|
2790
|
-
}
|
|
2791
2313
|
}
|
|
2792
2314
|
}
|
|
2793
2315
|
handleTrailingData() {
|
|
@@ -2795,9 +2317,8 @@ class Tokenizer {
|
|
|
2795
2317
|
if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
|
|
2796
2318
|
return;
|
|
2797
2319
|
}
|
|
2798
|
-
if (this.sectionStart >= endIndex)
|
|
2320
|
+
if (this.sectionStart >= endIndex)
|
|
2799
2321
|
return;
|
|
2800
|
-
}
|
|
2801
2322
|
switch (this.state) {
|
|
2802
2323
|
case State.InTagName:
|
|
2803
2324
|
case State.BeforeAttributeName:
|
|
@@ -2807,32 +2328,14 @@ class Tokenizer {
|
|
|
2807
2328
|
case State.InAttributeValueSq:
|
|
2808
2329
|
case State.InAttributeValueDq:
|
|
2809
2330
|
case State.InAttributeValueNq:
|
|
2810
|
-
case State.InClosingTagName:
|
|
2331
|
+
case State.InClosingTagName:
|
|
2811
2332
|
break;
|
|
2812
|
-
|
|
2813
|
-
default: {
|
|
2333
|
+
default:
|
|
2814
2334
|
this.cbs.ontext(this.sectionStart, endIndex);
|
|
2815
|
-
}
|
|
2816
|
-
}
|
|
2817
|
-
}
|
|
2818
|
-
emitCodePoint(cp, consumed) {
|
|
2819
|
-
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
2820
|
-
if (this.sectionStart < this.entityStart) {
|
|
2821
|
-
this.cbs.onattribdata(this.sectionStart, this.entityStart);
|
|
2822
|
-
}
|
|
2823
|
-
this.sectionStart = this.entityStart + consumed;
|
|
2824
|
-
this.index = this.sectionStart - 1;
|
|
2825
|
-
this.cbs.onattribentity(cp);
|
|
2826
|
-
} else {
|
|
2827
|
-
if (this.sectionStart < this.entityStart) {
|
|
2828
|
-
this.cbs.ontext(this.sectionStart, this.entityStart);
|
|
2829
|
-
}
|
|
2830
|
-
this.sectionStart = this.entityStart + consumed;
|
|
2831
|
-
this.index = this.sectionStart - 1;
|
|
2832
|
-
this.cbs.ontextentity(cp, this.sectionStart);
|
|
2833
2335
|
}
|
|
2834
2336
|
}
|
|
2835
2337
|
}
|
|
2338
|
+
|
|
2836
2339
|
// tools/core/htmllinter-tables.js
|
|
2837
2340
|
var VOID_ELEMENTS = new Set([
|
|
2838
2341
|
"area",
|
|
@@ -3224,8 +2727,9 @@ var TABLE_SCOPE_TAGS = new Set([
|
|
|
3224
2727
|
]);
|
|
3225
2728
|
var TABLE_BODY_CELL_TAGS = new Set(["td", "th"]);
|
|
3226
2729
|
function lintHtml(html, onFinding, opts = {}) {
|
|
2730
|
+
const TokenizerClass = opts.TokenizerClass ?? HtmlTokenizer;
|
|
3227
2731
|
const ctx = new LinterCtx(html, onFinding, opts);
|
|
3228
|
-
const tokenizer = new
|
|
2732
|
+
const tokenizer = new TokenizerClass({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
|
|
3229
2733
|
ctx.tokenizer = tokenizer;
|
|
3230
2734
|
tokenizer.write(html);
|
|
3231
2735
|
tokenizer.end();
|
|
@@ -11358,10 +10862,11 @@ function check(app) {
|
|
|
11358
10862
|
for (const Comp of app.comps.byId.values()) {
|
|
11359
10863
|
const shadowViews = {};
|
|
11360
10864
|
for (const name in Comp.views) {
|
|
10865
|
+
const rawView = Comp.views[name].rawView;
|
|
11361
10866
|
const ctx = new LintParseContext;
|
|
11362
|
-
ANode.parse(
|
|
10867
|
+
ANode.parse(rawView, ctx);
|
|
11363
10868
|
ctx.compile(Comp.scope);
|
|
11364
|
-
shadowViews[name] = { name, ctx };
|
|
10869
|
+
shadowViews[name] = { name, ctx, rawView };
|
|
11365
10870
|
}
|
|
11366
10871
|
const shadowComp = Object.create(Comp);
|
|
11367
10872
|
shadowComp.views = shadowViews;
|