@onereach/ui-components 4.2.0-beta.2549.0 → 4.2.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/bundled/v2/components/OrCheckboxGroupV3/OrCheckboxGroup.js +145 -0
- package/dist/bundled/v2/components/OrCheckboxGroupV3/OrCheckboxGroup.vue.d.ts +91 -0
- package/dist/bundled/v2/components/OrCheckboxGroupV3/index.d.ts +1 -0
- package/dist/bundled/v2/components/OrCheckboxGroupV3/index.js +31 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/OrCheckboxTree.js +226 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/OrCheckboxTree.vue.d.ts +91 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/index.d.ts +2 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/index.js +23 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/styles.d.ts +2 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/styles.js +10 -0
- package/dist/bundled/v2/components/OrCheckboxTreeV3/types.d.ts +8 -0
- package/dist/bundled/v2/components/OrCheckboxV3/OrCheckbox.js +37 -39
- package/dist/bundled/v2/components/OrCheckboxV3/OrCheckbox.vue.d.ts +18 -16
- package/dist/bundled/v2/components/OrCheckboxV3/index.js +1 -0
- package/dist/bundled/v2/components/OrCode/OrCode.js +3727 -6
- package/dist/bundled/v2/components/OrCode/index.js +2 -6
- package/dist/bundled/v2/components/OrCode/lang.js +3 -3897
- package/dist/bundled/v2/components/OrCode/theme.js +1 -2
- package/dist/bundled/v2/components/OrConfirm/OrConfirm.js +0 -1
- package/dist/bundled/v2/components/OrConfirm/index.js +0 -1
- package/dist/bundled/v2/components/OrFormGroupV3/OrFormGroup.js +127 -0
- package/dist/bundled/v2/components/OrFormGroupV3/OrFormGroup.vue.d.ts +87 -0
- package/dist/bundled/v2/components/OrFormGroupV3/index.d.ts +2 -0
- package/dist/bundled/v2/components/OrFormGroupV3/index.js +12 -0
- package/dist/bundled/v2/components/OrFormGroupV3/props.d.ts +4 -0
- package/dist/bundled/v2/components/OrFormGroupV3/props.js +7 -0
- package/dist/bundled/v2/components/OrFormGroupV3/styles.d.ts +5 -0
- package/dist/bundled/v2/components/OrFormGroupV3/styles.js +17 -0
- package/dist/bundled/v2/components/OrModal/OrModal.js +1266 -3
- package/dist/bundled/v2/components/OrModal/index.js +0 -1
- package/dist/bundled/v2/components/OrRadioGroupV3/OrRadioGroup.js +132 -0
- package/dist/bundled/v2/components/OrRadioGroupV3/OrRadioGroup.vue.d.ts +110 -0
- package/dist/bundled/v2/components/OrRadioGroupV3/index.d.ts +1 -0
- package/dist/bundled/v2/components/OrRadioGroupV3/index.js +19 -0
- package/dist/bundled/v2/components/OrSelectV3/OrSelect.js +1 -1
- package/dist/bundled/v2/components/OrSelectV3/index.js +1 -1
- package/dist/bundled/v2/components/OrTooltipContent/OrTooltipContent.js +2 -2
- package/dist/bundled/v2/components/index.d.ts +0 -1
- package/dist/bundled/v2/components/index.js +2 -15
- package/dist/bundled/v2/{index-f5487f12.js → index-6976c52a.js} +115 -3
- package/dist/bundled/v2/index.d.ts +1 -0
- package/dist/bundled/v2/index.js +8 -20
- package/dist/bundled/v2/{index-70ca38c5.js → lang-02d2bb2d.js} +3965 -73
- package/dist/bundled/v2/utils/functions/flattenDeep.d.ts +2 -0
- package/dist/bundled/v2/utils/functions/flattenDeep.js +5 -0
- package/dist/bundled/v3/{OrAvatar.vue_vue_type_script_lang-29e8ad0e.js → OrAvatar.vue_vue_type_script_lang-6511e348.js} +1 -1
- package/dist/bundled/v3/{OrButton.vue_vue_type_script_lang-a4a16fe5.js → OrButton.vue_vue_type_script_lang-da7f7ed0.js} +1 -1
- package/dist/bundled/v3/{OrCardCollection.vue_vue_type_script_lang-c1d83552.js → OrCardCollection.vue_vue_type_script_lang-7a2e1332.js} +3 -3
- package/dist/bundled/v3/{OrCarousel.vue_vue_type_script_lang-0e87c56b.js → OrCarousel.vue_vue_type_script_lang-6976844a.js} +1 -1
- package/dist/bundled/v3/{OrCheckbox.vue_vue_type_script_lang-6ff51af9.js → OrCheckbox.vue_vue_type_script_lang-11b16d93.js} +1 -1
- package/dist/bundled/v3/{OrCheckbox.vue_vue_type_script_lang-60cefcbd.js → OrCheckbox.vue_vue_type_script_lang-b274a5ee.js} +27 -11
- package/dist/bundled/v3/OrCheckboxTree.vue_vue_type_script_lang-f9807b75.js +115 -0
- package/dist/bundled/v3/{OrChip.vue_vue_type_script_lang-ceebbd82.js → OrChip.vue_vue_type_script_lang-5a390853.js} +1 -1
- package/dist/bundled/v3/{OrChips.vue_vue_type_script_lang-94b456c7.js → OrChips.vue_vue_type_script_lang-d4bb44eb.js} +1 -1
- package/dist/bundled/{v2/index-16aee5bc.js → v3/OrCode.vue_vue_type_script_lang-5397df6a.js} +234 -14
- package/dist/bundled/v3/{OrConfirm.vue_vue_type_script_lang-36318ca2.js → OrConfirm.vue_vue_type_script_lang-89febea7.js} +2 -2
- package/dist/bundled/v3/{OrDateTimePicker.vue_vue_type_script_lang-5c1a5d4a.js → OrDateTimePicker.vue_vue_type_script_lang-8ff54abd.js} +1 -1
- package/dist/bundled/v3/OrFormGroup.vue_vue_type_script_lang-1c6844d6.js +63 -0
- package/dist/bundled/v3/{OrIconButton.vue_vue_type_script_lang-5d204461.js → OrIconButton.vue_vue_type_script_lang-96cb5b59.js} +2 -2
- package/dist/bundled/v3/{OrInlineTextEdit.vue_vue_type_script_lang-424e2c26.js → OrInlineTextEdit.vue_vue_type_script_lang-45987769.js} +1 -1
- package/dist/bundled/v3/{OrList.vue_vue_type_script_lang-c65271b9.js → OrList.vue_vue_type_script_lang-2c7537cc.js} +3 -3
- package/dist/bundled/v3/{OrListOfInputs.vue_vue_type_script_lang-d3dce7b8.js → OrListOfInputs.vue_vue_type_script_lang-009f62a5.js} +3 -3
- package/dist/bundled/v3/{useFocusTrap-9567b3c8.js → OrModal.vue_vue_type_script_lang-c53617ae.js} +105 -3
- package/dist/bundled/v3/{OrNotification.vue_vue_type_script_lang-ef4f2661.js → OrNotification.vue_vue_type_script_lang-efb05bb2.js} +2 -2
- package/dist/bundled/v3/{OrOverflowMenu.vue_vue_type_script_lang-0c461991.js → OrOverflowMenu.vue_vue_type_script_lang-ba50133f.js} +2 -2
- package/dist/bundled/v3/{OrPassword.vue_vue_type_script_lang-3d308fef.js → OrPassword.vue_vue_type_script_lang-37f52611.js} +1 -1
- package/dist/bundled/v3/{OrSearch.vue_vue_type_script_lang-86f4f5c7.js → OrSearch.vue_vue_type_script_lang-bcb935c3.js} +1 -1
- package/dist/bundled/v3/{OrSelect.vue_vue_type_script_lang-f7601423.js → OrSelect.vue_vue_type_script_lang-098ea3ab.js} +1 -1
- package/dist/bundled/v3/{OrSelect.vue_vue_type_script_lang-d2fecd97.js → OrSelect.vue_vue_type_script_lang-c82d8f58.js} +3 -3
- package/dist/bundled/v3/{OrSlider.vue_vue_type_script_lang-900036a2.js → OrSlider.vue_vue_type_script_lang-45ecddbe.js} +1 -1
- package/dist/bundled/v3/{OrStepper.vue_vue_type_script_lang-2821c496.js → OrStepper.vue_vue_type_script_lang-975a4df6.js} +1 -1
- package/dist/bundled/v3/{OrTag.vue_vue_type_script_lang-f06b54a2.js → OrTag.vue_vue_type_script_lang-621e9307.js} +1 -1
- package/dist/bundled/v3/{OrTextbox.vue_vue_type_script_lang-b8d5341b.js → OrTextbox.vue_vue_type_script_lang-812f302d.js} +1 -1
- package/dist/bundled/v3/components/OrAvatar/OrAvatar.js +3 -3
- package/dist/bundled/v3/components/OrAvatar/index.js +2 -2
- package/dist/bundled/v3/components/OrButtonV2/OrButton.js +3 -3
- package/dist/bundled/v3/components/OrButtonV2/index.js +4 -4
- package/dist/bundled/v3/components/OrCardCollection/OrCardCollection.js +6 -6
- package/dist/bundled/v3/components/OrCardCollection/index.js +5 -5
- package/dist/bundled/v3/components/OrCarousel/OrCarousel.js +3 -3
- package/dist/bundled/v3/components/OrCarousel/index.js +2 -2
- package/dist/bundled/v3/components/OrCheckbox/OrCheckbox.js +3 -3
- package/dist/bundled/v3/components/OrCheckbox/index.js +2 -2
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.js +121 -0
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.vue.d.ts +91 -0
- package/dist/bundled/v3/components/OrCheckboxGroupV3/index.d.ts +1 -0
- package/dist/bundled/v3/components/OrCheckboxGroupV3/index.js +40 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.js +90 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.vue.d.ts +91 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/index.d.ts +2 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/index.js +28 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/styles.d.ts +2 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/styles.js +10 -0
- package/dist/bundled/v3/components/OrCheckboxTreeV3/types.d.ts +8 -0
- package/dist/bundled/v3/components/OrCheckboxV3/OrCheckbox.js +12 -9
- package/dist/bundled/v3/components/OrCheckboxV3/OrCheckbox.vue.d.ts +18 -16
- package/dist/bundled/v3/components/OrCheckboxV3/index.js +2 -1
- package/dist/bundled/v3/components/OrChip/OrChip.js +3 -3
- package/dist/bundled/v3/components/OrChip/index.js +2 -2
- package/dist/bundled/v3/components/OrChips/OrChips.js +4 -4
- package/dist/bundled/v3/components/OrChips/index.js +3 -3
- package/dist/bundled/v3/components/OrCode/OrCode.js +9 -13
- package/dist/bundled/v3/components/OrCode/index.js +7 -11
- package/dist/bundled/v3/components/OrCode/lang.js +3 -3897
- package/dist/bundled/v3/components/OrCode/theme.js +1 -2
- package/dist/bundled/v3/components/OrConfirm/OrConfirm.js +7 -8
- package/dist/bundled/v3/components/OrConfirm/index.js +6 -7
- package/dist/bundled/v3/components/OrDateTimePicker/OrDateTimePicker.js +5 -5
- package/dist/bundled/v3/components/OrDateTimePicker/index.js +4 -4
- package/dist/bundled/v3/components/OrFormGroupV3/OrFormGroup.js +59 -0
- package/dist/bundled/v3/components/OrFormGroupV3/OrFormGroup.vue.d.ts +87 -0
- package/dist/bundled/v3/components/OrFormGroupV3/index.d.ts +2 -0
- package/dist/bundled/v3/components/OrFormGroupV3/index.js +15 -0
- package/dist/bundled/v3/components/OrFormGroupV3/props.d.ts +4 -0
- package/dist/bundled/v3/components/OrFormGroupV3/props.js +7 -0
- package/dist/bundled/v3/components/OrFormGroupV3/styles.d.ts +5 -0
- package/dist/bundled/v3/components/OrFormGroupV3/styles.js +17 -0
- package/dist/bundled/v3/components/OrIcon/OrIcon.js +2 -2
- package/dist/bundled/v3/components/OrIcon/index.js +1 -1
- package/dist/bundled/v3/components/OrIconButtonV2/OrIconButton.js +4 -4
- package/dist/bundled/v3/components/OrIconButtonV2/index.js +3 -3
- package/dist/bundled/v3/components/OrInlineTextEdit/OrInlineTextEdit.js +5 -5
- package/dist/bundled/v3/components/OrInlineTextEdit/index.js +4 -4
- package/dist/bundled/v3/components/OrList/OrList.js +6 -6
- package/dist/bundled/v3/components/OrList/index.js +5 -5
- package/dist/bundled/v3/components/OrListOfInputs/OrListOfInputs.js +7 -7
- package/dist/bundled/v3/components/OrListOfInputs/index.js +6 -6
- package/dist/bundled/v3/components/OrModal/OrModal.js +5 -6
- package/dist/bundled/v3/components/OrModal/index.js +4 -5
- package/dist/bundled/v3/components/OrNotification/OrNotification.js +5 -5
- package/dist/bundled/v3/components/OrNotification/index.js +4 -4
- package/dist/bundled/v3/components/OrOverflowMenu/OrOverflowMenu.js +6 -6
- package/dist/bundled/v3/components/OrOverflowMenu/index.js +5 -5
- package/dist/bundled/v3/components/OrPassword/OrPassword.js +5 -5
- package/dist/bundled/v3/components/OrPassword/index.js +4 -4
- package/dist/bundled/v3/components/OrRadioGroupV3/OrRadioGroup.js +104 -0
- package/dist/bundled/v3/components/OrRadioGroupV3/OrRadioGroup.vue.d.ts +110 -0
- package/dist/bundled/v3/components/OrRadioGroupV3/index.d.ts +1 -0
- package/dist/bundled/v3/components/OrRadioGroupV3/index.js +24 -0
- package/dist/bundled/v3/components/OrSearch/OrSearch.js +5 -5
- package/dist/bundled/v3/components/OrSearch/index.js +4 -4
- package/dist/bundled/v3/components/OrSelect/OrSelect.js +5 -5
- package/dist/bundled/v3/components/OrSelect/index.js +4 -4
- package/dist/bundled/v3/components/OrSelectV3/OrSelect.js +4 -4
- package/dist/bundled/v3/components/OrSelectV3/index.js +3 -3
- package/dist/bundled/v3/components/OrSlider/OrSlider.js +3 -3
- package/dist/bundled/v3/components/OrSlider/index.js +2 -2
- package/dist/bundled/v3/components/OrStepper/OrStepper.js +4 -4
- package/dist/bundled/v3/components/OrStepper/index.js +3 -3
- package/dist/bundled/v3/components/OrTag/OrTag.js +3 -3
- package/dist/bundled/v3/components/OrTag/index.js +2 -2
- package/dist/bundled/v3/components/OrTextbox/OrTextbox.js +5 -5
- package/dist/bundled/v3/components/OrTextbox/index.js +4 -4
- package/dist/bundled/v3/components/OrToast/OrToast.js +3 -3
- package/dist/bundled/v3/components/OrToast/index.js +4 -4
- package/dist/bundled/v3/components/OrToastContainer/OrToastContainer.js +5 -5
- package/dist/bundled/v3/components/OrToastContainer/index.js +4 -4
- package/dist/bundled/v3/components/OrTooltip/OrTooltip.js +2 -2
- package/dist/bundled/v3/components/OrTooltip/index.js +1 -1
- package/dist/bundled/v3/components/OrTooltipContent/OrTooltipContent.js +1 -1
- package/dist/bundled/v3/components/index.d.ts +0 -1
- package/dist/bundled/v3/components/index.js +31 -45
- package/dist/bundled/v3/{index-f5487f12.js → index-6976c52a.js} +115 -3
- package/dist/bundled/v3/index.d.ts +1 -0
- package/dist/bundled/v3/index.js +39 -53
- package/dist/bundled/v3/{index-70ca38c5.js → lang-02d2bb2d.js} +3965 -73
- package/dist/bundled/v3/utils/functions/flattenDeep.d.ts +2 -0
- package/dist/bundled/v3/utils/functions/flattenDeep.js +5 -0
- package/dist/esm/v2/{OrAvatar-da5cba16.js → OrAvatar-7c024521.js} +1 -1
- package/dist/esm/v2/{OrButton-bdddd8d4.js → OrButton-4e532ddb.js} +1 -1
- package/dist/esm/v2/{OrButton.vue_rollup-plugin-vue_styles.0-3dbd90b4.js → OrButton.vue_rollup-plugin-vue_styles.0-48c5883e.js} +2 -2
- package/dist/esm/v2/{OrCardCollection-4e014d25.js → OrCardCollection-9bf513b7.js} +5 -5
- package/dist/esm/v2/{OrCarousel-3c809a13.js → OrCarousel-e0c2e387.js} +1 -1
- package/dist/esm/v2/{OrCheckbox-dc587ec9.js → OrCheckbox-39c94019.js} +37 -40
- package/dist/esm/v2/{OrCheckbox-bf34eb0f.js → OrCheckbox-7b98fc08.js} +1 -1
- package/dist/esm/v2/OrCheckboxTree-7b81e76c.js +220 -0
- package/dist/esm/v2/{OrChip-416e848e.js → OrChip-8a1abfc5.js} +1 -1
- package/dist/esm/v2/{OrChips-77e789e9.js → OrChips-a01d8520.js} +1 -1
- package/dist/esm/v2/{OrChips.vue_rollup-plugin-vue_styles.0-e05c5ca8.js → OrChips.vue_rollup-plugin-vue_styles.0-3cbb0871.js} +1 -1
- package/dist/esm/v2/{OrCode-dcb0132a.js → OrCode-e54e09f7.js} +4 -4
- package/dist/esm/v2/{OrConfirm-497cd260.js → OrConfirm-5d5dd9bc.js} +3 -3
- package/dist/esm/v2/{OrDateTimePicker-c88ca716.js → OrDateTimePicker-6e2853ec.js} +3 -3
- package/dist/esm/v2/OrFormGroup-29a514db.js +141 -0
- package/dist/esm/v2/{OrIcon-8a6d663a.js → OrIcon-a40e60af.js} +2 -2
- package/dist/esm/v2/{OrIconButton-97bfd51d.js → OrIconButton-23972f7d.js} +1 -1
- package/dist/esm/v2/{OrIconButton.vue_rollup-plugin-vue_styles.0-e3806cef.js → OrIconButton.vue_rollup-plugin-vue_styles.0-277ce06c.js} +3 -3
- package/dist/esm/v2/{OrInlineTextEdit-e8414fb6.js → OrInlineTextEdit-9541b625.js} +3 -3
- package/dist/esm/v2/{OrList-a46d6306.js → OrList-61c7b8ea.js} +4 -4
- package/dist/esm/v2/{OrListOfInputs-33a7bf87.js → OrListOfInputs-e1b09290.js} +5 -5
- package/dist/esm/v2/{OrModal-6d84829c.js → OrModal-b9cfb8ec.js} +3 -3
- package/dist/esm/v2/{OrNotification-7945568d.js → OrNotification-fdb88eec.js} +4 -4
- package/dist/esm/v2/{OrOverflowMenu-5ce7171b.js → OrOverflowMenu-83540c76.js} +4 -4
- package/dist/esm/v2/{OrPassword-3597153d.js → OrPassword-022e10fd.js} +3 -3
- package/dist/esm/v2/{OrSearch-49ceaac4.js → OrSearch-620d5d76.js} +3 -3
- package/dist/esm/v2/{OrSelect-40183874.js → OrSelect-1865c781.js} +1 -1
- package/dist/esm/v2/{OrSelect-eb5cc918.js → OrSelect-d887118b.js} +4 -4
- package/dist/esm/v2/{OrSlider-32a14ca4.js → OrSlider-c0a7f9cf.js} +1 -1
- package/dist/esm/v2/{OrStepper-462bc9e6.js → OrStepper-b00f7531.js} +2 -2
- package/dist/esm/v2/{OrTag-a1fff567.js → OrTag-6349049b.js} +1 -1
- package/dist/esm/v2/{OrTextbox-0a89a533.js → OrTextbox-0373bd6a.js} +3 -3
- package/dist/esm/v2/{OrToastContainer-5ce15a5b.js → OrToastContainer-1625b803.js} +3 -3
- package/dist/esm/v2/{OrTooltip-cfb56e8f.js → OrTooltip-97a42707.js} +1 -1
- package/dist/esm/v2/{OrTooltip.vue_rollup-plugin-vue_styles.0-122f7804.js → OrTooltip.vue_rollup-plugin-vue_styles.0-a256ac18.js} +1 -1
- package/dist/esm/v2/{OrTooltipContent-c9540548.js → OrTooltipContent-d85e1071.js} +2 -2
- package/dist/esm/v2/components/index.d.ts +0 -1
- package/dist/esm/v2/components/index.js +34 -58
- package/dist/esm/v2/components/or-avatar/index.js +4 -4
- package/dist/esm/v2/components/or-button-v2/index.js +8 -8
- package/dist/esm/v2/components/or-card-collection/index.js +9 -9
- package/dist/esm/v2/components/or-carousel/index.js +4 -4
- package/dist/esm/v2/components/or-checkbox/index.js +4 -4
- package/dist/esm/v2/components/or-checkbox-group-v3/OrCheckboxGroup.vue.d.ts +91 -0
- package/dist/esm/v2/components/or-checkbox-group-v3/index.d.ts +1 -0
- package/dist/esm/v2/components/or-checkbox-group-v3/index.js +130 -0
- package/dist/esm/v2/components/or-checkbox-tree-v3/OrCheckboxTree.vue.d.ts +91 -0
- package/dist/esm/v2/components/or-checkbox-tree-v3/index.d.ts +2 -0
- package/dist/esm/v2/components/or-checkbox-tree-v3/index.js +12 -0
- package/dist/esm/v2/components/or-checkbox-tree-v3/styles.d.ts +2 -0
- package/dist/esm/v2/components/or-checkbox-tree-v3/types.d.ts +8 -0
- package/dist/esm/v2/components/or-checkbox-v3/OrCheckbox.vue.d.ts +18 -16
- package/dist/esm/v2/components/or-checkbox-v3/index.js +2 -2
- package/dist/esm/v2/components/or-chips/index.js +6 -6
- package/dist/esm/v2/components/or-chips/or-chip/index.js +4 -4
- package/dist/esm/v2/components/or-code/index.js +9 -9
- package/dist/esm/v2/components/or-confirm/index.js +10 -10
- package/dist/esm/v2/components/or-date-time-picker/index.js +8 -8
- package/dist/esm/v2/components/or-form-group-v3/OrFormGroup.vue.d.ts +87 -0
- package/dist/esm/v2/components/or-form-group-v3/index.d.ts +2 -0
- package/dist/esm/v2/components/or-form-group-v3/index.js +6 -0
- package/dist/esm/v2/components/or-form-group-v3/props.d.ts +4 -0
- package/dist/esm/v2/components/or-form-group-v3/styles.d.ts +5 -0
- package/dist/esm/v2/components/or-icon/index.js +3 -3
- package/dist/esm/v2/components/or-icon-button-v2/index.js +6 -6
- package/dist/esm/v2/components/or-inline-text-edit/index.js +8 -8
- package/dist/esm/v2/components/or-list/index.js +9 -9
- package/dist/esm/v2/components/or-list-of-inputs/index.js +10 -10
- package/dist/esm/v2/components/or-modal/index.js +8 -8
- package/dist/esm/v2/components/or-notification/index.js +8 -8
- package/dist/esm/v2/components/or-overflow-menu/index.js +9 -9
- package/dist/esm/v2/components/or-password/index.js +8 -8
- package/dist/esm/v2/components/or-radio-group-v3/OrRadioGroup.vue.d.ts +110 -0
- package/dist/esm/v2/components/or-radio-group-v3/index.d.ts +1 -0
- package/dist/esm/v2/components/or-radio-group-v3/index.js +124 -0
- package/dist/esm/v2/components/or-search/index.js +8 -8
- package/dist/esm/v2/components/or-select/index.js +7 -7
- package/dist/esm/v2/components/or-select-v3/index.js +2 -2
- package/dist/esm/v2/components/or-slider/index.js +4 -4
- package/dist/esm/v2/components/or-stepper/index.js +8 -8
- package/dist/esm/v2/components/or-tag/index.js +4 -4
- package/dist/esm/v2/components/or-textbox/index.js +8 -8
- package/dist/esm/v2/components/or-toast/index.js +8 -8
- package/dist/esm/v2/components/or-toast/or-toast-container/index.js +8 -8
- package/dist/esm/v2/components/or-tooltip/index.js +3 -3
- package/dist/esm/v2/components/or-tooltip/or-tooltip-content/index.js +1 -1
- package/dist/esm/v2/flattenDeep-e7a8b995.js +5 -0
- package/dist/esm/v2/index.d.ts +1 -0
- package/dist/esm/v2/index.js +35 -58
- package/dist/esm/v2/utils/functions/flattenDeep.d.ts +2 -0
- package/dist/esm/v3/{OrAvatar-b18f2208.js → OrAvatar-14a5c5f0.js} +1 -1
- package/dist/esm/v3/{OrButton-170b493f.js → OrButton-f8b10d79.js} +2 -2
- package/dist/esm/v3/{OrCardCollection-dc158967.js → OrCardCollection-ffbb9eda.js} +4 -4
- package/dist/esm/v3/{OrCarousel-8de5d65b.js → OrCarousel-03597740.js} +1 -1
- package/dist/esm/v3/{OrCheckbox-56f849f7.js → OrCheckbox-488b6915.js} +36 -19
- package/dist/esm/v3/{OrCheckbox-c2d9cf53.js → OrCheckbox-7efd5f26.js} +1 -1
- package/dist/esm/v3/OrCheckboxTree-87d0528b.js +182 -0
- package/dist/esm/v3/{OrChip-ccd4b331.js → OrChip-97a85e10.js} +1 -1
- package/dist/esm/v3/{OrChips-9a19aa03.js → OrChips-64b86761.js} +1 -1
- package/dist/esm/v3/{OrCode-b0b514ab.js → OrCode-6f2e4d99.js} +3 -3
- package/dist/esm/v3/{OrConfirm-1ffb7ed6.js → OrConfirm-ab04201f.js} +3 -3
- package/dist/esm/v3/{OrDateTimePicker-02c6de49.js → OrDateTimePicker-014f7819.js} +2 -2
- package/dist/esm/v3/OrFormGroup-9f581536.js +122 -0
- package/dist/esm/v3/{OrIcon-9b3d24cc.js → OrIcon-925c5413.js} +2 -2
- package/dist/esm/v3/{OrIconButton-9d08aa44.js → OrIconButton-5387fd59.js} +3 -3
- package/dist/esm/v3/{OrInlineTextEdit-8cfde85c.js → OrInlineTextEdit-6f97629f.js} +2 -2
- package/dist/esm/v3/{OrList-d3e330be.js → OrList-b8799cf4.js} +3 -3
- package/dist/esm/v3/{OrListOfInputs-3c8eaf97.js → OrListOfInputs-16ba8358.js} +4 -4
- package/dist/esm/v3/{OrModal-f8ae7146.js → OrModal-e6513e8c.js} +2 -2
- package/dist/esm/v3/{OrNotification-24192897.js → OrNotification-4c56f7ea.js} +3 -3
- package/dist/esm/v3/{OrOverflowMenu-a7568f8d.js → OrOverflowMenu-fe77e22c.js} +2 -2
- package/dist/esm/v3/{OrPassword-88a67993.js → OrPassword-9c8a458d.js} +2 -2
- package/dist/esm/v3/{OrSearch-fb2dd591.js → OrSearch-c4caf04e.js} +2 -2
- package/dist/esm/v3/{OrSelect-5502d82d.js → OrSelect-35b41c3f.js} +1 -1
- package/dist/esm/v3/{OrSelect-3d923250.js → OrSelect-d8a78242.js} +4 -4
- package/dist/esm/v3/{OrSlider-ae7b8a11.js → OrSlider-80e0f2e6.js} +1 -1
- package/dist/esm/v3/{OrStepper-446007c5.js → OrStepper-3a586401.js} +2 -2
- package/dist/esm/v3/{OrTag-38d1ba92.js → OrTag-e7adb078.js} +1 -1
- package/dist/esm/v3/{OrTextbox-7de2b10c.js → OrTextbox-f7388a30.js} +2 -2
- package/dist/esm/v3/{OrToastContainer-c3ecb1c8.js → OrToastContainer-94ba2803.js} +2 -2
- package/dist/esm/v3/{OrTooltip-be7209e5.js → OrTooltip-618ce7c9.js} +1 -1
- package/dist/esm/v3/{OrTooltipContent-68c34911.js → OrTooltipContent-37a5f562.js} +1 -1
- package/dist/esm/v3/components/index.d.ts +0 -1
- package/dist/esm/v3/components/index.js +30 -54
- package/dist/esm/v3/components/or-avatar/index.js +4 -4
- package/dist/esm/v3/components/or-button-v2/index.js +5 -5
- package/dist/esm/v3/components/or-card-collection/index.js +7 -7
- package/dist/esm/v3/components/or-carousel/index.js +4 -4
- package/dist/esm/v3/components/or-checkbox/index.js +4 -4
- package/dist/esm/v3/components/or-checkbox-group-v3/OrCheckboxGroup.vue.d.ts +91 -0
- package/dist/esm/v3/components/or-checkbox-group-v3/index.d.ts +1 -0
- package/dist/esm/v3/components/or-checkbox-group-v3/index.js +97 -0
- package/dist/esm/v3/components/or-checkbox-tree-v3/OrCheckboxTree.vue.d.ts +91 -0
- package/dist/esm/v3/components/or-checkbox-tree-v3/index.d.ts +2 -0
- package/dist/esm/v3/components/or-checkbox-tree-v3/index.js +12 -0
- package/dist/esm/v3/components/or-checkbox-tree-v3/styles.d.ts +2 -0
- package/dist/esm/v3/components/or-checkbox-tree-v3/types.d.ts +8 -0
- package/dist/esm/v3/components/or-checkbox-v3/OrCheckbox.vue.d.ts +18 -16
- package/dist/esm/v3/components/or-checkbox-v3/index.js +2 -2
- package/dist/esm/v3/components/or-chips/index.js +5 -5
- package/dist/esm/v3/components/or-chips/or-chip/index.js +4 -4
- package/dist/esm/v3/components/or-code/index.js +7 -7
- package/dist/esm/v3/components/or-confirm/index.js +7 -7
- package/dist/esm/v3/components/or-date-time-picker/index.js +6 -6
- package/dist/esm/v3/components/or-form-group-v3/OrFormGroup.vue.d.ts +87 -0
- package/dist/esm/v3/components/or-form-group-v3/index.d.ts +2 -0
- package/dist/esm/v3/components/or-form-group-v3/index.js +6 -0
- package/dist/esm/v3/components/or-form-group-v3/props.d.ts +4 -0
- package/dist/esm/v3/components/or-form-group-v3/styles.d.ts +5 -0
- package/dist/esm/v3/components/or-icon/index.js +3 -3
- package/dist/esm/v3/components/or-icon-button-v2/index.js +4 -4
- package/dist/esm/v3/components/or-inline-text-edit/index.js +6 -6
- package/dist/esm/v3/components/or-list/index.js +6 -6
- package/dist/esm/v3/components/or-list-of-inputs/index.js +7 -7
- package/dist/esm/v3/components/or-modal/index.js +6 -6
- package/dist/esm/v3/components/or-notification/index.js +6 -6
- package/dist/esm/v3/components/or-overflow-menu/index.js +6 -6
- package/dist/esm/v3/components/or-password/index.js +6 -6
- package/dist/esm/v3/components/or-radio-group-v3/OrRadioGroup.vue.d.ts +110 -0
- package/dist/esm/v3/components/or-radio-group-v3/index.d.ts +1 -0
- package/dist/esm/v3/components/or-radio-group-v3/index.js +91 -0
- package/dist/esm/v3/components/or-search/index.js +6 -6
- package/dist/esm/v3/components/or-select/index.js +7 -7
- package/dist/esm/v3/components/or-select-v3/index.js +2 -2
- package/dist/esm/v3/components/or-slider/index.js +4 -4
- package/dist/esm/v3/components/or-stepper/index.js +6 -6
- package/dist/esm/v3/components/or-tag/index.js +4 -4
- package/dist/esm/v3/components/or-textbox/index.js +6 -6
- package/dist/esm/v3/components/or-toast/index.js +6 -6
- package/dist/esm/v3/components/or-toast/or-toast-container/index.js +6 -6
- package/dist/esm/v3/components/or-tooltip/index.js +2 -2
- package/dist/esm/v3/components/or-tooltip/or-tooltip-content/index.js +1 -1
- package/dist/esm/v3/flattenDeep-e7a8b995.js +5 -0
- package/dist/esm/v3/index.d.ts +1 -0
- package/dist/esm/v3/index.js +31 -54
- package/dist/esm/v3/utils/functions/flattenDeep.d.ts +2 -0
- package/package.json +5 -25
- package/src/components/index.ts +0 -1
- package/src/components/or-checkbox-group-v3/OrCheckboxGroup.docs.mdx +7 -0
- package/src/components/or-checkbox-group-v3/OrCheckboxGroup.stories3.ts +373 -0
- package/src/components/or-checkbox-group-v3/OrCheckboxGroup.vue +80 -0
- package/src/components/or-checkbox-group-v3/index.ts +1 -0
- package/src/components/or-checkbox-tree-v3/OrCheckboxTree.docs.mdx +7 -0
- package/src/components/or-checkbox-tree-v3/OrCheckboxTree.stories3.ts +112 -0
- package/src/components/or-checkbox-tree-v3/OrCheckboxTree.vue +192 -0
- package/src/components/or-checkbox-tree-v3/index.ts +2 -0
- package/src/components/or-checkbox-tree-v3/styles.ts +15 -0
- package/src/components/or-checkbox-tree-v3/types.ts +8 -0
- package/src/components/or-checkbox-v3/OrCheckbox.vue +33 -13
- package/src/components/or-form-group-v3/OrFormGroup.stories3.ts +114 -0
- package/src/components/or-form-group-v3/OrFormGroup.vue +116 -0
- package/src/components/or-form-group-v3/index.ts +2 -0
- package/src/components/or-form-group-v3/props.ts +4 -0
- package/src/components/or-form-group-v3/styles.ts +33 -0
- package/src/components/or-radio-group-v3/OrRadioGroup.stories3.ts +81 -0
- package/src/components/or-radio-group-v3/OrRadioGroup.vue +80 -0
- package/src/components/or-radio-group-v3/index.ts +1 -0
- package/src/components/or-radio-v3/OrRadio.stories3.ts +1 -1
- package/src/components/or-tooltip/or-tooltip-content/OrTooltipContent.vue +0 -1
- package/src/index.ts +1 -0
- package/src/utils/functions/flattenDeep.ts +5 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.js +0 -1990
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +0 -170
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.d.ts +0 -1
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.js +0 -68
- package/dist/bundled/v2/components/OrRichTextEditorV3/styles.d.ts +0 -6
- package/dist/bundled/v2/components/OrRichTextEditorV3/styles.js +0 -38
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.d.ts +0 -3
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.js +0 -45
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.d.ts +0 -27
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.js +0 -184
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/index.d.ts +0 -1
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/index.js +0 -5
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/theme.d.ts +0 -24
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/theme.js +0 -190
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/types.d.ts +0 -19
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/markdown.d.ts +0 -3
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/markdown.js +0 -5
- package/dist/bundled/v2/index-62c3221b.js +0 -6956
- package/dist/bundled/v2/index.es-3f39f316.js +0 -115
- package/dist/bundled/v2/markdown-516daba9.js +0 -18737
- package/dist/bundled/v2/tiptap-core.esm-f85402b1.js +0 -9360
- package/dist/bundled/v2/useFocusTrap-9567b3c8.js +0 -1268
- package/dist/bundled/v3/OrCode.vue_vue_type_script_lang-f6f74339.js +0 -236
- package/dist/bundled/v3/OrModal.vue_vue_type_script_lang-af0c4288.js +0 -107
- package/dist/bundled/v3/OrRichTextEditor.vue_vue_type_script_lang-fec87993.js +0 -1765
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.js +0 -228
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +0 -170
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.d.ts +0 -1
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.js +0 -84
- package/dist/bundled/v3/components/OrRichTextEditorV3/styles.d.ts +0 -6
- package/dist/bundled/v3/components/OrRichTextEditorV3/styles.js +0 -38
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.d.ts +0 -3
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.js +0 -45
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.d.ts +0 -27
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.js +0 -184
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/index.d.ts +0 -1
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/index.js +0 -5
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/theme.d.ts +0 -24
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/theme.js +0 -190
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/types.d.ts +0 -19
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/markdown.d.ts +0 -3
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/markdown.js +0 -5
- package/dist/bundled/v3/index-16aee5bc.js +0 -3740
- package/dist/bundled/v3/index-62c3221b.js +0 -6956
- package/dist/bundled/v3/index.es-3f39f316.js +0 -115
- package/dist/bundled/v3/markdown-516daba9.js +0 -18737
- package/dist/bundled/v3/tiptap-core.esm-f85402b1.js +0 -9360
- package/dist/esm/v2/OrRichTextEditor-b3da3217.js +0 -724
- package/dist/esm/v2/codemirrorView-be2c7423.js +0 -353
- package/dist/esm/v2/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +0 -170
- package/dist/esm/v2/components/or-rich-text-editor-v3/index.d.ts +0 -1
- package/dist/esm/v2/components/or-rich-text-editor-v3/index.js +0 -59
- package/dist/esm/v2/components/or-rich-text-editor-v3/styles.d.ts +0 -6
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.d.ts +0 -3
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.d.ts +0 -27
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/index.d.ts +0 -1
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/index.js +0 -7
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/theme.d.ts +0 -24
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/types.d.ts +0 -19
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/markdown.d.ts +0 -3
- package/dist/esm/v3/OrRichTextEditor-39eb04a8.js +0 -687
- package/dist/esm/v3/codemirrorView-be2c7423.js +0 -353
- package/dist/esm/v3/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +0 -170
- package/dist/esm/v3/components/or-rich-text-editor-v3/index.d.ts +0 -1
- package/dist/esm/v3/components/or-rich-text-editor-v3/index.js +0 -57
- package/dist/esm/v3/components/or-rich-text-editor-v3/styles.d.ts +0 -6
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.d.ts +0 -3
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.d.ts +0 -27
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/index.d.ts +0 -1
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/index.js +0 -7
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/theme.d.ts +0 -24
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/types.d.ts +0 -19
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/markdown.d.ts +0 -3
- package/src/components/or-rich-text-editor-v3/OrRichTextEditor.docs.mdx +0 -7
- package/src/components/or-rich-text-editor-v3/OrRichTextEditor.stories3.ts +0 -102
- package/src/components/or-rich-text-editor-v3/OrRichTextEditor.vue +0 -624
- package/src/components/or-rich-text-editor-v3/index.ts +0 -1
- package/src/components/or-rich-text-editor-v3/styles.ts +0 -64
- package/src/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.ts +0 -40
- package/src/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.ts +0 -254
- package/src/components/or-rich-text-editor-v3/utils/codemirror/index.ts +0 -1
- package/src/components/or-rich-text-editor-v3/utils/codemirror/theme.ts +0 -213
- package/src/components/or-rich-text-editor-v3/utils/codemirror/types.ts +0 -22
- package/src/components/or-rich-text-editor-v3/utils/markdown.ts +0 -117
- /package/dist/bundled/v2/components/{OrRichTextEditorV3/utils/codemirror → OrCheckboxTreeV3}/types.js +0 -0
- /package/dist/bundled/v3/{OrIcon.vue_vue_type_script_lang-e3152dc5.js → OrIcon.vue_vue_type_script_lang-e5349e49.js} +0 -0
- /package/dist/bundled/v3/{OrToastContainer.vue_vue_type_script_lang-0811fd48.js → OrToastContainer.vue_vue_type_script_lang-70cc38be.js} +0 -0
- /package/dist/bundled/v3/{OrTooltip.vue_vue_type_script_lang-b8594f7e.js → OrTooltip.vue_vue_type_script_lang-76a6b7f4.js} +0 -0
- /package/dist/bundled/v3/components/{OrRichTextEditorV3/utils/codemirror → OrCheckboxTreeV3}/types.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { s as syntaxTree, E as EditorView,
|
|
1
|
+
import { s as syntaxTree, E as EditorView, o as codePointSize, n as codePointAt, a as EditorSelection, q as CharCategory, P as Prec, Y as keymap, F as Facet, c as combineConfig, S as StateField, _ as showTooltip, $ as getTooltip, V as ViewPlugin, x as logException, j as StateEffect, a0 as MapMode, a1 as RangeValue, a2 as RangeSet, r as fromCodePoint, A as Annotation, d as Text, e as indentUnit, l as Decoration, D as Direction, W as WidgetType, a3 as Parser, a4 as NodeSet, a5 as NodeType, a6 as DefaultBufferLength, N as NodeProp, a7 as Tree, a8 as IterMode, a9 as styleTags, aa as tags$1, ab as parseMixed, ac as LanguageSupport, ad as LRLanguage, ae as indentNodeProp, af as continuedIndent, ag as foldNodeProp, ah as foldInside, ai as flatIndent, aj as delimitedIndent, ak as NodeWeakMap, al as Tag, am as Language, an as defineLanguageFacet, ao as languageDataProp, ap as LanguageDescription, aq as ParseContext } from './index-6976c52a.js';
|
|
2
|
+
import { OrCodeLanguages } from './components/OrCode/constants.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
An instance of this is passed to completion source functions.
|
|
@@ -700,7 +701,7 @@ class CompletionState {
|
|
|
700
701
|
this.open = open;
|
|
701
702
|
}
|
|
702
703
|
static start() {
|
|
703
|
-
return new CompletionState(none, "cm-ac-" + Math.floor(Math.random() * 2e6).toString(36), null);
|
|
704
|
+
return new CompletionState(none$1, "cm-ac-" + Math.floor(Math.random() * 2e6).toString(36), null);
|
|
704
705
|
}
|
|
705
706
|
update(tr) {
|
|
706
707
|
let {
|
|
@@ -750,7 +751,7 @@ function makeAttrs(id, selected) {
|
|
|
750
751
|
if (selected > -1) result["aria-activedescendant"] = id + "-" + selected;
|
|
751
752
|
return result;
|
|
752
753
|
}
|
|
753
|
-
const none = [];
|
|
754
|
+
const none$1 = [];
|
|
754
755
|
function getUserEvent(tr) {
|
|
755
756
|
return tr.isUserEvent("input.type") ? "input" : tr.isUserEvent("delete.backward") ? "delete" : null;
|
|
756
757
|
}
|
|
@@ -1686,7 +1687,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1686
1687
|
next = nextChar(state.doc, pos),
|
|
1687
1688
|
start;
|
|
1688
1689
|
if (next == token) {
|
|
1689
|
-
if (nodeStart(state, pos)) {
|
|
1690
|
+
if (nodeStart$1(state, pos)) {
|
|
1690
1691
|
return {
|
|
1691
1692
|
changes: {
|
|
1692
1693
|
insert: token + token,
|
|
@@ -1702,7 +1703,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1702
1703
|
effects: skipBracketEffect.of(pos)
|
|
1703
1704
|
};
|
|
1704
1705
|
}
|
|
1705
|
-
} else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart(state, start)) {
|
|
1706
|
+
} else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart$1(state, start)) {
|
|
1706
1707
|
return {
|
|
1707
1708
|
changes: {
|
|
1708
1709
|
insert: token + token + token + token,
|
|
@@ -1730,7 +1731,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1730
1731
|
userEvent: "input.type"
|
|
1731
1732
|
});
|
|
1732
1733
|
}
|
|
1733
|
-
function nodeStart(state, pos) {
|
|
1734
|
+
function nodeStart$1(state, pos) {
|
|
1734
1735
|
let tree = syntaxTree(state).resolveInner(pos + 1);
|
|
1735
1736
|
return tree.parent && tree.from == pos;
|
|
1736
1737
|
}
|
|
@@ -2657,7 +2658,7 @@ function cutAt(tree, pos, side) {
|
|
|
2657
2658
|
}
|
|
2658
2659
|
}
|
|
2659
2660
|
}
|
|
2660
|
-
class FragmentCursor {
|
|
2661
|
+
class FragmentCursor$1 {
|
|
2661
2662
|
constructor(fragments, nodeSet) {
|
|
2662
2663
|
this.fragments = fragments;
|
|
2663
2664
|
this.nodeSet = nodeSet;
|
|
@@ -2889,7 +2890,7 @@ class Parse {
|
|
|
2889
2890
|
from
|
|
2890
2891
|
} = ranges[0];
|
|
2891
2892
|
this.stacks = [Stack.start(this, parser.top[0], from)];
|
|
2892
|
-
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor(fragments, parser.nodeSet) : null;
|
|
2893
|
+
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor$1(fragments, parser.nodeSet) : null;
|
|
2893
2894
|
}
|
|
2894
2895
|
get parsedPos() {
|
|
2895
2896
|
return this.minStackPos;
|
|
@@ -3384,6 +3385,705 @@ function getSpecializer(spec) {
|
|
|
3384
3385
|
return spec.get;
|
|
3385
3386
|
}
|
|
3386
3387
|
|
|
3388
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3389
|
+
const scriptText = 54,
|
|
3390
|
+
StartCloseScriptTag = 1,
|
|
3391
|
+
styleText = 55,
|
|
3392
|
+
StartCloseStyleTag = 2,
|
|
3393
|
+
textareaText = 56,
|
|
3394
|
+
StartCloseTextareaTag = 3,
|
|
3395
|
+
StartTag = 4,
|
|
3396
|
+
StartScriptTag = 5,
|
|
3397
|
+
StartStyleTag = 6,
|
|
3398
|
+
StartTextareaTag = 7,
|
|
3399
|
+
StartSelfClosingTag = 8,
|
|
3400
|
+
StartCloseTag = 9,
|
|
3401
|
+
NoMatchStartCloseTag = 10,
|
|
3402
|
+
MismatchedStartCloseTag = 11,
|
|
3403
|
+
missingCloseTag = 57,
|
|
3404
|
+
IncompleteCloseTag = 12,
|
|
3405
|
+
commentContent$1 = 58,
|
|
3406
|
+
Element$1 = 18,
|
|
3407
|
+
TagName = 20,
|
|
3408
|
+
Attribute = 21,
|
|
3409
|
+
AttributeName = 22,
|
|
3410
|
+
AttributeValue = 24,
|
|
3411
|
+
UnquotedAttributeValue = 25,
|
|
3412
|
+
ScriptText = 27,
|
|
3413
|
+
StyleText = 30,
|
|
3414
|
+
TextareaText = 33,
|
|
3415
|
+
OpenTag = 35,
|
|
3416
|
+
CloseTag = 36,
|
|
3417
|
+
Dialect_noMatch = 0;
|
|
3418
|
+
|
|
3419
|
+
/* Hand-written tokenizers for HTML. */
|
|
3420
|
+
|
|
3421
|
+
const selfClosers = {
|
|
3422
|
+
area: true,
|
|
3423
|
+
base: true,
|
|
3424
|
+
br: true,
|
|
3425
|
+
col: true,
|
|
3426
|
+
command: true,
|
|
3427
|
+
embed: true,
|
|
3428
|
+
frame: true,
|
|
3429
|
+
hr: true,
|
|
3430
|
+
img: true,
|
|
3431
|
+
input: true,
|
|
3432
|
+
keygen: true,
|
|
3433
|
+
link: true,
|
|
3434
|
+
meta: true,
|
|
3435
|
+
param: true,
|
|
3436
|
+
source: true,
|
|
3437
|
+
track: true,
|
|
3438
|
+
wbr: true,
|
|
3439
|
+
menuitem: true
|
|
3440
|
+
};
|
|
3441
|
+
const implicitlyClosed = {
|
|
3442
|
+
dd: true,
|
|
3443
|
+
li: true,
|
|
3444
|
+
optgroup: true,
|
|
3445
|
+
option: true,
|
|
3446
|
+
p: true,
|
|
3447
|
+
rp: true,
|
|
3448
|
+
rt: true,
|
|
3449
|
+
tbody: true,
|
|
3450
|
+
td: true,
|
|
3451
|
+
tfoot: true,
|
|
3452
|
+
th: true,
|
|
3453
|
+
tr: true
|
|
3454
|
+
};
|
|
3455
|
+
const closeOnOpen = {
|
|
3456
|
+
dd: {
|
|
3457
|
+
dd: true,
|
|
3458
|
+
dt: true
|
|
3459
|
+
},
|
|
3460
|
+
dt: {
|
|
3461
|
+
dd: true,
|
|
3462
|
+
dt: true
|
|
3463
|
+
},
|
|
3464
|
+
li: {
|
|
3465
|
+
li: true
|
|
3466
|
+
},
|
|
3467
|
+
option: {
|
|
3468
|
+
option: true,
|
|
3469
|
+
optgroup: true
|
|
3470
|
+
},
|
|
3471
|
+
optgroup: {
|
|
3472
|
+
optgroup: true
|
|
3473
|
+
},
|
|
3474
|
+
p: {
|
|
3475
|
+
address: true,
|
|
3476
|
+
article: true,
|
|
3477
|
+
aside: true,
|
|
3478
|
+
blockquote: true,
|
|
3479
|
+
dir: true,
|
|
3480
|
+
div: true,
|
|
3481
|
+
dl: true,
|
|
3482
|
+
fieldset: true,
|
|
3483
|
+
footer: true,
|
|
3484
|
+
form: true,
|
|
3485
|
+
h1: true,
|
|
3486
|
+
h2: true,
|
|
3487
|
+
h3: true,
|
|
3488
|
+
h4: true,
|
|
3489
|
+
h5: true,
|
|
3490
|
+
h6: true,
|
|
3491
|
+
header: true,
|
|
3492
|
+
hgroup: true,
|
|
3493
|
+
hr: true,
|
|
3494
|
+
menu: true,
|
|
3495
|
+
nav: true,
|
|
3496
|
+
ol: true,
|
|
3497
|
+
p: true,
|
|
3498
|
+
pre: true,
|
|
3499
|
+
section: true,
|
|
3500
|
+
table: true,
|
|
3501
|
+
ul: true
|
|
3502
|
+
},
|
|
3503
|
+
rp: {
|
|
3504
|
+
rp: true,
|
|
3505
|
+
rt: true
|
|
3506
|
+
},
|
|
3507
|
+
rt: {
|
|
3508
|
+
rp: true,
|
|
3509
|
+
rt: true
|
|
3510
|
+
},
|
|
3511
|
+
tbody: {
|
|
3512
|
+
tbody: true,
|
|
3513
|
+
tfoot: true
|
|
3514
|
+
},
|
|
3515
|
+
td: {
|
|
3516
|
+
td: true,
|
|
3517
|
+
th: true
|
|
3518
|
+
},
|
|
3519
|
+
tfoot: {
|
|
3520
|
+
tbody: true
|
|
3521
|
+
},
|
|
3522
|
+
th: {
|
|
3523
|
+
td: true,
|
|
3524
|
+
th: true
|
|
3525
|
+
},
|
|
3526
|
+
thead: {
|
|
3527
|
+
tbody: true,
|
|
3528
|
+
tfoot: true
|
|
3529
|
+
},
|
|
3530
|
+
tr: {
|
|
3531
|
+
tr: true
|
|
3532
|
+
}
|
|
3533
|
+
};
|
|
3534
|
+
function nameChar(ch) {
|
|
3535
|
+
return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161;
|
|
3536
|
+
}
|
|
3537
|
+
function isSpace(ch) {
|
|
3538
|
+
return ch == 9 || ch == 10 || ch == 13 || ch == 32;
|
|
3539
|
+
}
|
|
3540
|
+
let cachedName = null,
|
|
3541
|
+
cachedInput = null,
|
|
3542
|
+
cachedPos = 0;
|
|
3543
|
+
function tagNameAfter(input, offset) {
|
|
3544
|
+
let pos = input.pos + offset;
|
|
3545
|
+
if (cachedPos == pos && cachedInput == input) return cachedName;
|
|
3546
|
+
let next = input.peek(offset);
|
|
3547
|
+
while (isSpace(next)) next = input.peek(++offset);
|
|
3548
|
+
let name = "";
|
|
3549
|
+
for (;;) {
|
|
3550
|
+
if (!nameChar(next)) break;
|
|
3551
|
+
name += String.fromCharCode(next);
|
|
3552
|
+
next = input.peek(++offset);
|
|
3553
|
+
}
|
|
3554
|
+
// Undefined to signal there's a <? or <!, null for just missing
|
|
3555
|
+
cachedInput = input;
|
|
3556
|
+
cachedPos = pos;
|
|
3557
|
+
return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null;
|
|
3558
|
+
}
|
|
3559
|
+
const lessThan = 60,
|
|
3560
|
+
greaterThan = 62,
|
|
3561
|
+
slash$1 = 47,
|
|
3562
|
+
question = 63,
|
|
3563
|
+
bang = 33,
|
|
3564
|
+
dash$1 = 45;
|
|
3565
|
+
function ElementContext(name, parent) {
|
|
3566
|
+
this.name = name;
|
|
3567
|
+
this.parent = parent;
|
|
3568
|
+
this.hash = parent ? parent.hash : 0;
|
|
3569
|
+
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
|
|
3570
|
+
}
|
|
3571
|
+
const startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];
|
|
3572
|
+
const elementContext = new ContextTracker({
|
|
3573
|
+
start: null,
|
|
3574
|
+
shift(context, term, stack, input) {
|
|
3575
|
+
return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || "", context) : context;
|
|
3576
|
+
},
|
|
3577
|
+
reduce(context, term) {
|
|
3578
|
+
return term == Element$1 && context ? context.parent : context;
|
|
3579
|
+
},
|
|
3580
|
+
reuse(context, node, stack, input) {
|
|
3581
|
+
let type = node.type.id;
|
|
3582
|
+
return type == StartTag || type == OpenTag ? new ElementContext(tagNameAfter(input, 1) || "", context) : context;
|
|
3583
|
+
},
|
|
3584
|
+
hash(context) {
|
|
3585
|
+
return context ? context.hash : 0;
|
|
3586
|
+
},
|
|
3587
|
+
strict: false
|
|
3588
|
+
});
|
|
3589
|
+
const tagStart = new ExternalTokenizer((input, stack) => {
|
|
3590
|
+
if (input.next != lessThan) {
|
|
3591
|
+
// End of file, close any open tags
|
|
3592
|
+
if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);
|
|
3593
|
+
return;
|
|
3594
|
+
}
|
|
3595
|
+
input.advance();
|
|
3596
|
+
let close = input.next == slash$1;
|
|
3597
|
+
if (close) input.advance();
|
|
3598
|
+
let name = tagNameAfter(input, 0);
|
|
3599
|
+
if (name === undefined) return;
|
|
3600
|
+
if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag);
|
|
3601
|
+
let parent = stack.context ? stack.context.name : null;
|
|
3602
|
+
if (close) {
|
|
3603
|
+
if (name == parent) return input.acceptToken(StartCloseTag);
|
|
3604
|
+
if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2);
|
|
3605
|
+
if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag);
|
|
3606
|
+
for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return;
|
|
3607
|
+
input.acceptToken(MismatchedStartCloseTag);
|
|
3608
|
+
} else {
|
|
3609
|
+
if (name == "script") return input.acceptToken(StartScriptTag);
|
|
3610
|
+
if (name == "style") return input.acceptToken(StartStyleTag);
|
|
3611
|
+
if (name == "textarea") return input.acceptToken(StartTextareaTag);
|
|
3612
|
+
if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag);
|
|
3613
|
+
if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);else input.acceptToken(StartTag);
|
|
3614
|
+
}
|
|
3615
|
+
}, {
|
|
3616
|
+
contextual: true
|
|
3617
|
+
});
|
|
3618
|
+
const commentContent = new ExternalTokenizer(input => {
|
|
3619
|
+
for (let dashes = 0, i = 0;; i++) {
|
|
3620
|
+
if (input.next < 0) {
|
|
3621
|
+
if (i) input.acceptToken(commentContent$1);
|
|
3622
|
+
break;
|
|
3623
|
+
}
|
|
3624
|
+
if (input.next == dash$1) {
|
|
3625
|
+
dashes++;
|
|
3626
|
+
} else if (input.next == greaterThan && dashes >= 2) {
|
|
3627
|
+
if (i > 3) input.acceptToken(commentContent$1, -2);
|
|
3628
|
+
break;
|
|
3629
|
+
} else {
|
|
3630
|
+
dashes = 0;
|
|
3631
|
+
}
|
|
3632
|
+
input.advance();
|
|
3633
|
+
}
|
|
3634
|
+
});
|
|
3635
|
+
function contentTokenizer(tag, textToken, endToken) {
|
|
3636
|
+
let lastState = 2 + tag.length;
|
|
3637
|
+
return new ExternalTokenizer(input => {
|
|
3638
|
+
// state means:
|
|
3639
|
+
// - 0 nothing matched
|
|
3640
|
+
// - 1 '<' matched
|
|
3641
|
+
// - 2 '</' + possibly whitespace matched
|
|
3642
|
+
// - 3-(1+tag.length) part of the tag matched
|
|
3643
|
+
// - lastState whole tag + possibly whitespace matched
|
|
3644
|
+
for (let state = 0, matchedLen = 0, i = 0;; i++) {
|
|
3645
|
+
if (input.next < 0) {
|
|
3646
|
+
if (i) input.acceptToken(textToken);
|
|
3647
|
+
break;
|
|
3648
|
+
}
|
|
3649
|
+
if (state == 0 && input.next == lessThan || state == 1 && input.next == slash$1 || state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {
|
|
3650
|
+
state++;
|
|
3651
|
+
matchedLen++;
|
|
3652
|
+
} else if ((state == 2 || state == lastState) && isSpace(input.next)) {
|
|
3653
|
+
matchedLen++;
|
|
3654
|
+
} else if (state == lastState && input.next == greaterThan) {
|
|
3655
|
+
if (i > matchedLen) input.acceptToken(textToken, -matchedLen);else input.acceptToken(endToken, -(matchedLen - 2));
|
|
3656
|
+
break;
|
|
3657
|
+
} else if ((input.next == 10 /* '\n' */ || input.next == 13 /* '\r' */) && i) {
|
|
3658
|
+
input.acceptToken(textToken, 1);
|
|
3659
|
+
break;
|
|
3660
|
+
} else {
|
|
3661
|
+
state = matchedLen = 0;
|
|
3662
|
+
}
|
|
3663
|
+
input.advance();
|
|
3664
|
+
}
|
|
3665
|
+
});
|
|
3666
|
+
}
|
|
3667
|
+
const scriptTokens = contentTokenizer("script", scriptText, StartCloseScriptTag);
|
|
3668
|
+
const styleTokens = contentTokenizer("style", styleText, StartCloseStyleTag);
|
|
3669
|
+
const textareaTokens = contentTokenizer("textarea", textareaText, StartCloseTextareaTag);
|
|
3670
|
+
const htmlHighlighting = styleTags({
|
|
3671
|
+
"Text RawText": tags$1.content,
|
|
3672
|
+
"StartTag StartCloseTag SelfClosingEndTag EndTag": tags$1.angleBracket,
|
|
3673
|
+
TagName: tags$1.tagName,
|
|
3674
|
+
"MismatchedCloseTag/TagName": [tags$1.tagName, tags$1.invalid],
|
|
3675
|
+
AttributeName: tags$1.attributeName,
|
|
3676
|
+
"AttributeValue UnquotedAttributeValue": tags$1.attributeValue,
|
|
3677
|
+
Is: tags$1.definitionOperator,
|
|
3678
|
+
"EntityReference CharacterReference": tags$1.character,
|
|
3679
|
+
Comment: tags$1.blockComment,
|
|
3680
|
+
ProcessingInst: tags$1.processingInstruction,
|
|
3681
|
+
DoctypeDecl: tags$1.documentMeta
|
|
3682
|
+
});
|
|
3683
|
+
|
|
3684
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3685
|
+
const parser$4 = LRParser.deserialize({
|
|
3686
|
+
version: 14,
|
|
3687
|
+
states: ",xOVOxOOO!WQ!bO'#CoO!]Q!bO'#CyO!bQ!bO'#C|O!gQ!bO'#DPO!lQ!bO'#DRO!qOXO'#CnO!|OYO'#CnO#XO[O'#CnO$eOxO'#CnOOOW'#Cn'#CnO$lO!rO'#DTO$tQ!bO'#DVO$yQ!bO'#DWOOOW'#Dk'#DkOOOW'#DY'#DYQVOxOOO%OQ#tO,59ZO%WQ#tO,59eO%`Q#tO,59hO%hQ#tO,59kO%sQ#tO,59mOOOX'#D^'#D^O%{OXO'#CwO&WOXO,59YOOOY'#D_'#D_O&`OYO'#CzO&kOYO,59YOOO['#D`'#D`O&sO[O'#C}O'OO[O,59YOOOW'#Da'#DaO'WOxO,59YO'_Q!bO'#DQOOOW,59Y,59YOOO`'#Db'#DbO'dO!rO,59oOOOW,59o,59oO'lQ!bO,59qO'qQ!bO,59rOOOW-E7W-E7WO'vQ#tO'#CqOOQO'#DZ'#DZO(UQ#tO1G.uOOOX1G.u1G.uO(^Q#tO1G/POOOY1G/P1G/PO(fQ#tO1G/SOOO[1G/S1G/SO(nQ#tO1G/VOOOW1G/V1G/VOOOW1G/X1G/XO(yQ#tO1G/XOOOX-E7[-E7[O)RQ!bO'#CxOOOW1G.t1G.tOOOY-E7]-E7]O)WQ!bO'#C{OOO[-E7^-E7^O)]Q!bO'#DOOOOW-E7_-E7_O)bQ!bO,59lOOO`-E7`-E7`OOOW1G/Z1G/ZOOOW1G/]1G/]OOOW1G/^1G/^O)gQ&jO,59]OOQO-E7X-E7XOOOX7+$a7+$aOOOY7+$k7+$kOOO[7+$n7+$nOOOW7+$q7+$qOOOW7+$s7+$sO)rQ!bO,59dO)wQ!bO,59gO)|Q!bO,59jOOOW1G/W1G/WO*RO,UO'#CtO*dO7[O'#CtOOQO1G.w1G.wOOOW1G/O1G/OOOOW1G/R1G/ROOOW1G/U1G/UOOOO'#D['#D[O*uO,UO,59`OOQO,59`,59`OOOO'#D]'#D]O+WO7[O,59`OOOO-E7Y-E7YOOQO1G.z1G.zOOOO-E7Z-E7Z",
|
|
3688
|
+
stateData: "+u~O!^OS~OSSOTPOUQOVROWTOY]OZ[O[^O^^O_^O`^Oa^Ox^O{_O!dZO~OdaO~OdbO~OdcO~OddO~OdeO~O!WfOPkP!ZkP~O!XiOQnP!ZnP~O!YlORqP!ZqP~OSSOTPOUQOVROWTOXqOY]OZ[O[^O^^O_^O`^Oa^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OdvO~OdwO~OfyOj|O~OfyOj!OO~OfyOj!QO~OfyOj!SOv!TO~OfyOj!TO~O!WfOPkX!ZkX~OP!WO!Z!XO~O!XiOQnX!ZnX~OQ!ZO!Z!XO~O!YlORqX!ZqX~OR!]O!Z!XO~O!Z!XO~P#dOd!_O~O![sO!e!aO~Oj!bO~Oj!cO~Og!dOfeXjeXveX~OfyOj!fO~OfyOj!gO~OfyOj!hO~OfyOj!iOv!jO~OfyOj!jO~Od!kO~Od!lO~Od!mO~Oj!nO~Oi!qO!`!oO!b!pO~Oj!rO~Oj!sO~Oj!tO~O_!uO`!uOa!uO!`!wO!a!uO~O_!xO`!xOa!xO!b!wO!c!xO~O_!uO`!uOa!uO!`!{O!a!uO~O_!xO`!xOa!xO!b!{O!c!xO~Ov~vj`!dx{_a_~",
|
|
3689
|
+
goto: "%p!`PPPPPPPPPPPPPPPPPP!a!gP!mPP!yPP!|#P#S#Y#]#`#f#i#l#r#xP!aP!a!aP$O$U$l$r$x%O%U%[%bPPPPPPPP%hX^OX`pXUOX`pezabcde{}!P!R!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ}bQ!PcQ!RdQ!UeZ!e{}!P!R!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",
|
|
3690
|
+
nodeNames: "⚠ StartCloseTag StartCloseTag StartCloseTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue EndTag ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag SelfClosingEndTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl",
|
|
3691
|
+
maxTerm: 67,
|
|
3692
|
+
context: elementContext,
|
|
3693
|
+
nodeProps: [["closedBy", -10, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, "EndTag", 4, "EndTag SelfClosingEndTag", -4, 19, 29, 32, 35, "CloseTag"], ["group", -9, 12, 15, 16, 17, 18, 39, 40, 41, 42, "Entity", 14, "Entity TextContent", -3, 27, 30, 33, "TextContent Entity"], ["openedBy", 26, "StartTag StartCloseTag", -4, 28, 31, 34, 36, "OpenTag", 38, "StartTag"]],
|
|
3694
|
+
propSources: [htmlHighlighting],
|
|
3695
|
+
skippedNodes: [0],
|
|
3696
|
+
repeatNodeCount: 9,
|
|
3697
|
+
tokenData: "#(r!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs4ysv-_vw5iwxJ^x}-_}!OKP!O!P-_!P!Q!!O!Q![-_![!]!$c!]!^-_!^!_!(k!_!`#'S!`!a#'z!a!c-_!c!}!$c!}#R-_#R#S!$c#S#T3V#T#o!$c#o#s-_#s$f$q$f%W-_%W%o!$c%o%p-_%p&a!$c&a&b-_&b1p!$c1p4U-_4U4d!$c4d4e-_4e$IS!$c$IS$I`-_$I`$Ib!$c$Ib$Kh-_$Kh%#t!$c%#t&/x-_&/x&Et!$c&Et&FV-_&FV;'S!$c;'S;:j!(e;:j;=`4s<%l?&r-_?&r?Ah!$c?Ah?BY$q?BY?Mn!$c?MnO$q!Z$|c^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bX^P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UV^P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pT^POv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!cpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({W^P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!a`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!a`!cpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYiWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`^P!a`!cp!^^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljfS^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_1n!_!a&X!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ecfSiWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0uXfSqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0pS1eP;=`<%l0p[1kP;=`<%l/^!U1wbfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!U3SP;=`<%l1n!V3bcfS^P!a`!cpOq&Xqr3Vrs&}sv3Vvw0pwx(tx!P3V!P!Q&X!Q!^3V!^!_1n!_!a&X!a#s3V#s$f&X$f;'S3V;'S;=`4m<%l?Ah3V?Ah?BY&X?BY?Mn3V?MnO&X!V4pP;=`<%l3V!_4vP;=`<%l-_!Z5SV!`h^P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_5rjfSiWa!ROX7dXZ8qZ[7d[^8q^p7dqr:crs8qst@Ttw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^/^!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!Z7ibiWOX7dXZ8qZ[7d[^8q^p7dqr7drs8qst+Ptw7dwx8qx!]7d!]!^9f!^!a8q!a#S7d#S#T8q#T;'S7d;'S;=`:]<%lO7d!R8tVOp8qqs8qt!]8q!]!^9Z!^;'S8q;'S;=`9`<%lO8q!R9`O_!R!R9cP;=`<%l8q!Z9mYiW_!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z:`P;=`<%l7d!_:jjfSiWOX7dXZ8qZ[7d[^8q^p7dqr:crs8qst/^tw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^<[!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!_<ecfSiW_!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V=udfSOp8qqr=prs8qst0ptw=pwx8qx!P=p!P!Q8q!Q!]=p!]!^?T!^!_=p!_!a8q!a#s=p#s$f8q$f;'S=p;'S;=`?w<%l?Ah=p?Ah?BY8q?BY?Mn=p?MnO8q!V?[XfS_!Rqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0p!V?zP;=`<%l=p!_@QP;=`<%l:c!_@[ifSiWOXAyXZCTZ[Ay[^CT^pAyqrDrrsCTswDrwxCTx!PDr!P!QAy!Q!]Dr!]!^/^!^!_G|!_!aCT!a#SDr#S#TG|#T#sDr#s$fAy$f;'SDr;'S;=`JW<%l?AhDr?Ah?BYAy?BY?MnDr?MnOAy!ZBOaiWOXAyXZCTZ[Ay[^CT^pAyqrAyrsCTswAywxCTx!]Ay!]!^Cu!^!aCT!a#SAy#S#TCT#T;'SAy;'S;=`Dl<%lOAy!RCWUOpCTq!]CT!]!^Cj!^;'SCT;'S;=`Co<%lOCT!RCoO`!R!RCrP;=`<%lCT!ZC|YiW`!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZDoP;=`<%lAy!_DyifSiWOXAyXZCTZ[Ay[^CT^pAyqrDrrsCTswDrwxCTx!PDr!P!QAy!Q!]Dr!]!^Fh!^!_G|!_!aCT!a#SDr#S#TG|#T#sDr#s$fAy$f;'SDr;'S;=`JW<%l?AhDr?Ah?BYAy?BY?MnDr?MnOAy!_FqcfSiW`!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VHRcfSOpCTqrG|rsCTswG|wxCTx!PG|!P!QCT!Q!]G|!]!^I^!^!_G|!_!aCT!a#sG|#s$fCT$f;'SG|;'S;=`JQ<%l?AhG|?Ah?BYCT?BY?MnG|?MnOCT!VIeXfS`!Rqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0p!VJTP;=`<%lG|!_JZP;=`<%lDr!ZJgW!bx^P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aK^lfS^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMU!O!P-_!P!Q$q!Q!^-_!^!_1n!_!a&X!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aMckfS^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_1n!_!`&X!`!a! W!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!T! cX^P!a`!cp!eQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!a!!Zd^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!`&X!`!a!#i!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!X!#vX^P!a`!cpvSjUOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!a!$r!ZfSdQ^PiW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!O!$c!O!P!$c!P!Q$q!Q![!$c![!]!$c!]!^-_!^!_1n!_!a&X!a!c-_!c!}!$c!}#R-_#R#S!$c#S#T3V#T#o!$c#o#s-_#s$f$q$f$}-_$}%O!$c%O%W-_%W%o!$c%o%p-_%p&a!$c&a&b-_&b1p!$c1p4U!$c4U4d!$c4d4e-_4e$IS!$c$IS$I`-_$I`$Ib!$c$Ib$Je-_$Je$Jg!$c$Jg$Kh-_$Kh%#t!$c%#t&/x-_&/x&Et!$c&Et&FV-_&FV;'S!$c;'S;:j!(e;:j;=`4s<%l?&r-_?&r?Ah!$c?Ah?BY$q?BY?Mn!$c?MnO$q!a!(hP;=`<%l!$c!V!(tcfS!a`!cpOq*Vqr!*Prs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!b!H^!b#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!*YhfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!+t!O!P1n!P!Q*V!Q!_1n!_!a*V!a!f1n!f!g!.p!g#W1n#W#X!?^#X#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!+}dfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!-]!O!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!-hbfS!a`!cp!dPOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!.ydfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!q1n!q!r!0X!r#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!0bdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!e1n!e!f!1p!f#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!1ydfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!v1n!v!w!3X!w#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!3bdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!{1n!{!|!4p!|#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!4ydfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!r1n!r!s!6X!s#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!6bdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!g1n!g!h!7p!h#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!7ycfS!a`!cpOq!9Uqr!7prs!9{sv!7pvw!=swx!;ox!P!7p!P!Q!9U!Q!_!7p!_!`!9U!`!a!<}!a#s!7p#s$f!9U$f;'S!7p;'S;=`!?W<%l?Ah!7p?Ah?BY!9U?BY?Mn!7p?MnO!9U!R!9]Y!a`!cpOr!9Urs!9{sv!9Uvw!:gwx!;ox!`!9U!`!a!<}!a;'S!9U;'S;=`!=m<%lO!9Uq!:QV!cpOv!9{vx!:gx!`!9{!`!a!;U!a;'S!9{;'S;=`!;i<%lO!9{P!:jTO!`!:g!`!a!:y!a;'S!:g;'S;=`!;O<%lO!:gP!;OO{PP!;RP;=`<%l!:gq!;]S!cp{POv(Vx;'S(V;'S;=`(h<%lO(Vq!;lP;=`<%l!9{a!;tX!a`Or!;ors!:gsv!;ovw!:gw!`!;o!`!a!<a!a;'S!;o;'S;=`!<w<%lO!;oa!<hT!a`{POr)esv)ew;'S)e;'S;=`)y<%lO)ea!<zP;=`<%l!;o!R!=WV!a`!cp{POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!=pP;=`<%l!9UT!=xbfSOq!:gqr!=srs!:gsw!=swx!:gx!P!=s!P!Q!:g!Q!_!=s!_!`!:g!`!a!:y!a#s!=s#s$f!:g$f;'S!=s;'S;=`!?Q<%l?Ah!=s?Ah?BY!:g?BY?Mn!=s?MnO!:gT!?TP;=`<%l!=s!V!?ZP;=`<%l!7p!V!?gdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#c1n#c#d!@u#d#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!AOdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#V1n#V#W!B^#W#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!BgdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#h1n#h#i!Cu#i#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!DOdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#m1n#m#n!E^#n#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!EgdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#d1n#d#e!Fu#e#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!GOdfS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#X1n#X#Y!7p#Y#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!HgcfS!a`!cpOq!Irqr!H^rs!Jisv!H^vw#!vwx!MZx!P!H^!P!Q!Ir!Q!_!H^!_!a!Ir!a!b#%h!b#s!H^#s$f!Ir$f;'S!H^;'S;=`#&|<%l?Ah!H^?Ah?BY!Ir?BY?Mn!H^?MnO!Ir!R!IyY!a`!cpOr!Irrs!Jisv!Irvw!KTwx!MZx!a!Ir!a!b# Z!b;'S!Ir;'S;=`#!p<%lO!Irq!JnV!cpOv!Jivx!KTx!a!Ji!a!b!LU!b;'S!Ji;'S;=`!MT<%lO!JiP!KWTO!a!KT!a!b!Kg!b;'S!KT;'S;=`!LO<%lO!KTP!KjTO!`!KT!`!a!Ky!a;'S!KT;'S;=`!LO<%lO!KTP!LOOxPP!LRP;=`<%l!KTq!LZV!cpOv!Jivx!KTx!`!Ji!`!a!Lp!a;'S!Ji;'S;=`!MT<%lO!Jiq!LwS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!MWP;=`<%l!Jia!M`X!a`Or!MZrs!KTsv!MZvw!KTw!a!MZ!a!b!M{!b;'S!MZ;'S;=`# T<%lO!MZa!NQX!a`Or!MZrs!KTsv!MZvw!KTw!`!MZ!`!a!Nm!a;'S!MZ;'S;=`# T<%lO!MZa!NtT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea# WP;=`<%l!MZ!R# bY!a`!cpOr!Irrs!Jisv!Irvw!KTwx!MZx!`!Ir!`!a#!Q!a;'S!Ir;'S;=`#!p<%lO!Ir!R#!ZV!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R#!sP;=`<%l!IrT#!{bfSOq!KTqr#!vrs!KTsw#!vwx!KTx!P#!v!P!Q!KT!Q!_#!v!_!a!KT!a!b#$T!b#s#!v#s$f!KT$f;'S#!v;'S;=`#%b<%l?Ah#!v?Ah?BY!KT?BY?Mn#!v?MnO!KTT#$YbfSOq!KTqr#!vrs!KTsw#!vwx!KTx!P#!v!P!Q!KT!Q!_#!v!_!`!KT!`!a!Ky!a#s#!v#s$f!KT$f;'S#!v;'S;=`#%b<%l?Ah#!v?Ah?BY!KT?BY?Mn#!v?MnO!KTT#%eP;=`<%l#!v!V#%qcfS!a`!cpOq!Irqr!H^rs!Jisv!H^vw#!vwx!MZx!P!H^!P!Q!Ir!Q!_!H^!_!`!Ir!`!a#!Q!a#s!H^#s$f!Ir$f;'S!H^;'S;=`#&|<%l?Ah!H^?Ah?BY!Ir?BY?Mn!H^?MnO!Ir!V#'PP;=`<%l!H^!V#'_XgS^P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!X#(VX^P!a`!cpjUOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X",
|
|
3698
|
+
tokenizers: [scriptTokens, styleTokens, textareaTokens, tagStart, commentContent, 0, 1, 2, 3, 4, 5],
|
|
3699
|
+
topRules: {
|
|
3700
|
+
"Document": [0, 13]
|
|
3701
|
+
},
|
|
3702
|
+
dialects: {
|
|
3703
|
+
noMatch: 0,
|
|
3704
|
+
selfClosing: 485
|
|
3705
|
+
},
|
|
3706
|
+
tokenPrec: 487
|
|
3707
|
+
});
|
|
3708
|
+
function getAttrs(openTag, input) {
|
|
3709
|
+
let attrs = Object.create(null);
|
|
3710
|
+
for (let att of openTag.getChildren(Attribute)) {
|
|
3711
|
+
let name = att.getChild(AttributeName),
|
|
3712
|
+
value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);
|
|
3713
|
+
if (name) attrs[input.read(name.from, name.to)] = !value ? "" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);
|
|
3714
|
+
}
|
|
3715
|
+
return attrs;
|
|
3716
|
+
}
|
|
3717
|
+
function findTagName(openTag, input) {
|
|
3718
|
+
let tagNameNode = openTag.getChild(TagName);
|
|
3719
|
+
return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : " ";
|
|
3720
|
+
}
|
|
3721
|
+
function maybeNest(node, input, tags) {
|
|
3722
|
+
let attrs;
|
|
3723
|
+
for (let tag of tags) {
|
|
3724
|
+
if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input)))) return {
|
|
3725
|
+
parser: tag.parser
|
|
3726
|
+
};
|
|
3727
|
+
}
|
|
3728
|
+
return null;
|
|
3729
|
+
}
|
|
3730
|
+
|
|
3731
|
+
// tags?: {
|
|
3732
|
+
// tag: string,
|
|
3733
|
+
// attrs?: ({[attr: string]: string}) => boolean,
|
|
3734
|
+
// parser: Parser
|
|
3735
|
+
// }[]
|
|
3736
|
+
// attributes?: {
|
|
3737
|
+
// name: string,
|
|
3738
|
+
// tagName?: string,
|
|
3739
|
+
// parser: Parser
|
|
3740
|
+
// }[]
|
|
3741
|
+
|
|
3742
|
+
function configureNesting(tags = [], attributes = []) {
|
|
3743
|
+
let script = [],
|
|
3744
|
+
style = [],
|
|
3745
|
+
textarea = [],
|
|
3746
|
+
other = [];
|
|
3747
|
+
for (let tag of tags) {
|
|
3748
|
+
let array = tag.tag == "script" ? script : tag.tag == "style" ? style : tag.tag == "textarea" ? textarea : other;
|
|
3749
|
+
array.push(tag);
|
|
3750
|
+
}
|
|
3751
|
+
let attrs = attributes.length ? Object.create(null) : null;
|
|
3752
|
+
for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);
|
|
3753
|
+
return parseMixed((node, input) => {
|
|
3754
|
+
let id = node.type.id;
|
|
3755
|
+
if (id == ScriptText) return maybeNest(node, input, script);
|
|
3756
|
+
if (id == StyleText) return maybeNest(node, input, style);
|
|
3757
|
+
if (id == TextareaText) return maybeNest(node, input, textarea);
|
|
3758
|
+
if (id == OpenTag && other.length) {
|
|
3759
|
+
let n = node.node,
|
|
3760
|
+
tagName = findTagName(n, input),
|
|
3761
|
+
attrs;
|
|
3762
|
+
for (let tag of other) {
|
|
3763
|
+
if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {
|
|
3764
|
+
let close = n.parent.lastChild;
|
|
3765
|
+
return {
|
|
3766
|
+
parser: tag.parser,
|
|
3767
|
+
overlay: [{
|
|
3768
|
+
from: node.to,
|
|
3769
|
+
to: close.type.id == CloseTag ? close.from : n.parent.to
|
|
3770
|
+
}]
|
|
3771
|
+
};
|
|
3772
|
+
}
|
|
3773
|
+
}
|
|
3774
|
+
}
|
|
3775
|
+
if (attrs && id == Attribute) {
|
|
3776
|
+
let n = node.node,
|
|
3777
|
+
nameNode;
|
|
3778
|
+
if (nameNode = n.firstChild) {
|
|
3779
|
+
let matches = attrs[input.read(nameNode.from, nameNode.to)];
|
|
3780
|
+
if (matches) for (let attr of matches) {
|
|
3781
|
+
if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue;
|
|
3782
|
+
let value = n.lastChild;
|
|
3783
|
+
if (value.type.id == AttributeValue) return {
|
|
3784
|
+
parser: attr.parser,
|
|
3785
|
+
overlay: [{
|
|
3786
|
+
from: value.from + 1,
|
|
3787
|
+
to: value.to - 1
|
|
3788
|
+
}]
|
|
3789
|
+
};else if (value.type.id == UnquotedAttributeValue) return {
|
|
3790
|
+
parser: attr.parser,
|
|
3791
|
+
overlay: [{
|
|
3792
|
+
from: value.from,
|
|
3793
|
+
to: value.to
|
|
3794
|
+
}]
|
|
3795
|
+
};
|
|
3796
|
+
}
|
|
3797
|
+
}
|
|
3798
|
+
}
|
|
3799
|
+
return null;
|
|
3800
|
+
});
|
|
3801
|
+
}
|
|
3802
|
+
|
|
3803
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3804
|
+
const descendantOp = 94,
|
|
3805
|
+
Unit = 1,
|
|
3806
|
+
callee = 95,
|
|
3807
|
+
identifier$2 = 96,
|
|
3808
|
+
VariableName = 2;
|
|
3809
|
+
|
|
3810
|
+
/* Hand-written tokenizers for CSS tokens that can't be
|
|
3811
|
+
expressed by Lezer's built-in tokenizer. */
|
|
3812
|
+
|
|
3813
|
+
const space$2 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
|
3814
|
+
const colon = 58,
|
|
3815
|
+
parenL = 40,
|
|
3816
|
+
underscore = 95,
|
|
3817
|
+
bracketL = 91,
|
|
3818
|
+
dash = 45,
|
|
3819
|
+
period = 46,
|
|
3820
|
+
hash = 35,
|
|
3821
|
+
percent = 37;
|
|
3822
|
+
function isAlpha(ch) {
|
|
3823
|
+
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161;
|
|
3824
|
+
}
|
|
3825
|
+
function isDigit(ch) {
|
|
3826
|
+
return ch >= 48 && ch <= 57;
|
|
3827
|
+
}
|
|
3828
|
+
const identifiers = new ExternalTokenizer((input, stack) => {
|
|
3829
|
+
for (let inside = false, dashes = 0, i = 0;; i++) {
|
|
3830
|
+
let {
|
|
3831
|
+
next
|
|
3832
|
+
} = input;
|
|
3833
|
+
if (isAlpha(next) || next == dash || next == underscore || inside && isDigit(next)) {
|
|
3834
|
+
if (!inside && (next != dash || i > 0)) inside = true;
|
|
3835
|
+
if (dashes === i && next == dash) dashes++;
|
|
3836
|
+
input.advance();
|
|
3837
|
+
} else {
|
|
3838
|
+
if (inside) input.acceptToken(next == parenL ? callee : dashes == 2 && stack.canShift(VariableName) ? VariableName : identifier$2);
|
|
3839
|
+
break;
|
|
3840
|
+
}
|
|
3841
|
+
}
|
|
3842
|
+
});
|
|
3843
|
+
const descendant = new ExternalTokenizer(input => {
|
|
3844
|
+
if (space$2.includes(input.peek(-1))) {
|
|
3845
|
+
let {
|
|
3846
|
+
next
|
|
3847
|
+
} = input;
|
|
3848
|
+
if (isAlpha(next) || next == underscore || next == hash || next == period || next == bracketL || next == colon || next == dash) input.acceptToken(descendantOp);
|
|
3849
|
+
}
|
|
3850
|
+
});
|
|
3851
|
+
const unitToken = new ExternalTokenizer(input => {
|
|
3852
|
+
if (!space$2.includes(input.peek(-1))) {
|
|
3853
|
+
let {
|
|
3854
|
+
next
|
|
3855
|
+
} = input;
|
|
3856
|
+
if (next == percent) {
|
|
3857
|
+
input.advance();
|
|
3858
|
+
input.acceptToken(Unit);
|
|
3859
|
+
}
|
|
3860
|
+
if (isAlpha(next)) {
|
|
3861
|
+
do {
|
|
3862
|
+
input.advance();
|
|
3863
|
+
} while (isAlpha(input.next));
|
|
3864
|
+
input.acceptToken(Unit);
|
|
3865
|
+
}
|
|
3866
|
+
}
|
|
3867
|
+
});
|
|
3868
|
+
const cssHighlighting = styleTags({
|
|
3869
|
+
"AtKeyword import charset namespace keyframes media supports": tags$1.definitionKeyword,
|
|
3870
|
+
"from to selector": tags$1.keyword,
|
|
3871
|
+
NamespaceName: tags$1.namespace,
|
|
3872
|
+
KeyframeName: tags$1.labelName,
|
|
3873
|
+
TagName: tags$1.tagName,
|
|
3874
|
+
ClassName: tags$1.className,
|
|
3875
|
+
PseudoClassName: tags$1.constant(tags$1.className),
|
|
3876
|
+
IdName: tags$1.labelName,
|
|
3877
|
+
"FeatureName PropertyName": tags$1.propertyName,
|
|
3878
|
+
AttributeName: tags$1.attributeName,
|
|
3879
|
+
NumberLiteral: tags$1.number,
|
|
3880
|
+
KeywordQuery: tags$1.keyword,
|
|
3881
|
+
UnaryQueryOp: tags$1.operatorKeyword,
|
|
3882
|
+
"CallTag ValueName": tags$1.atom,
|
|
3883
|
+
VariableName: tags$1.variableName,
|
|
3884
|
+
Callee: tags$1.operatorKeyword,
|
|
3885
|
+
Unit: tags$1.unit,
|
|
3886
|
+
"UniversalSelector NestingSelector": tags$1.definitionOperator,
|
|
3887
|
+
MatchOp: tags$1.compareOperator,
|
|
3888
|
+
"ChildOp SiblingOp, LogicOp": tags$1.logicOperator,
|
|
3889
|
+
BinOp: tags$1.arithmeticOperator,
|
|
3890
|
+
Important: tags$1.modifier,
|
|
3891
|
+
Comment: tags$1.blockComment,
|
|
3892
|
+
ParenthesizedContent: tags$1.special(tags$1.name),
|
|
3893
|
+
ColorLiteral: tags$1.color,
|
|
3894
|
+
StringLiteral: tags$1.string,
|
|
3895
|
+
":": tags$1.punctuation,
|
|
3896
|
+
"PseudoOp #": tags$1.derefOperator,
|
|
3897
|
+
"; ,": tags$1.separator,
|
|
3898
|
+
"( )": tags$1.paren,
|
|
3899
|
+
"[ ]": tags$1.squareBracket,
|
|
3900
|
+
"{ }": tags$1.brace
|
|
3901
|
+
});
|
|
3902
|
+
|
|
3903
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3904
|
+
const spec_callee = {
|
|
3905
|
+
__proto__: null,
|
|
3906
|
+
lang: 32,
|
|
3907
|
+
"nth-child": 32,
|
|
3908
|
+
"nth-last-child": 32,
|
|
3909
|
+
"nth-of-type": 32,
|
|
3910
|
+
"nth-last-of-type": 32,
|
|
3911
|
+
dir: 32,
|
|
3912
|
+
"host-context": 32,
|
|
3913
|
+
url: 60,
|
|
3914
|
+
"url-prefix": 60,
|
|
3915
|
+
domain: 60,
|
|
3916
|
+
regexp: 60,
|
|
3917
|
+
selector: 134
|
|
3918
|
+
};
|
|
3919
|
+
const spec_AtKeyword = {
|
|
3920
|
+
__proto__: null,
|
|
3921
|
+
"@import": 114,
|
|
3922
|
+
"@media": 138,
|
|
3923
|
+
"@charset": 142,
|
|
3924
|
+
"@namespace": 146,
|
|
3925
|
+
"@keyframes": 152,
|
|
3926
|
+
"@supports": 164
|
|
3927
|
+
};
|
|
3928
|
+
const spec_identifier$1 = {
|
|
3929
|
+
__proto__: null,
|
|
3930
|
+
not: 128,
|
|
3931
|
+
only: 128,
|
|
3932
|
+
from: 158,
|
|
3933
|
+
to: 160
|
|
3934
|
+
};
|
|
3935
|
+
const parser$3 = LRParser.deserialize({
|
|
3936
|
+
version: 14,
|
|
3937
|
+
states: "7WQYQ[OOO#_Q[OOOOQP'#Cd'#CdOOQP'#Cc'#CcO#fQ[O'#CfO$YQXO'#CaO$aQ[O'#ChO$lQ[O'#DPO$qQ[O'#DTOOQP'#Ed'#EdO$vQdO'#DeO%bQ[O'#DrO$vQdO'#DtO%sQ[O'#DvO&OQ[O'#DyO&TQ[O'#EPO&cQ[O'#EROOQS'#Ec'#EcOOQS'#ET'#ETQYQ[OOO&jQXO'#CdO'_QWO'#DaO'dQWO'#EjO'oQ[O'#EjQOQWOOOOQP'#Cg'#CgOOQP,59Q,59QO#fQ[O,59QO'yQ[O'#EWO(eQWO,58{O(mQ[O,59SO$lQ[O,59kO$qQ[O,59oO'yQ[O,59sO'yQ[O,59uO'yQ[O,59vO(xQ[O'#D`OOQS,58{,58{OOQP'#Ck'#CkOOQO'#C}'#C}OOQP,59S,59SO)PQWO,59SO)UQWO,59SOOQP'#DR'#DROOQP,59k,59kOOQO'#DV'#DVO)ZQ`O,59oOOQS'#Cp'#CpO$vQdO'#CqO)cQvO'#CsO*pQtO,5:POOQO'#Cx'#CxO)UQWO'#CwO+UQWO'#CyOOQS'#Eg'#EgOOQO'#Dh'#DhO+ZQ[O'#DoO+iQWO'#EkO&TQ[O'#DmO+wQWO'#DpOOQO'#El'#ElO(hQWO,5:^O+|QpO,5:`OOQS'#Dx'#DxO,UQWO,5:bO,ZQ[O,5:bOOQO'#D{'#D{O,cQWO,5:eO,hQWO,5:kO,pQWO,5:mOOQS-E8R-E8RO$vQdO,59{O,xQ[O'#EYO-VQWO,5;UO-VQWO,5;UOOQP1G.l1G.lO-|QXO,5:rOOQO-E8U-E8UOOQS1G.g1G.gOOQP1G.n1G.nO)PQWO1G.nO)UQWO1G.nOOQP1G/V1G/VO.ZQ`O1G/ZO.tQXO1G/_O/[QXO1G/aO/rQXO1G/bO0YQWO,59zO0_Q[O'#DOO0fQdO'#CoOOQP1G/Z1G/ZO$vQdO1G/ZO0mQpO,59]OOQS,59_,59_O$vQdO,59aO0uQWO1G/kOOQS,59c,59cO0zQ!bO,59eO1SQWO'#DhO1_QWO,5:TO1dQWO,5:ZO&TQ[O,5:VO&TQ[O'#EZO1lQWO,5;VO1wQWO,5:XO'yQ[O,5:[OOQS1G/x1G/xOOQS1G/z1G/zOOQS1G/|1G/|O2YQWO1G/|O2_QdO'#D|OOQS1G0P1G0POOQS1G0V1G0VOOQS1G0X1G0XO2mQtO1G/gOOQO,5:t,5:tO3TQ[O,5:tOOQO-E8W-E8WO3bQWO1G0pOOQP7+$Y7+$YOOQP7+$u7+$uO$vQdO7+$uOOQS1G/f1G/fO3mQXO'#EiO3tQWO,59jO3yQtO'#EUO4nQdO'#EfO4xQWO,59ZO4}QpO7+$uOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%V7+%VO5VQWO1G/PO$vQdO1G/oOOQO1G/u1G/uOOQO1G/q1G/qO5[QWO,5:uOOQO-E8X-E8XO5jQXO1G/vOOQS7+%h7+%hO5qQYO'#CsO(hQWO'#E[O5yQdO,5:hOOQS,5:h,5:hO6XQtO'#EXO$vQdO'#EXO7VQdO7+%ROOQO7+%R7+%ROOQO1G0`1G0`O7jQpO<<HaO7rQWO,5;TOOQP1G/U1G/UOOQS-E8S-E8SO$vQdO'#EVO7zQWO,5;QOOQT1G.u1G.uOOQP<<Ha<<HaOOQS7+$k7+$kO8SQdO7+%ZOOQO7+%b7+%bOOQS,5:v,5:vOOQS-E8Y-E8YOOQS1G0S1G0SO8ZQtO,5:sOOQS-E8V-E8VOOQO<<Hm<<HmOOQPAN={AN={O9XQdO,5:qOOQO-E8T-E8TOOQO<<Hu<<Hu",
|
|
3938
|
+
stateData: "9i~O#UOSROS~OUXOXXO]UO^UOtVOxWO!Y`O!ZYO!gZO!i[O!k]O!n^O!t_O#SQO#XSO~OQeOUXOXXO]UO^UOtVOxWO!Y`O!ZYO!gZO!i[O!k]O!n^O!t_O#SdO#XSO~O#P#^P~P!ZO#SiO~O]nO^nOplOtoOxpO|qO!PsO#QrO#XkO~O!RtO~P#kO`zO#RwO#SvO~O#S{O~O#S}O~OQ!WOb!QOf!WOh!WOn!VO#R!TO#S!PO#[!RO~Ob!YO!b![O!e!]O#S!XO!R#_P~Oh!bOn!VO#S!aO~O#S!dO~Ob!YO!b![O!e!]O#S!XO~O!W#_P~P%bO]WX]!UX^WXpWXtWXxWX|WX!PWX!RWX#QWX#XWX~O]!iO~O!W!jO#P#^X!Q#^X~O#P#^X!Q#^X~P!ZOUXOXXO]UO^UOtVOxWO#SQO#XSO~OplO!RtO~O`!sO#RwO#SvO~O!Q#^P~P!ZOb!zO~Ob!{O~Ov!|Oz!}O~OP#PObgXjgX!WgX!bgX!egX#SgXagXQgXfgXhgXngXpgX!VgX#PgX#RgX#[gXvgX!QgX~Ob!YOj#QO!b![O!e!]O#S!XO!W#_P~Ob#TO~Ob!YO!b![O!e!]O#S#UO~Op#YO!`#XO!R#_X!W#_X~Ob#]O~Oj#QO!W#_O~O!W#`O~Oh#aOn!VO~O!R#bO~O!RtO!`#XO~O!RtO!W#eO~O!W!|X#P!|X!Q!|X~P!ZO!W!jO#P#^a!Q#^a~O]nO^nOtoOxpO|qO!PsO#QrO#XkO~Op!za!R!zaa!za~P-bOv#lOz#mO~O]nO^nOtoOxpO#XkO~Op{i|{i!P{i!R{i#Q{ia{i~P.cOp}i|}i!P}i!R}i#Q}ia}i~P.cOp!Oi|!Oi!P!Oi!R!Oi#Q!Oia!Oi~P.cO!Q#nO~Oa#]P~P'yOa#YP~P$vOa#uOj#QO~O!W#wO~Oh#xOo#xO~O]!^Xa![X!`![X~O]#yO~Oa#zO!`#XO~Op#YO!R#_a!W#_a~O!`#XOp!aa!R!aa!W!aaa!aa~O!W$PO~O!Q$TO!q$RO!r$RO#[$QO~Oj#QOp$VO!V$XO!W!Ti#P!Ti!Q!Ti~P$vO!W!|a#P!|a!Q!|a~P!ZO!W!jO#P#^i!Q#^i~Oa#]X~P#kOa$]O~Oj#QOQ!xXa!xXb!xXf!xXh!xXn!xXp!xX#R!xX#S!xX#[!xX~Op$_Oa#YX~P$vOa$aO~Oj#QOv$bO~Oa$cO~O!`#XOp!}a!R!}a!W!}a~Oa$eO~P-bOP#PO!RgX~O!Q$hO!q$RO!r$RO#[$QO~Oj#QOQ!{Xb!{Xf!{Xh!{Xn!{Xp!{X!V!{X!W!{X#P!{X#R!{X#S!{X#[!{X!Q!{X~Op$VO!V$kO!W!Tq#P!Tq!Q!Tq~P$vOj#QOv$lO~OplOa#]a~Op$_Oa#Ya~Oa$oO~P$vOj#QOQ!{ab!{af!{ah!{an!{ap!{a!V!{a!W!{a#P!{a#R!{a#S!{a#[!{a!Q!{a~Oa!yap!ya~P$vOo#[j!Pj~",
|
|
3939
|
+
goto: ",`#aPPPPP#bP#k#zP#k$Z#kPP$aPPP$g$p$pP%SP$pP$p%j%|PPP&f&l#kP&rP#kP&xP#kP#k#kPPP'O'b'oPP#bPP'v'v(Q'vP'vP'v'vP#bP#bP#bP(T#bP(W(ZPP#bP#bP(^(m({)R)])c)m)sPPPPPP)y*SP*o*rP+h+k+q+z_aOPcgt!j#hkXOPcglqrst!j!z#]#hkROPcglqrst!j!z#]#hQjSR!mkQxUR!qnQ!qzQ#S!UR#k!sq!WY[!Q!i!{!}#Q#f#m#r#y$V$W$_$d$mp!WY[!Q!i!{!}#Q#f#m#r#y$V$W$_$d$mT$R#b$Sq!UY[!Q!i!{!}#Q#f#m#r#y$V$W$_$d$mp!WY[!Q!i!{!}#Q#f#m#r#y$V$W$_$d$mQ!b]R#a!cQyUR!rnQ!qyR#k!rQ|VR!toQ!OWR!upQuTQ!pmQ#^!_Q#d!fQ#e!gR$f$RSfPtQ!lgQ#g!jR$Y#hZePgt!j#ha!^Z_`!S!Y![#X#YR#V!YR!c]R!e^R#c!eQcOSgPtU!hcg#hR#h!jQ#r!{U$^#r$d$mQ$d#yR$m$_Q$`#rR$n$`QmTS!om$[R$[#oQ$W#fR$j$WQ!kfS#i!k#jR#j!lQ#Z!ZR#}#ZQ$S#bR$g$S_bOPcgt!j#h^TOPcgt!j#hQ!nlQ!vqQ!wrQ!xsQ#o!zR$O#]R#s!{Q!SYQ!`[Q#O!QQ#f!i[#q!{#r#y$_$d$mQ#t!}Q#v#QS$U#f$WQ$Z#mR$i$VR#p!zQhPR!ytQ!_ZQ!g`R#R!SU!ZZ`!SQ!f_Q#W!YQ#[![Q#{#XR#|#Y",
|
|
3940
|
+
nodeNames: "⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent , PseudoClassName ArgList IdSelector # IdName ] AttributeSelector [ AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList from to SupportsStatement supports AtRule Styles",
|
|
3941
|
+
maxTerm: 108,
|
|
3942
|
+
nodeProps: [["openedBy", 17, "(", 48, "{"], ["closedBy", 18, ")", 49, "}"]],
|
|
3943
|
+
propSources: [cssHighlighting],
|
|
3944
|
+
skippedNodes: [0, 3],
|
|
3945
|
+
repeatNodeCount: 8,
|
|
3946
|
+
tokenData: "Lq~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Cu![!]Dp!]!^El!^!_$}!_!`E}!`!aF`!a!b$}!b!cG[!c!}$}!}#OHt#O#P$}#P#QIV#Q#R6d#R#T$}#T#UIh#U#c$}#c#dJy#d#o$}#o#pK`#p#q6d#q#rKq#r#sLS#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`Lk<%lO$}W%QSOy%^z;'S%^;'S;=`%o<%lO%^W%cSoWOy%^z;'S%^;'S;=`%o<%lO%^W%rP;=`<%l%^~%zh#U~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#U~oWOX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^^)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^^)sUoWOy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^^*[UoWOy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^^*sUoWOy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^^+[UoWOy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^^+sUoWOy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^^,[UoWOy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^^,sUoWOy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^^-[UoWOy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^^-uS!VUoWOy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.R_/zYtPOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^^0oYoWOy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^^1dYoWOy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^^2ZYfUoWOy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^^3QYfUoWOy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^^3uYoWOy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^^4lYfUoWOy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^^5aYoWOy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^^6WSfUoWOy%^z;'S%^;'S;=`%o<%lO%^Y6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^Y7QSzQoWOy%^z;'S%^;'S;=`%o<%lO%^X7cSXPOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7o_9cSbVOy%^z;'S%^;'S;=`%o<%lO%^~9tOa~_9{UUPjSOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^_:fWjS!PPOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^^;TUoWOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^^;nYoW#[UOy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^^<cYoWOy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^=WUoWOy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^=qUoW#[UOy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^>[[oW#[UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^_?VSpVOy%^z;'S%^;'S;=`%o<%lO%^^?hWjSOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^_@VU#XPOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjSOy%^z{@}{;'S%^;'S;=`%o<%lO%^~ASUoWOy@}yzAfz{Bm{;'S@};'S;=`Co<%lO@}~AiTOzAfz{Ax{;'SAf;'S;=`Bg<%lOAf~A{VOzAfz{Ax{!PAf!P!QBb!Q;'SAf;'S;=`Bg<%lOAf~BgOR~~BjP;=`<%lAf~BrWoWOy@}yzAfz{Bm{!P@}!P!QC[!Q;'S@};'S;=`Co<%lO@}~CcSoWR~Oy%^z;'S%^;'S;=`%o<%lO%^~CrP;=`<%l@}^Cz[#[UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^XDuU]POy%^z![%^![!]EX!];'S%^;'S;=`%o<%lO%^XE`S^PoWOy%^z;'S%^;'S;=`%o<%lO%^_EqS!WVOy%^z;'S%^;'S;=`%o<%lO%^YFSSzQOy%^z;'S%^;'S;=`%o<%lO%^XFeU|POy%^z!`%^!`!aFw!a;'S%^;'S;=`%o<%lO%^XGOS|PoWOy%^z;'S%^;'S;=`%o<%lO%^XG_WOy%^z!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHO[!YPoWOy%^z}%^}!OGw!O!Q%^!Q![Gw![!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHySxPOy%^z;'S%^;'S;=`%o<%lO%^^I[SvUOy%^z;'S%^;'S;=`%o<%lO%^XIkUOy%^z#b%^#b#cI}#c;'S%^;'S;=`%o<%lO%^XJSUoWOy%^z#W%^#W#XJf#X;'S%^;'S;=`%o<%lO%^XJmS!`PoWOy%^z;'S%^;'S;=`%o<%lO%^XJ|UOy%^z#f%^#f#gJf#g;'S%^;'S;=`%o<%lO%^XKeS!RPOy%^z;'S%^;'S;=`%o<%lO%^_KvS!QVOy%^z;'S%^;'S;=`%o<%lO%^ZLXU!PPOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^WLnP;=`<%l$}",
|
|
3947
|
+
tokenizers: [descendant, unitToken, identifiers, 0, 1, 2, 3],
|
|
3948
|
+
topRules: {
|
|
3949
|
+
"StyleSheet": [0, 4],
|
|
3950
|
+
"Styles": [1, 84]
|
|
3951
|
+
},
|
|
3952
|
+
specialized: [{
|
|
3953
|
+
term: 95,
|
|
3954
|
+
get: value => spec_callee[value] || -1
|
|
3955
|
+
}, {
|
|
3956
|
+
term: 56,
|
|
3957
|
+
get: value => spec_AtKeyword[value] || -1
|
|
3958
|
+
}, {
|
|
3959
|
+
term: 96,
|
|
3960
|
+
get: value => spec_identifier$1[value] || -1
|
|
3961
|
+
}],
|
|
3962
|
+
tokenPrec: 1123
|
|
3963
|
+
});
|
|
3964
|
+
|
|
3965
|
+
let _properties = null;
|
|
3966
|
+
function properties() {
|
|
3967
|
+
if (!_properties && typeof document == "object" && document.body) {
|
|
3968
|
+
let names = [];
|
|
3969
|
+
for (let prop in document.body.style) {
|
|
3970
|
+
if (!/[A-Z]|^-|^(item|length)$/.test(prop)) names.push(prop);
|
|
3971
|
+
}
|
|
3972
|
+
_properties = names.sort().map(name => ({
|
|
3973
|
+
type: "property",
|
|
3974
|
+
label: name
|
|
3975
|
+
}));
|
|
3976
|
+
}
|
|
3977
|
+
return _properties || [];
|
|
3978
|
+
}
|
|
3979
|
+
const pseudoClasses = /*@__PURE__*/["active", "after", "before", "checked", "default", "disabled", "empty", "enabled", "first-child", "first-letter", "first-line", "first-of-type", "focus", "hover", "in-range", "indeterminate", "invalid", "lang", "last-child", "last-of-type", "link", "not", "nth-child", "nth-last-child", "nth-last-of-type", "nth-of-type", "only-of-type", "only-child", "optional", "out-of-range", "placeholder", "read-only", "read-write", "required", "root", "selection", "target", "valid", "visited"].map(name => ({
|
|
3980
|
+
type: "class",
|
|
3981
|
+
label: name
|
|
3982
|
+
}));
|
|
3983
|
+
const values = /*@__PURE__*/["above", "absolute", "activeborder", "additive", "activecaption", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "antialiased", "appworkspace", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic-abegede-gez", "ethiopic-halehame-aa-er", "ethiopic-halehame-gez", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "graytext", "grid", "groove", "hand", "hard-light", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "justify", "keep-all", "landscape", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lowercase", "ltr", "luminosity", "manipulation", "match", "matrix", "matrix3d", "medium", "menu", "menutext", "message-box", "middle", "min-intrinsic", "mix", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "serif", "show", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "text", "text-bottom", "text-top", "textarea", "textfield", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "to", "top", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-latin", "uppercase", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small"].map(name => ({
|
|
3984
|
+
type: "keyword",
|
|
3985
|
+
label: name
|
|
3986
|
+
})).concat( /*@__PURE__*/["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"].map(name => ({
|
|
3987
|
+
type: "constant",
|
|
3988
|
+
label: name
|
|
3989
|
+
})));
|
|
3990
|
+
const tags = /*@__PURE__*/["a", "abbr", "address", "article", "aside", "b", "bdi", "bdo", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "figcaption", "figure", "footer", "form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output", "p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"].map(name => ({
|
|
3991
|
+
type: "type",
|
|
3992
|
+
label: name
|
|
3993
|
+
}));
|
|
3994
|
+
const identifier$1 = /^[\w-]*/;
|
|
3995
|
+
/**
|
|
3996
|
+
CSS property and value keyword completion source.
|
|
3997
|
+
*/
|
|
3998
|
+
const cssCompletionSource = context => {
|
|
3999
|
+
let {
|
|
4000
|
+
state,
|
|
4001
|
+
pos
|
|
4002
|
+
} = context,
|
|
4003
|
+
node = syntaxTree(state).resolveInner(pos, -1);
|
|
4004
|
+
if (node.name == "PropertyName") return {
|
|
4005
|
+
from: node.from,
|
|
4006
|
+
options: properties(),
|
|
4007
|
+
validFor: identifier$1
|
|
4008
|
+
};
|
|
4009
|
+
if (node.name == "ValueName") return {
|
|
4010
|
+
from: node.from,
|
|
4011
|
+
options: values,
|
|
4012
|
+
validFor: identifier$1
|
|
4013
|
+
};
|
|
4014
|
+
if (node.name == "PseudoClassName") return {
|
|
4015
|
+
from: node.from,
|
|
4016
|
+
options: pseudoClasses,
|
|
4017
|
+
validFor: identifier$1
|
|
4018
|
+
};
|
|
4019
|
+
if (node.name == "TagName") {
|
|
4020
|
+
for (let {
|
|
4021
|
+
parent
|
|
4022
|
+
} = node; parent; parent = parent.parent) if (parent.name == "Block") return {
|
|
4023
|
+
from: node.from,
|
|
4024
|
+
options: properties(),
|
|
4025
|
+
validFor: identifier$1
|
|
4026
|
+
};
|
|
4027
|
+
return {
|
|
4028
|
+
from: node.from,
|
|
4029
|
+
options: tags,
|
|
4030
|
+
validFor: identifier$1
|
|
4031
|
+
};
|
|
4032
|
+
}
|
|
4033
|
+
if (!context.explicit) return null;
|
|
4034
|
+
let above = node.resolve(pos),
|
|
4035
|
+
before = above.childBefore(pos);
|
|
4036
|
+
if (before && before.name == ":" && above.name == "PseudoClassSelector") return {
|
|
4037
|
+
from: pos,
|
|
4038
|
+
options: pseudoClasses,
|
|
4039
|
+
validFor: identifier$1
|
|
4040
|
+
};
|
|
4041
|
+
if (before && before.name == ":" && above.name == "Declaration" || above.name == "ArgList") return {
|
|
4042
|
+
from: pos,
|
|
4043
|
+
options: values,
|
|
4044
|
+
validFor: identifier$1
|
|
4045
|
+
};
|
|
4046
|
+
if (above.name == "Block") return {
|
|
4047
|
+
from: pos,
|
|
4048
|
+
options: properties(),
|
|
4049
|
+
validFor: identifier$1
|
|
4050
|
+
};
|
|
4051
|
+
return null;
|
|
4052
|
+
};
|
|
4053
|
+
|
|
4054
|
+
/**
|
|
4055
|
+
A language provider based on the [Lezer CSS
|
|
4056
|
+
parser](https://github.com/lezer-parser/css), extended with
|
|
4057
|
+
highlighting and indentation information.
|
|
4058
|
+
*/
|
|
4059
|
+
const cssLanguage = /*@__PURE__*/LRLanguage.define({
|
|
4060
|
+
parser: /*@__PURE__*/parser$3.configure({
|
|
4061
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
4062
|
+
Declaration: /*@__PURE__*/continuedIndent()
|
|
4063
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
4064
|
+
Block: foldInside
|
|
4065
|
+
})]
|
|
4066
|
+
}),
|
|
4067
|
+
languageData: {
|
|
4068
|
+
commentTokens: {
|
|
4069
|
+
block: {
|
|
4070
|
+
open: "/*",
|
|
4071
|
+
close: "*/"
|
|
4072
|
+
}
|
|
4073
|
+
},
|
|
4074
|
+
indentOnInput: /^\s*\}$/,
|
|
4075
|
+
wordChars: "-"
|
|
4076
|
+
}
|
|
4077
|
+
});
|
|
4078
|
+
/**
|
|
4079
|
+
Language support for CSS.
|
|
4080
|
+
*/
|
|
4081
|
+
function css() {
|
|
4082
|
+
return new LanguageSupport(cssLanguage, cssLanguage.data.of({
|
|
4083
|
+
autocomplete: cssCompletionSource
|
|
4084
|
+
}));
|
|
4085
|
+
}
|
|
4086
|
+
|
|
3387
4087
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3388
4088
|
const noSemi = 301,
|
|
3389
4089
|
incdec = 1,
|
|
@@ -3397,7 +4097,7 @@ const noSemi = 301,
|
|
|
3397
4097
|
/* Hand-written tokenizers for JavaScript tokens that can't be
|
|
3398
4098
|
expressed by lezer's built-in tokenizer. */
|
|
3399
4099
|
|
|
3400
|
-
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
|
4100
|
+
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
|
3401
4101
|
const braceR = 125,
|
|
3402
4102
|
semicolon = 59,
|
|
3403
4103
|
slash = 47,
|
|
@@ -3425,7 +4125,7 @@ const noSemicolon = new ExternalTokenizer((input, stack) => {
|
|
|
3425
4125
|
next
|
|
3426
4126
|
} = input,
|
|
3427
4127
|
after;
|
|
3428
|
-
if (space.indexOf(next) > -1) return;
|
|
4128
|
+
if (space$1.indexOf(next) > -1) return;
|
|
3429
4129
|
if (next == slash && ((after = input.peek(1)) == slash || after == star)) return;
|
|
3430
4130
|
if (next != braceR && next != semicolon && next != -1 && !stack.context && stack.canShift(noSemi)) input.acceptToken(noSemi);
|
|
3431
4131
|
}, {
|
|
@@ -3447,61 +4147,61 @@ const incdecToken = new ExternalTokenizer((input, stack) => {
|
|
|
3447
4147
|
contextual: true
|
|
3448
4148
|
});
|
|
3449
4149
|
const jsHighlight = styleTags({
|
|
3450
|
-
"get set async static": tags.modifier,
|
|
3451
|
-
"for while do if else switch try catch finally return throw break continue default case": tags.controlKeyword,
|
|
3452
|
-
"in of await yield void typeof delete instanceof": tags.operatorKeyword,
|
|
3453
|
-
"let var const function class extends": tags.definitionKeyword,
|
|
3454
|
-
"import export from": tags.moduleKeyword,
|
|
3455
|
-
"with debugger as new": tags.keyword,
|
|
3456
|
-
TemplateString: tags.special(tags.string),
|
|
3457
|
-
super: tags.atom,
|
|
3458
|
-
BooleanLiteral: tags.bool,
|
|
3459
|
-
this: tags.self,
|
|
3460
|
-
null: tags.null,
|
|
3461
|
-
Star: tags.modifier,
|
|
3462
|
-
VariableName: tags.variableName,
|
|
3463
|
-
"CallExpression/VariableName TaggedTemplateExpression/VariableName": tags.function(tags.variableName),
|
|
3464
|
-
VariableDefinition: tags.definition(tags.variableName),
|
|
3465
|
-
Label: tags.labelName,
|
|
3466
|
-
PropertyName: tags.propertyName,
|
|
3467
|
-
PrivatePropertyName: tags.special(tags.propertyName),
|
|
3468
|
-
"CallExpression/MemberExpression/PropertyName": tags.function(tags.propertyName),
|
|
3469
|
-
"FunctionDeclaration/VariableDefinition": tags.function(tags.definition(tags.variableName)),
|
|
3470
|
-
"ClassDeclaration/VariableDefinition": tags.definition(tags.className),
|
|
3471
|
-
PropertyDefinition: tags.definition(tags.propertyName),
|
|
3472
|
-
PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),
|
|
3473
|
-
UpdateOp: tags.updateOperator,
|
|
3474
|
-
LineComment: tags.lineComment,
|
|
3475
|
-
BlockComment: tags.blockComment,
|
|
3476
|
-
Number: tags.number,
|
|
3477
|
-
String: tags.string,
|
|
3478
|
-
Escape: tags.escape,
|
|
3479
|
-
ArithOp: tags.arithmeticOperator,
|
|
3480
|
-
LogicOp: tags.logicOperator,
|
|
3481
|
-
BitOp: tags.bitwiseOperator,
|
|
3482
|
-
CompareOp: tags.compareOperator,
|
|
3483
|
-
RegExp: tags.regexp,
|
|
3484
|
-
Equals: tags.definitionOperator,
|
|
3485
|
-
Arrow: tags.function(tags.punctuation),
|
|
3486
|
-
": Spread": tags.punctuation,
|
|
3487
|
-
"( )": tags.paren,
|
|
3488
|
-
"[ ]": tags.squareBracket,
|
|
3489
|
-
"{ }": tags.brace,
|
|
3490
|
-
"InterpolationStart InterpolationEnd": tags.special(tags.brace),
|
|
3491
|
-
".": tags.derefOperator,
|
|
3492
|
-
", ;": tags.separator,
|
|
3493
|
-
"@": tags.meta,
|
|
3494
|
-
TypeName: tags.typeName,
|
|
3495
|
-
TypeDefinition: tags.definition(tags.typeName),
|
|
3496
|
-
"type enum interface implements namespace module declare": tags.definitionKeyword,
|
|
3497
|
-
"abstract global Privacy readonly override": tags.modifier,
|
|
3498
|
-
"is keyof unique infer": tags.operatorKeyword,
|
|
3499
|
-
JSXAttributeValue: tags.attributeValue,
|
|
3500
|
-
JSXText: tags.content,
|
|
3501
|
-
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags.angleBracket,
|
|
3502
|
-
"JSXIdentifier JSXNameSpacedName": tags.tagName,
|
|
3503
|
-
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags.attributeName,
|
|
3504
|
-
"JSXBuiltin/JSXIdentifier": tags.standard(tags.tagName)
|
|
4150
|
+
"get set async static": tags$1.modifier,
|
|
4151
|
+
"for while do if else switch try catch finally return throw break continue default case": tags$1.controlKeyword,
|
|
4152
|
+
"in of await yield void typeof delete instanceof": tags$1.operatorKeyword,
|
|
4153
|
+
"let var const function class extends": tags$1.definitionKeyword,
|
|
4154
|
+
"import export from": tags$1.moduleKeyword,
|
|
4155
|
+
"with debugger as new": tags$1.keyword,
|
|
4156
|
+
TemplateString: tags$1.special(tags$1.string),
|
|
4157
|
+
super: tags$1.atom,
|
|
4158
|
+
BooleanLiteral: tags$1.bool,
|
|
4159
|
+
this: tags$1.self,
|
|
4160
|
+
null: tags$1.null,
|
|
4161
|
+
Star: tags$1.modifier,
|
|
4162
|
+
VariableName: tags$1.variableName,
|
|
4163
|
+
"CallExpression/VariableName TaggedTemplateExpression/VariableName": tags$1.function(tags$1.variableName),
|
|
4164
|
+
VariableDefinition: tags$1.definition(tags$1.variableName),
|
|
4165
|
+
Label: tags$1.labelName,
|
|
4166
|
+
PropertyName: tags$1.propertyName,
|
|
4167
|
+
PrivatePropertyName: tags$1.special(tags$1.propertyName),
|
|
4168
|
+
"CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
|
|
4169
|
+
"FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
|
|
4170
|
+
"ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
|
|
4171
|
+
PropertyDefinition: tags$1.definition(tags$1.propertyName),
|
|
4172
|
+
PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
|
|
4173
|
+
UpdateOp: tags$1.updateOperator,
|
|
4174
|
+
LineComment: tags$1.lineComment,
|
|
4175
|
+
BlockComment: tags$1.blockComment,
|
|
4176
|
+
Number: tags$1.number,
|
|
4177
|
+
String: tags$1.string,
|
|
4178
|
+
Escape: tags$1.escape,
|
|
4179
|
+
ArithOp: tags$1.arithmeticOperator,
|
|
4180
|
+
LogicOp: tags$1.logicOperator,
|
|
4181
|
+
BitOp: tags$1.bitwiseOperator,
|
|
4182
|
+
CompareOp: tags$1.compareOperator,
|
|
4183
|
+
RegExp: tags$1.regexp,
|
|
4184
|
+
Equals: tags$1.definitionOperator,
|
|
4185
|
+
Arrow: tags$1.function(tags$1.punctuation),
|
|
4186
|
+
": Spread": tags$1.punctuation,
|
|
4187
|
+
"( )": tags$1.paren,
|
|
4188
|
+
"[ ]": tags$1.squareBracket,
|
|
4189
|
+
"{ }": tags$1.brace,
|
|
4190
|
+
"InterpolationStart InterpolationEnd": tags$1.special(tags$1.brace),
|
|
4191
|
+
".": tags$1.derefOperator,
|
|
4192
|
+
", ;": tags$1.separator,
|
|
4193
|
+
"@": tags$1.meta,
|
|
4194
|
+
TypeName: tags$1.typeName,
|
|
4195
|
+
TypeDefinition: tags$1.definition(tags$1.typeName),
|
|
4196
|
+
"type enum interface implements namespace module declare": tags$1.definitionKeyword,
|
|
4197
|
+
"abstract global Privacy readonly override": tags$1.modifier,
|
|
4198
|
+
"is keyof unique infer": tags$1.operatorKeyword,
|
|
4199
|
+
JSXAttributeValue: tags$1.attributeValue,
|
|
4200
|
+
JSXText: tags$1.content,
|
|
4201
|
+
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
|
|
4202
|
+
"JSXIdentifier JSXNameSpacedName": tags$1.tagName,
|
|
4203
|
+
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
|
|
4204
|
+
"JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
|
|
3505
4205
|
});
|
|
3506
4206
|
|
|
3507
4207
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
@@ -3587,7 +4287,7 @@ const spec_LessThan = {
|
|
|
3587
4287
|
__proto__: null,
|
|
3588
4288
|
"<": 137
|
|
3589
4289
|
};
|
|
3590
|
-
const parser = LRParser.deserialize({
|
|
4290
|
+
const parser$2 = LRParser.deserialize({
|
|
3591
4291
|
version: 14,
|
|
3592
4292
|
states: "$BhO`QUOOO%QQUOOO'TQWOOP(_OSOOO*mQ(CjO'#CfO*tOpO'#CgO+SO!bO'#CgO+bO07`O'#DZO-sQUO'#DaO.TQUO'#DlO%QQUO'#DvO0[QUO'#EOOOQ(CY'#EW'#EWO0rQSO'#ETOOQO'#I_'#I_O0zQSO'#GjOOQO'#Eh'#EhO1VQSO'#EgO1[QSO'#EgO3^Q(CjO'#JbO5}Q(CjO'#JcO6kQSO'#FVO6pQ#tO'#FnOOQ(CY'#F_'#F_O6{O&jO'#F_O7ZQ,UO'#FuO8qQSO'#FtOOQ(CY'#Jc'#JcOOQ(CW'#Jb'#JbOOQQ'#J|'#J|O8vQSO'#IOO8{Q(C[O'#IPOOQQ'#JO'#JOOOQQ'#IT'#ITQ`QUOOO%QQUO'#DnO9TQUO'#DzO%QQUO'#D|O9[QSO'#GjO9aQ,UO'#ClO9oQSO'#EfO9zQSO'#EqO:PQ,UO'#F^O:nQSO'#GjO:sQSO'#GnO;OQSO'#GnO;^QSO'#GqO;^QSO'#GrO;^QSO'#GtO9[QSO'#GwO;}QSO'#GzO=`QSO'#CbO=pQSO'#HXO=xQSO'#H_O=xQSO'#HaO`QUO'#HcO=xQSO'#HeO=xQSO'#HhO=}QSO'#HnO>SQ(C]O'#HtO%QQUO'#HvO>_Q(C]O'#HxO>jQ(C]O'#HzO8{Q(C[O'#H|O>uQ(CjO'#CfO?wQWO'#DfQOQSOOO@_QSO'#EPO9aQ,UO'#EfO@jQSO'#EfO@uQ`O'#F^OOQQ'#Cd'#CdOOQ(CW'#Dk'#DkOOQ(CW'#Jf'#JfO%QQUO'#JfOBOQWO'#E_OOQ(CW'#E^'#E^OBYQ(C`O'#E_OBtQWO'#ESOOQO'#Ji'#JiOCYQWO'#ESOCgQWO'#E_OC}QWO'#EeODQQWO'#E_O@}QWO'#E_OBtQWO'#E_PDkO?MpO'#C`POOO)CDm)CDmOOOO'#IU'#IUODvOpO,59ROOQ(CY,59R,59ROOOO'#IV'#IVOEUO!bO,59RO%QQUO'#D]OOOO'#IX'#IXOEdO07`O,59uOOQ(CY,59u,59uOErQUO'#IYOFVQSO'#JdOHXQbO'#JdO+pQUO'#JdOH`QSO,59{OHvQSO'#EhOITQSO'#JqOI`QSO'#JpOI`QSO'#JpOIhQSO,5;UOImQSO'#JoOOQ(CY,5:W,5:WOItQUO,5:WOKuQ(CjO,5:bOLfQSO,5:jOLkQSO'#JmOMeQ(C[O'#JnO:sQSO'#JmOMlQSO'#JmOMtQSO,5;TOMyQSO'#JmOOQ(CY'#Cf'#CfO%QQUO'#EOONmQ`O,5:oOOQO'#Jj'#JjOOQO-E<]-E<]O9[QSO,5=UO! TQSO,5=UO! YQUO,5;RO!#]Q,UO'#EcO!$pQSO,5;RO!&YQ,UO'#DpO!&aQUO'#DuO!&kQWO,5;[O!&sQWO,5;[O%QQUO,5;[OOQQ'#E}'#E}OOQQ'#FP'#FPO%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]O%QQUO,5;]OOQQ'#FT'#FTO!'RQUO,5;nOOQ(CY,5;s,5;sOOQ(CY,5;t,5;tO!)UQSO,5;tOOQ(CY,5;u,5;uO%QQUO'#IeO!)^Q(C[O,5<bO!#]Q,UO,5;]O!){Q,UO,5;]O%QQUO,5;qO!*SQ#tO'#FdO!+PQ#tO'#JuO!*kQ#tO'#JuO!+WQ#tO'#JuOOQO'#Ju'#JuO!+lQ#tO,5;|OOOO,5<Y,5<YO!+}QUO'#FpOOOO'#Id'#IdO6{O&jO,5;yO!,UQ#tO'#FrOOQ(CY,5;y,5;yO!,uQ7[O'#CrOOQ(CY'#Cv'#CvO!-YQSO'#CvO!-_O07`O'#CzO!-{Q,UO,5<_O!.SQSO,5<aO!/iQMhO'#GPO!/vQSO'#GQO!/{QSO'#GQO!0QQMhO'#GUO!1PQWO'#GYO!1rQ7[O'#J]OOQ(CY'#J]'#J]O!1|QSO'#J[O!2[QSO'#JZO!2dQSO'#CqOOQ(CY'#Ct'#CtOOQ(CY'#DO'#DOOOQ(CY'#DQ'#DQO0uQSO'#DSO!$uQ,UO'#FwO!$uQ,UO'#FyO!2lQSO'#F{O!2qQSO'#F|O!/{QSO'#GSO!$uQ,UO'#GXO!2vQSO'#EiO!3bQSO,5<`O`QUO,5>jOOQQ'#JW'#JWOOQQ,5>k,5>kOOQQ-E<R-E<RO!5aQ(CjO,5:YO!7}Q(CjO,5:fO%QQUO,5:fO!:hQ(CjO,5:hOOQ(CW'#Co'#CoO!;XQ,UO,5=UO!;gQ(C[O'#JXO8qQSO'#JXO=}QSO,59WO!;xQWO,59WO!<QQ,UO,59WO9aQ,UO,59WO!<]QSO,5;RO!<eQSO'#HWO!<vQSO'#KQO%QQUO,5;vO!=OQWO,5;xO!=TQSO,5=qO!=YQSO,5=qO!=_QSO,5=qO8{Q(C[O,5=qO!=mQSO'#EjO!>gQWO'#EkOOQ(CW'#Jo'#JoO!>nQ(C[O'#J}O8{Q(C[O,5=YO;^QSO,5=`OOQO'#Cr'#CrO!>yQWO,5=]O!?RQ,UO,5=^O!?^QSO,5=`O!?cQ`O,5=cO=}QSO'#G|O9[QSO'#HOO!?kQSO'#HOO9aQ,UO'#HRO!?pQSO'#HROOQQ,5=f,5=fO!?uQSO'#HSO!?}QSO'#ClO!@SQSO,58|O!@^QSO,58|O!BfQUO,58|OOQQ,58|,58|O!BsQ(C[O,58|O%QQUO,58|O!COQUO'#HZOOQQ'#H['#H[OOQQ'#H]'#H]O`QUO,5=sO!C`QSO,5=sO`QUO,5=yO`QUO,5={O!CeQSO,5=}O`QUO,5>PO!CjQSO,5>SO!CoQUO,5>YOOQQ,5>`,5>`O%QQUO,5>`O8{Q(C[O,5>bOOQQ,5>d,5>dO!GvQSO,5>dOOQQ,5>f,5>fO!GvQSO,5>fOOQQ,5>h,5>hO!G{QWO'#DXO%QQUO'#JfO!HjQWO'#JfO!IXQWO'#DgO!IjQWO'#DgO!K{QUO'#DgO!LSQSO'#JeO!L[QSO,5:QO!LaQSO'#ElO!LoQSO'#JrO!LwQSO,5;VO!L|QWO'#DgO!MZQWO'#EROOQ(CY,5:k,5:kO%QQUO,5:kO!MbQSO,5:kO=}QSO,5;QO!;xQWO,5;QO!<QQ,UO,5;QO9aQ,UO,5;QO!MjQSO,5@QO!MoQ!LQO,5:oO!NrQ(C`O,5:yOBtQWO,5:nO# ^QWO,5:nO# kQWO,5:yO#!RQWO,5:yO#!lQWO,5:yOBtQWO,5:yO=}QSO,5:nOOQ(CW'#Eb'#EbOOQO,5:y,5:yO%QQUO,5:yO##]Q(C[O,5:yO##hQ(C[O,5:yO!;xQWO,5:nOOQO,5;P,5;PO##vQ(C[O,5:yPOOO'#IS'#ISP#$[O?MpO,58zPOOO,58z,58zOOOO-E<S-E<SOOQ(CY1G.m1G.mOOOO-E<T-E<TO#$gQ`O,59wOOOO-E<V-E<VOOQ(CY1G/a1G/aO#$lQbO,5>tO+pQUO,5>tOOQO,5>z,5>zO#$vQUO'#IYOOQO-E<W-E<WO#%TQSO,5@OO#%]QbO,5@OO#%dQSO,5@[OOQ(CY1G/g1G/gO%QQUO,5@]O#%lQSO'#I`OOQO-E<^-E<^O#%dQSO,5@[OOQ(CW1G0p1G0pOOQ(CY1G/r1G/rOOQ(CY1G0U1G0UO#&QQSO,5@XO:sQSO,5@XO#&YQSO,5@XO%QQUO,5@YO#&hQ(C[O,5@YO#&yQ(C[O,5@YO#'QQSO'#IbO#&QQSO,5@XOOQ(CW1G0o1G0oO!&kQWO,5:qO!&vQWO,5:qOOQO,5:s,5:sO#'oQSO,5:sO#'wQ,UO1G2pO9[QSO1G2pOOQ(CY1G0m1G0mO#(VQ(CjO1G0mO#)[Q(ChO,5:}OOQ(CY'#GO'#GOO#)xQ(CjO'#J]O! YQUO1G0mO#,QQ,UO'#JgO#,[QSO,5:[O#,aQbO'#JhO%QQUO'#JhO#,kQSO,5:aOOQ(CY'#DX'#DXOOQ(CY1G0v1G0vO%QQUO1G0vOOQ(CY1G1`1G1`O#,pQSO1G0vO#/XQ(CjO1G0wO#/`Q(CjO1G0wO#1yQ(CjO1G0wO#2QQ(CjO1G0wO#4[Q(CjO1G0wO#4rQ(CjO1G0wO#7lQ(CjO1G0wO#7sQ(CjO1G0wO#:^Q(CjO1G0wO#:eQ(CjO1G0wO#<]Q(CjO1G0wO#?]Q$IUO'#CfO#AZQ$IUO1G1YO#CXQ$IUO'#JcO!)XQSO1G1`O#ClQ(CjO,5?POOQ(CW-E<c-E<cO#D`Q(CjO1G0wOOQ(CY1G0w1G0wO#FkQ(CjO1G1]O#G_Q#tO,5<QO#GgQ#tO,5<RO#GoQ#tO'#FiO#HWQSO'#FhOOQO'#Jv'#JvOOQO'#Ic'#IcO#H]Q#tO1G1hOOQ(CY1G1h1G1hOOOO1G1s1G1sO#HnQ$IUO'#JbO#HxQSO,5<[O!'RQUO,5<[OOOO-E<b-E<bOOQ(CY1G1e1G1eO#H}QWO'#JuOOQ(CY,5<^,5<^O#IVQWO,5<^OOQ(CY,59b,59bO!#]Q,UO'#C|OOOO'#IW'#IWO#I[O07`O,59fOOQ(CY,59f,59fO%QQUO1G1yO!2qQSO'#IgO#IgQSO,5<rOOQ(CY,5<o,5<oOOQO'#Ge'#GeO!$uQ,UO,5=OOOQO'#Gg'#GgO!$uQ,UO,5=QO!#]Q,UO,5=SOOQO1G1{1G1{O#IuQ`O'#CoO#JYQ`O,5<kO#JaQSO'#JyO9[QSO'#JyO#JoQSO,5<mO!$uQ,UO,5<lO#JtQSO'#GRO#KPQSO,5<lO#KUQ`O'#GOO#KcQ`O'#JzO#KmQSO'#JzO!#]Q,UO'#JzO#KrQSO,5<pO#KwQWO'#GZO!0zQWO'#GZO#LYQSO'#G]O#L_QSO'#G_O!/{QSO'#GbO#LdQ(C[O'#IiO#LoQWO,5<tOOQ(CY,5<t,5<tO#LvQWO'#GZO#MUQWO'#G[O#M^QWO'#G[OOQ(CY,5=T,5=TO!$uQ,UO,5?vO!$uQ,UO,5?vO#McQSO'#IjO#MnQSO,5?uO#MvQSO,59]O#NgQ,UO,59nOOQ(CY,59n,59nO$ YQ,UO,5<cO$ {Q,UO,5<eO?oQSO,5<gOOQ(CY,5<h,5<hO$!VQSO,5<nO$![Q,UO,5<sO! YQUO1G1zO$!lQSO1G1zOOQQ1G4U1G4UOOQ(CY1G/t1G/tO!)UQSO1G/tO$$kQ(CjO1G0QOOQQ1G2p1G2pO!#]Q,UO1G2pO%QQUO1G2pO$%[QSO1G2pO$%gQ,UO'#EcOOQ(CW,5?s,5?sO$%qQ(C[O,5?sOOQQ1G.r1G.rO=}QSO1G.rO!;xQWO1G.rO!<QQ,UO1G.rO$&SQSO1G0mO$&XQSO'#CfO$&dQSO'#KRO$&lQSO,5=rO$&qQSO'#KRO$&vQSO'#KRO$'RQSO'#IrO$'aQSO,5@lO$'iQbO1G1bOOQ(CY1G1d1G1dO9[QSO1G3]O?oQSO1G3]O$'pQSO1G3]O$'uQSO1G3]OOQQ1G3]1G3]O:sQSO'#JpO:sQSO'#ElO%QQUO'#ElO:sQSO'#IlO$'zQ(C[O,5@iOOQQ1G2t1G2tO!?^QSO1G2zO!#]Q,UO1G2wO$(VQSO1G2wOOQQ1G2x1G2xO!#]Q,UO1G2xO$([QSO1G2xO$(dQWO'#GvOOQQ1G2z1G2zO!0zQWO'#InO!?cQ`O1G2}OOQQ1G2}1G2}OOQQ,5=h,5=hO$(lQ,UO,5=jO9[QSO,5=jO#L_QSO,5=mO8qQSO,5=mO!;xQWO,5=mO!<QQ,UO,5=mO9aQ,UO,5=mO$(zQSO'#KPO$)VQSO,5=nOOQQ1G.h1G.hO$)[Q(C[O1G.hO?oQSO1G.hO$)gQSO1G.hO8{Q(C[O1G.hO$)rQbO,5@nO$*VQSO,5@nO$*bQUO,5=uO$*iQSO,5=uO:sQSO,5@nOOQQ1G3_1G3_O`QUO1G3_OOQQ1G3e1G3eOOQQ1G3g1G3gO=xQSO1G3iO$*nQUO1G3kO$.oQUO'#HjOOQQ1G3n1G3nO$.|QSO'#HpO=}QSO'#HrOOQQ1G3t1G3tO$/UQUO1G3tO8{Q(C[O1G3zOOQQ1G3|1G3|OOQ(CW'#GV'#GVO8{Q(C[O1G4OO8{Q(C[O1G4QO$3YQSO,5@QO!'RQUO,5;WO:sQSO,5;WO=}QSO,5:RO!'RQUO,5:RO!;xQWO,5:RO$3_Q$IUO,5:ROOQO,5;W,5;WO$3iQWO'#IZO$4PQSO,5@POOQ(CY1G/l1G/lO$4XQWO'#IaO$4cQSO,5@^OOQ(CW1G0q1G0qO!IjQWO,5:ROOQO'#I^'#I^O$4kQWO,5:mOOQ(CY,5:m,5:mO!MeQSO1G0VOOQ(CY1G0V1G0VO%QQUO1G0VOOQ(CY1G0l1G0lO=}QSO1G0lO!;xQWO1G0lO!<QQ,UO1G0lOOQ(CW1G5l1G5lO=}QSO1G0YOOQO1G0e1G0eO%QQUO1G0eO$4rQ(C[O1G0eO$4}Q(C[O1G0eO!;xQWO1G0YOBtQWO1G0YO$5]Q(C`O1G0eO$5wQWO1G0YOBtQWO1G0eO$6UQWO1G0eO$6lQWO1G0eO$7VQ(C[O1G0eOOQO1G0Y1G0YO$7kQ(CjO1G0ePOOO-E<Q-E<QPOOO1G.f1G.fOOOO1G/c1G/cO$7uQ`O,5<bO$7}QbO1G4`OOQO1G4f1G4fO%QQUO,5>tO$8XQSO1G5jO$8aQSO1G5vO$8iQbO1G5wO:sQSO,5>zO$8sQSO1G5sO$8sQSO1G5sO:sQSO1G5sO$8{Q(CjO1G5tO%QQUO1G5tO$9]Q(C[O1G5tO$9nQSO,5>|O:sQSO,5>|OOQO,5>|,5>|O$:SQSO,5>|OOQO-E<`-E<`OOQO1G0]1G0]OOQO1G0_1G0_O!)XQSO1G0_OOQQ7+([7+([O!#]Q,UO7+([O%QQUO7+([O$:bQSO7+([O$:mQ,UO7+([O$:{Q(CjO,59nO$=TQ(CjO,5<cO$?`Q(CjO,5<eO$AkQ(CjO,5<sOOQ(CY7+&X7+&XO$C|Q(CjO7+&XO$DpQ,UO'#I[O$DzQSO,5@ROOQ(CY1G/v1G/vO$ESQUO'#I]O$EaQSO,5@SO$EiQbO,5@SOOQ(CY1G/{1G/{O$EsQSO7+&bOOQ(CY7+&b7+&bO$ExQ$IUO,5:bO%QQUO7+&tO$FSQ$IUO,5:YO$FaQ$IUO,5:fO$FkQ$IUO,5:hOOQ(CY7+&z7+&zOOQO1G1l1G1lOOQO1G1m1G1mO$FuQ#tO,5<TO!'RQUO,5<SOOQO-E<a-E<aOOQ(CY7+'S7+'SOOOO7+'_7+'_OOOO1G1v1G1vO$GQQSO1G1vOOQ(CY1G1x1G1xO$GVQ`O,59hOOOO-E<U-E<UOOQ(CY1G/Q1G/QO$G^Q(CjO7+'eOOQ(CY,5?R,5?RO$HQQSO,5?ROOQ(CY1G2^1G2^P$HVQSO'#IgPOQ(CY-E<e-E<eO$HyQ,UO1G2jO$IlQ,UO1G2lO$IvQ`O1G2nOOQ(CY1G2V1G2VO$I}QSO'#IfO$J]QSO,5@eO$J]QSO,5@eO$JeQSO,5@eO$JpQSO,5@eOOQO1G2X1G2XO$KOQ,UO1G2WO!$uQ,UO1G2WO$K`QMhO'#IhO$KpQSO,5@fO!#]Q,UO,5@fO$KxQ`O,5@fOOQ(CY1G2[1G2[OOQ(CW,5<u,5<uOOQ(CW,5<v,5<vO$LSQSO,5<vOBoQSO,5<vO!;xQWO,5<uOOQO'#G^'#G^O$LXQSO,5<wOOQ(CW,5<y,5<yO$LSQSO,5<|OOQO,5?T,5?TOOQO-E<g-E<gOOQ(CY1G2`1G2`O!0zQWO,5<uO$LaQSO,5<vO#LYQSO,5<wO!0zQWO,5<vO$LlQ,UO1G5bO$LvQ,UO1G5bOOQO,5?U,5?UOOQO-E<h-E<hOOQO1G.w1G.wO!=OQWO,59pO%QQUO,59pO$MTQSO1G2RO!$uQ,UO1G2YO$MYQ(CjO7+'fOOQ(CY7+'f7+'fO! YQUO7+'fOOQ(CY7+%`7+%`O$M|Q`O'#J{O!MeQSO7+([O$NWQbO7+([O$:eQSO7+([O$N_Q(ChO'#CfO$NrQ(ChO,5<zO% dQSO,5<zOOQ(CW1G5_1G5_OOQQ7+$^7+$^O=}QSO7+$^O!;xQWO7+$^O! YQUO7+&XO% iQSO'#IqO% }QSO,5@mOOQO1G3^1G3^O9[QSO,5@mO% }QSO,5@mO%!VQSO,5@mOOQO,5?^,5?^OOQO-E<p-E<pOOQ(CY7+&|7+&|O%![QSO7+(wO8{Q(C[O7+(wO9[QSO7+(wO?oQSO7+(wO%!aQSO,5;WOOQ(CW,5?W,5?WOOQ(CW-E<j-E<jOOQQ7+(f7+(fO%!fQ(ChO7+(cO!#]Q,UO7+(cO%!pQ`O7+(dOOQQ7+(d7+(dO!#]Q,UO7+(dO%!wQSO'#KOO%#SQSO,5=bOOQO,5?Y,5?YOOQO-E<l-E<lOOQQ7+(i7+(iO%$`QWO'#HPOOQQ1G3U1G3UO!#]Q,UO1G3UO%QQUO1G3UO%$gQSO1G3UO%$rQ,UO1G3UO8{Q(C[O1G3XO#L_QSO1G3XO8qQSO1G3XO!;xQWO1G3XO!<QQ,UO1G3XO%%QQSO'#IpO%%]QSO,5@kO%%eQWO,5@kOOQ(CW1G3Y1G3YOOQQ7+$S7+$SO?oQSO7+$SO8{Q(C[O7+$SO%%pQSO7+$SO%QQUO1G6YO%QQUO1G6ZO%%uQUO1G3aO%%|QSO1G3aO%&RQUO1G3aO%&YQ(C[O1G6YOOQQ7+(y7+(yO8{Q(C[O7+)TO`QUO7+)VOOQQ'#KU'#KUOOQQ'#Is'#IsO%&dQUO,5>UOOQQ,5>U,5>UO%QQUO'#HkO%&qQSO'#HmOOQQ,5>[,5>[O:sQSO,5>[OOQQ,5>^,5>^OOQQ7+)`7+)`OOQQ7+)f7+)fOOQQ7+)j7+)jOOQQ7+)l7+)lO%&vQWO1G5lO%'[Q$IUO1G0rO%'fQSO1G0rOOQO1G/m1G/mO%'qQ$IUO1G/mO=}QSO1G/mO!'RQUO'#DgOOQO,5>u,5>uOOQO-E<X-E<XOOQO,5>{,5>{OOQO-E<_-E<_O!;xQWO1G/mOOQO-E<[-E<[OOQ(CY1G0X1G0XOOQ(CY7+%q7+%qO!MeQSO7+%qOOQ(CY7+&W7+&WO=}QSO7+&WO!;xQWO7+&WOOQO7+%t7+%tO$7kQ(CjO7+&POOQO7+&P7+&PO%QQUO7+&PO%'{Q(C[O7+&PO=}QSO7+%tO!;xQWO7+%tO%(WQ(C[O7+&POBtQWO7+%tO%(fQ(C[O7+&PO%(zQ(C`O7+&PO%)UQWO7+%tOBtQWO7+&PO%)cQWO7+&PO%)yQSO7++_O%)yQSO7++_O%*RQ(CjO7++`O%QQUO7++`OOQO1G4h1G4hO:sQSO1G4hO%*cQSO1G4hOOQO7+%y7+%yO!MeQSO<<KvO$NWQbO<<KvO%*qQSO<<KvOOQQ<<Kv<<KvO!#]Q,UO<<KvO%QQUO<<KvO%*yQSO<<KvO%+UQ(CjO1G2jO%-aQ(CjO1G2lO%/lQ(CjO1G2WO%1}Q,UO,5>vOOQO-E<Y-E<YO%2XQbO,5>wO%QQUO,5>wOOQO-E<Z-E<ZO%2cQSO1G5nOOQ(CY<<I|<<I|O%2kQ$IUO1G0mO%4uQ$IUO1G0wO%4|Q$IUO1G0wO%7QQ$IUO1G0wO%7XQ$IUO1G0wO%8|Q$IUO1G0wO%9dQ$IUO1G0wO%;wQ$IUO1G0wO%<OQ$IUO1G0wO%>SQ$IUO1G0wO%>ZQ$IUO1G0wO%@RQ$IUO1G0wO%@fQ(CjO<<J`O%AkQ$IUO1G0wO%CaQ$IUO'#J]O%EdQ$IUO1G1]O%EqQ$IUO1G0QO!'RQUO'#FkOOQO'#Jw'#JwOOQO1G1o1G1oO%E{QSO1G1nO%FQQ$IUO,5?POOOO7+'b7+'bOOOO1G/S1G/SOOQ(CY1G4m1G4mO!$uQ,UO7+(YO%F[QSO,5?QO9[QSO,5?QOOQO-E<d-E<dO%FjQSO1G6PO%FjQSO1G6PO%FrQSO1G6PO%F}Q,UO7+'rO%G_Q`O,5?SO%GiQSO,5?SO!#]Q,UO,5?SOOQO-E<f-E<fO%GnQ`O1G6QO%GxQSO1G6QOOQ(CW1G2b1G2bO$LSQSO1G2bOOQ(CW1G2a1G2aO%HQQSO1G2cO!#]Q,UO1G2cOOQ(CW1G2h1G2hO!;xQWO1G2aOBoQSO1G2bO%HVQSO1G2cO%H_QSO1G2bO!$uQ,UO7+*|OOQ(CY1G/[1G/[O%HjQSO1G/[OOQ(CY7+'m7+'mO%HoQ,UO7+'tO%IPQ(CjO<<KQOOQ(CY<<KQ<<KQO!#]Q,UO'#IkO%IsQSO,5@gO!#]Q,UO1G2fOOQQ<<Gx<<GxO=}QSO<<GxO%I{Q(CjO<<IsOOQ(CY<<Is<<IsOOQO,5?],5?]O%JoQSO,5?]O$&vQSO,5?]OOQO-E<o-E<oO%JtQSO1G6XO%JtQSO1G6XO9[QSO1G6XO?oQSO<<LcOOQQ<<Lc<<LcO%J|QSO<<LcO8{Q(C[O<<LcO%KRQSO1G0rOOQQ<<K}<<K}O%!fQ(ChO<<K}OOQQ<<LO<<LOO%!pQ`O<<LOO%KWQWO'#ImO%KcQSO,5@jO!'RQUO,5@jOOQQ1G2|1G2|O%KkQ(C`O'#JfO%LVQUO'#JfO%L^QWO'#E_O%LwQ(C[O'#E_OBYQ(C`O'#E_O(VQWO'#HQOOQO'#Io'#IoO8{Q(C[O'#IoO%M]QWO,5=kOOQQ,5=k,5=kO%MuQWO'#E_O%LmQWO'#E_O%M|QWO'#E_O%NgQWO'#E_O& WQWO'#HQO& iQSO7+(pO& nQSO7+(pOOQQ7+(p7+(pO!#]Q,UO7+(pO%QQUO7+(pO& vQSO7+(pOOQQ7+(s7+(sO8{Q(C[O7+(sO#L_QSO7+(sO8qQSO7+(sO!;xQWO7+(sO&!RQSO,5?[OOQO-E<n-E<nOOQO'#HT'#HTO&!^QSO1G6VO8{Q(C[O<<GnOOQQ<<Gn<<GnO?oQSO<<GnO&!fQSO7++tO&!kQSO7++uOOQQ7+({7+({O&!pQSO7+({O&!uQUO7+({O&!|QSO7+({O%QQUO7++tO%QQUO7++uOOQQ<<Lo<<LoOOQQ<<Lq<<LqOOQQ-E<q-E<qOOQQ1G3p1G3pO&#RQSO,5>VOOQQ,5>X,5>XO&#WQSO1G3vO:sQSO7+&^O!'RQUO7+&^OOQO7+%X7+%XO&#]Q$IUO1G5wO=}QSO7+%XOOQ(CY<<I]<<I]OOQ(CY<<Ir<<IrO=}QSO<<IrOOQO<<Ik<<IkO$7kQ(CjO<<IkO%QQUO<<IkOOQO<<I`<<I`O=}QSO<<I`O&#gQ(C[O<<IkO!;xQWO<<I`O&#rQ(C[O<<IkOBtQWO<<I`O&$QQ(C[O<<IkO&$fQ(C`O<<IkO&$pQWO<<I`OBtQWO<<IkO&$}QSO<<NyO&%VQ(CjO<<NzOOQO7+*S7+*SO:sQSO7+*SOOQQANAbANAbO&%gQSOANAbO!#]Q,UOANAbO!MeQSOANAbO$NWQbOANAbO%QQUOANAbO&%oQ(CjO7+'rO&(QQ(CjO7+'tO&*cQbO1G4cO&*mQ$IUO7+&XO&*zQ$IUO,59nO&,}Q$IUO,5<cO&/QQ$IUO,5<eO&1TQ$IUO,5<sO&2yQ$IUO7+'eO&3WQ$IUO7+'fO&3eQSO,5<VOOQO7+'Y7+'YO&3jQ,UO<<KtOOQO1G4l1G4lO&3qQSO1G4lO&3|QSO1G4lO&4[QSO7++kO&4[QSO7++kO!#]Q,UO1G4nO&4dQ`O1G4nO&4nQSO7++lOOQ(CW7+'|7+'|O$LSQSO7+'}O&4vQ`O7+'}OOQ(CW7+'{7+'{O$LSQSO7+'|O&4}QSO7+'}O!#]Q,UO7+'}OBoQSO7+'|O&5SQ,UO<<NhOOQ(CY7+$v7+$vO&5^Q`O,5?VOOQO-E<i-E<iO&5hQ(ChO7+(QOOQQAN=dAN=dO9[QSO1G4wOOQO1G4w1G4wO&5xQSO1G4wO&5}QSO7++sO&5}QSO7++sO8{Q(C[OANA}O?oQSOANA}OOQQANA}ANA}OOQQANAiANAiOOQQANAjANAjO&6VQSO,5?XOOQO-E<k-E<kO&6bQ$IUO1G6UO#L_QSO,5=lO8qQSO,5=lO&8rQbO'#CfO&8|QWO,5:yO&9WQWO,5:yO&9eQWO,5:yO!;xQWO,5=lOOQO,5?Z,5?ZOOQO-E<m-E<mOOQQ1G3V1G3VO%LVQUO,5<wO%KkQ(C`O,5=lO!NrQ(C`O,5:yO(VQWO,5=lO&9xQWO,5=lO&:ZQWO,5:yOOQQ<<L[<<L[O!#]Q,UO<<L[O& iQSO<<L[O&:tQSO<<L[O%QQUO<<L[OOQQ<<L_<<L_O8{Q(C[O<<L_O#L_QSO<<L_O8qQSO<<L_O&:|QWO1G4vO&;XQSO7++qOOQQAN=YAN=YO8{Q(C[OAN=YOOQQ<= `<= `OOQQ<= a<= aOOQQ<<Lg<<LgO&;aQSO<<LgO&;fQUO<<LgO&;mQSO<= `O&;rQSO<= aOOQQ1G3q1G3qO=}QSO7+)bO&;wQSO<<IxO&<SQ$IUO<<IxOOQO<<Hs<<HsOOQ(CYAN?^AN?^OOQOAN?VAN?VO$7kQ(CjOAN?VOOQOAN>zAN>zO%QQUOAN?VO=}QSOAN>zO&<^Q(C[OAN?VO!;xQWOAN>zO&<iQ(C[OAN?VOBtQWOAN>zO&<wQ(C[OAN?VOOQO<<Mn<<MnOOQQG26|G26|O!#]Q,UOG26|O!MeQSOG26|O&=]QSOG26|O$NWQbOG26|O&=eQ$IUO<<J`O&=rQ$IUO1G2WO&?hQ$IUO1G2jO&AkQ$IUO1G2lO&CnQ$IUO<<KQO&C{Q$IUO<<IsOOQO1G1q1G1qO!$uQ,UOANA`OOQO7+*W7+*WO&DYQSO7+*WO&DeQSO<= VO&DmQ`O7+*YOOQ(CW<<Ki<<KiO$LSQSO<<KiOOQ(CW<<Kh<<KhO&DwQ`O<<KiO$LSQSO<<KhOOQO7+*c7+*cO9[QSO7+*cO&EOQSO<= _OOQQG27iG27iO8{Q(C[OG27iO!'RQUO1G4sO&EWQSO7++pO8{Q(C[O1G3WO#L_QSO1G3WO&E`QWO1G0eO&EjQWO1G0eO8qQSO1G3WO!;xQWO1G3WO(VQWO1G3WO%KkQ(C`O1G3WO$5]Q(C`O1G0eO&EwQWO1G3WO& iQSOANAvOOQQANAvANAvO!#]Q,UOANAvO&FYQSOANAvOOQQANAyANAyO8{Q(C[OANAyO#L_QSOANAyOOQO'#HU'#HUOOQO7+*b7+*bOOQQG22tG22tOOQQANBRANBRO&FbQSOANBROOQQANDzANDzOOQQAND{AND{OOQQ<<L|<<L|O!'RQUOAN?dOOQOG24qG24qO$7kQ(CjOG24qOOQOG24fG24fO%QQUOG24qO=}QSOG24fO&FgQ(C[OG24qO!;xQWOG24fO&FrQ(C[OG24qO!MeQSOLD,hOOQQLD,hLD,hO!#]Q,UOLD,hO&GQQSOLD,hO&GYQ$IUO7+'rO&IOQ$IUO7+'tO&JtQ,UOG26zOOQO<<Mr<<MrOOQ(CWANATANATO$LSQSOANATOOQ(CWANASANASOOQO<<M}<<M}OOQQLD-TLD-TO&KUQ$IUO7+*_OOQO7+(r7+(rO8{Q(C[O7+(rO&K`QWO7+&PO#L_QSO7+(rO8qQSO7+(rO!;xQWO7+(rO(VQWO7+(rOOQQG27bG27bO& iQSOG27bO!#]Q,UOG27bOOQQG27eG27eO8{Q(C[OG27eOOQQG27mG27mO&KjQ$IUOG25OOOQOLD*]LD*]O$7kQ(CjOLD*]OOQOLD*QLD*QO%QQUOLD*]O=}QSOLD*QO&KtQ(C[OLD*]OOQQ!$(!S!$(!SO!MeQSO!$(!SO!#]Q,UO!$(!SO&LPQ(CjOG26zOOQ(CWG26oG26oOOQO<<L^<<L^O8{Q(C[O<<L^O#L_QSO<<L^O8qQSO<<L^O!;xQWO<<L^OOQQLD,|LD,|O& iQSOLD,|OOQQLD-PLD-POOQO!$'Mw!$'MwO$7kQ(CjO!$'MwOOQO!$'Ml!$'MlO%QQUO!$'MwOOQQ!)9En!)9EnO!MeQSO!)9EnOOQOANAxANAxO8{Q(C[OANAxO#L_QSOANAxO8qQSOANAxOOQQ!$(!h!$(!hOOQO!)9Cc!)9CcO$7kQ(CjO!)9CcOOQQ!.K;Y!.K;YO&NbQ$IUOG26zOOQOG27dG27dO8{Q(C[OG27dO#L_QSOG27dOOQO!.K8}!.K8}OOQOLD-OLD-OO8{Q(C[OLD-OOOQO!$(!j!$(!jO!'RQUO'#DvO0rQSO'#ETO'!WQbO'#JbO!'RQUO'#DnO'!_QUO'#DzO!'RQUO'#D|O'!fQbO'#CfO'$|QbO'#CfO'%^QUO,5;RO!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO,5;]O!'RQUO'#IeO''aQSO,5<bO''iQ,UO,5;]O'(|Q,UO,5;]O!'RQUO,5;qO0uQSO'#DSO0uQSO'#DSO!#]Q,UO'#FwO''iQ,UO'#FwO!#]Q,UO'#FyO''iQ,UO'#FyO!#]Q,UO'#GXO''iQ,UO'#GXO!'RQUO,5:fO!'RQUO,5@]O'%^QUO1G0mO')TQ$IUO'#CfO!'RQUO1G1yO!#]Q,UO,5=OO''iQ,UO,5=OO!#]Q,UO,5=QO''iQ,UO,5=QO!#]Q,UO,5<lO''iQ,UO,5<lO'%^QUO1G1zO!'RQUO7+&tO!#]Q,UO1G2WO''iQ,UO1G2WO!#]Q,UO1G2YO''iQ,UO1G2YO'%^QUO7+'fO'%^QUO7+&XO!#]Q,UOANA`O''iQ,UOANA`O')_QSO'#EgO')dQSO'#EgO')lQSO'#FVO')qQSO'#EqO')vQSO'#JqO'*RQSO'#JoO'*^QSO,5;RO'*cQ,UO,5<_O'*jQSO'#GQO'*oQSO'#GQO'*tQSO,5<`O'*|QSO,5;RO'+UQ$IUO1G1YO'+]QSO,5<lO'+bQSO,5<lO'+gQSO,5<nO'+lQSO,5<nO'+qQSO1G1zO'+vQSO1G0mO'+{Q,UO<<KtO',SQ,UO<<KtO7ZQ,UO'#FuO8qQSO'#FtO@jQSO'#EfO!'RQUO,5;nO!/{QSO'#GQO!/{QSO'#GQO!/{QSO'#GSO!/{QSO'#GSO!$uQ,UO7+(YO!$uQ,UO7+(YO$IvQ`O1G2nO$IvQ`O1G2nO!#]Q,UO,5=SO!#]Q,UO,5=S",
|
|
3593
4293
|
stateData: "'-[~O'lOS'mOSROS'nRQ~OPYOQYOV!TO^pOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O#o}O$PzO$TfO%_{O%a!OO%c|O%d|O%g!PO%i!QO%l!RO%m!RO%o!SO%|!UO&S!VO&U!WO&W!XO&Y!YO&]!ZO&c![O&i!]O&k!^O&m!_O&o!`O&q!aO'sSO'uTO'xUO(QVO(_[O(liO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$P!hO$TfO's!bO'uTO'xUO(QVO(_[O(liO~O^!qOl!kO|!lO![!rO!]!pO!^!pO!x;oO!|!vO!}!tO#O!uO#P!sO#S!wO#T!wO't!iO'uTO'xUO(T!jO(_!nO~O'n!xO~OPYXXYX^YXkYXyYXzYX|YX!VYX!eYX!fYX!hYX!lYX#WYX#ccX#fYX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#pYX#rYX#tYX#uYX#zYX'jYX(QYX(`YX(gYX(hYX~O!a$yX~P(dO[!zO'u!|O'v!zO'w!|O~O[!}O'w!|O'x!|O'y!}O~Oq#PO!O#QO(R#QO(S#SO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$P!hO$TfO's;tO'uTO'xUO(QVO(_[O(liO~O!U#WO!V#TO!S(WP!S(dP~P+pO!W#`O~P`OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$P!hO$TfO'uTO'xUO(QVO(_[O(liO~O!U#fO!x]O#a#iO#b#fO's;uO!g(aP~P.[O!h#kO's#jO~O!t#oO!x]O%_#pO~O#c#qO~O!a#rO#c#qO~OP$YOX$aOk#}Oy#vOz#wO|#xO!V$^O!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO#r$SO#t$UO#u$VO(QVO(`$WO(g#yO(h#zO~O^(UX'j(UX'h(UX!g(UX!S(UX!X(UX%`(UX!a(UX~P1dO#W$bO#z$bOP(VXX(VXk(VXy(VXz(VX|(VX!V(VX!e(VX!h(VX!l(VX#f(VX#g(VX#h(VX#i(VX#j(VX#k(VX#l(VX#m(VX#n(VX#p(VX#r(VX#t(VX#u(VX(Q(VX(`(VX(g(VX(h(VX!X(VX%`(VX~O^(VX!f(VX'j(VX'h(VX!S(VX!g(VXo(VX!a(VX~P3zO#W$bO~O$V$dO$X$cO$`$iO~O!X$jO$TfO$c$kO$e$mO~Oi%POk$qOl$pOm$pOs%QOu%ROw%SO|$xO!X$yO!c%XO!h$uO#b%YO$P%VO$l%TO$n%UO$q%WO's$oO'uTO'xUO'|%OO(Q$rOd'}P~O!h%ZO~O!a%]O~O^%^O'j%^O~O't!iO~P%QO's%eO~O!h%ZO's%eO't!iO'|%OO~Ob%lO!h%ZO's%eO~O#n$PO~Oy%qO!X%nO!h%pO%a%tO's%eO't!iO'uTO'xUO](tP~O!t#oO~O|%vO!X%wO's%eO~O|%vO!X%wO%i%{O's%eO~O's%|O~O#o}O%a!OO%c|O%d|O%g!PO%i!QO%l!RO%m!RO~Oa&VOb&UO!t&SO%_&TO%q&RO~P;cOa&YObwO!X&XO!tvO!x]O#o}O%_{O%c|O%d|O%g!PO%i!QO%l!RO%m!RO%o!SO~O_&]O#W&`O%a&ZO't!iO~P<bO!h&aO!q&eO~O!h#kO~O!XXO~O^%^O'i&mO'j%^O~O^%^O'i&pO'j%^O~O^%^O'i&rO'j%^O~O'hYX!SYXoYX!gYX&QYX!XYX%`YX!aYX~P(dO!['PO!]&xO!^&xO't!iO'uTO'xUO~Ol&vO|&uO!U&yO(T&tO!W(XP!W(fP~P?cOg'SO!X'QO's%eO~Ob'XO!h%ZO's%eO~Oy%qO!h%pO~Ol!kO|!lO!['^O!]']O!^']O!}'`O#O'`O#P'_O#S'bO#T'bO't!iO'uTO'xUO(T!jO(_!nO~O!x;oO!|'aO~P@}O^%^O!a#rO!h%ZO!l'hO#W'fO'j%^O'|%OO(`'dO~Ol!kO|!lO'uTO'xUO(T!jO(_!nO~O!]']O!^']O't!iO~PBtO!['^O!]']O!^']O#S'bO#T'bO't!iO~PBtO!XXO!['^O!]']O!^']O#P'_O#S'bO#T'bO't!iO~PBtO'o'lO'p'lO'q'nO~O[!zO'u'pO'v!zO'w'pO~O[!}O'w'pO'x'pO'y!}O~Oq#PO!O#QO(R#QO(S'tO~O!U'vO!S&|X!S'SX!V&|X!V'SX~P+pO!V'xO!S(WX~OP$YOX$aOk#}Oy#vOz#wO|#xO!V'xO!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO#r$SO#t$UO#u$VO(QVO(`$WO(g#yO(h#zO~O!S(WX~PF_O!S'}O~O!S(cX!V(cX!a(cX!g(cX(`(cX~O#W(cX#c#[X!W(cX~PHeO#W(OO!S(eX!V(eX~O!V(PO!S(dX~O!S(SO~O#W$bO~PHeO!W(TO~P`Oy#vOz#wO|#xO!f#tO!h#uO(QVOP!jaX!jak!ja!V!ja!e!ja!l!ja#f!ja#g!ja#h!ja#i!ja#j!ja#k!ja#l!ja#m!ja#n!ja#p!ja#r!ja#t!ja#u!ja(`!ja(g!ja(h!ja~O^!ja'j!ja'h!ja!S!ja!g!jao!ja!X!ja%`!ja!a!ja~PI{O!g(UO~O|%vO!X%wO!x]O#a(XO#b(WO's%eO~O!a#rO#W(YO(`'dO!V(bX^(bX'j(bX~O!g(bX~PMPO!V(]O!g(aX~O!g(_O~O|%vO!X%wO#b(WO's%eO~Oy(`Oz(aO!f#tO!h#uO!x!wa|!wa~O!t!wa%_!wa!X!wa#a!wa#b!wa's!wa~PNXO!t(eO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$P!hO$TfO's!bO'uTO'xUO(QVO(_[O(liO~Oi%POk$qOl$pOm$pOs%QOu%ROw<XO|$xO!X$yO!c=cO!h$uO#b<_O$P%VO$l<ZO$n<]O$q%WO's(iO'uTO'xUO'|%OO(Q$rO~O#c(kO~Oi%POk$qOl$pOm$pOs%QOu%ROw%SO|$xO!X$yO!c%XO!h$uO#b%YO$P%VO$l%TO$n%UO$q%WO's(iO'uTO'xUO'|%OO(Q$rO~Od(ZP~P!$uO!U(oO!g([P~P%QO(T(qO(_[O~O|(sO!h#uO(T(qO(_[O~OP;nOQ;nOa=_Ob!fOikOk;nOlkOmkOskOu;nOw;nO|WO!QkO!RkO!X!cO!c;qO!hZO!k;nO!l;nO!m;nO!o;rO!q;sO!t!eO$P!hO$TfO's)RO'uTO'xUO(QVO(_[O(l=]O~Oz)UO!h#uO~O!V$^O^$ja'j$ja'h$ja!g$ja!S$ja!X$ja%`$ja!a$ja~O#o)YO~P!#]Oy)]O!a)[O!X$WX$S$WX$V$WX$X$WX$`$WX~O!a)[O!X(iX$S(iX$V(iX$X(iX$`(iX~Oy)]O~P!*kOy)]O!X(iX$S(iX$V(iX$X(iX$`(iX~O!X)_O$S)cO$V)^O$X)^O$`)dO~O!U)gO~P!'RO$V$dO$X$cO$`)kO~Og$rXy$rX|$rX!f$rX(g$rX(h$rX~OdfXd$rXgfX!VfX#WfX~P!,aOl)mO~Oq)nO(R)oO(S)qO~Og)zOy)sO|)tO(g)vO(h)xO~Od)rO~P!-jOd){O~Oi%POk$qOl$pOm$pOs%QOu%ROw<XO|$xO!X$yO!c=cO!h$uO#b<_O$P%VO$l<ZO$n<]O$q%WO'uTO'xUO'|%OO(Q$rO~O!U*PO's)|O!g(mP~P!.XO#c*RO~O!h*SO~O!U*XO's*UO!S(nP~P!.XOk*eO|*]O![*cO!]*[O!^*[O!h*SO#S*dO%V*_O't!iO(T!jO~O!W*bO~P!0_O!f#tOg(PXy(PX|(PX(g(PX(h(PX!V(PX#W(PX~Od(PX#x(PX~P!1WOg*hO#W*gOd(OX!V(OX~O!V*iOd'}X~O's%|Od'}P~O!h*pO~O's(iO~O|%vO!U#fO!X%wO!x]O#a#iO#b#fO's%eO!g(aP~O!a#rO#c*tO~OP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO#r$SO#t$UO#u$VO(QVO(`$WO(g#yO(h#zO~O^!ba!V!ba'j!ba'h!ba!S!ba!g!bao!ba!X!ba%`!ba!a!ba~P!3jOy#vOz#wO|#xO!f#tO!h#uO(QVOP!naX!nak!na!V!na!e!na!l!na#f!na#g!na#h!na#i!na#j!na#k!na#l!na#m!na#n!na#p!na#r!na#t!na#u!na(`!na(g!na(h!na~O^!na'j!na'h!na!S!na!g!nao!na!X!na%`!na!a!na~P!6TOy#vOz#wO|#xO!f#tO!h#uO(QVOP!paX!pak!pa!V!pa!e!pa!l!pa#f!pa#g!pa#h!pa#i!pa#j!pa#k!pa#l!pa#m!pa#n!pa#p!pa#r!pa#t!pa#u!pa(`!pa(g!pa(h!pa~O^!pa'j!pa'h!pa!S!pa!g!pao!pa!X!pa%`!pa!a!pa~P!8nOg*|O!X'QO%`*{O'|%OO~O!a+OO!X'{X^'{X!V'{X'j'{X~O!h%ZO'|%OO~O!h%ZO's%eO'|%OO~O!a#rO#c(kO~O%a+[O's+WO'uTO'xUO!W(uP~O!V+]O](tX~O(T(qO~OX+aO~O]+bO~O!X%nO's%eO't!iO](tP~O|%vO!U+fO!V(PO!X%wO's%eO!S(dP~Ol&|O|+hO!U+gO'uTO'xUO(T(qO~O!W(fP~P!>RO!V+iO^(qX'j(qX~O#W+mO'|%OO~Og+pO!X$yO'|%OO~O!X+rO~Oy+tO!XXO~O!t+yO~Ob,OO~O's#jO!W(sP~Ob%lO~O%a!OO's%|O~P<bOX,UO],TO~OPYOQYOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O$TfO%_{O'uTO'xUO(QVO(_[O(liO~O!X!cO$P!hO's!bO~P!@fO],TO^%^O'j%^O~O^,YO#o,[O%c,[O%d,[O~P%QO!h&aO~O&S,aO~O!X,cO~O&e,eO&g,fOP&baQ&baV&ba^&baa&bab&bai&bak&bal&bam&bas&bau&baw&ba|&ba!Q&ba!R&ba!X&ba!c&ba!h&ba!k&ba!l&ba!m&ba!o&ba!q&ba!t&ba!x&ba#o&ba$P&ba$T&ba%_&ba%a&ba%c&ba%d&ba%g&ba%i&ba%l&ba%m&ba%o&ba%|&ba&S&ba&U&ba&W&ba&Y&ba&]&ba&c&ba&i&ba&k&ba&m&ba&o&ba&q&ba'h&ba's&ba'u&ba'x&ba(Q&ba(_&ba(l&ba!W&ba&Z&ba_&ba&`&ba~O's,kO~O!V{X!V!_X!W{X!W!_X!a{X!a!_X!h!_X#W{X'|!_X~O!a,pO#W,oO!V#`X!V(YX!W#`X!W(YX!a(YX!h(YX'|(YX~O!a,rO!h%ZO'|%OO!V!ZX!W!ZX~Ol!kO|!lO'uTO'xUO(T!jO~OP;nOQ;nOa=_Ob!fOikOk;nOlkOmkOskOu;nOw;nO|WO!QkO!RkO!X!cO!c;qO!hZO!k;nO!l;nO!m;nO!o;rO!q;sO!t!eO$P!hO$TfO'uTO'xUO(QVO(_[O(l=]O~O's<dO~P!I{O!V,vO!W(XX~O!W,xO~O!a,pO#W,oO!V#`X!W#`X~O!V,yO!W(fX~O!W,{O~O!],|O!^,|O't!iO~P!IjO!W-PO~P'TOg-SO!X'QO~O!S-XO~Ol!wa![!wa!]!wa!^!wa!|!wa!}!wa#O!wa#P!wa#S!wa#T!wa't!wa'u!wa'x!wa(T!wa(_!wa~PNXO^%^O!a#rO!h%ZO!l-^O#W-[O'j%^O'|%OO(`'dO~O!]-`O!^-`O't!iO~PBtO![-bO!]-`O!^-`O#S-cO#T-cO't!iO~PBtO![-bO!]-`O!^-`O#P-dO#S-cO#T-cO't!iO~PBtO![-bO!]-`O!^-`O!}-eO#O-eO#P-dO#S-cO#T-cO't!iO~PBtO^%^O#W-[O'j%^O~O^%^O!a#rO#W-[O'j%^O~O^%^O!a#rO!l-^O#W-[O'j%^O(`'dO~O'o'lO'p'lO'q-jO~Oo-kO~O!S&|a!V&|a~P!3jO!U-oO!S&|X!V&|X~P%QO!V'xO!S(Wa~O!S(Wa~PF_O!V(PO!S(da~O|%vO!U-sO!X%wO's%eO!S'SX!V'SX~O!V(]O!g(aa~O|%vO!X%wO#b-vO's%eO~O#W-xO!V(ba!g(ba^(ba'j(ba~O!a#rO~P#&hO|%vO!U-{O!X%wO!x]O#a-}O#b-{O's%eO!V'UX!g'UX~Oz.RO!h#uO~Og.UO!X'QO%`.TO'|%OO~O^#Zi!V#Zi'j#Zi'h#Zi!S#Zi!g#Zio#Zi!X#Zi%`#Zi!a#Zi~P!3jOg=iOy)sO|)tO(g)vO(h)xO~O#c#Va^#Va#W#Va'j#Va!V#Va!g#Va!X#Va!S#Va~P#(yO#c(PXP(PXX(PX^(PXk(PXz(PX!e(PX!h(PX!l(PX#f(PX#g(PX#h(PX#i(PX#j(PX#k(PX#l(PX#m(PX#n(PX#p(PX#r(PX#t(PX#u(PX'j(PX(Q(PX(`(PX!g(PX!S(PX'h(PXo(PX!X(PX%`(PX!a(PX~P!1WO!V._Od(ZX~P!-jOd.aO~O!V.bO!g([X~P!3jO!g.eO~O!S.gO~OP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO(QVOX#ei^#eik#ei!V#ei!e#ei#g#ei#h#ei#i#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei'j#ei(`#ei(g#ei(h#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~O#f#ei~P#,uO#f#{O~P#,uOP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O(QVOX#ei^#ei!V#ei!e#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei'j#ei(`#ei(g#ei(h#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~Ok#ei~P#/gOk#}O~P#/gOP$YOk#}Oy#vOz#wO|#xO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO(QVO^#ei!V#ei#p#ei#r#ei#t#ei#u#ei'j#ei(`#ei(g#ei(h#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~OX#ei!e#ei#k#ei#l#ei#m#ei#n#ei~P#2XOX$aO!e$PO#k$PO#l$PO#m$`O#n$PO~P#2XOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO(QVO^#ei!V#ei#r#ei#t#ei#u#ei'j#ei(`#ei(h#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~O(g#ei~P#5YO(g#yO~P#5YOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO#r$SO(QVO(g#yO^#ei!V#ei#t#ei#u#ei'j#ei(`#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~O(h#ei~P#7zO(h#zO~P#7zOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#f#{O#g#|O#h#|O#i#|O#j$OO#k$PO#l$PO#m$`O#n$PO#p$QO#r$SO#t$UO(QVO(g#yO(h#zO~O^#ei!V#ei#u#ei'j#ei(`#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~P#:lOPYXXYXkYXyYXzYX|YX!eYX!fYX!hYX!lYX#WYX#ccX#fYX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#pYX#rYX#tYX#uYX#zYX(QYX(`YX(gYX(hYX!VYX!WYX~O#xYX~P#=VOP$YOX<VOk;yOy#vOz#wO|#xO!e;{O!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO#j;zO#k;{O#l;{O#m<UO#n;{O#p;|O#r<OO#t<QO#u<RO(QVO(`$WO(g#yO(h#zO~O#x.iO~P#?dOP(VXX(VXk(VXy(VXz(VX|(VX!e(VX!f(VX!h(VX!l(VX#f(VX#g(VX#h(VX#i(VX#j(VX#k(VX#l(VX#m(VX#p(VX#r(VX#t(VX#u(VX(Q(VX(`(VX(g(VX(h(VX!V(VX~O#W<WO#z<WO#n(VX#x(VX!W(VX~P#AbO^'Xa!V'Xa'j'Xa'h'Xa!g'Xa!S'Xao'Xa!X'Xa%`'Xa!a'Xa~P!3jOP#eiX#ei^#eik#eiz#ei!V#ei!e#ei!f#ei!h#ei!l#ei#f#ei#g#ei#h#ei#i#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei'j#ei(Q#ei(`#ei'h#ei!S#ei!g#eio#ei!X#ei%`#ei!a#ei~P#(yO^#yi!V#yi'j#yi'h#yi!S#yi!g#yio#yi!X#yi%`#yi!a#yi~P!3jO$V.nO$X.nO~O$V.oO$X.oO~O!a)[O#W.pO!X$]X$S$]X$V$]X$X$]X$`$]X~O!U.qO~O!X)_O$S.sO$V)^O$X)^O$`.tO~O!V<SO!W(UX~P#?dO!W.uO~O!a)[O$`(iX~O$`.wO~Oq)nO(R)oO(S.zO~Ol.}O!S/OO'uTO'xUO~O!VcX!acX!gcX!g$rX(`cX~P!,aO!g/UO~P#(yO!V/VO!a#rO(`'dO!g(mX~O!g/[O~O!U*PO's%eO!g(mP~O#c/^O~O!S$rX!V$rX!a$yX~P!,aO!V/_O!S(nX~P#(yO!a/aO~O!S/cO~Ok/gO!a#rO!h%ZO'|%OO(`'dO~O's/iO~O!a+OO~O^%^O!V/mO'j%^O~O!W/oO~P!0_O!]/pO!^/pO't!iO(T!jO~O|/rO(T!jO~O#S/sO~O's%|Od'^X!V'^X~O!V*iOd'}a~Od/xO~Oy/yOz/yO|/zOgva(gva(hva!Vva#Wva~Odva#xva~P#M{Oy)sO|)tOg$ka(g$ka(h$ka!V$ka#W$ka~Od$ka#x$ka~P#NqOy)sO|)tOg$ma(g$ma(h$ma!V$ma#W$ma~Od$ma#x$ma~P$ dO#c/|O~Od${a!V${a#W${a#x${a~P!-jO#c0PO~Oy#vOz#wO|#xO!f#tO!h#uO(QVOP!niX!nik!ni!V!ni!e!ni!l!ni#f!ni#g!ni#h!ni#i!ni#j!ni#k!ni#l!ni#m!ni#n!ni#p!ni#r!ni#t!ni#u!ni(`!ni(g!ni(h!ni~O^!ni'j!ni'h!ni!S!ni!g!nio!ni!X!ni%`!ni!a!ni~P$!qOg.UO!X'QO%`.TO~Oi0WO's0VO~P!.[O!a+OO!X'{a^'{a!V'{a'j'{a~O#c0^O~OXYX!VcX!WcX~O!V0_O!W(uX~O!W0aO~OX0bO~O's+WO'uTO'xUO~O!X%nO's%eO]'fX!V'fX~O!V+]O](ta~O!g0gO~P!3jOX0jO~O]0kO~O!V+iO^(qa'j(qa~O#W0qO~Og0tO!X$yO~O(T(qO!W(rP~Og0}O!X0zO%`0|O'|%OO~OX1XO!V1VO!W(sX~O!W1YO~O]1[O^%^O'j%^O~O's#jO'uTO'xUO~O#W$bO#n1_O#z$bO&Q1`O^(VX~P#AbO#W$bO#n1_O&Q1`O~O^1aO~P%QO^1cO~O&Z1gOP&XiQ&XiV&Xi^&Xia&Xib&Xii&Xik&Xil&Xim&Xis&Xiu&Xiw&Xi|&Xi!Q&Xi!R&Xi!X&Xi!c&Xi!h&Xi!k&Xi!l&Xi!m&Xi!o&Xi!q&Xi!t&Xi!x&Xi#o&Xi$P&Xi$T&Xi%_&Xi%a&Xi%c&Xi%d&Xi%g&Xi%i&Xi%l&Xi%m&Xi%o&Xi%|&Xi&S&Xi&U&Xi&W&Xi&Y&Xi&]&Xi&c&Xi&i&Xi&k&Xi&m&Xi&o&Xi&q&Xi'h&Xi's&Xi'u&Xi'x&Xi(Q&Xi(_&Xi(l&Xi!W&Xi_&Xi&`&Xi~O_1mO!W1kO&`1lO~P`O!XXO!h1oO~O&g,fOP&biQ&biV&bi^&bia&bib&bii&bik&bil&bim&bis&biu&biw&bi|&bi!Q&bi!R&bi!X&bi!c&bi!h&bi!k&bi!l&bi!m&bi!o&bi!q&bi!t&bi!x&bi#o&bi$P&bi$T&bi%_&bi%a&bi%c&bi%d&bi%g&bi%i&bi%l&bi%m&bi%o&bi%|&bi&S&bi&U&bi&W&bi&Y&bi&]&bi&c&bi&i&bi&k&bi&m&bi&o&bi&q&bi'h&bi's&bi'u&bi'x&bi(Q&bi(_&bi(l&bi!W&bi&Z&bi_&bi&`&bi~O!S1uO~O!V!Za!W!Za~P#?dOl!kO|!lO!U1{O(T!jO!V&}X!W&}X~P?cO!V,vO!W(Xa~O!V'TX!W'TX~P!>RO!V,yO!W(fa~O!W2SO~P'TO^%^O#W2]O'j%^O~O^%^O!a#rO#W2]O'j%^O~O^%^O!a#rO!h%ZO!l2aO#W2]O'j%^O'|%OO(`'dO~O!]2bO!^2bO't!iO~PBtO![2eO!]2bO!^2bO#S2fO#T2fO't!iO~PBtO![2eO!]2bO!^2bO#P2gO#S2fO#T2fO't!iO~PBtO^%^O!a#rO!l2aO#W2]O'j%^O(`'dO~O^%^O'j%^O~P!3jO!V$^Oo$ja~O!S&|i!V&|i~P!3jO!V'xO!S(Wi~O!V(PO!S(di~O!S(ei!V(ei~P!3jO!V(]O!g(ai~O!V(bi!g(bi^(bi'j(bi~P!3jO#W2kO!V(bi!g(bi^(bi'j(bi~O|%vO!X%wO!x]O#a2nO#b2mO's%eO~O|%vO!X%wO#b2mO's%eO~Og2uO!X'QO%`2tO~Og2uO!X'QO%`2tO'|%OO~O#cvaPvaXva^vakva!eva!fva!hva!lva#fva#gva#hva#iva#jva#kva#lva#mva#nva#pva#rva#tva#uva'jva(Qva(`va!gva!Sva'hvaova!Xva%`va!ava~P#M{O#c$kaP$kaX$ka^$kak$kaz$ka!e$ka!f$ka!h$ka!l$ka#f$ka#g$ka#h$ka#i$ka#j$ka#k$ka#l$ka#m$ka#n$ka#p$ka#r$ka#t$ka#u$ka'j$ka(Q$ka(`$ka!g$ka!S$ka'h$kao$ka!X$ka%`$ka!a$ka~P#NqO#c$maP$maX$ma^$mak$maz$ma!e$ma!f$ma!h$ma!l$ma#f$ma#g$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#p$ma#r$ma#t$ma#u$ma'j$ma(Q$ma(`$ma!g$ma!S$ma'h$mao$ma!X$ma%`$ma!a$ma~P$ dO#c${aP${aX${a^${ak${az${a!V${a!e${a!f${a!h${a!l${a#f${a#g${a#h${a#i${a#j${a#k${a#l${a#m${a#n${a#p${a#r${a#t${a#u${a'j${a(Q${a(`${a!g${a!S${a'h${a#W${ao${a!X${a%`${a!a${a~P#(yO^#Zq!V#Zq'j#Zq'h#Zq!S#Zq!g#Zqo#Zq!X#Zq%`#Zq!a#Zq~P!3jOd'OX!V'OX~P!$uO!V._Od(Za~O!U2}O!V'PX!g'PX~P%QO!V.bO!g([a~O!V.bO!g([a~P!3jO!S3QO~O#x!ja!W!ja~PI{O#x!ba!V!ba!W!ba~P#?dO#x!na!W!na~P!6TO#x!pa!W!pa~P!8nO!X3dO$TfO$^3eO~O!W3iO~Oo3jO~P#(yO^$gq!V$gq'j$gq'h$gq!S$gq!g$gqo$gq!X$gq%`$gq!a$gq~P!3jO!S3kO~Ol.}O'uTO'xUO~Oy)sO|)tO(h)xOg%Wi(g%Wi!V%Wi#W%Wi~Od%Wi#x%Wi~P$HbOy)sO|)tOg%Yi(g%Yi(h%Yi!V%Yi#W%Yi~Od%Yi#x%Yi~P$ITO(`$WO~P#(yO!U3nO's%eO!V'YX!g'YX~O!V/VO!g(ma~O!V/VO!a#rO!g(ma~O!V/VO!a#rO(`'dO!g(ma~Od$ti!V$ti#W$ti#x$ti~P!-jO!U3vO's*UO!S'[X!V'[X~P!.XO!V/_O!S(na~O!V/_O!S(na~P#(yO!a#rO~O!a#rO#n4OO~Ok4RO!a#rO(`'dO~Od(Oi!V(Oi~P!-jO#W4UOd(Oi!V(Oi~P!-jO!g4XO~O^$hq!V$hq'j$hq'h$hq!S$hq!g$hqo$hq!X$hq%`$hq!a$hq~P!3jO!V4]O!X(oX~P#(yO!f#tO~P3zO!X$rX%TYX^$rX!V$rX'j$rX~P!,aO%T4_OghXyhX|hX!XhX(ghX(hhX^hX!VhX'jhX~O%T4_O~O%a4fO's+WO'uTO'xUO!V'eX!W'eX~O!V0_O!W(ua~OX4jO~O]4kO~O!S4oO~O^%^O'j%^O~P#(yO!X$yO~P#(yO!V4tO#W4vO!W(rX~O!W4wO~Ol!kO|4yO![5WO!]4}O!^4}O!x;oO!|5VO!}5UO#O5UO#P5TO#S5SO#T!wO't!iO'uTO'xUO(T!jO(_!nO~O!W5RO~P%#XOg5]O!X0zO%`5[O~Og5]O!X0zO%`5[O'|%OO~O's#jO!V'dX!W'dX~O!V1VO!W(sa~O'uTO'xUO(T5fO~O]5jO~O!g5mO~P%QO^5oO~O^5oO~P%QO#n5qO&Q5rO~PMPO_1mO!W5vO&`1lO~P`O!a5xO~O!a5zO!V(Yi!W(Yi!a(Yi!h(Yi'|(Yi~O!V#`i!W#`i~P#?dO#W5{O!V#`i!W#`i~O!V!Zi!W!Zi~P#?dO^%^O#W6UO'j%^O~O^%^O!a#rO#W6UO'j%^O~O^%^O!a#rO!l6ZO#W6UO'j%^O(`'dO~O!h%ZO'|%OO~P%(fO!]6[O!^6[O't!iO~PBtO![6_O!]6[O!^6[O#S6`O#T6`O't!iO~PBtO!V(]O!g(aq~O!V(bq!g(bq^(bq'j(bq~P!3jO|%vO!X%wO#b6dO's%eO~O!X'QO%`6gO~Og6jO!X'QO%`6gO~O#c%WiP%WiX%Wi^%Wik%Wiz%Wi!e%Wi!f%Wi!h%Wi!l%Wi#f%Wi#g%Wi#h%Wi#i%Wi#j%Wi#k%Wi#l%Wi#m%Wi#n%Wi#p%Wi#r%Wi#t%Wi#u%Wi'j%Wi(Q%Wi(`%Wi!g%Wi!S%Wi'h%Wio%Wi!X%Wi%`%Wi!a%Wi~P$HbO#c%YiP%YiX%Yi^%Yik%Yiz%Yi!e%Yi!f%Yi!h%Yi!l%Yi#f%Yi#g%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#p%Yi#r%Yi#t%Yi#u%Yi'j%Yi(Q%Yi(`%Yi!g%Yi!S%Yi'h%Yio%Yi!X%Yi%`%Yi!a%Yi~P$ITO#c$tiP$tiX$ti^$tik$tiz$ti!V$ti!e$ti!f$ti!h$ti!l$ti#f$ti#g$ti#h$ti#i$ti#j$ti#k$ti#l$ti#m$ti#n$ti#p$ti#r$ti#t$ti#u$ti'j$ti(Q$ti(`$ti!g$ti!S$ti'h$ti#W$tio$ti!X$ti%`$ti!a$ti~P#(yOd'Oa!V'Oa~P!-jO!V'Pa!g'Pa~P!3jO!V.bO!g([i~O#x#Zi!V#Zi!W#Zi~P#?dOP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO(QVOX#eik#ei!e#ei#g#ei#h#ei#i#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei#x#ei(`#ei(g#ei(h#ei!V#ei!W#ei~O#f#ei~P%2xO#f;wO~P%2xOP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO(QVOX#ei!e#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei#x#ei(`#ei(g#ei(h#ei!V#ei!W#ei~Ok#ei~P%5TOk;yO~P%5TOP$YOk;yOy#vOz#wO|#xO!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO#j;zO(QVO#p#ei#r#ei#t#ei#u#ei#x#ei(`#ei(g#ei(h#ei!V#ei!W#ei~OX#ei!e#ei#k#ei#l#ei#m#ei#n#ei~P%7`OX<VO!e;{O#k;{O#l;{O#m<UO#n;{O~P%7`OP$YOX<VOk;yOy#vOz#wO|#xO!e;{O!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO#j;zO#k;{O#l;{O#m<UO#n;{O#p;|O(QVO#r#ei#t#ei#u#ei#x#ei(`#ei(h#ei!V#ei!W#ei~O(g#ei~P%9zO(g#yO~P%9zOP$YOX<VOk;yOy#vOz#wO|#xO!e;{O!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO#j;zO#k;{O#l;{O#m<UO#n;{O#p;|O#r<OO(QVO(g#yO#t#ei#u#ei#x#ei(`#ei!V#ei!W#ei~O(h#ei~P%<VO(h#zO~P%<VOP$YOX<VOk;yOy#vOz#wO|#xO!e;{O!f#tO!h#uO!l$YO#f;wO#g;xO#h;xO#i;xO#j;zO#k;{O#l;{O#m<UO#n;{O#p;|O#r<OO#t<QO(QVO(g#yO(h#zO~O#u#ei#x#ei(`#ei!V#ei!W#ei~P%>bO^#vy!V#vy'j#vy'h#vy!S#vy!g#vyo#vy!X#vy%`#vy!a#vy~P!3jOg=jOy)sO|)tO(g)vO(h)xO~OP#eiX#eik#eiz#ei!e#ei!f#ei!h#ei!l#ei#f#ei#g#ei#h#ei#i#ei#j#ei#k#ei#l#ei#m#ei#n#ei#p#ei#r#ei#t#ei#u#ei#x#ei(Q#ei(`#ei!V#ei!W#ei~P%AYO!f#tOP(PXX(PXg(PXk(PXy(PXz(PX|(PX!e(PX!h(PX!l(PX#f(PX#g(PX#h(PX#i(PX#j(PX#k(PX#l(PX#m(PX#n(PX#p(PX#r(PX#t(PX#u(PX#x(PX(Q(PX(`(PX(g(PX(h(PX!V(PX!W(PX~O#x#yi!V#yi!W#yi~P#?dO#x!ni!W!ni~P$!qO!W6vO~O!V'Xa!W'Xa~P#?dO!a#rO(`'dO!V'Ya!g'Ya~O!V/VO!g(mi~O!V/VO!a#rO!g(mi~Od$tq!V$tq#W$tq#x$tq~P!-jO!S'[a!V'[a~P#(yO!a6}O~O!V/_O!S(ni~P#(yO!V/_O!S(ni~O!S7RO~O!a#rO#n7WO~Ok7XO!a#rO(`'dO~O!S7ZO~Od$vq!V$vq#W$vq#x$vq~P!-jO^$hy!V$hy'j$hy'h$hy!S$hy!g$hyo$hy!X$hy%`$hy!a$hy~P!3jO!V4]O!X(oa~O^#Zy!V#Zy'j#Zy'h#Zy!S#Zy!g#Zyo#Zy!X#Zy%`#Zy!a#Zy~P!3jOX7`O~O!V0_O!W(ui~O]7fO~O!a5zO~O(T(qO!V'aX!W'aX~O!V4tO!W(ra~O!h%ZO'|%OO^(YX!a(YX!l(YX#W(YX'j(YX(`(YX~O's7oO~P.[O!x;oO!|7rO!}7qO#O7qO#P7pO#S'bO#T'bO~PBtO^%^O!a#rO!l'hO#W'fO'j%^O(`'dO~O!W7vO~P%#XOl!kO'uTO'xUO(T!jO(_!nO~O|7wO~P%MdO![7{O!]7zO!^7zO#P7pO#S'bO#T'bO't!iO~PBtO![7{O!]7zO!^7zO!}7|O#O7|O#P7pO#S'bO#T'bO't!iO~PBtO!]7zO!^7zO't!iO(T!jO(_!nO~O!X0zO~O!X0zO%`8OO~Og8RO!X0zO%`8OO~OX8WO!V'da!W'da~O!V1VO!W(si~O!g8[O~O!g8]O~O!g8^O~O!g8^O~P%QO^8`O~O!a8cO~O!g8dO~O!V(ei!W(ei~P#?dO^%^O#W8lO'j%^O~O^%^O!a#rO#W8lO'j%^O~O^%^O!a#rO!l8pO#W8lO'j%^O(`'dO~O!h%ZO'|%OO~P&$QO!]8qO!^8qO't!iO~PBtO!V(]O!g(ay~O!V(by!g(by^(by'j(by~P!3jO!X'QO%`8uO~O#c$tqP$tqX$tq^$tqk$tqz$tq!V$tq!e$tq!f$tq!h$tq!l$tq#f$tq#g$tq#h$tq#i$tq#j$tq#k$tq#l$tq#m$tq#n$tq#p$tq#r$tq#t$tq#u$tq'j$tq(Q$tq(`$tq!g$tq!S$tq'h$tq#W$tqo$tq!X$tq%`$tq!a$tq~P#(yO#c$vqP$vqX$vq^$vqk$vqz$vq!V$vq!e$vq!f$vq!h$vq!l$vq#f$vq#g$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#p$vq#r$vq#t$vq#u$vq'j$vq(Q$vq(`$vq!g$vq!S$vq'h$vq#W$vqo$vq!X$vq%`$vq!a$vq~P#(yO!V'Pi!g'Pi~P!3jO#x#Zq!V#Zq!W#Zq~P#?dOy/yOz/yO|/zOPvaXvagvakva!eva!fva!hva!lva#fva#gva#hva#iva#jva#kva#lva#mva#nva#pva#rva#tva#uva#xva(Qva(`va(gva(hva!Vva!Wva~Oy)sO|)tOP$kaX$kag$kak$kaz$ka!e$ka!f$ka!h$ka!l$ka#f$ka#g$ka#h$ka#i$ka#j$ka#k$ka#l$ka#m$ka#n$ka#p$ka#r$ka#t$ka#u$ka#x$ka(Q$ka(`$ka(g$ka(h$ka!V$ka!W$ka~Oy)sO|)tOP$maX$mag$mak$maz$ma!e$ma!f$ma!h$ma!l$ma#f$ma#g$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#p$ma#r$ma#t$ma#u$ma#x$ma(Q$ma(`$ma(g$ma(h$ma!V$ma!W$ma~OP${aX${ak${az${a!e${a!f${a!h${a!l${a#f${a#g${a#h${a#i${a#j${a#k${a#l${a#m${a#n${a#p${a#r${a#t${a#u${a#x${a(Q${a(`${a!V${a!W${a~P%AYO#x$gq!V$gq!W$gq~P#?dO#x$hq!V$hq!W$hq~P#?dO!W9PO~O#x9QO~P!-jO!a#rO!V'Yi!g'Yi~O!a#rO(`'dO!V'Yi!g'Yi~O!V/VO!g(mq~O!S'[i!V'[i~P#(yO!V/_O!S(nq~O!S9WO~P#(yO!S9WO~Od(Oy!V(Oy~P!-jO!V'_a!X'_a~P#(yO!X%Sq^%Sq!V%Sq'j%Sq~P#(yOX9]O~O!V0_O!W(uq~O#W9aO!V'aa!W'aa~O!V4tO!W(ri~P#?dOPYXXYXkYXyYXzYX|YX!SYX!VYX!eYX!fYX!hYX!lYX#WYX#ccX#fYX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#pYX#rYX#tYX#uYX#zYX(QYX(`YX(gYX(hYX~O!a%QX#n%QX~P&6lO#S-cO#T-cO~PBtO#P9eO#S-cO#T-cO~PBtO!}9fO#O9fO#P9eO#S-cO#T-cO~PBtO!]9iO!^9iO't!iO(T!jO(_!nO~O![9lO!]9iO!^9iO#P9eO#S-cO#T-cO't!iO~PBtO!X0zO%`9oO~O'uTO'xUO(T9tO~O!V1VO!W(sq~O!g9wO~O!g9wO~P%QO!g9yO~O!g9zO~O#W9|O!V#`y!W#`y~O!V#`y!W#`y~P#?dO^%^O#W:QO'j%^O~O^%^O!a#rO#W:QO'j%^O~O^%^O!a#rO!l:UO#W:QO'j%^O(`'dO~O!X'QO%`:XO~O#x#vy!V#vy!W#vy~P#?dOP$tiX$tik$tiz$ti!e$ti!f$ti!h$ti!l$ti#f$ti#g$ti#h$ti#i$ti#j$ti#k$ti#l$ti#m$ti#n$ti#p$ti#r$ti#t$ti#u$ti#x$ti(Q$ti(`$ti!V$ti!W$ti~P%AYOy)sO|)tO(h)xOP%WiX%Wig%Wik%Wiz%Wi!e%Wi!f%Wi!h%Wi!l%Wi#f%Wi#g%Wi#h%Wi#i%Wi#j%Wi#k%Wi#l%Wi#m%Wi#n%Wi#p%Wi#r%Wi#t%Wi#u%Wi#x%Wi(Q%Wi(`%Wi(g%Wi!V%Wi!W%Wi~Oy)sO|)tOP%YiX%Yig%Yik%Yiz%Yi!e%Yi!f%Yi!h%Yi!l%Yi#f%Yi#g%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#p%Yi#r%Yi#t%Yi#u%Yi#x%Yi(Q%Yi(`%Yi(g%Yi(h%Yi!V%Yi!W%Yi~O#x$hy!V$hy!W$hy~P#?dO#x#Zy!V#Zy!W#Zy~P#?dO!a#rO!V'Yq!g'Yq~O!V/VO!g(my~O!S'[q!V'[q~P#(yO!S:`O~P#(yO!V0_O!W(uy~O!V4tO!W(rq~O#S2fO#T2fO~PBtO#P:gO#S2fO#T2fO~PBtO!]:kO!^:kO't!iO(T!jO(_!nO~O!X0zO%`:nO~O!g:qO~O^%^O#W:vO'j%^O~O^%^O!a#rO#W:vO'j%^O~O!X'QO%`:{O~OP$tqX$tqk$tqz$tq!e$tq!f$tq!h$tq!l$tq#f$tq#g$tq#h$tq#i$tq#j$tq#k$tq#l$tq#m$tq#n$tq#p$tq#r$tq#t$tq#u$tq#x$tq(Q$tq(`$tq!V$tq!W$tq~P%AYOP$vqX$vqk$vqz$vq!e$vq!f$vq!h$vq!l$vq#f$vq#g$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#p$vq#r$vq#t$vq#u$vq#x$vq(Q$vq(`$vq!V$vq!W$vq~P%AYOd%[!Z!V%[!Z#W%[!Z#x%[!Z~P!-jO!V'aq!W'aq~P#?dO#S6`O#T6`O~PBtO!V#`!Z!W#`!Z~P#?dO^%^O#W;ZO'j%^O~O#c%[!ZP%[!ZX%[!Z^%[!Zk%[!Zz%[!Z!V%[!Z!e%[!Z!f%[!Z!h%[!Z!l%[!Z#f%[!Z#g%[!Z#h%[!Z#i%[!Z#j%[!Z#k%[!Z#l%[!Z#m%[!Z#n%[!Z#p%[!Z#r%[!Z#t%[!Z#u%[!Z'j%[!Z(Q%[!Z(`%[!Z!g%[!Z!S%[!Z'h%[!Z#W%[!Zo%[!Z!X%[!Z%`%[!Z!a%[!Z~P#(yOP%[!ZX%[!Zk%[!Zz%[!Z!e%[!Z!f%[!Z!h%[!Z!l%[!Z#f%[!Z#g%[!Z#h%[!Z#i%[!Z#j%[!Z#k%[!Z#l%[!Z#m%[!Z#n%[!Z#p%[!Z#r%[!Z#t%[!Z#u%[!Z#x%[!Z(Q%[!Z(`%[!Z!V%[!Z!W%[!Z~P%AYOo(UX~P1dO't!iO~P!'RO!ScX!VcX#WcX~P&6lOPYXXYXkYXyYXzYX|YX!VYX!VcX!eYX!fYX!hYX!lYX#WYX#WcX#ccX#fYX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#pYX#rYX#tYX#uYX#zYX(QYX(`YX(gYX(hYX~O!acX!gYX!gcX(`cX~P'!sOP;nOQ;nOa=_Ob!fOikOk;nOlkOmkOskOu;nOw;nO|WO!QkO!RkO!XXO!c;qO!hZO!k;nO!l;nO!m;nO!o;rO!q;sO!t!eO$P!hO$TfO's)RO'uTO'xUO(QVO(_[O(l=]O~O!V<SO!W$ja~Oi%POk$qOl$pOm$pOs%QOu%ROw<YO|$xO!X$yO!c=dO!h$uO#b<`O$P%VO$l<[O$n<^O$q%WO's(iO'uTO'xUO'|%OO(Q$rO~O#o)YO~P''iO!WYX!WcX~P'!sO#c;vO~O!a#rO#c;vO~O#W<WO~O#n;{O~O#W<bO!V(eX!W(eX~O#W<WO!V(cX!W(cX~O#c<cO~Od<eO~P!-jO#c<jO~O#c<kO~O!a#rO#c<lO~O!a#rO#c<cO~O#x<mO~P#?dO#c<nO~O#c<oO~O#c<pO~O#c<qO~O#c<rO~O#c<sO~O#x<tO~P!-jO#x<uO~P!-jO$T~!f!|#O#P#S#a#b#m(l$l$n$q%T%_%`%a%g%i%l%m%o%q~'nR$T(l#g!R'l't#hl#f#iky'm(T'm's$V$X$V~",
|
|
@@ -3758,7 +4458,7 @@ parser](https://github.com/lezer-parser/javascript), extended with
|
|
|
3758
4458
|
highlighting and indentation information.
|
|
3759
4459
|
*/
|
|
3760
4460
|
const javascriptLanguage = /*@__PURE__*/LRLanguage.define({
|
|
3761
|
-
parser: /*@__PURE__*/parser.configure({
|
|
4461
|
+
parser: /*@__PURE__*/parser$2.configure({
|
|
3762
4462
|
props: [/*@__PURE__*/indentNodeProp.add({
|
|
3763
4463
|
IfStatement: /*@__PURE__*/continuedIndent({
|
|
3764
4464
|
except: /^\s*({|else\b)/
|
|
@@ -3849,9 +4549,9 @@ function javascript(config = {}) {
|
|
|
3849
4549
|
autocomplete: ifNotIn(dontComplete, completeFromList(snippets.concat(keywords)))
|
|
3850
4550
|
}), javascriptLanguage.data.of({
|
|
3851
4551
|
autocomplete: localCompletionSource
|
|
3852
|
-
}), config.jsx ? autoCloseTags : []]);
|
|
4552
|
+
}), config.jsx ? autoCloseTags$1 : []]);
|
|
3853
4553
|
}
|
|
3854
|
-
function elementName(doc, tree, max = doc.length) {
|
|
4554
|
+
function elementName$1(doc, tree, max = doc.length) {
|
|
3855
4555
|
if (!tree) return "";
|
|
3856
4556
|
let name = tree.getChild("JSXIdentifier");
|
|
3857
4557
|
return name ? doc.sliceString(name.from, Math.min(name.to, max)) : "";
|
|
@@ -3861,7 +4561,7 @@ const android = typeof navigator == "object" && /*@__PURE__*/ /Android\b/.test(n
|
|
|
3861
4561
|
Extension that will automatically insert JSX close tags when a `>` or
|
|
3862
4562
|
`/` is typed.
|
|
3863
4563
|
*/
|
|
3864
|
-
const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
4564
|
+
const autoCloseTags$1 = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
3865
4565
|
if ((android ? view.composing : view.compositionStarted) || view.state.readOnly || from != to || text != ">" && text != "/" || !javascriptLanguage.isActiveAt(view.state, from, -1)) return false;
|
|
3866
4566
|
let {
|
|
3867
4567
|
state
|
|
@@ -3883,7 +4583,7 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3883
4583
|
}
|
|
3884
4584
|
};
|
|
3885
4585
|
} else if (text == ">" && around.name == "JSXIdentifier") {
|
|
3886
|
-
if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "JSXEndTag" && (name = elementName(state.doc, around.parent, head))) return {
|
|
4586
|
+
if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "JSXEndTag" && (name = elementName$1(state.doc, around.parent, head))) return {
|
|
3887
4587
|
range: EditorSelection.cursor(head + 1),
|
|
3888
4588
|
changes: {
|
|
3889
4589
|
from: head,
|
|
@@ -3893,7 +4593,7 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3893
4593
|
} else if (text == "/" && around.name == "JSXFragmentTag") {
|
|
3894
4594
|
let empty = around.parent,
|
|
3895
4595
|
base = empty === null || empty === void 0 ? void 0 : empty.parent;
|
|
3896
|
-
if (empty.from == head - 1 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "JSXEndTag" && (name = elementName(state.doc, base === null || base === void 0 ? void 0 : base.firstChild, head))) {
|
|
4596
|
+
if (empty.from == head - 1 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "JSXEndTag" && (name = elementName$1(state.doc, base === null || base === void 0 ? void 0 : base.firstChild, head))) {
|
|
3897
4597
|
let insert = `/${name}>`;
|
|
3898
4598
|
return {
|
|
3899
4599
|
range: EditorSelection.cursor(head + insert.length),
|
|
@@ -3916,4 +4616,3196 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3916
4616
|
return true;
|
|
3917
4617
|
});
|
|
3918
4618
|
|
|
3919
|
-
|
|
4619
|
+
const Targets = ["_blank", "_self", "_top", "_parent"];
|
|
4620
|
+
const Charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"];
|
|
4621
|
+
const Methods = ["get", "post", "put", "delete"];
|
|
4622
|
+
const Encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"];
|
|
4623
|
+
const Bool = ["true", "false"];
|
|
4624
|
+
const S = {}; // Empty tag spec
|
|
4625
|
+
const Tags = {
|
|
4626
|
+
a: {
|
|
4627
|
+
attrs: {
|
|
4628
|
+
href: null,
|
|
4629
|
+
ping: null,
|
|
4630
|
+
type: null,
|
|
4631
|
+
media: null,
|
|
4632
|
+
target: Targets,
|
|
4633
|
+
hreflang: null
|
|
4634
|
+
}
|
|
4635
|
+
},
|
|
4636
|
+
abbr: S,
|
|
4637
|
+
acronym: S,
|
|
4638
|
+
address: S,
|
|
4639
|
+
applet: S,
|
|
4640
|
+
area: {
|
|
4641
|
+
attrs: {
|
|
4642
|
+
alt: null,
|
|
4643
|
+
coords: null,
|
|
4644
|
+
href: null,
|
|
4645
|
+
target: null,
|
|
4646
|
+
ping: null,
|
|
4647
|
+
media: null,
|
|
4648
|
+
hreflang: null,
|
|
4649
|
+
type: null,
|
|
4650
|
+
shape: ["default", "rect", "circle", "poly"]
|
|
4651
|
+
}
|
|
4652
|
+
},
|
|
4653
|
+
article: S,
|
|
4654
|
+
aside: S,
|
|
4655
|
+
audio: {
|
|
4656
|
+
attrs: {
|
|
4657
|
+
src: null,
|
|
4658
|
+
mediagroup: null,
|
|
4659
|
+
crossorigin: ["anonymous", "use-credentials"],
|
|
4660
|
+
preload: ["none", "metadata", "auto"],
|
|
4661
|
+
autoplay: ["autoplay"],
|
|
4662
|
+
loop: ["loop"],
|
|
4663
|
+
controls: ["controls"]
|
|
4664
|
+
}
|
|
4665
|
+
},
|
|
4666
|
+
b: S,
|
|
4667
|
+
base: {
|
|
4668
|
+
attrs: {
|
|
4669
|
+
href: null,
|
|
4670
|
+
target: Targets
|
|
4671
|
+
}
|
|
4672
|
+
},
|
|
4673
|
+
basefont: S,
|
|
4674
|
+
bdi: S,
|
|
4675
|
+
bdo: S,
|
|
4676
|
+
big: S,
|
|
4677
|
+
blockquote: {
|
|
4678
|
+
attrs: {
|
|
4679
|
+
cite: null
|
|
4680
|
+
}
|
|
4681
|
+
},
|
|
4682
|
+
body: S,
|
|
4683
|
+
br: S,
|
|
4684
|
+
button: {
|
|
4685
|
+
attrs: {
|
|
4686
|
+
form: null,
|
|
4687
|
+
formaction: null,
|
|
4688
|
+
name: null,
|
|
4689
|
+
value: null,
|
|
4690
|
+
autofocus: ["autofocus"],
|
|
4691
|
+
disabled: ["autofocus"],
|
|
4692
|
+
formenctype: Encs,
|
|
4693
|
+
formmethod: Methods,
|
|
4694
|
+
formnovalidate: ["novalidate"],
|
|
4695
|
+
formtarget: Targets,
|
|
4696
|
+
type: ["submit", "reset", "button"]
|
|
4697
|
+
}
|
|
4698
|
+
},
|
|
4699
|
+
canvas: {
|
|
4700
|
+
attrs: {
|
|
4701
|
+
width: null,
|
|
4702
|
+
height: null
|
|
4703
|
+
}
|
|
4704
|
+
},
|
|
4705
|
+
caption: S,
|
|
4706
|
+
center: S,
|
|
4707
|
+
cite: S,
|
|
4708
|
+
code: S,
|
|
4709
|
+
col: {
|
|
4710
|
+
attrs: {
|
|
4711
|
+
span: null
|
|
4712
|
+
}
|
|
4713
|
+
},
|
|
4714
|
+
colgroup: {
|
|
4715
|
+
attrs: {
|
|
4716
|
+
span: null
|
|
4717
|
+
}
|
|
4718
|
+
},
|
|
4719
|
+
command: {
|
|
4720
|
+
attrs: {
|
|
4721
|
+
type: ["command", "checkbox", "radio"],
|
|
4722
|
+
label: null,
|
|
4723
|
+
icon: null,
|
|
4724
|
+
radiogroup: null,
|
|
4725
|
+
command: null,
|
|
4726
|
+
title: null,
|
|
4727
|
+
disabled: ["disabled"],
|
|
4728
|
+
checked: ["checked"]
|
|
4729
|
+
}
|
|
4730
|
+
},
|
|
4731
|
+
data: {
|
|
4732
|
+
attrs: {
|
|
4733
|
+
value: null
|
|
4734
|
+
}
|
|
4735
|
+
},
|
|
4736
|
+
datagrid: {
|
|
4737
|
+
attrs: {
|
|
4738
|
+
disabled: ["disabled"],
|
|
4739
|
+
multiple: ["multiple"]
|
|
4740
|
+
}
|
|
4741
|
+
},
|
|
4742
|
+
datalist: {
|
|
4743
|
+
attrs: {
|
|
4744
|
+
data: null
|
|
4745
|
+
}
|
|
4746
|
+
},
|
|
4747
|
+
dd: S,
|
|
4748
|
+
del: {
|
|
4749
|
+
attrs: {
|
|
4750
|
+
cite: null,
|
|
4751
|
+
datetime: null
|
|
4752
|
+
}
|
|
4753
|
+
},
|
|
4754
|
+
details: {
|
|
4755
|
+
attrs: {
|
|
4756
|
+
open: ["open"]
|
|
4757
|
+
}
|
|
4758
|
+
},
|
|
4759
|
+
dfn: S,
|
|
4760
|
+
dir: S,
|
|
4761
|
+
div: S,
|
|
4762
|
+
dl: S,
|
|
4763
|
+
dt: S,
|
|
4764
|
+
em: S,
|
|
4765
|
+
embed: {
|
|
4766
|
+
attrs: {
|
|
4767
|
+
src: null,
|
|
4768
|
+
type: null,
|
|
4769
|
+
width: null,
|
|
4770
|
+
height: null
|
|
4771
|
+
}
|
|
4772
|
+
},
|
|
4773
|
+
eventsource: {
|
|
4774
|
+
attrs: {
|
|
4775
|
+
src: null
|
|
4776
|
+
}
|
|
4777
|
+
},
|
|
4778
|
+
fieldset: {
|
|
4779
|
+
attrs: {
|
|
4780
|
+
disabled: ["disabled"],
|
|
4781
|
+
form: null,
|
|
4782
|
+
name: null
|
|
4783
|
+
}
|
|
4784
|
+
},
|
|
4785
|
+
figcaption: S,
|
|
4786
|
+
figure: S,
|
|
4787
|
+
font: S,
|
|
4788
|
+
footer: S,
|
|
4789
|
+
form: {
|
|
4790
|
+
attrs: {
|
|
4791
|
+
action: null,
|
|
4792
|
+
name: null,
|
|
4793
|
+
"accept-charset": Charsets,
|
|
4794
|
+
autocomplete: ["on", "off"],
|
|
4795
|
+
enctype: Encs,
|
|
4796
|
+
method: Methods,
|
|
4797
|
+
novalidate: ["novalidate"],
|
|
4798
|
+
target: Targets
|
|
4799
|
+
}
|
|
4800
|
+
},
|
|
4801
|
+
frame: S,
|
|
4802
|
+
frameset: S,
|
|
4803
|
+
h1: S,
|
|
4804
|
+
h2: S,
|
|
4805
|
+
h3: S,
|
|
4806
|
+
h4: S,
|
|
4807
|
+
h5: S,
|
|
4808
|
+
h6: S,
|
|
4809
|
+
head: {
|
|
4810
|
+
children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"]
|
|
4811
|
+
},
|
|
4812
|
+
header: S,
|
|
4813
|
+
hgroup: S,
|
|
4814
|
+
hr: S,
|
|
4815
|
+
html: {
|
|
4816
|
+
attrs: {
|
|
4817
|
+
manifest: null
|
|
4818
|
+
}
|
|
4819
|
+
},
|
|
4820
|
+
i: S,
|
|
4821
|
+
iframe: {
|
|
4822
|
+
attrs: {
|
|
4823
|
+
src: null,
|
|
4824
|
+
srcdoc: null,
|
|
4825
|
+
name: null,
|
|
4826
|
+
width: null,
|
|
4827
|
+
height: null,
|
|
4828
|
+
sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"],
|
|
4829
|
+
seamless: ["seamless"]
|
|
4830
|
+
}
|
|
4831
|
+
},
|
|
4832
|
+
img: {
|
|
4833
|
+
attrs: {
|
|
4834
|
+
alt: null,
|
|
4835
|
+
src: null,
|
|
4836
|
+
ismap: null,
|
|
4837
|
+
usemap: null,
|
|
4838
|
+
width: null,
|
|
4839
|
+
height: null,
|
|
4840
|
+
crossorigin: ["anonymous", "use-credentials"]
|
|
4841
|
+
}
|
|
4842
|
+
},
|
|
4843
|
+
input: {
|
|
4844
|
+
attrs: {
|
|
4845
|
+
alt: null,
|
|
4846
|
+
dirname: null,
|
|
4847
|
+
form: null,
|
|
4848
|
+
formaction: null,
|
|
4849
|
+
height: null,
|
|
4850
|
+
list: null,
|
|
4851
|
+
max: null,
|
|
4852
|
+
maxlength: null,
|
|
4853
|
+
min: null,
|
|
4854
|
+
name: null,
|
|
4855
|
+
pattern: null,
|
|
4856
|
+
placeholder: null,
|
|
4857
|
+
size: null,
|
|
4858
|
+
src: null,
|
|
4859
|
+
step: null,
|
|
4860
|
+
value: null,
|
|
4861
|
+
width: null,
|
|
4862
|
+
accept: ["audio/*", "video/*", "image/*"],
|
|
4863
|
+
autocomplete: ["on", "off"],
|
|
4864
|
+
autofocus: ["autofocus"],
|
|
4865
|
+
checked: ["checked"],
|
|
4866
|
+
disabled: ["disabled"],
|
|
4867
|
+
formenctype: Encs,
|
|
4868
|
+
formmethod: Methods,
|
|
4869
|
+
formnovalidate: ["novalidate"],
|
|
4870
|
+
formtarget: Targets,
|
|
4871
|
+
multiple: ["multiple"],
|
|
4872
|
+
readonly: ["readonly"],
|
|
4873
|
+
required: ["required"],
|
|
4874
|
+
type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", "file", "submit", "image", "reset", "button"]
|
|
4875
|
+
}
|
|
4876
|
+
},
|
|
4877
|
+
ins: {
|
|
4878
|
+
attrs: {
|
|
4879
|
+
cite: null,
|
|
4880
|
+
datetime: null
|
|
4881
|
+
}
|
|
4882
|
+
},
|
|
4883
|
+
kbd: S,
|
|
4884
|
+
keygen: {
|
|
4885
|
+
attrs: {
|
|
4886
|
+
challenge: null,
|
|
4887
|
+
form: null,
|
|
4888
|
+
name: null,
|
|
4889
|
+
autofocus: ["autofocus"],
|
|
4890
|
+
disabled: ["disabled"],
|
|
4891
|
+
keytype: ["RSA"]
|
|
4892
|
+
}
|
|
4893
|
+
},
|
|
4894
|
+
label: {
|
|
4895
|
+
attrs: {
|
|
4896
|
+
for: null,
|
|
4897
|
+
form: null
|
|
4898
|
+
}
|
|
4899
|
+
},
|
|
4900
|
+
legend: S,
|
|
4901
|
+
li: {
|
|
4902
|
+
attrs: {
|
|
4903
|
+
value: null
|
|
4904
|
+
}
|
|
4905
|
+
},
|
|
4906
|
+
link: {
|
|
4907
|
+
attrs: {
|
|
4908
|
+
href: null,
|
|
4909
|
+
type: null,
|
|
4910
|
+
hreflang: null,
|
|
4911
|
+
media: null,
|
|
4912
|
+
sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"]
|
|
4913
|
+
}
|
|
4914
|
+
},
|
|
4915
|
+
map: {
|
|
4916
|
+
attrs: {
|
|
4917
|
+
name: null
|
|
4918
|
+
}
|
|
4919
|
+
},
|
|
4920
|
+
mark: S,
|
|
4921
|
+
menu: {
|
|
4922
|
+
attrs: {
|
|
4923
|
+
label: null,
|
|
4924
|
+
type: ["list", "context", "toolbar"]
|
|
4925
|
+
}
|
|
4926
|
+
},
|
|
4927
|
+
meta: {
|
|
4928
|
+
attrs: {
|
|
4929
|
+
content: null,
|
|
4930
|
+
charset: Charsets,
|
|
4931
|
+
name: ["viewport", "application-name", "author", "description", "generator", "keywords"],
|
|
4932
|
+
"http-equiv": ["content-language", "content-type", "default-style", "refresh"]
|
|
4933
|
+
}
|
|
4934
|
+
},
|
|
4935
|
+
meter: {
|
|
4936
|
+
attrs: {
|
|
4937
|
+
value: null,
|
|
4938
|
+
min: null,
|
|
4939
|
+
low: null,
|
|
4940
|
+
high: null,
|
|
4941
|
+
max: null,
|
|
4942
|
+
optimum: null
|
|
4943
|
+
}
|
|
4944
|
+
},
|
|
4945
|
+
nav: S,
|
|
4946
|
+
noframes: S,
|
|
4947
|
+
noscript: S,
|
|
4948
|
+
object: {
|
|
4949
|
+
attrs: {
|
|
4950
|
+
data: null,
|
|
4951
|
+
type: null,
|
|
4952
|
+
name: null,
|
|
4953
|
+
usemap: null,
|
|
4954
|
+
form: null,
|
|
4955
|
+
width: null,
|
|
4956
|
+
height: null,
|
|
4957
|
+
typemustmatch: ["typemustmatch"]
|
|
4958
|
+
}
|
|
4959
|
+
},
|
|
4960
|
+
ol: {
|
|
4961
|
+
attrs: {
|
|
4962
|
+
reversed: ["reversed"],
|
|
4963
|
+
start: null,
|
|
4964
|
+
type: ["1", "a", "A", "i", "I"]
|
|
4965
|
+
},
|
|
4966
|
+
children: ["li", "script", "template", "ul", "ol"]
|
|
4967
|
+
},
|
|
4968
|
+
optgroup: {
|
|
4969
|
+
attrs: {
|
|
4970
|
+
disabled: ["disabled"],
|
|
4971
|
+
label: null
|
|
4972
|
+
}
|
|
4973
|
+
},
|
|
4974
|
+
option: {
|
|
4975
|
+
attrs: {
|
|
4976
|
+
disabled: ["disabled"],
|
|
4977
|
+
label: null,
|
|
4978
|
+
selected: ["selected"],
|
|
4979
|
+
value: null
|
|
4980
|
+
}
|
|
4981
|
+
},
|
|
4982
|
+
output: {
|
|
4983
|
+
attrs: {
|
|
4984
|
+
for: null,
|
|
4985
|
+
form: null,
|
|
4986
|
+
name: null
|
|
4987
|
+
}
|
|
4988
|
+
},
|
|
4989
|
+
p: S,
|
|
4990
|
+
param: {
|
|
4991
|
+
attrs: {
|
|
4992
|
+
name: null,
|
|
4993
|
+
value: null
|
|
4994
|
+
}
|
|
4995
|
+
},
|
|
4996
|
+
pre: S,
|
|
4997
|
+
progress: {
|
|
4998
|
+
attrs: {
|
|
4999
|
+
value: null,
|
|
5000
|
+
max: null
|
|
5001
|
+
}
|
|
5002
|
+
},
|
|
5003
|
+
q: {
|
|
5004
|
+
attrs: {
|
|
5005
|
+
cite: null
|
|
5006
|
+
}
|
|
5007
|
+
},
|
|
5008
|
+
rp: S,
|
|
5009
|
+
rt: S,
|
|
5010
|
+
ruby: S,
|
|
5011
|
+
s: S,
|
|
5012
|
+
samp: S,
|
|
5013
|
+
script: {
|
|
5014
|
+
attrs: {
|
|
5015
|
+
type: ["text/javascript"],
|
|
5016
|
+
src: null,
|
|
5017
|
+
async: ["async"],
|
|
5018
|
+
defer: ["defer"],
|
|
5019
|
+
charset: Charsets
|
|
5020
|
+
}
|
|
5021
|
+
},
|
|
5022
|
+
section: S,
|
|
5023
|
+
select: {
|
|
5024
|
+
attrs: {
|
|
5025
|
+
form: null,
|
|
5026
|
+
name: null,
|
|
5027
|
+
size: null,
|
|
5028
|
+
autofocus: ["autofocus"],
|
|
5029
|
+
disabled: ["disabled"],
|
|
5030
|
+
multiple: ["multiple"]
|
|
5031
|
+
}
|
|
5032
|
+
},
|
|
5033
|
+
slot: {
|
|
5034
|
+
attrs: {
|
|
5035
|
+
name: null
|
|
5036
|
+
}
|
|
5037
|
+
},
|
|
5038
|
+
small: S,
|
|
5039
|
+
source: {
|
|
5040
|
+
attrs: {
|
|
5041
|
+
src: null,
|
|
5042
|
+
type: null,
|
|
5043
|
+
media: null
|
|
5044
|
+
}
|
|
5045
|
+
},
|
|
5046
|
+
span: S,
|
|
5047
|
+
strike: S,
|
|
5048
|
+
strong: S,
|
|
5049
|
+
style: {
|
|
5050
|
+
attrs: {
|
|
5051
|
+
type: ["text/css"],
|
|
5052
|
+
media: null,
|
|
5053
|
+
scoped: null
|
|
5054
|
+
}
|
|
5055
|
+
},
|
|
5056
|
+
sub: S,
|
|
5057
|
+
summary: S,
|
|
5058
|
+
sup: S,
|
|
5059
|
+
table: S,
|
|
5060
|
+
tbody: S,
|
|
5061
|
+
td: {
|
|
5062
|
+
attrs: {
|
|
5063
|
+
colspan: null,
|
|
5064
|
+
rowspan: null,
|
|
5065
|
+
headers: null
|
|
5066
|
+
}
|
|
5067
|
+
},
|
|
5068
|
+
template: S,
|
|
5069
|
+
textarea: {
|
|
5070
|
+
attrs: {
|
|
5071
|
+
dirname: null,
|
|
5072
|
+
form: null,
|
|
5073
|
+
maxlength: null,
|
|
5074
|
+
name: null,
|
|
5075
|
+
placeholder: null,
|
|
5076
|
+
rows: null,
|
|
5077
|
+
cols: null,
|
|
5078
|
+
autofocus: ["autofocus"],
|
|
5079
|
+
disabled: ["disabled"],
|
|
5080
|
+
readonly: ["readonly"],
|
|
5081
|
+
required: ["required"],
|
|
5082
|
+
wrap: ["soft", "hard"]
|
|
5083
|
+
}
|
|
5084
|
+
},
|
|
5085
|
+
tfoot: S,
|
|
5086
|
+
th: {
|
|
5087
|
+
attrs: {
|
|
5088
|
+
colspan: null,
|
|
5089
|
+
rowspan: null,
|
|
5090
|
+
headers: null,
|
|
5091
|
+
scope: ["row", "col", "rowgroup", "colgroup"]
|
|
5092
|
+
}
|
|
5093
|
+
},
|
|
5094
|
+
thead: S,
|
|
5095
|
+
time: {
|
|
5096
|
+
attrs: {
|
|
5097
|
+
datetime: null
|
|
5098
|
+
}
|
|
5099
|
+
},
|
|
5100
|
+
title: S,
|
|
5101
|
+
tr: S,
|
|
5102
|
+
track: {
|
|
5103
|
+
attrs: {
|
|
5104
|
+
src: null,
|
|
5105
|
+
label: null,
|
|
5106
|
+
default: null,
|
|
5107
|
+
kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
|
|
5108
|
+
srclang: null
|
|
5109
|
+
}
|
|
5110
|
+
},
|
|
5111
|
+
tt: S,
|
|
5112
|
+
u: S,
|
|
5113
|
+
ul: {
|
|
5114
|
+
children: ["li", "script", "template", "ul", "ol"]
|
|
5115
|
+
},
|
|
5116
|
+
var: S,
|
|
5117
|
+
video: {
|
|
5118
|
+
attrs: {
|
|
5119
|
+
src: null,
|
|
5120
|
+
poster: null,
|
|
5121
|
+
width: null,
|
|
5122
|
+
height: null,
|
|
5123
|
+
crossorigin: ["anonymous", "use-credentials"],
|
|
5124
|
+
preload: ["auto", "metadata", "none"],
|
|
5125
|
+
autoplay: ["autoplay"],
|
|
5126
|
+
mediagroup: ["movie"],
|
|
5127
|
+
muted: ["muted"],
|
|
5128
|
+
controls: ["controls"]
|
|
5129
|
+
}
|
|
5130
|
+
},
|
|
5131
|
+
wbr: S
|
|
5132
|
+
};
|
|
5133
|
+
const GlobalAttrs = {
|
|
5134
|
+
accesskey: null,
|
|
5135
|
+
class: null,
|
|
5136
|
+
contenteditable: Bool,
|
|
5137
|
+
contextmenu: null,
|
|
5138
|
+
dir: ["ltr", "rtl", "auto"],
|
|
5139
|
+
draggable: ["true", "false", "auto"],
|
|
5140
|
+
dropzone: ["copy", "move", "link", "string:", "file:"],
|
|
5141
|
+
hidden: ["hidden"],
|
|
5142
|
+
id: null,
|
|
5143
|
+
inert: ["inert"],
|
|
5144
|
+
itemid: null,
|
|
5145
|
+
itemprop: null,
|
|
5146
|
+
itemref: null,
|
|
5147
|
+
itemscope: ["itemscope"],
|
|
5148
|
+
itemtype: null,
|
|
5149
|
+
lang: ["ar", "bn", "de", "en-GB", "en-US", "es", "fr", "hi", "id", "ja", "pa", "pt", "ru", "tr", "zh"],
|
|
5150
|
+
spellcheck: Bool,
|
|
5151
|
+
autocorrect: Bool,
|
|
5152
|
+
autocapitalize: Bool,
|
|
5153
|
+
style: null,
|
|
5154
|
+
tabindex: null,
|
|
5155
|
+
title: null,
|
|
5156
|
+
translate: ["yes", "no"],
|
|
5157
|
+
onclick: null,
|
|
5158
|
+
rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"],
|
|
5159
|
+
role: /*@__PURE__*/"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),
|
|
5160
|
+
"aria-activedescendant": null,
|
|
5161
|
+
"aria-atomic": Bool,
|
|
5162
|
+
"aria-autocomplete": ["inline", "list", "both", "none"],
|
|
5163
|
+
"aria-busy": Bool,
|
|
5164
|
+
"aria-checked": ["true", "false", "mixed", "undefined"],
|
|
5165
|
+
"aria-controls": null,
|
|
5166
|
+
"aria-describedby": null,
|
|
5167
|
+
"aria-disabled": Bool,
|
|
5168
|
+
"aria-dropeffect": null,
|
|
5169
|
+
"aria-expanded": ["true", "false", "undefined"],
|
|
5170
|
+
"aria-flowto": null,
|
|
5171
|
+
"aria-grabbed": ["true", "false", "undefined"],
|
|
5172
|
+
"aria-haspopup": Bool,
|
|
5173
|
+
"aria-hidden": Bool,
|
|
5174
|
+
"aria-invalid": ["true", "false", "grammar", "spelling"],
|
|
5175
|
+
"aria-label": null,
|
|
5176
|
+
"aria-labelledby": null,
|
|
5177
|
+
"aria-level": null,
|
|
5178
|
+
"aria-live": ["off", "polite", "assertive"],
|
|
5179
|
+
"aria-multiline": Bool,
|
|
5180
|
+
"aria-multiselectable": Bool,
|
|
5181
|
+
"aria-owns": null,
|
|
5182
|
+
"aria-posinset": null,
|
|
5183
|
+
"aria-pressed": ["true", "false", "mixed", "undefined"],
|
|
5184
|
+
"aria-readonly": Bool,
|
|
5185
|
+
"aria-relevant": null,
|
|
5186
|
+
"aria-required": Bool,
|
|
5187
|
+
"aria-selected": ["true", "false", "undefined"],
|
|
5188
|
+
"aria-setsize": null,
|
|
5189
|
+
"aria-sort": ["ascending", "descending", "none", "other"],
|
|
5190
|
+
"aria-valuemax": null,
|
|
5191
|
+
"aria-valuemin": null,
|
|
5192
|
+
"aria-valuenow": null,
|
|
5193
|
+
"aria-valuetext": null
|
|
5194
|
+
};
|
|
5195
|
+
class Schema {
|
|
5196
|
+
constructor(extraTags, extraAttrs) {
|
|
5197
|
+
this.tags = Object.assign(Object.assign({}, Tags), extraTags);
|
|
5198
|
+
this.globalAttrs = Object.assign(Object.assign({}, GlobalAttrs), extraAttrs);
|
|
5199
|
+
this.allTags = Object.keys(this.tags);
|
|
5200
|
+
this.globalAttrNames = Object.keys(this.globalAttrs);
|
|
5201
|
+
}
|
|
5202
|
+
}
|
|
5203
|
+
Schema.default = /*@__PURE__*/new Schema();
|
|
5204
|
+
function elementName(doc, tree, max = doc.length) {
|
|
5205
|
+
if (!tree) return "";
|
|
5206
|
+
let tag = tree.firstChild;
|
|
5207
|
+
let name = tag && tag.getChild("TagName");
|
|
5208
|
+
return name ? doc.sliceString(name.from, Math.min(name.to, max)) : "";
|
|
5209
|
+
}
|
|
5210
|
+
function findParentElement(tree, skip = false) {
|
|
5211
|
+
for (let cur = tree.parent; cur; cur = cur.parent) if (cur.name == "Element") {
|
|
5212
|
+
if (skip) skip = false;else return cur;
|
|
5213
|
+
}
|
|
5214
|
+
return null;
|
|
5215
|
+
}
|
|
5216
|
+
function allowedChildren(doc, tree, schema) {
|
|
5217
|
+
let parentInfo = schema.tags[elementName(doc, findParentElement(tree, true))];
|
|
5218
|
+
return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;
|
|
5219
|
+
}
|
|
5220
|
+
function openTags(doc, tree) {
|
|
5221
|
+
let open = [];
|
|
5222
|
+
for (let parent = tree; parent = findParentElement(parent);) {
|
|
5223
|
+
let tagName = elementName(doc, parent);
|
|
5224
|
+
if (tagName && parent.lastChild.name == "CloseTag") break;
|
|
5225
|
+
if (tagName && open.indexOf(tagName) < 0 && (tree.name == "EndTag" || tree.from >= parent.firstChild.to)) open.push(tagName);
|
|
5226
|
+
}
|
|
5227
|
+
return open;
|
|
5228
|
+
}
|
|
5229
|
+
const identifier = /^[:\-\.\w\u00b7-\uffff]*$/;
|
|
5230
|
+
function completeTag(state, schema, tree, from, to) {
|
|
5231
|
+
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? "" : ">";
|
|
5232
|
+
return {
|
|
5233
|
+
from,
|
|
5234
|
+
to,
|
|
5235
|
+
options: allowedChildren(state.doc, tree, schema).map(tagName => ({
|
|
5236
|
+
label: tagName,
|
|
5237
|
+
type: "type"
|
|
5238
|
+
})).concat(openTags(state.doc, tree).map((tag, i) => ({
|
|
5239
|
+
label: "/" + tag,
|
|
5240
|
+
apply: "/" + tag + end,
|
|
5241
|
+
type: "type",
|
|
5242
|
+
boost: 99 - i
|
|
5243
|
+
}))),
|
|
5244
|
+
validFor: /^\/?[:\-\.\w\u00b7-\uffff]*$/
|
|
5245
|
+
};
|
|
5246
|
+
}
|
|
5247
|
+
function completeCloseTag(state, tree, from, to) {
|
|
5248
|
+
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? "" : ">";
|
|
5249
|
+
return {
|
|
5250
|
+
from,
|
|
5251
|
+
to,
|
|
5252
|
+
options: openTags(state.doc, tree).map((tag, i) => ({
|
|
5253
|
+
label: tag,
|
|
5254
|
+
apply: tag + end,
|
|
5255
|
+
type: "type",
|
|
5256
|
+
boost: 99 - i
|
|
5257
|
+
})),
|
|
5258
|
+
validFor: identifier
|
|
5259
|
+
};
|
|
5260
|
+
}
|
|
5261
|
+
function completeStartTag(state, schema, tree, pos) {
|
|
5262
|
+
let options = [],
|
|
5263
|
+
level = 0;
|
|
5264
|
+
for (let tagName of allowedChildren(state.doc, tree, schema)) options.push({
|
|
5265
|
+
label: "<" + tagName,
|
|
5266
|
+
type: "type"
|
|
5267
|
+
});
|
|
5268
|
+
for (let open of openTags(state.doc, tree)) options.push({
|
|
5269
|
+
label: "</" + open + ">",
|
|
5270
|
+
type: "type",
|
|
5271
|
+
boost: 99 - level++
|
|
5272
|
+
});
|
|
5273
|
+
return {
|
|
5274
|
+
from: pos,
|
|
5275
|
+
to: pos,
|
|
5276
|
+
options,
|
|
5277
|
+
validFor: /^<\/?[:\-\.\w\u00b7-\uffff]*$/
|
|
5278
|
+
};
|
|
5279
|
+
}
|
|
5280
|
+
function completeAttrName(state, schema, tree, from, to) {
|
|
5281
|
+
let elt = findParentElement(tree),
|
|
5282
|
+
info = elt ? schema.tags[elementName(state.doc, elt)] : null;
|
|
5283
|
+
let names = info && info.attrs ? Object.keys(info.attrs).concat(schema.globalAttrNames) : schema.globalAttrNames;
|
|
5284
|
+
return {
|
|
5285
|
+
from,
|
|
5286
|
+
to,
|
|
5287
|
+
options: names.map(attrName => ({
|
|
5288
|
+
label: attrName,
|
|
5289
|
+
type: "property"
|
|
5290
|
+
})),
|
|
5291
|
+
validFor: identifier
|
|
5292
|
+
};
|
|
5293
|
+
}
|
|
5294
|
+
function completeAttrValue(state, schema, tree, from, to) {
|
|
5295
|
+
var _a;
|
|
5296
|
+
let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild("AttributeName");
|
|
5297
|
+
let options = [],
|
|
5298
|
+
token = undefined;
|
|
5299
|
+
if (nameNode) {
|
|
5300
|
+
let attrName = state.sliceDoc(nameNode.from, nameNode.to);
|
|
5301
|
+
let attrs = schema.globalAttrs[attrName];
|
|
5302
|
+
if (!attrs) {
|
|
5303
|
+
let elt = findParentElement(tree),
|
|
5304
|
+
info = elt ? schema.tags[elementName(state.doc, elt)] : null;
|
|
5305
|
+
attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];
|
|
5306
|
+
}
|
|
5307
|
+
if (attrs) {
|
|
5308
|
+
let base = state.sliceDoc(from, to).toLowerCase(),
|
|
5309
|
+
quoteStart = '"',
|
|
5310
|
+
quoteEnd = '"';
|
|
5311
|
+
if (/^['"]/.test(base)) {
|
|
5312
|
+
token = base[0] == '"' ? /^[^"]*$/ : /^[^']*$/;
|
|
5313
|
+
quoteStart = "";
|
|
5314
|
+
quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? "" : base[0];
|
|
5315
|
+
base = base.slice(1);
|
|
5316
|
+
from++;
|
|
5317
|
+
} else {
|
|
5318
|
+
token = /^[^\s<>='"]*$/;
|
|
5319
|
+
}
|
|
5320
|
+
for (let value of attrs) options.push({
|
|
5321
|
+
label: value,
|
|
5322
|
+
apply: quoteStart + value + quoteEnd,
|
|
5323
|
+
type: "constant"
|
|
5324
|
+
});
|
|
5325
|
+
}
|
|
5326
|
+
}
|
|
5327
|
+
return {
|
|
5328
|
+
from,
|
|
5329
|
+
to,
|
|
5330
|
+
options,
|
|
5331
|
+
validFor: token
|
|
5332
|
+
};
|
|
5333
|
+
}
|
|
5334
|
+
function htmlCompletionFor(schema, context) {
|
|
5335
|
+
let {
|
|
5336
|
+
state,
|
|
5337
|
+
pos
|
|
5338
|
+
} = context,
|
|
5339
|
+
around = syntaxTree(state).resolveInner(pos),
|
|
5340
|
+
tree = around.resolve(pos, -1);
|
|
5341
|
+
for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {
|
|
5342
|
+
let last = before.lastChild;
|
|
5343
|
+
if (!last || !last.type.isError || last.from < last.to) break;
|
|
5344
|
+
around = tree = before;
|
|
5345
|
+
scan = last.from;
|
|
5346
|
+
}
|
|
5347
|
+
if (tree.name == "TagName") {
|
|
5348
|
+
return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos) : completeTag(state, schema, tree, tree.from, pos);
|
|
5349
|
+
} else if (tree.name == "StartTag") {
|
|
5350
|
+
return completeTag(state, schema, tree, pos, pos);
|
|
5351
|
+
} else if (tree.name == "StartCloseTag" || tree.name == "IncompleteCloseTag") {
|
|
5352
|
+
return completeCloseTag(state, tree, pos, pos);
|
|
5353
|
+
} else if (context.explicit && (tree.name == "OpenTag" || tree.name == "SelfClosingTag") || tree.name == "AttributeName") {
|
|
5354
|
+
return completeAttrName(state, schema, tree, tree.name == "AttributeName" ? tree.from : pos, pos);
|
|
5355
|
+
} else if (tree.name == "Is" || tree.name == "AttributeValue" || tree.name == "UnquotedAttributeValue") {
|
|
5356
|
+
return completeAttrValue(state, schema, tree, tree.name == "Is" ? pos : tree.from, pos);
|
|
5357
|
+
} else if (context.explicit && (around.name == "Element" || around.name == "Text" || around.name == "Document")) {
|
|
5358
|
+
return completeStartTag(state, schema, tree, pos);
|
|
5359
|
+
} else {
|
|
5360
|
+
return null;
|
|
5361
|
+
}
|
|
5362
|
+
}
|
|
5363
|
+
/**
|
|
5364
|
+
Create a completion source for HTML extended with additional tags
|
|
5365
|
+
or attributes.
|
|
5366
|
+
*/
|
|
5367
|
+
function htmlCompletionSourceWith(config) {
|
|
5368
|
+
let {
|
|
5369
|
+
extraTags,
|
|
5370
|
+
extraGlobalAttributes: extraAttrs
|
|
5371
|
+
} = config;
|
|
5372
|
+
let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;
|
|
5373
|
+
return context => htmlCompletionFor(schema, context);
|
|
5374
|
+
}
|
|
5375
|
+
|
|
5376
|
+
/**
|
|
5377
|
+
A language provider based on the [Lezer HTML
|
|
5378
|
+
parser](https://github.com/lezer-parser/html), extended with the
|
|
5379
|
+
JavaScript and CSS parsers to parse the content of `<script>` and
|
|
5380
|
+
`<style>` tags.
|
|
5381
|
+
*/
|
|
5382
|
+
const htmlLanguage = /*@__PURE__*/LRLanguage.define({
|
|
5383
|
+
parser: /*@__PURE__*/parser$4.configure({
|
|
5384
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
5385
|
+
Element(context) {
|
|
5386
|
+
let after = /^(\s*)(<\/)?/.exec(context.textAfter);
|
|
5387
|
+
if (context.node.to <= context.pos + after[0].length) return context.continue();
|
|
5388
|
+
return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);
|
|
5389
|
+
},
|
|
5390
|
+
"OpenTag CloseTag SelfClosingTag"(context) {
|
|
5391
|
+
return context.column(context.node.from) + context.unit;
|
|
5392
|
+
},
|
|
5393
|
+
Document(context) {
|
|
5394
|
+
if (context.pos + /\s*/.exec(context.textAfter)[0].length < context.node.to) return context.continue();
|
|
5395
|
+
let endElt = null,
|
|
5396
|
+
close;
|
|
5397
|
+
for (let cur = context.node;;) {
|
|
5398
|
+
let last = cur.lastChild;
|
|
5399
|
+
if (!last || last.name != "Element" || last.to != cur.to) break;
|
|
5400
|
+
endElt = cur = last;
|
|
5401
|
+
}
|
|
5402
|
+
if (endElt && !((close = endElt.lastChild) && (close.name == "CloseTag" || close.name == "SelfClosingTag"))) return context.lineIndent(endElt.from) + context.unit;
|
|
5403
|
+
return null;
|
|
5404
|
+
}
|
|
5405
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
5406
|
+
Element(node) {
|
|
5407
|
+
let first = node.firstChild,
|
|
5408
|
+
last = node.lastChild;
|
|
5409
|
+
if (!first || first.name != "OpenTag") return null;
|
|
5410
|
+
return {
|
|
5411
|
+
from: first.to,
|
|
5412
|
+
to: last.name == "CloseTag" ? last.from : node.to
|
|
5413
|
+
};
|
|
5414
|
+
}
|
|
5415
|
+
})],
|
|
5416
|
+
wrap: /*@__PURE__*/configureNesting([{
|
|
5417
|
+
tag: "script",
|
|
5418
|
+
attrs(attrs) {
|
|
5419
|
+
return !attrs.type || /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);
|
|
5420
|
+
},
|
|
5421
|
+
parser: javascriptLanguage.parser
|
|
5422
|
+
}, {
|
|
5423
|
+
tag: "style",
|
|
5424
|
+
attrs(attrs) {
|
|
5425
|
+
return (!attrs.lang || attrs.lang == "css") && (!attrs.type || /^(text\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));
|
|
5426
|
+
},
|
|
5427
|
+
parser: cssLanguage.parser
|
|
5428
|
+
}])
|
|
5429
|
+
}),
|
|
5430
|
+
languageData: {
|
|
5431
|
+
commentTokens: {
|
|
5432
|
+
block: {
|
|
5433
|
+
open: "<!--",
|
|
5434
|
+
close: "-->"
|
|
5435
|
+
}
|
|
5436
|
+
},
|
|
5437
|
+
indentOnInput: /^\s*<\/\w+\W$/,
|
|
5438
|
+
wordChars: "-._"
|
|
5439
|
+
}
|
|
5440
|
+
});
|
|
5441
|
+
/**
|
|
5442
|
+
Language support for HTML, including
|
|
5443
|
+
[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and
|
|
5444
|
+
CSS support extensions.
|
|
5445
|
+
*/
|
|
5446
|
+
function html(config = {}) {
|
|
5447
|
+
let lang = htmlLanguage;
|
|
5448
|
+
if (config.matchClosingTags === false) lang = lang.configure({
|
|
5449
|
+
dialect: "noMatch"
|
|
5450
|
+
});
|
|
5451
|
+
return new LanguageSupport(lang, [htmlLanguage.data.of({
|
|
5452
|
+
autocomplete: htmlCompletionSourceWith(config)
|
|
5453
|
+
}), config.autoCloseTags !== false ? autoCloseTags : [], javascript().support, css().support]);
|
|
5454
|
+
}
|
|
5455
|
+
/**
|
|
5456
|
+
Extension that will automatically insert close tags when a `>` or
|
|
5457
|
+
`/` is typed.
|
|
5458
|
+
*/
|
|
5459
|
+
const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
5460
|
+
if (view.composing || view.state.readOnly || from != to || text != ">" && text != "/" || !htmlLanguage.isActiveAt(view.state, from, -1)) return false;
|
|
5461
|
+
let {
|
|
5462
|
+
state
|
|
5463
|
+
} = view;
|
|
5464
|
+
let changes = state.changeByRange(range => {
|
|
5465
|
+
var _a, _b, _c;
|
|
5466
|
+
let {
|
|
5467
|
+
head
|
|
5468
|
+
} = range,
|
|
5469
|
+
around = syntaxTree(state).resolveInner(head, -1),
|
|
5470
|
+
name;
|
|
5471
|
+
if (around.name == "TagName" || around.name == "StartTag") around = around.parent;
|
|
5472
|
+
if (text == ">" && around.name == "OpenTag") {
|
|
5473
|
+
if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "CloseTag" && (name = elementName(state.doc, around.parent, head))) return {
|
|
5474
|
+
range: EditorSelection.cursor(head + 1),
|
|
5475
|
+
changes: {
|
|
5476
|
+
from: head,
|
|
5477
|
+
insert: `></${name}>`
|
|
5478
|
+
}
|
|
5479
|
+
};
|
|
5480
|
+
} else if (text == "/" && around.name == "OpenTag") {
|
|
5481
|
+
let empty = around.parent,
|
|
5482
|
+
base = empty === null || empty === void 0 ? void 0 : empty.parent;
|
|
5483
|
+
if (empty.from == head - 1 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" && (name = elementName(state.doc, base, head))) {
|
|
5484
|
+
let insert = `/${name}>`;
|
|
5485
|
+
return {
|
|
5486
|
+
range: EditorSelection.cursor(head + insert.length),
|
|
5487
|
+
changes: {
|
|
5488
|
+
from: head,
|
|
5489
|
+
insert
|
|
5490
|
+
}
|
|
5491
|
+
};
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
return {
|
|
5495
|
+
range
|
|
5496
|
+
};
|
|
5497
|
+
});
|
|
5498
|
+
if (changes.changes.empty) return false;
|
|
5499
|
+
view.dispatch(changes, {
|
|
5500
|
+
userEvent: "input.type",
|
|
5501
|
+
scrollIntoView: true
|
|
5502
|
+
});
|
|
5503
|
+
return true;
|
|
5504
|
+
});
|
|
5505
|
+
|
|
5506
|
+
const jsonHighlighting = styleTags({
|
|
5507
|
+
String: tags$1.string,
|
|
5508
|
+
Number: tags$1.number,
|
|
5509
|
+
"True False": tags$1.bool,
|
|
5510
|
+
PropertyName: tags$1.propertyName,
|
|
5511
|
+
Null: tags$1.null,
|
|
5512
|
+
",": tags$1.separator,
|
|
5513
|
+
"[ ]": tags$1.squareBracket,
|
|
5514
|
+
"{ }": tags$1.brace
|
|
5515
|
+
});
|
|
5516
|
+
|
|
5517
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
5518
|
+
const parser$1 = LRParser.deserialize({
|
|
5519
|
+
version: 14,
|
|
5520
|
+
states: "$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#CjOOQO'#Cp'#CpQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CrOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59U,59UO!iQPO,59UOVQPO,59QOqQPO'#CkO!nQPO,59^OOQO1G.k1G.kOVQPO'#ClO!vQPO,59aOOQO1G.p1G.pOOQO1G.l1G.lOOQO,59V,59VOOQO-E6i-E6iOOQO,59W,59WOOQO-E6j-E6j",
|
|
5521
|
+
stateData: "#O~OcOS~OQSORSOSSOTSOWQO]ROePO~OVXOeUO~O[[O~PVOg^O~Oh_OVfX~OVaO~OhbO[iX~O[dO~Oh_OVfa~OhbO[ia~O",
|
|
5522
|
+
goto: "!kjPPPPPPkPPkqwPPk{!RPPP!XP!ePP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",
|
|
5523
|
+
nodeNames: "⚠ JsonText True False Null Number String } { Object Property PropertyName ] [ Array",
|
|
5524
|
+
maxTerm: 25,
|
|
5525
|
+
nodeProps: [["openedBy", 7, "{", 12, "["], ["closedBy", 8, "}", 13, "]"]],
|
|
5526
|
+
propSources: [jsonHighlighting],
|
|
5527
|
+
skippedNodes: [0],
|
|
5528
|
+
repeatNodeCount: 2,
|
|
5529
|
+
tokenData: "(p~RaXY!WYZ!W]^!Wpq!Wrs!]|}$i}!O$n!Q!R$w!R![&V![!]&h!}#O&m#P#Q&r#Y#Z&w#b#c'f#h#i'}#o#p(f#q#r(k~!]Oc~~!`Upq!]qr!]rs!rs#O!]#O#P!w#P~!]~!wOe~~!zXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#g~#jR!Q![#s!c!i#s#T#Z#s~#vR!Q![$P!c!i$P#T#Z$P~$SR!Q![$]!c!i$]#T#Z$]~$`R!Q![!]!c!i!]#T#Z!]~$nOh~~$qQ!Q!R$w!R![&V~$|RT~!O!P%V!g!h%k#X#Y%k~%YP!Q![%]~%bRT~!Q![%]!g!h%k#X#Y%k~%nR{|%w}!O%w!Q![%}~%zP!Q![%}~&SPT~!Q![%}~&[ST~!O!P%V!Q![&V!g!h%k#X#Y%k~&mOg~~&rO]~~&wO[~~&zP#T#U&}~'QP#`#a'T~'WP#g#h'Z~'^P#X#Y'a~'fOR~~'iP#i#j'l~'oP#`#a'r~'uP#`#a'x~'}OS~~(QP#f#g(T~(WP#i#j(Z~(^P#X#Y(a~(fOQ~~(kOW~~(pOV~",
|
|
5530
|
+
tokenizers: [0],
|
|
5531
|
+
topRules: {
|
|
5532
|
+
"JsonText": [0, 1]
|
|
5533
|
+
},
|
|
5534
|
+
tokenPrec: 0
|
|
5535
|
+
});
|
|
5536
|
+
|
|
5537
|
+
/**
|
|
5538
|
+
A language provider that provides JSON parsing.
|
|
5539
|
+
*/
|
|
5540
|
+
const jsonLanguage = /*@__PURE__*/LRLanguage.define({
|
|
5541
|
+
parser: /*@__PURE__*/parser$1.configure({
|
|
5542
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
5543
|
+
Object: /*@__PURE__*/continuedIndent({
|
|
5544
|
+
except: /^\s*\}/
|
|
5545
|
+
}),
|
|
5546
|
+
Array: /*@__PURE__*/continuedIndent({
|
|
5547
|
+
except: /^\s*\]/
|
|
5548
|
+
})
|
|
5549
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
5550
|
+
"Object Array": foldInside
|
|
5551
|
+
})]
|
|
5552
|
+
}),
|
|
5553
|
+
languageData: {
|
|
5554
|
+
closeBrackets: {
|
|
5555
|
+
brackets: ["[", "{", '"']
|
|
5556
|
+
},
|
|
5557
|
+
indentOnInput: /^\s*[\}\]]$/
|
|
5558
|
+
}
|
|
5559
|
+
});
|
|
5560
|
+
/**
|
|
5561
|
+
JSON language support.
|
|
5562
|
+
*/
|
|
5563
|
+
function json() {
|
|
5564
|
+
return new LanguageSupport(jsonLanguage);
|
|
5565
|
+
}
|
|
5566
|
+
|
|
5567
|
+
class CompositeBlock {
|
|
5568
|
+
constructor(type,
|
|
5569
|
+
// Used for indentation in list items, markup character in lists
|
|
5570
|
+
value, from, hash, end, children, positions) {
|
|
5571
|
+
this.type = type;
|
|
5572
|
+
this.value = value;
|
|
5573
|
+
this.from = from;
|
|
5574
|
+
this.hash = hash;
|
|
5575
|
+
this.end = end;
|
|
5576
|
+
this.children = children;
|
|
5577
|
+
this.positions = positions;
|
|
5578
|
+
this.hashProp = [[NodeProp.contextHash, hash]];
|
|
5579
|
+
}
|
|
5580
|
+
static create(type, value, from, parentHash, end) {
|
|
5581
|
+
let hash = parentHash + (parentHash << 8) + type + (value << 4) | 0;
|
|
5582
|
+
return new CompositeBlock(type, value, from, hash, end, [], []);
|
|
5583
|
+
}
|
|
5584
|
+
addChild(child, pos) {
|
|
5585
|
+
if (child.prop(NodeProp.contextHash) != this.hash) child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);
|
|
5586
|
+
this.children.push(child);
|
|
5587
|
+
this.positions.push(pos);
|
|
5588
|
+
}
|
|
5589
|
+
toTree(nodeSet, end = this.end) {
|
|
5590
|
+
let last = this.children.length - 1;
|
|
5591
|
+
if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from);
|
|
5592
|
+
let tree = new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({
|
|
5593
|
+
makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)
|
|
5594
|
+
});
|
|
5595
|
+
return tree;
|
|
5596
|
+
}
|
|
5597
|
+
}
|
|
5598
|
+
var Type;
|
|
5599
|
+
(function (Type) {
|
|
5600
|
+
Type[Type["Document"] = 1] = "Document";
|
|
5601
|
+
Type[Type["CodeBlock"] = 2] = "CodeBlock";
|
|
5602
|
+
Type[Type["FencedCode"] = 3] = "FencedCode";
|
|
5603
|
+
Type[Type["Blockquote"] = 4] = "Blockquote";
|
|
5604
|
+
Type[Type["HorizontalRule"] = 5] = "HorizontalRule";
|
|
5605
|
+
Type[Type["BulletList"] = 6] = "BulletList";
|
|
5606
|
+
Type[Type["OrderedList"] = 7] = "OrderedList";
|
|
5607
|
+
Type[Type["ListItem"] = 8] = "ListItem";
|
|
5608
|
+
Type[Type["ATXHeading1"] = 9] = "ATXHeading1";
|
|
5609
|
+
Type[Type["ATXHeading2"] = 10] = "ATXHeading2";
|
|
5610
|
+
Type[Type["ATXHeading3"] = 11] = "ATXHeading3";
|
|
5611
|
+
Type[Type["ATXHeading4"] = 12] = "ATXHeading4";
|
|
5612
|
+
Type[Type["ATXHeading5"] = 13] = "ATXHeading5";
|
|
5613
|
+
Type[Type["ATXHeading6"] = 14] = "ATXHeading6";
|
|
5614
|
+
Type[Type["SetextHeading1"] = 15] = "SetextHeading1";
|
|
5615
|
+
Type[Type["SetextHeading2"] = 16] = "SetextHeading2";
|
|
5616
|
+
Type[Type["HTMLBlock"] = 17] = "HTMLBlock";
|
|
5617
|
+
Type[Type["LinkReference"] = 18] = "LinkReference";
|
|
5618
|
+
Type[Type["Paragraph"] = 19] = "Paragraph";
|
|
5619
|
+
Type[Type["CommentBlock"] = 20] = "CommentBlock";
|
|
5620
|
+
Type[Type["ProcessingInstructionBlock"] = 21] = "ProcessingInstructionBlock";
|
|
5621
|
+
// Inline
|
|
5622
|
+
Type[Type["Escape"] = 22] = "Escape";
|
|
5623
|
+
Type[Type["Entity"] = 23] = "Entity";
|
|
5624
|
+
Type[Type["HardBreak"] = 24] = "HardBreak";
|
|
5625
|
+
Type[Type["Emphasis"] = 25] = "Emphasis";
|
|
5626
|
+
Type[Type["StrongEmphasis"] = 26] = "StrongEmphasis";
|
|
5627
|
+
Type[Type["Link"] = 27] = "Link";
|
|
5628
|
+
Type[Type["Image"] = 28] = "Image";
|
|
5629
|
+
Type[Type["InlineCode"] = 29] = "InlineCode";
|
|
5630
|
+
Type[Type["HTMLTag"] = 30] = "HTMLTag";
|
|
5631
|
+
Type[Type["Comment"] = 31] = "Comment";
|
|
5632
|
+
Type[Type["ProcessingInstruction"] = 32] = "ProcessingInstruction";
|
|
5633
|
+
Type[Type["URL"] = 33] = "URL";
|
|
5634
|
+
// Smaller tokens
|
|
5635
|
+
Type[Type["HeaderMark"] = 34] = "HeaderMark";
|
|
5636
|
+
Type[Type["QuoteMark"] = 35] = "QuoteMark";
|
|
5637
|
+
Type[Type["ListMark"] = 36] = "ListMark";
|
|
5638
|
+
Type[Type["LinkMark"] = 37] = "LinkMark";
|
|
5639
|
+
Type[Type["EmphasisMark"] = 38] = "EmphasisMark";
|
|
5640
|
+
Type[Type["CodeMark"] = 39] = "CodeMark";
|
|
5641
|
+
Type[Type["CodeText"] = 40] = "CodeText";
|
|
5642
|
+
Type[Type["CodeInfo"] = 41] = "CodeInfo";
|
|
5643
|
+
Type[Type["LinkTitle"] = 42] = "LinkTitle";
|
|
5644
|
+
Type[Type["LinkLabel"] = 43] = "LinkLabel";
|
|
5645
|
+
})(Type || (Type = {}));
|
|
5646
|
+
/// Data structure used to accumulate a block's content during [leaf
|
|
5647
|
+
/// block parsing](#BlockParser.leaf).
|
|
5648
|
+
class LeafBlock {
|
|
5649
|
+
/// @internal
|
|
5650
|
+
constructor(
|
|
5651
|
+
/// The start position of the block.
|
|
5652
|
+
start,
|
|
5653
|
+
/// The block's text content.
|
|
5654
|
+
content) {
|
|
5655
|
+
this.start = start;
|
|
5656
|
+
this.content = content;
|
|
5657
|
+
/// @internal
|
|
5658
|
+
this.marks = [];
|
|
5659
|
+
/// The block parsers active for this block.
|
|
5660
|
+
this.parsers = [];
|
|
5661
|
+
}
|
|
5662
|
+
}
|
|
5663
|
+
/// Data structure used during block-level per-line parsing.
|
|
5664
|
+
class Line {
|
|
5665
|
+
constructor() {
|
|
5666
|
+
/// The line's full text.
|
|
5667
|
+
this.text = "";
|
|
5668
|
+
/// The base indent provided by the composite contexts (that have
|
|
5669
|
+
/// been handled so far).
|
|
5670
|
+
this.baseIndent = 0;
|
|
5671
|
+
/// The string position corresponding to the base indent.
|
|
5672
|
+
this.basePos = 0;
|
|
5673
|
+
/// The number of contexts handled @internal
|
|
5674
|
+
this.depth = 0;
|
|
5675
|
+
/// Any markers (i.e. block quote markers) parsed for the contexts. @internal
|
|
5676
|
+
this.markers = [];
|
|
5677
|
+
/// The position of the next non-whitespace character beyond any
|
|
5678
|
+
/// list, blockquote, or other composite block markers.
|
|
5679
|
+
this.pos = 0;
|
|
5680
|
+
/// The column of the next non-whitespace character.
|
|
5681
|
+
this.indent = 0;
|
|
5682
|
+
/// The character code of the character after `pos`.
|
|
5683
|
+
this.next = -1;
|
|
5684
|
+
}
|
|
5685
|
+
/// @internal
|
|
5686
|
+
forward() {
|
|
5687
|
+
if (this.basePos > this.pos) this.forwardInner();
|
|
5688
|
+
}
|
|
5689
|
+
/// @internal
|
|
5690
|
+
forwardInner() {
|
|
5691
|
+
let newPos = this.skipSpace(this.basePos);
|
|
5692
|
+
this.indent = this.countIndent(newPos, this.pos, this.indent);
|
|
5693
|
+
this.pos = newPos;
|
|
5694
|
+
this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);
|
|
5695
|
+
}
|
|
5696
|
+
/// Skip whitespace after the given position, return the position of
|
|
5697
|
+
/// the next non-space character or the end of the line if there's
|
|
5698
|
+
/// only space after `from`.
|
|
5699
|
+
skipSpace(from) {
|
|
5700
|
+
return skipSpace(this.text, from);
|
|
5701
|
+
}
|
|
5702
|
+
/// @internal
|
|
5703
|
+
reset(text) {
|
|
5704
|
+
this.text = text;
|
|
5705
|
+
this.baseIndent = this.basePos = this.pos = this.indent = 0;
|
|
5706
|
+
this.forwardInner();
|
|
5707
|
+
this.depth = 1;
|
|
5708
|
+
while (this.markers.length) this.markers.pop();
|
|
5709
|
+
}
|
|
5710
|
+
/// Move the line's base position forward to the given position.
|
|
5711
|
+
/// This should only be called by composite [block
|
|
5712
|
+
/// parsers](#BlockParser.parse) or [markup skipping
|
|
5713
|
+
/// functions](#NodeSpec.composite).
|
|
5714
|
+
moveBase(to) {
|
|
5715
|
+
this.basePos = to;
|
|
5716
|
+
this.baseIndent = this.countIndent(to, this.pos, this.indent);
|
|
5717
|
+
}
|
|
5718
|
+
/// Move the line's base position forward to the given _column_.
|
|
5719
|
+
moveBaseColumn(indent) {
|
|
5720
|
+
this.baseIndent = indent;
|
|
5721
|
+
this.basePos = this.findColumn(indent);
|
|
5722
|
+
}
|
|
5723
|
+
/// Store a composite-block-level marker. Should be called from
|
|
5724
|
+
/// [markup skipping functions](#NodeSpec.composite) when they
|
|
5725
|
+
/// consume any non-whitespace characters.
|
|
5726
|
+
addMarker(elt) {
|
|
5727
|
+
this.markers.push(elt);
|
|
5728
|
+
}
|
|
5729
|
+
/// Find the column position at `to`, optionally starting at a given
|
|
5730
|
+
/// position and column.
|
|
5731
|
+
countIndent(to, from = 0, indent = 0) {
|
|
5732
|
+
for (let i = from; i < to; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;
|
|
5733
|
+
return indent;
|
|
5734
|
+
}
|
|
5735
|
+
/// Find the position corresponding to the given column.
|
|
5736
|
+
findColumn(goal) {
|
|
5737
|
+
let i = 0;
|
|
5738
|
+
for (let indent = 0; i < this.text.length && indent < goal; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;
|
|
5739
|
+
return i;
|
|
5740
|
+
}
|
|
5741
|
+
/// @internal
|
|
5742
|
+
scrub() {
|
|
5743
|
+
if (!this.baseIndent) return this.text;
|
|
5744
|
+
let result = "";
|
|
5745
|
+
for (let i = 0; i < this.basePos; i++) result += " ";
|
|
5746
|
+
return result + this.text.slice(this.basePos);
|
|
5747
|
+
}
|
|
5748
|
+
}
|
|
5749
|
+
function skipForList(bl, cx, line) {
|
|
5750
|
+
if (line.pos == line.text.length || bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent) return true;
|
|
5751
|
+
if (line.indent >= line.baseIndent + 4) return false;
|
|
5752
|
+
let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);
|
|
5753
|
+
return size > 0 && (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) && line.text.charCodeAt(line.pos + size - 1) == bl.value;
|
|
5754
|
+
}
|
|
5755
|
+
const DefaultSkipMarkup = {
|
|
5756
|
+
[Type.Blockquote](bl, cx, line) {
|
|
5757
|
+
if (line.next != 62 /* '>' */) return false;
|
|
5758
|
+
line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));
|
|
5759
|
+
line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));
|
|
5760
|
+
bl.end = cx.lineStart + line.text.length;
|
|
5761
|
+
return true;
|
|
5762
|
+
},
|
|
5763
|
+
[Type.ListItem](bl, _cx, line) {
|
|
5764
|
+
if (line.indent < line.baseIndent + bl.value && line.next > -1) return false;
|
|
5765
|
+
line.moveBaseColumn(line.baseIndent + bl.value);
|
|
5766
|
+
return true;
|
|
5767
|
+
},
|
|
5768
|
+
[Type.OrderedList]: skipForList,
|
|
5769
|
+
[Type.BulletList]: skipForList,
|
|
5770
|
+
[Type.Document]() {
|
|
5771
|
+
return true;
|
|
5772
|
+
}
|
|
5773
|
+
};
|
|
5774
|
+
function space(ch) {
|
|
5775
|
+
return ch == 32 || ch == 9 || ch == 10 || ch == 13;
|
|
5776
|
+
}
|
|
5777
|
+
function skipSpace(line, i = 0) {
|
|
5778
|
+
while (i < line.length && space(line.charCodeAt(i))) i++;
|
|
5779
|
+
return i;
|
|
5780
|
+
}
|
|
5781
|
+
function skipSpaceBack(line, i, to) {
|
|
5782
|
+
while (i > to && space(line.charCodeAt(i - 1))) i--;
|
|
5783
|
+
return i;
|
|
5784
|
+
}
|
|
5785
|
+
function isFencedCode(line) {
|
|
5786
|
+
if (line.next != 96 && line.next != 126 /* '`~' */) return -1;
|
|
5787
|
+
let pos = line.pos + 1;
|
|
5788
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++;
|
|
5789
|
+
if (pos < line.pos + 3) return -1;
|
|
5790
|
+
if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1;
|
|
5791
|
+
return pos;
|
|
5792
|
+
}
|
|
5793
|
+
function isBlockquote(line) {
|
|
5794
|
+
return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;
|
|
5795
|
+
}
|
|
5796
|
+
function isHorizontalRule(line, cx, breaking) {
|
|
5797
|
+
if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */) return -1;
|
|
5798
|
+
let count = 1;
|
|
5799
|
+
for (let pos = line.pos + 1; pos < line.text.length; pos++) {
|
|
5800
|
+
let ch = line.text.charCodeAt(pos);
|
|
5801
|
+
if (ch == line.next) count++;else if (!space(ch)) return -1;
|
|
5802
|
+
}
|
|
5803
|
+
// Setext headers take precedence
|
|
5804
|
+
if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1;
|
|
5805
|
+
return count < 3 ? -1 : 1;
|
|
5806
|
+
}
|
|
5807
|
+
function inList(cx, type) {
|
|
5808
|
+
for (let i = cx.stack.length - 1; i >= 0; i--) if (cx.stack[i].type == type) return true;
|
|
5809
|
+
return false;
|
|
5810
|
+
}
|
|
5811
|
+
function isBulletList(line, cx, breaking) {
|
|
5812
|
+
return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) && (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) && (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;
|
|
5813
|
+
}
|
|
5814
|
+
function isOrderedList(line, cx, breaking) {
|
|
5815
|
+
let pos = line.pos,
|
|
5816
|
+
next = line.next;
|
|
5817
|
+
for (;;) {
|
|
5818
|
+
if (next >= 48 && next <= 57 /* '0-9' */) pos++;else break;
|
|
5819
|
+
if (pos == line.text.length) return -1;
|
|
5820
|
+
next = line.text.charCodeAt(pos);
|
|
5821
|
+
}
|
|
5822
|
+
if (pos == line.pos || pos > line.pos + 9 || next != 46 && next != 41 /* '.)' */ || pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1)) || breaking && !inList(cx, Type.OrderedList) && (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */)) return -1;
|
|
5823
|
+
return pos + 1 - line.pos;
|
|
5824
|
+
}
|
|
5825
|
+
function isAtxHeading(line) {
|
|
5826
|
+
if (line.next != 35 /* '#' */) return -1;
|
|
5827
|
+
let pos = line.pos + 1;
|
|
5828
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++;
|
|
5829
|
+
if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1;
|
|
5830
|
+
let size = pos - line.pos;
|
|
5831
|
+
return size > 6 ? -1 : size;
|
|
5832
|
+
}
|
|
5833
|
+
function isSetextUnderline(line) {
|
|
5834
|
+
if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4) return -1;
|
|
5835
|
+
let pos = line.pos + 1;
|
|
5836
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++;
|
|
5837
|
+
let end = pos;
|
|
5838
|
+
while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++;
|
|
5839
|
+
return pos == line.text.length ? end : -1;
|
|
5840
|
+
}
|
|
5841
|
+
const EmptyLine = /^[ \t]*$/,
|
|
5842
|
+
CommentEnd = /-->/,
|
|
5843
|
+
ProcessingEnd = /\?>/;
|
|
5844
|
+
const HTMLBlockStyle = [[/^<(?:script|pre|style)(?:\s|>|$)/i, /<\/(?:script|pre|style)>/i], [/^\s*<!--/, CommentEnd], [/^\s*<\?/, ProcessingEnd], [/^\s*<![A-Z]/, />/], [/^\s*<!\[CDATA\[/, /\]\]>/], [/^\s*<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/i, EmptyLine], [/^\s*(?:<\/[a-z][\w-]*\s*>|<[a-z][\w-]*(\s+[a-z:_][\w-.]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*>)\s*$/i, EmptyLine]];
|
|
5845
|
+
function isHTMLBlock(line, _cx, breaking) {
|
|
5846
|
+
if (line.next != 60 /* '<' */) return -1;
|
|
5847
|
+
let rest = line.text.slice(line.pos);
|
|
5848
|
+
for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++) if (HTMLBlockStyle[i][0].test(rest)) return i;
|
|
5849
|
+
return -1;
|
|
5850
|
+
}
|
|
5851
|
+
function getListIndent(line, pos) {
|
|
5852
|
+
let indentAfter = line.countIndent(pos, line.pos, line.indent);
|
|
5853
|
+
let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);
|
|
5854
|
+
return indented >= indentAfter + 5 ? indentAfter + 1 : indented;
|
|
5855
|
+
}
|
|
5856
|
+
function addCodeText(marks, from, to) {
|
|
5857
|
+
let last = marks.length - 1;
|
|
5858
|
+
if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText) marks[last].to = to;else marks.push(elt(Type.CodeText, from, to));
|
|
5859
|
+
}
|
|
5860
|
+
// Rules for parsing blocks. A return value of false means the rule
|
|
5861
|
+
// doesn't apply here, true means it does. When true is returned and
|
|
5862
|
+
// `p.line` has been updated, the rule is assumed to have consumed a
|
|
5863
|
+
// leaf block. Otherwise, it is assumed to have opened a context.
|
|
5864
|
+
const DefaultBlockParsers = {
|
|
5865
|
+
LinkReference: undefined,
|
|
5866
|
+
IndentedCode(cx, line) {
|
|
5867
|
+
let base = line.baseIndent + 4;
|
|
5868
|
+
if (line.indent < base) return false;
|
|
5869
|
+
let start = line.findColumn(base);
|
|
5870
|
+
let from = cx.lineStart + start,
|
|
5871
|
+
to = cx.lineStart + line.text.length;
|
|
5872
|
+
let marks = [],
|
|
5873
|
+
pendingMarks = [];
|
|
5874
|
+
addCodeText(marks, from, to);
|
|
5875
|
+
while (cx.nextLine() && line.depth >= cx.stack.length) {
|
|
5876
|
+
if (line.pos == line.text.length) {
|
|
5877
|
+
// Empty
|
|
5878
|
+
addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);
|
|
5879
|
+
for (let m of line.markers) pendingMarks.push(m);
|
|
5880
|
+
} else if (line.indent < base) {
|
|
5881
|
+
break;
|
|
5882
|
+
} else {
|
|
5883
|
+
if (pendingMarks.length) {
|
|
5884
|
+
for (let m of pendingMarks) {
|
|
5885
|
+
if (m.type == Type.CodeText) addCodeText(marks, m.from, m.to);else marks.push(m);
|
|
5886
|
+
}
|
|
5887
|
+
pendingMarks = [];
|
|
5888
|
+
}
|
|
5889
|
+
addCodeText(marks, cx.lineStart - 1, cx.lineStart);
|
|
5890
|
+
for (let m of line.markers) marks.push(m);
|
|
5891
|
+
to = cx.lineStart + line.text.length;
|
|
5892
|
+
let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);
|
|
5893
|
+
if (codeStart < to) addCodeText(marks, codeStart, to);
|
|
5894
|
+
}
|
|
5895
|
+
}
|
|
5896
|
+
if (pendingMarks.length) {
|
|
5897
|
+
pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);
|
|
5898
|
+
if (pendingMarks.length) line.markers = pendingMarks.concat(line.markers);
|
|
5899
|
+
}
|
|
5900
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);
|
|
5901
|
+
return true;
|
|
5902
|
+
},
|
|
5903
|
+
FencedCode(cx, line) {
|
|
5904
|
+
let fenceEnd = isFencedCode(line);
|
|
5905
|
+
if (fenceEnd < 0) return false;
|
|
5906
|
+
let from = cx.lineStart + line.pos,
|
|
5907
|
+
ch = line.next,
|
|
5908
|
+
len = fenceEnd - line.pos;
|
|
5909
|
+
let infoFrom = line.skipSpace(fenceEnd),
|
|
5910
|
+
infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);
|
|
5911
|
+
let marks = [elt(Type.CodeMark, from, from + len)];
|
|
5912
|
+
if (infoFrom < infoTo) marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));
|
|
5913
|
+
for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {
|
|
5914
|
+
let i = line.pos;
|
|
5915
|
+
if (line.indent - line.baseIndent < 4) while (i < line.text.length && line.text.charCodeAt(i) == ch) i++;
|
|
5916
|
+
if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {
|
|
5917
|
+
for (let m of line.markers) marks.push(m);
|
|
5918
|
+
marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));
|
|
5919
|
+
cx.nextLine();
|
|
5920
|
+
break;
|
|
5921
|
+
} else {
|
|
5922
|
+
if (!first) addCodeText(marks, cx.lineStart - 1, cx.lineStart);
|
|
5923
|
+
for (let m of line.markers) marks.push(m);
|
|
5924
|
+
let textStart = cx.lineStart + line.basePos,
|
|
5925
|
+
textEnd = cx.lineStart + line.text.length;
|
|
5926
|
+
if (textStart < textEnd) addCodeText(marks, textStart, textEnd);
|
|
5927
|
+
}
|
|
5928
|
+
}
|
|
5929
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.FencedCode, cx.prevLineEnd() - from), from);
|
|
5930
|
+
return true;
|
|
5931
|
+
},
|
|
5932
|
+
Blockquote(cx, line) {
|
|
5933
|
+
let size = isBlockquote(line);
|
|
5934
|
+
if (size < 0) return false;
|
|
5935
|
+
cx.startContext(Type.Blockquote, line.pos);
|
|
5936
|
+
cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);
|
|
5937
|
+
line.moveBase(line.pos + size);
|
|
5938
|
+
return null;
|
|
5939
|
+
},
|
|
5940
|
+
HorizontalRule(cx, line) {
|
|
5941
|
+
if (isHorizontalRule(line, cx, false) < 0) return false;
|
|
5942
|
+
let from = cx.lineStart + line.pos;
|
|
5943
|
+
cx.nextLine();
|
|
5944
|
+
cx.addNode(Type.HorizontalRule, from);
|
|
5945
|
+
return true;
|
|
5946
|
+
},
|
|
5947
|
+
BulletList(cx, line) {
|
|
5948
|
+
let size = isBulletList(line, cx, false);
|
|
5949
|
+
if (size < 0) return false;
|
|
5950
|
+
if (cx.block.type != Type.BulletList) cx.startContext(Type.BulletList, line.basePos, line.next);
|
|
5951
|
+
let newBase = getListIndent(line, line.pos + 1);
|
|
5952
|
+
cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);
|
|
5953
|
+
cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);
|
|
5954
|
+
line.moveBaseColumn(newBase);
|
|
5955
|
+
return null;
|
|
5956
|
+
},
|
|
5957
|
+
OrderedList(cx, line) {
|
|
5958
|
+
let size = isOrderedList(line, cx, false);
|
|
5959
|
+
if (size < 0) return false;
|
|
5960
|
+
if (cx.block.type != Type.OrderedList) cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));
|
|
5961
|
+
let newBase = getListIndent(line, line.pos + size);
|
|
5962
|
+
cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);
|
|
5963
|
+
cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);
|
|
5964
|
+
line.moveBaseColumn(newBase);
|
|
5965
|
+
return null;
|
|
5966
|
+
},
|
|
5967
|
+
ATXHeading(cx, line) {
|
|
5968
|
+
let size = isAtxHeading(line);
|
|
5969
|
+
if (size < 0) return false;
|
|
5970
|
+
let off = line.pos,
|
|
5971
|
+
from = cx.lineStart + off;
|
|
5972
|
+
let endOfSpace = skipSpaceBack(line.text, line.text.length, off),
|
|
5973
|
+
after = endOfSpace;
|
|
5974
|
+
while (after > off && line.text.charCodeAt(after - 1) == line.next) after--;
|
|
5975
|
+
if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1))) after = line.text.length;
|
|
5976
|
+
let buf = cx.buffer.write(Type.HeaderMark, 0, size).writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);
|
|
5977
|
+
if (after < line.text.length) buf.write(Type.HeaderMark, after - off, endOfSpace - off);
|
|
5978
|
+
let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);
|
|
5979
|
+
cx.nextLine();
|
|
5980
|
+
cx.addNode(node, from);
|
|
5981
|
+
return true;
|
|
5982
|
+
},
|
|
5983
|
+
HTMLBlock(cx, line) {
|
|
5984
|
+
let type = isHTMLBlock(line, cx, false);
|
|
5985
|
+
if (type < 0) return false;
|
|
5986
|
+
let from = cx.lineStart + line.pos,
|
|
5987
|
+
end = HTMLBlockStyle[type][1];
|
|
5988
|
+
let marks = [],
|
|
5989
|
+
trailing = end != EmptyLine;
|
|
5990
|
+
while (!end.test(line.text) && cx.nextLine()) {
|
|
5991
|
+
if (line.depth < cx.stack.length) {
|
|
5992
|
+
trailing = false;
|
|
5993
|
+
break;
|
|
5994
|
+
}
|
|
5995
|
+
for (let m of line.markers) marks.push(m);
|
|
5996
|
+
}
|
|
5997
|
+
if (trailing) cx.nextLine();
|
|
5998
|
+
let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;
|
|
5999
|
+
let to = cx.prevLineEnd();
|
|
6000
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);
|
|
6001
|
+
return true;
|
|
6002
|
+
},
|
|
6003
|
+
SetextHeading: undefined // Specifies relative precedence for block-continue function
|
|
6004
|
+
};
|
|
6005
|
+
// This implements a state machine that incrementally parses link references. At each
|
|
6006
|
+
// next line, it looks ahead to see if the line continues the reference or not. If it
|
|
6007
|
+
// doesn't and a valid link is available ending before that line, it finishes that.
|
|
6008
|
+
// Similarly, on `finish` (when the leaf is terminated by external circumstances), it
|
|
6009
|
+
// creates a link reference if there's a valid reference up to the current point.
|
|
6010
|
+
class LinkReferenceParser {
|
|
6011
|
+
constructor(leaf) {
|
|
6012
|
+
this.stage = 0 /* Start */;
|
|
6013
|
+
this.elts = [];
|
|
6014
|
+
this.pos = 0;
|
|
6015
|
+
this.start = leaf.start;
|
|
6016
|
+
this.advance(leaf.content);
|
|
6017
|
+
}
|
|
6018
|
+
nextLine(cx, line, leaf) {
|
|
6019
|
+
if (this.stage == -1 /* Failed */) return false;
|
|
6020
|
+
let content = leaf.content + "\n" + line.scrub();
|
|
6021
|
+
let finish = this.advance(content);
|
|
6022
|
+
if (finish > -1 && finish < content.length) return this.complete(cx, leaf, finish);
|
|
6023
|
+
return false;
|
|
6024
|
+
}
|
|
6025
|
+
finish(cx, leaf) {
|
|
6026
|
+
if ((this.stage == 2 /* Link */ || this.stage == 3 /* Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length) return this.complete(cx, leaf, leaf.content.length);
|
|
6027
|
+
return false;
|
|
6028
|
+
}
|
|
6029
|
+
complete(cx, leaf, len) {
|
|
6030
|
+
cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));
|
|
6031
|
+
return true;
|
|
6032
|
+
}
|
|
6033
|
+
nextStage(elt) {
|
|
6034
|
+
if (elt) {
|
|
6035
|
+
this.pos = elt.to - this.start;
|
|
6036
|
+
this.elts.push(elt);
|
|
6037
|
+
this.stage++;
|
|
6038
|
+
return true;
|
|
6039
|
+
}
|
|
6040
|
+
if (elt === false) this.stage = -1 /* Failed */;
|
|
6041
|
+
return false;
|
|
6042
|
+
}
|
|
6043
|
+
advance(content) {
|
|
6044
|
+
for (;;) {
|
|
6045
|
+
if (this.stage == -1 /* Failed */) {
|
|
6046
|
+
return -1;
|
|
6047
|
+
} else if (this.stage == 0 /* Start */) {
|
|
6048
|
+
if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true))) return -1;
|
|
6049
|
+
if (content.charCodeAt(this.pos) != 58 /* ':' */) return this.stage = -1 /* Failed */;
|
|
6050
|
+
this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));
|
|
6051
|
+
this.pos++;
|
|
6052
|
+
} else if (this.stage == 1 /* Label */) {
|
|
6053
|
+
if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start))) return -1;
|
|
6054
|
+
} else if (this.stage == 2 /* Link */) {
|
|
6055
|
+
let skip = skipSpace(content, this.pos),
|
|
6056
|
+
end = 0;
|
|
6057
|
+
if (skip > this.pos) {
|
|
6058
|
+
let title = parseLinkTitle(content, skip, this.start);
|
|
6059
|
+
if (title) {
|
|
6060
|
+
let titleEnd = lineEnd(content, title.to - this.start);
|
|
6061
|
+
if (titleEnd > 0) {
|
|
6062
|
+
this.nextStage(title);
|
|
6063
|
+
end = titleEnd;
|
|
6064
|
+
}
|
|
6065
|
+
}
|
|
6066
|
+
}
|
|
6067
|
+
if (!end) end = lineEnd(content, this.pos);
|
|
6068
|
+
return end > 0 && end < content.length ? end : -1;
|
|
6069
|
+
} else {
|
|
6070
|
+
// RefStage.Title
|
|
6071
|
+
return lineEnd(content, this.pos);
|
|
6072
|
+
}
|
|
6073
|
+
}
|
|
6074
|
+
}
|
|
6075
|
+
}
|
|
6076
|
+
function lineEnd(text, pos) {
|
|
6077
|
+
for (; pos < text.length; pos++) {
|
|
6078
|
+
let next = text.charCodeAt(pos);
|
|
6079
|
+
if (next == 10) break;
|
|
6080
|
+
if (!space(next)) return -1;
|
|
6081
|
+
}
|
|
6082
|
+
return pos;
|
|
6083
|
+
}
|
|
6084
|
+
class SetextHeadingParser {
|
|
6085
|
+
nextLine(cx, line, leaf) {
|
|
6086
|
+
let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);
|
|
6087
|
+
let next = line.next;
|
|
6088
|
+
if (underline < 0) return false;
|
|
6089
|
+
let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);
|
|
6090
|
+
cx.nextLine();
|
|
6091
|
+
cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [...cx.parser.parseInline(leaf.content, leaf.start), underlineMark]));
|
|
6092
|
+
return true;
|
|
6093
|
+
}
|
|
6094
|
+
finish() {
|
|
6095
|
+
return false;
|
|
6096
|
+
}
|
|
6097
|
+
}
|
|
6098
|
+
const DefaultLeafBlocks = {
|
|
6099
|
+
LinkReference(_, leaf) {
|
|
6100
|
+
return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null;
|
|
6101
|
+
},
|
|
6102
|
+
SetextHeading() {
|
|
6103
|
+
return new SetextHeadingParser();
|
|
6104
|
+
}
|
|
6105
|
+
};
|
|
6106
|
+
const DefaultEndLeaf = [(_, line) => isAtxHeading(line) >= 0, (_, line) => isFencedCode(line) >= 0, (_, line) => isBlockquote(line) >= 0, (p, line) => isBulletList(line, p, true) >= 0, (p, line) => isOrderedList(line, p, true) >= 0, (p, line) => isHorizontalRule(line, p, true) >= 0, (p, line) => isHTMLBlock(line, p, true) >= 0];
|
|
6107
|
+
const scanLineResult = {
|
|
6108
|
+
text: "",
|
|
6109
|
+
end: 0
|
|
6110
|
+
};
|
|
6111
|
+
/// Block-level parsing functions get access to this context object.
|
|
6112
|
+
class BlockContext {
|
|
6113
|
+
/// @internal
|
|
6114
|
+
constructor(
|
|
6115
|
+
/// The parser configuration used.
|
|
6116
|
+
parser,
|
|
6117
|
+
/// @internal
|
|
6118
|
+
input, fragments,
|
|
6119
|
+
/// @internal
|
|
6120
|
+
ranges) {
|
|
6121
|
+
this.parser = parser;
|
|
6122
|
+
this.input = input;
|
|
6123
|
+
this.ranges = ranges;
|
|
6124
|
+
this.line = new Line();
|
|
6125
|
+
this.atEnd = false;
|
|
6126
|
+
/// @internal
|
|
6127
|
+
this.dontInject = new Set();
|
|
6128
|
+
this.stoppedAt = null;
|
|
6129
|
+
/// The range index that absoluteLineStart points into @internal
|
|
6130
|
+
this.rangeI = 0;
|
|
6131
|
+
this.to = ranges[ranges.length - 1].to;
|
|
6132
|
+
this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;
|
|
6133
|
+
this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);
|
|
6134
|
+
this.stack = [this.block];
|
|
6135
|
+
this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;
|
|
6136
|
+
this.readLine();
|
|
6137
|
+
}
|
|
6138
|
+
get parsedPos() {
|
|
6139
|
+
return this.absoluteLineStart;
|
|
6140
|
+
}
|
|
6141
|
+
advance() {
|
|
6142
|
+
if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt) return this.finish();
|
|
6143
|
+
let {
|
|
6144
|
+
line
|
|
6145
|
+
} = this;
|
|
6146
|
+
for (;;) {
|
|
6147
|
+
while (line.depth < this.stack.length) this.finishContext();
|
|
6148
|
+
for (let mark of line.markers) this.addNode(mark.type, mark.from, mark.to);
|
|
6149
|
+
if (line.pos < line.text.length) break;
|
|
6150
|
+
// Empty line
|
|
6151
|
+
if (!this.nextLine()) return this.finish();
|
|
6152
|
+
}
|
|
6153
|
+
if (this.fragments && this.reuseFragment(line.basePos)) return null;
|
|
6154
|
+
start: for (;;) {
|
|
6155
|
+
for (let type of this.parser.blockParsers) if (type) {
|
|
6156
|
+
let result = type(this, line);
|
|
6157
|
+
if (result != false) {
|
|
6158
|
+
if (result == true) return null;
|
|
6159
|
+
line.forward();
|
|
6160
|
+
continue start;
|
|
6161
|
+
}
|
|
6162
|
+
}
|
|
6163
|
+
break;
|
|
6164
|
+
}
|
|
6165
|
+
let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));
|
|
6166
|
+
for (let parse of this.parser.leafBlockParsers) if (parse) {
|
|
6167
|
+
let parser = parse(this, leaf);
|
|
6168
|
+
if (parser) leaf.parsers.push(parser);
|
|
6169
|
+
}
|
|
6170
|
+
lines: while (this.nextLine()) {
|
|
6171
|
+
if (line.pos == line.text.length) break;
|
|
6172
|
+
if (line.indent < line.baseIndent + 4) {
|
|
6173
|
+
for (let stop of this.parser.endLeafBlock) if (stop(this, line, leaf)) break lines;
|
|
6174
|
+
}
|
|
6175
|
+
for (let parser of leaf.parsers) if (parser.nextLine(this, line, leaf)) return null;
|
|
6176
|
+
leaf.content += "\n" + line.scrub();
|
|
6177
|
+
for (let m of line.markers) leaf.marks.push(m);
|
|
6178
|
+
}
|
|
6179
|
+
this.finishLeaf(leaf);
|
|
6180
|
+
return null;
|
|
6181
|
+
}
|
|
6182
|
+
stopAt(pos) {
|
|
6183
|
+
if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError("Can't move stoppedAt forward");
|
|
6184
|
+
this.stoppedAt = pos;
|
|
6185
|
+
}
|
|
6186
|
+
reuseFragment(start) {
|
|
6187
|
+
if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) || !this.fragments.matches(this.block.hash)) return false;
|
|
6188
|
+
let taken = this.fragments.takeNodes(this);
|
|
6189
|
+
if (!taken) return false;
|
|
6190
|
+
let withoutGaps = taken,
|
|
6191
|
+
end = this.absoluteLineStart + taken;
|
|
6192
|
+
for (let i = 1; i < this.ranges.length; i++) {
|
|
6193
|
+
let gapFrom = this.ranges[i - 1].to,
|
|
6194
|
+
gapTo = this.ranges[i].from;
|
|
6195
|
+
if (gapFrom >= this.lineStart && gapTo < end) withoutGaps -= gapTo - gapFrom;
|
|
6196
|
+
}
|
|
6197
|
+
this.lineStart += withoutGaps;
|
|
6198
|
+
this.absoluteLineStart += taken;
|
|
6199
|
+
this.moveRangeI();
|
|
6200
|
+
if (this.absoluteLineStart < this.to) {
|
|
6201
|
+
this.lineStart++;
|
|
6202
|
+
this.absoluteLineStart++;
|
|
6203
|
+
this.readLine();
|
|
6204
|
+
} else {
|
|
6205
|
+
this.atEnd = true;
|
|
6206
|
+
this.readLine();
|
|
6207
|
+
}
|
|
6208
|
+
return true;
|
|
6209
|
+
}
|
|
6210
|
+
/// The number of parent blocks surrounding the current block.
|
|
6211
|
+
get depth() {
|
|
6212
|
+
return this.stack.length;
|
|
6213
|
+
}
|
|
6214
|
+
/// Get the type of the parent block at the given depth. When no
|
|
6215
|
+
/// depth is passed, return the type of the innermost parent.
|
|
6216
|
+
parentType(depth = this.depth - 1) {
|
|
6217
|
+
return this.parser.nodeSet.types[this.stack[depth].type];
|
|
6218
|
+
}
|
|
6219
|
+
/// Move to the next input line. This should only be called by
|
|
6220
|
+
/// (non-composite) [block parsers](#BlockParser.parse) that consume
|
|
6221
|
+
/// the line directly, or leaf block parser
|
|
6222
|
+
/// [`nextLine`](#LeafBlockParser.nextLine) methods when they
|
|
6223
|
+
/// consume the current line (and return true).
|
|
6224
|
+
nextLine() {
|
|
6225
|
+
this.lineStart += this.line.text.length;
|
|
6226
|
+
if (this.absoluteLineEnd >= this.to) {
|
|
6227
|
+
this.absoluteLineStart = this.absoluteLineEnd;
|
|
6228
|
+
this.atEnd = true;
|
|
6229
|
+
this.readLine();
|
|
6230
|
+
return false;
|
|
6231
|
+
} else {
|
|
6232
|
+
this.lineStart++;
|
|
6233
|
+
this.absoluteLineStart = this.absoluteLineEnd + 1;
|
|
6234
|
+
this.moveRangeI();
|
|
6235
|
+
this.readLine();
|
|
6236
|
+
return true;
|
|
6237
|
+
}
|
|
6238
|
+
}
|
|
6239
|
+
moveRangeI() {
|
|
6240
|
+
while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {
|
|
6241
|
+
this.rangeI++;
|
|
6242
|
+
this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);
|
|
6243
|
+
}
|
|
6244
|
+
}
|
|
6245
|
+
/// @internal
|
|
6246
|
+
scanLine(start) {
|
|
6247
|
+
let r = scanLineResult;
|
|
6248
|
+
r.end = start;
|
|
6249
|
+
if (start >= this.to) {
|
|
6250
|
+
r.text = "";
|
|
6251
|
+
} else {
|
|
6252
|
+
r.text = this.lineChunkAt(start);
|
|
6253
|
+
r.end += r.text.length;
|
|
6254
|
+
if (this.ranges.length > 1) {
|
|
6255
|
+
let textOffset = this.absoluteLineStart,
|
|
6256
|
+
rangeI = this.rangeI;
|
|
6257
|
+
while (this.ranges[rangeI].to < r.end) {
|
|
6258
|
+
rangeI++;
|
|
6259
|
+
let nextFrom = this.ranges[rangeI].from;
|
|
6260
|
+
let after = this.lineChunkAt(nextFrom);
|
|
6261
|
+
r.end = nextFrom + after.length;
|
|
6262
|
+
r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;
|
|
6263
|
+
textOffset = r.end - r.text.length;
|
|
6264
|
+
}
|
|
6265
|
+
}
|
|
6266
|
+
}
|
|
6267
|
+
return r;
|
|
6268
|
+
}
|
|
6269
|
+
/// @internal
|
|
6270
|
+
readLine() {
|
|
6271
|
+
let {
|
|
6272
|
+
line
|
|
6273
|
+
} = this,
|
|
6274
|
+
{
|
|
6275
|
+
text,
|
|
6276
|
+
end
|
|
6277
|
+
} = this.scanLine(this.absoluteLineStart);
|
|
6278
|
+
this.absoluteLineEnd = end;
|
|
6279
|
+
line.reset(text);
|
|
6280
|
+
for (; line.depth < this.stack.length; line.depth++) {
|
|
6281
|
+
let cx = this.stack[line.depth],
|
|
6282
|
+
handler = this.parser.skipContextMarkup[cx.type];
|
|
6283
|
+
if (!handler) throw new Error("Unhandled block context " + Type[cx.type]);
|
|
6284
|
+
if (!handler(cx, this, line)) break;
|
|
6285
|
+
line.forward();
|
|
6286
|
+
}
|
|
6287
|
+
}
|
|
6288
|
+
lineChunkAt(pos) {
|
|
6289
|
+
let next = this.input.chunk(pos),
|
|
6290
|
+
text;
|
|
6291
|
+
if (!this.input.lineChunks) {
|
|
6292
|
+
let eol = next.indexOf("\n");
|
|
6293
|
+
text = eol < 0 ? next : next.slice(0, eol);
|
|
6294
|
+
} else {
|
|
6295
|
+
text = next == "\n" ? "" : next;
|
|
6296
|
+
}
|
|
6297
|
+
return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;
|
|
6298
|
+
}
|
|
6299
|
+
/// The end position of the previous line.
|
|
6300
|
+
prevLineEnd() {
|
|
6301
|
+
return this.atEnd ? this.lineStart : this.lineStart - 1;
|
|
6302
|
+
}
|
|
6303
|
+
/// @internal
|
|
6304
|
+
startContext(type, start, value = 0) {
|
|
6305
|
+
this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);
|
|
6306
|
+
this.stack.push(this.block);
|
|
6307
|
+
}
|
|
6308
|
+
/// Start a composite block. Should only be called from [block
|
|
6309
|
+
/// parser functions](#BlockParser.parse) that return null.
|
|
6310
|
+
startComposite(type, start, value = 0) {
|
|
6311
|
+
this.startContext(this.parser.getNodeType(type), start, value);
|
|
6312
|
+
}
|
|
6313
|
+
/// @internal
|
|
6314
|
+
addNode(block, from, to) {
|
|
6315
|
+
if (typeof block == "number") block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);
|
|
6316
|
+
this.block.addChild(block, from - this.block.from);
|
|
6317
|
+
}
|
|
6318
|
+
/// Add a block element. Can be called by [block
|
|
6319
|
+
/// parsers](#BlockParser.parse).
|
|
6320
|
+
addElement(elt) {
|
|
6321
|
+
this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);
|
|
6322
|
+
}
|
|
6323
|
+
/// Add a block element from a [leaf parser](#LeafBlockParser). This
|
|
6324
|
+
/// makes sure any extra composite block markup (such as blockquote
|
|
6325
|
+
/// markers) inside the block are also added to the syntax tree.
|
|
6326
|
+
addLeafElement(leaf, elt) {
|
|
6327
|
+
this.addNode(this.buffer.writeElements(injectMarks(elt.children, leaf.marks), -elt.from).finish(elt.type, elt.to - elt.from), elt.from);
|
|
6328
|
+
}
|
|
6329
|
+
/// @internal
|
|
6330
|
+
finishContext() {
|
|
6331
|
+
let cx = this.stack.pop();
|
|
6332
|
+
let top = this.stack[this.stack.length - 1];
|
|
6333
|
+
top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);
|
|
6334
|
+
this.block = top;
|
|
6335
|
+
}
|
|
6336
|
+
finish() {
|
|
6337
|
+
while (this.stack.length > 1) this.finishContext();
|
|
6338
|
+
return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));
|
|
6339
|
+
}
|
|
6340
|
+
addGaps(tree) {
|
|
6341
|
+
return this.ranges.length > 1 ? injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.dontInject) : tree;
|
|
6342
|
+
}
|
|
6343
|
+
/// @internal
|
|
6344
|
+
finishLeaf(leaf) {
|
|
6345
|
+
for (let parser of leaf.parsers) if (parser.finish(this, leaf)) return;
|
|
6346
|
+
let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);
|
|
6347
|
+
this.addNode(this.buffer.writeElements(inline, -leaf.start).finish(Type.Paragraph, leaf.content.length), leaf.start);
|
|
6348
|
+
}
|
|
6349
|
+
elt(type, from, to, children) {
|
|
6350
|
+
if (typeof type == "string") return elt(this.parser.getNodeType(type), from, to, children);
|
|
6351
|
+
return new TreeElement(type, from);
|
|
6352
|
+
}
|
|
6353
|
+
/// @internal
|
|
6354
|
+
get buffer() {
|
|
6355
|
+
return new Buffer(this.parser.nodeSet);
|
|
6356
|
+
}
|
|
6357
|
+
}
|
|
6358
|
+
function injectGaps(ranges, rangeI, tree, offset, dont) {
|
|
6359
|
+
if (dont.has(tree.tree)) return tree.tree;
|
|
6360
|
+
let rangeEnd = ranges[rangeI].to;
|
|
6361
|
+
let children = [],
|
|
6362
|
+
positions = [],
|
|
6363
|
+
start = tree.from + offset;
|
|
6364
|
+
function movePastNext(upto, inclusive) {
|
|
6365
|
+
while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {
|
|
6366
|
+
let size = ranges[rangeI + 1].from - rangeEnd;
|
|
6367
|
+
offset += size;
|
|
6368
|
+
upto += size;
|
|
6369
|
+
rangeI++;
|
|
6370
|
+
rangeEnd = ranges[rangeI].to;
|
|
6371
|
+
}
|
|
6372
|
+
}
|
|
6373
|
+
for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {
|
|
6374
|
+
movePastNext(ch.from + offset, true);
|
|
6375
|
+
let from = ch.from + offset,
|
|
6376
|
+
node;
|
|
6377
|
+
if (ch.to + offset > rangeEnd) {
|
|
6378
|
+
node = injectGaps(ranges, rangeI, ch, offset, dont);
|
|
6379
|
+
movePastNext(ch.to + offset, false);
|
|
6380
|
+
} else {
|
|
6381
|
+
node = ch.toTree();
|
|
6382
|
+
}
|
|
6383
|
+
children.push(node);
|
|
6384
|
+
positions.push(from - start);
|
|
6385
|
+
}
|
|
6386
|
+
movePastNext(tree.to + offset, false);
|
|
6387
|
+
return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);
|
|
6388
|
+
}
|
|
6389
|
+
/// A Markdown parser configuration.
|
|
6390
|
+
class MarkdownParser extends Parser {
|
|
6391
|
+
/// @internal
|
|
6392
|
+
constructor(
|
|
6393
|
+
/// The parser's syntax [node
|
|
6394
|
+
/// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).
|
|
6395
|
+
nodeSet,
|
|
6396
|
+
/// @internal
|
|
6397
|
+
blockParsers,
|
|
6398
|
+
/// @internal
|
|
6399
|
+
leafBlockParsers,
|
|
6400
|
+
/// @internal
|
|
6401
|
+
blockNames,
|
|
6402
|
+
/// @internal
|
|
6403
|
+
endLeafBlock,
|
|
6404
|
+
/// @internal
|
|
6405
|
+
skipContextMarkup,
|
|
6406
|
+
/// @internal
|
|
6407
|
+
inlineParsers,
|
|
6408
|
+
/// @internal
|
|
6409
|
+
inlineNames,
|
|
6410
|
+
/// @internal
|
|
6411
|
+
wrappers) {
|
|
6412
|
+
super();
|
|
6413
|
+
this.nodeSet = nodeSet;
|
|
6414
|
+
this.blockParsers = blockParsers;
|
|
6415
|
+
this.leafBlockParsers = leafBlockParsers;
|
|
6416
|
+
this.blockNames = blockNames;
|
|
6417
|
+
this.endLeafBlock = endLeafBlock;
|
|
6418
|
+
this.skipContextMarkup = skipContextMarkup;
|
|
6419
|
+
this.inlineParsers = inlineParsers;
|
|
6420
|
+
this.inlineNames = inlineNames;
|
|
6421
|
+
this.wrappers = wrappers;
|
|
6422
|
+
/// @internal
|
|
6423
|
+
this.nodeTypes = Object.create(null);
|
|
6424
|
+
for (let t of nodeSet.types) this.nodeTypes[t.name] = t.id;
|
|
6425
|
+
}
|
|
6426
|
+
createParse(input, fragments, ranges) {
|
|
6427
|
+
let parse = new BlockContext(this, input, fragments, ranges);
|
|
6428
|
+
for (let w of this.wrappers) parse = w(parse, input, fragments, ranges);
|
|
6429
|
+
return parse;
|
|
6430
|
+
}
|
|
6431
|
+
/// Reconfigure the parser.
|
|
6432
|
+
configure(spec) {
|
|
6433
|
+
let config = resolveConfig(spec);
|
|
6434
|
+
if (!config) return this;
|
|
6435
|
+
let {
|
|
6436
|
+
nodeSet,
|
|
6437
|
+
skipContextMarkup
|
|
6438
|
+
} = this;
|
|
6439
|
+
let blockParsers = this.blockParsers.slice(),
|
|
6440
|
+
leafBlockParsers = this.leafBlockParsers.slice(),
|
|
6441
|
+
blockNames = this.blockNames.slice(),
|
|
6442
|
+
inlineParsers = this.inlineParsers.slice(),
|
|
6443
|
+
inlineNames = this.inlineNames.slice(),
|
|
6444
|
+
endLeafBlock = this.endLeafBlock.slice(),
|
|
6445
|
+
wrappers = this.wrappers;
|
|
6446
|
+
if (nonEmpty(config.defineNodes)) {
|
|
6447
|
+
skipContextMarkup = Object.assign({}, skipContextMarkup);
|
|
6448
|
+
let nodeTypes = nodeSet.types.slice(),
|
|
6449
|
+
styles;
|
|
6450
|
+
for (let s of config.defineNodes) {
|
|
6451
|
+
let {
|
|
6452
|
+
name,
|
|
6453
|
+
block,
|
|
6454
|
+
composite,
|
|
6455
|
+
style
|
|
6456
|
+
} = typeof s == "string" ? {
|
|
6457
|
+
name: s
|
|
6458
|
+
} : s;
|
|
6459
|
+
if (nodeTypes.some(t => t.name == name)) continue;
|
|
6460
|
+
if (composite) skipContextMarkup[nodeTypes.length] = (bl, cx, line) => composite(cx, line, bl.value);
|
|
6461
|
+
let id = nodeTypes.length;
|
|
6462
|
+
let group = composite ? ["Block", "BlockContext"] : !block ? undefined : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? ["Block", "LeafBlock", "Heading"] : ["Block", "LeafBlock"];
|
|
6463
|
+
nodeTypes.push(NodeType.define({
|
|
6464
|
+
id,
|
|
6465
|
+
name,
|
|
6466
|
+
props: group && [[NodeProp.group, group]]
|
|
6467
|
+
}));
|
|
6468
|
+
if (style) {
|
|
6469
|
+
if (!styles) styles = {};
|
|
6470
|
+
if (Array.isArray(style) || style instanceof Tag) styles[name] = style;else Object.assign(styles, style);
|
|
6471
|
+
}
|
|
6472
|
+
}
|
|
6473
|
+
nodeSet = new NodeSet(nodeTypes);
|
|
6474
|
+
if (styles) nodeSet = nodeSet.extend(styleTags(styles));
|
|
6475
|
+
}
|
|
6476
|
+
if (nonEmpty(config.props)) nodeSet = nodeSet.extend(...config.props);
|
|
6477
|
+
if (nonEmpty(config.remove)) {
|
|
6478
|
+
for (let rm of config.remove) {
|
|
6479
|
+
let block = this.blockNames.indexOf(rm),
|
|
6480
|
+
inline = this.inlineNames.indexOf(rm);
|
|
6481
|
+
if (block > -1) blockParsers[block] = leafBlockParsers[block] = undefined;
|
|
6482
|
+
if (inline > -1) inlineParsers[inline] = undefined;
|
|
6483
|
+
}
|
|
6484
|
+
}
|
|
6485
|
+
if (nonEmpty(config.parseBlock)) {
|
|
6486
|
+
for (let spec of config.parseBlock) {
|
|
6487
|
+
let found = blockNames.indexOf(spec.name);
|
|
6488
|
+
if (found > -1) {
|
|
6489
|
+
blockParsers[found] = spec.parse;
|
|
6490
|
+
leafBlockParsers[found] = spec.leaf;
|
|
6491
|
+
} else {
|
|
6492
|
+
let pos = spec.before ? findName(blockNames, spec.before) : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;
|
|
6493
|
+
blockParsers.splice(pos, 0, spec.parse);
|
|
6494
|
+
leafBlockParsers.splice(pos, 0, spec.leaf);
|
|
6495
|
+
blockNames.splice(pos, 0, spec.name);
|
|
6496
|
+
}
|
|
6497
|
+
if (spec.endLeaf) endLeafBlock.push(spec.endLeaf);
|
|
6498
|
+
}
|
|
6499
|
+
}
|
|
6500
|
+
if (nonEmpty(config.parseInline)) {
|
|
6501
|
+
for (let spec of config.parseInline) {
|
|
6502
|
+
let found = inlineNames.indexOf(spec.name);
|
|
6503
|
+
if (found > -1) {
|
|
6504
|
+
inlineParsers[found] = spec.parse;
|
|
6505
|
+
} else {
|
|
6506
|
+
let pos = spec.before ? findName(inlineNames, spec.before) : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;
|
|
6507
|
+
inlineParsers.splice(pos, 0, spec.parse);
|
|
6508
|
+
inlineNames.splice(pos, 0, spec.name);
|
|
6509
|
+
}
|
|
6510
|
+
}
|
|
6511
|
+
}
|
|
6512
|
+
if (config.wrap) wrappers = wrappers.concat(config.wrap);
|
|
6513
|
+
return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);
|
|
6514
|
+
}
|
|
6515
|
+
/// @internal
|
|
6516
|
+
getNodeType(name) {
|
|
6517
|
+
let found = this.nodeTypes[name];
|
|
6518
|
+
if (found == null) throw new RangeError(`Unknown node type '${name}'`);
|
|
6519
|
+
return found;
|
|
6520
|
+
}
|
|
6521
|
+
/// Parse the given piece of inline text at the given offset,
|
|
6522
|
+
/// returning an array of [`Element`](#Element) objects representing
|
|
6523
|
+
/// the inline content.
|
|
6524
|
+
parseInline(text, offset) {
|
|
6525
|
+
let cx = new InlineContext(this, text, offset);
|
|
6526
|
+
outer: for (let pos = offset; pos < cx.end;) {
|
|
6527
|
+
let next = cx.char(pos);
|
|
6528
|
+
for (let token of this.inlineParsers) if (token) {
|
|
6529
|
+
let result = token(cx, next, pos);
|
|
6530
|
+
if (result >= 0) {
|
|
6531
|
+
pos = result;
|
|
6532
|
+
continue outer;
|
|
6533
|
+
}
|
|
6534
|
+
}
|
|
6535
|
+
pos++;
|
|
6536
|
+
}
|
|
6537
|
+
return cx.resolveMarkers(0);
|
|
6538
|
+
}
|
|
6539
|
+
}
|
|
6540
|
+
function nonEmpty(a) {
|
|
6541
|
+
return a != null && a.length > 0;
|
|
6542
|
+
}
|
|
6543
|
+
function resolveConfig(spec) {
|
|
6544
|
+
if (!Array.isArray(spec)) return spec;
|
|
6545
|
+
if (spec.length == 0) return null;
|
|
6546
|
+
let conf = resolveConfig(spec[0]);
|
|
6547
|
+
if (spec.length == 1) return conf;
|
|
6548
|
+
let rest = resolveConfig(spec.slice(1));
|
|
6549
|
+
if (!rest || !conf) return conf || rest;
|
|
6550
|
+
let conc = (a, b) => (a || none).concat(b || none);
|
|
6551
|
+
let wrapA = conf.wrap,
|
|
6552
|
+
wrapB = rest.wrap;
|
|
6553
|
+
return {
|
|
6554
|
+
props: conc(conf.props, rest.props),
|
|
6555
|
+
defineNodes: conc(conf.defineNodes, rest.defineNodes),
|
|
6556
|
+
parseBlock: conc(conf.parseBlock, rest.parseBlock),
|
|
6557
|
+
parseInline: conc(conf.parseInline, rest.parseInline),
|
|
6558
|
+
remove: conc(conf.remove, rest.remove),
|
|
6559
|
+
wrap: !wrapA ? wrapB : !wrapB ? wrapA : (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)
|
|
6560
|
+
};
|
|
6561
|
+
}
|
|
6562
|
+
function findName(names, name) {
|
|
6563
|
+
let found = names.indexOf(name);
|
|
6564
|
+
if (found < 0) throw new RangeError(`Position specified relative to unknown parser ${name}`);
|
|
6565
|
+
return found;
|
|
6566
|
+
}
|
|
6567
|
+
let nodeTypes = [NodeType.none];
|
|
6568
|
+
for (let i = 1, name; name = Type[i]; i++) {
|
|
6569
|
+
nodeTypes[i] = NodeType.define({
|
|
6570
|
+
id: i,
|
|
6571
|
+
name,
|
|
6572
|
+
props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? ["Block", "BlockContext"] : ["Block", "LeafBlock"]]]
|
|
6573
|
+
});
|
|
6574
|
+
}
|
|
6575
|
+
const none = [];
|
|
6576
|
+
class Buffer {
|
|
6577
|
+
constructor(nodeSet) {
|
|
6578
|
+
this.nodeSet = nodeSet;
|
|
6579
|
+
this.content = [];
|
|
6580
|
+
this.nodes = [];
|
|
6581
|
+
}
|
|
6582
|
+
write(type, from, to, children = 0) {
|
|
6583
|
+
this.content.push(type, from, to, 4 + children * 4);
|
|
6584
|
+
return this;
|
|
6585
|
+
}
|
|
6586
|
+
writeElements(elts, offset = 0) {
|
|
6587
|
+
for (let e of elts) e.writeTo(this, offset);
|
|
6588
|
+
return this;
|
|
6589
|
+
}
|
|
6590
|
+
finish(type, length) {
|
|
6591
|
+
return Tree.build({
|
|
6592
|
+
buffer: this.content,
|
|
6593
|
+
nodeSet: this.nodeSet,
|
|
6594
|
+
reused: this.nodes,
|
|
6595
|
+
topID: type,
|
|
6596
|
+
length
|
|
6597
|
+
});
|
|
6598
|
+
}
|
|
6599
|
+
}
|
|
6600
|
+
/// Elements are used to compose syntax nodes during parsing.
|
|
6601
|
+
class Element {
|
|
6602
|
+
/// @internal
|
|
6603
|
+
constructor(
|
|
6604
|
+
/// The node's
|
|
6605
|
+
/// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).
|
|
6606
|
+
type,
|
|
6607
|
+
/// The start of the node, as an offset from the start of the document.
|
|
6608
|
+
from,
|
|
6609
|
+
/// The end of the node.
|
|
6610
|
+
to,
|
|
6611
|
+
/// The node's child nodes @internal
|
|
6612
|
+
children = none) {
|
|
6613
|
+
this.type = type;
|
|
6614
|
+
this.from = from;
|
|
6615
|
+
this.to = to;
|
|
6616
|
+
this.children = children;
|
|
6617
|
+
}
|
|
6618
|
+
/// @internal
|
|
6619
|
+
writeTo(buf, offset) {
|
|
6620
|
+
let startOff = buf.content.length;
|
|
6621
|
+
buf.writeElements(this.children, offset);
|
|
6622
|
+
buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);
|
|
6623
|
+
}
|
|
6624
|
+
/// @internal
|
|
6625
|
+
toTree(nodeSet) {
|
|
6626
|
+
return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);
|
|
6627
|
+
}
|
|
6628
|
+
}
|
|
6629
|
+
class TreeElement {
|
|
6630
|
+
constructor(tree, from) {
|
|
6631
|
+
this.tree = tree;
|
|
6632
|
+
this.from = from;
|
|
6633
|
+
}
|
|
6634
|
+
get to() {
|
|
6635
|
+
return this.from + this.tree.length;
|
|
6636
|
+
}
|
|
6637
|
+
get type() {
|
|
6638
|
+
return this.tree.type.id;
|
|
6639
|
+
}
|
|
6640
|
+
get children() {
|
|
6641
|
+
return none;
|
|
6642
|
+
}
|
|
6643
|
+
writeTo(buf, offset) {
|
|
6644
|
+
buf.nodes.push(this.tree);
|
|
6645
|
+
buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);
|
|
6646
|
+
}
|
|
6647
|
+
toTree() {
|
|
6648
|
+
return this.tree;
|
|
6649
|
+
}
|
|
6650
|
+
}
|
|
6651
|
+
function elt(type, from, to, children) {
|
|
6652
|
+
return new Element(type, from, to, children);
|
|
6653
|
+
}
|
|
6654
|
+
const EmphasisUnderscore = {
|
|
6655
|
+
resolve: "Emphasis",
|
|
6656
|
+
mark: "EmphasisMark"
|
|
6657
|
+
};
|
|
6658
|
+
const EmphasisAsterisk = {
|
|
6659
|
+
resolve: "Emphasis",
|
|
6660
|
+
mark: "EmphasisMark"
|
|
6661
|
+
};
|
|
6662
|
+
const LinkStart = {},
|
|
6663
|
+
ImageStart = {};
|
|
6664
|
+
class InlineDelimiter {
|
|
6665
|
+
constructor(type, from, to, side) {
|
|
6666
|
+
this.type = type;
|
|
6667
|
+
this.from = from;
|
|
6668
|
+
this.to = to;
|
|
6669
|
+
this.side = side;
|
|
6670
|
+
}
|
|
6671
|
+
}
|
|
6672
|
+
const Escapable = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
|
|
6673
|
+
let Punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;
|
|
6674
|
+
try {
|
|
6675
|
+
Punctuation = new RegExp("[\\p{Pc}|\\p{Pd}|\\p{Pe}|\\p{Pf}|\\p{Pi}|\\p{Po}|\\p{Ps}]", "u");
|
|
6676
|
+
} catch (_) {}
|
|
6677
|
+
const DefaultInline = {
|
|
6678
|
+
Escape(cx, next, start) {
|
|
6679
|
+
if (next != 92 /* '\\' */ || start == cx.end - 1) return -1;
|
|
6680
|
+
let escaped = cx.char(start + 1);
|
|
6681
|
+
for (let i = 0; i < Escapable.length; i++) if (Escapable.charCodeAt(i) == escaped) return cx.append(elt(Type.Escape, start, start + 2));
|
|
6682
|
+
return -1;
|
|
6683
|
+
},
|
|
6684
|
+
Entity(cx, next, start) {
|
|
6685
|
+
if (next != 38 /* '&' */) return -1;
|
|
6686
|
+
let m = /^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(cx.slice(start + 1, start + 31));
|
|
6687
|
+
return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;
|
|
6688
|
+
},
|
|
6689
|
+
InlineCode(cx, next, start) {
|
|
6690
|
+
if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96) return -1;
|
|
6691
|
+
let pos = start + 1;
|
|
6692
|
+
while (pos < cx.end && cx.char(pos) == 96) pos++;
|
|
6693
|
+
let size = pos - start,
|
|
6694
|
+
curSize = 0;
|
|
6695
|
+
for (; pos < cx.end; pos++) {
|
|
6696
|
+
if (cx.char(pos) == 96) {
|
|
6697
|
+
curSize++;
|
|
6698
|
+
if (curSize == size && cx.char(pos + 1) != 96) return cx.append(elt(Type.InlineCode, start, pos + 1, [elt(Type.CodeMark, start, start + size), elt(Type.CodeMark, pos + 1 - size, pos + 1)]));
|
|
6699
|
+
} else {
|
|
6700
|
+
curSize = 0;
|
|
6701
|
+
}
|
|
6702
|
+
}
|
|
6703
|
+
return -1;
|
|
6704
|
+
},
|
|
6705
|
+
HTMLTag(cx, next, start) {
|
|
6706
|
+
if (next != 60 /* '<' */ || start == cx.end - 1) return -1;
|
|
6707
|
+
let after = cx.slice(start + 1, cx.end);
|
|
6708
|
+
let url = /^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(after);
|
|
6709
|
+
if (url) return cx.append(elt(Type.URL, start, start + 1 + url[0].length));
|
|
6710
|
+
let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);
|
|
6711
|
+
if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));
|
|
6712
|
+
let procInst = /^\?[^]*?\?>/.exec(after);
|
|
6713
|
+
if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));
|
|
6714
|
+
let m = /^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(after);
|
|
6715
|
+
if (!m) return -1;
|
|
6716
|
+
return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));
|
|
6717
|
+
},
|
|
6718
|
+
Emphasis(cx, next, start) {
|
|
6719
|
+
if (next != 95 && next != 42) return -1;
|
|
6720
|
+
let pos = start + 1;
|
|
6721
|
+
while (cx.char(pos) == next) pos++;
|
|
6722
|
+
let before = cx.slice(start - 1, start),
|
|
6723
|
+
after = cx.slice(pos, pos + 1);
|
|
6724
|
+
let pBefore = Punctuation.test(before),
|
|
6725
|
+
pAfter = Punctuation.test(after);
|
|
6726
|
+
let sBefore = /\s|^$/.test(before),
|
|
6727
|
+
sAfter = /\s|^$/.test(after);
|
|
6728
|
+
let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);
|
|
6729
|
+
let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);
|
|
6730
|
+
let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);
|
|
6731
|
+
let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);
|
|
6732
|
+
return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Open */ : 0) | (canClose ? 2 /* Close */ : 0)));
|
|
6733
|
+
},
|
|
6734
|
+
HardBreak(cx, next, start) {
|
|
6735
|
+
if (next == 92 /* '\\' */ && cx.char(start + 1) == 10 /* '\n' */) return cx.append(elt(Type.HardBreak, start, start + 2));
|
|
6736
|
+
if (next == 32) {
|
|
6737
|
+
let pos = start + 1;
|
|
6738
|
+
while (cx.char(pos) == 32) pos++;
|
|
6739
|
+
if (cx.char(pos) == 10 && pos >= start + 2) return cx.append(elt(Type.HardBreak, start, pos + 1));
|
|
6740
|
+
}
|
|
6741
|
+
return -1;
|
|
6742
|
+
},
|
|
6743
|
+
Link(cx, next, start) {
|
|
6744
|
+
return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Open */)) : -1;
|
|
6745
|
+
},
|
|
6746
|
+
Image(cx, next, start) {
|
|
6747
|
+
return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */ ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Open */)) : -1;
|
|
6748
|
+
},
|
|
6749
|
+
LinkEnd(cx, next, start) {
|
|
6750
|
+
if (next != 93 /* ']' */) return -1;
|
|
6751
|
+
// Scanning back to the next link/image start marker
|
|
6752
|
+
for (let i = cx.parts.length - 1; i >= 0; i--) {
|
|
6753
|
+
let part = cx.parts[i];
|
|
6754
|
+
if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {
|
|
6755
|
+
// If this one has been set invalid (because it would produce
|
|
6756
|
+
// a nested link) or there's no valid link here ignore both.
|
|
6757
|
+
if (!part.side || cx.skipSpace(part.to) == start && !/[(\[]/.test(cx.slice(start + 1, start + 2))) {
|
|
6758
|
+
cx.parts[i] = null;
|
|
6759
|
+
return -1;
|
|
6760
|
+
}
|
|
6761
|
+
// Finish the content and replace the entire range in
|
|
6762
|
+
// this.parts with the link/image node.
|
|
6763
|
+
let content = cx.takeContent(i);
|
|
6764
|
+
let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);
|
|
6765
|
+
// Set any open-link markers before this link to invalid.
|
|
6766
|
+
if (part.type == LinkStart) for (let j = 0; j < i; j++) {
|
|
6767
|
+
let p = cx.parts[j];
|
|
6768
|
+
if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = 0;
|
|
6769
|
+
}
|
|
6770
|
+
return link.to;
|
|
6771
|
+
}
|
|
6772
|
+
}
|
|
6773
|
+
return -1;
|
|
6774
|
+
}
|
|
6775
|
+
};
|
|
6776
|
+
function finishLink(cx, content, type, start, startPos) {
|
|
6777
|
+
let {
|
|
6778
|
+
text
|
|
6779
|
+
} = cx,
|
|
6780
|
+
next = cx.char(startPos),
|
|
6781
|
+
endPos = startPos;
|
|
6782
|
+
content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));
|
|
6783
|
+
content.push(elt(Type.LinkMark, startPos - 1, startPos));
|
|
6784
|
+
if (next == 40 /* '(' */) {
|
|
6785
|
+
let pos = cx.skipSpace(startPos + 1);
|
|
6786
|
+
let dest = parseURL(text, pos - cx.offset, cx.offset),
|
|
6787
|
+
title;
|
|
6788
|
+
if (dest) {
|
|
6789
|
+
pos = cx.skipSpace(dest.to);
|
|
6790
|
+
title = parseLinkTitle(text, pos - cx.offset, cx.offset);
|
|
6791
|
+
if (title) pos = cx.skipSpace(title.to);
|
|
6792
|
+
}
|
|
6793
|
+
if (cx.char(pos) == 41 /* ')' */) {
|
|
6794
|
+
content.push(elt(Type.LinkMark, startPos, startPos + 1));
|
|
6795
|
+
endPos = pos + 1;
|
|
6796
|
+
if (dest) content.push(dest);
|
|
6797
|
+
if (title) content.push(title);
|
|
6798
|
+
content.push(elt(Type.LinkMark, pos, endPos));
|
|
6799
|
+
}
|
|
6800
|
+
} else if (next == 91 /* '[' */) {
|
|
6801
|
+
let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);
|
|
6802
|
+
if (label) {
|
|
6803
|
+
content.push(label);
|
|
6804
|
+
endPos = label.to;
|
|
6805
|
+
}
|
|
6806
|
+
}
|
|
6807
|
+
return elt(type, start, endPos, content);
|
|
6808
|
+
}
|
|
6809
|
+
// These return `null` when falling off the end of the input, `false`
|
|
6810
|
+
// when parsing fails otherwise (for use in the incremental link
|
|
6811
|
+
// reference parser).
|
|
6812
|
+
function parseURL(text, start, offset) {
|
|
6813
|
+
let next = text.charCodeAt(start);
|
|
6814
|
+
if (next == 60 /* '<' */) {
|
|
6815
|
+
for (let pos = start + 1; pos < text.length; pos++) {
|
|
6816
|
+
let ch = text.charCodeAt(pos);
|
|
6817
|
+
if (ch == 62 /* '>' */) return elt(Type.URL, start + offset, pos + 1 + offset);
|
|
6818
|
+
if (ch == 60 || ch == 10 /* '<\n' */) return false;
|
|
6819
|
+
}
|
|
6820
|
+
return null;
|
|
6821
|
+
} else {
|
|
6822
|
+
let depth = 0,
|
|
6823
|
+
pos = start;
|
|
6824
|
+
for (let escaped = false; pos < text.length; pos++) {
|
|
6825
|
+
let ch = text.charCodeAt(pos);
|
|
6826
|
+
if (space(ch)) {
|
|
6827
|
+
break;
|
|
6828
|
+
} else if (escaped) {
|
|
6829
|
+
escaped = false;
|
|
6830
|
+
} else if (ch == 40 /* '(' */) {
|
|
6831
|
+
depth++;
|
|
6832
|
+
} else if (ch == 41 /* ')' */) {
|
|
6833
|
+
if (!depth) break;
|
|
6834
|
+
depth--;
|
|
6835
|
+
} else if (ch == 92 /* '\\' */) {
|
|
6836
|
+
escaped = true;
|
|
6837
|
+
}
|
|
6838
|
+
}
|
|
6839
|
+
return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;
|
|
6840
|
+
}
|
|
6841
|
+
}
|
|
6842
|
+
function parseLinkTitle(text, start, offset) {
|
|
6843
|
+
let next = text.charCodeAt(start);
|
|
6844
|
+
if (next != 39 && next != 34 && next != 40 /* '"\'(' */) return false;
|
|
6845
|
+
let end = next == 40 ? 41 : next;
|
|
6846
|
+
for (let pos = start + 1, escaped = false; pos < text.length; pos++) {
|
|
6847
|
+
let ch = text.charCodeAt(pos);
|
|
6848
|
+
if (escaped) escaped = false;else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset);else if (ch == 92 /* '\\' */) escaped = true;
|
|
6849
|
+
}
|
|
6850
|
+
return null;
|
|
6851
|
+
}
|
|
6852
|
+
function parseLinkLabel(text, start, offset, requireNonWS) {
|
|
6853
|
+
for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {
|
|
6854
|
+
let ch = text.charCodeAt(pos);
|
|
6855
|
+
if (escaped) escaped = false;else if (ch == 93 /* ']' */) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);else {
|
|
6856
|
+
if (requireNonWS && !space(ch)) requireNonWS = false;
|
|
6857
|
+
if (ch == 91 /* '[' */) return false;else if (ch == 92 /* '\\' */) escaped = true;
|
|
6858
|
+
}
|
|
6859
|
+
}
|
|
6860
|
+
return null;
|
|
6861
|
+
}
|
|
6862
|
+
/// Inline parsing functions get access to this context, and use it to
|
|
6863
|
+
/// read the content and emit syntax nodes.
|
|
6864
|
+
class InlineContext {
|
|
6865
|
+
/// @internal
|
|
6866
|
+
constructor(
|
|
6867
|
+
/// The parser that is being used.
|
|
6868
|
+
parser,
|
|
6869
|
+
/// The text of this inline section.
|
|
6870
|
+
text,
|
|
6871
|
+
/// The starting offset of the section in the document.
|
|
6872
|
+
offset) {
|
|
6873
|
+
this.parser = parser;
|
|
6874
|
+
this.text = text;
|
|
6875
|
+
this.offset = offset;
|
|
6876
|
+
/// @internal
|
|
6877
|
+
this.parts = [];
|
|
6878
|
+
}
|
|
6879
|
+
/// Get the character code at the given (document-relative)
|
|
6880
|
+
/// position.
|
|
6881
|
+
char(pos) {
|
|
6882
|
+
return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset);
|
|
6883
|
+
}
|
|
6884
|
+
/// The position of the end of this inline section.
|
|
6885
|
+
get end() {
|
|
6886
|
+
return this.offset + this.text.length;
|
|
6887
|
+
}
|
|
6888
|
+
/// Get a substring of this inline section. Again uses
|
|
6889
|
+
/// document-relative positions.
|
|
6890
|
+
slice(from, to) {
|
|
6891
|
+
return this.text.slice(from - this.offset, to - this.offset);
|
|
6892
|
+
}
|
|
6893
|
+
/// @internal
|
|
6894
|
+
append(elt) {
|
|
6895
|
+
this.parts.push(elt);
|
|
6896
|
+
return elt.to;
|
|
6897
|
+
}
|
|
6898
|
+
/// Add a [delimiter](#DelimiterType) at this given position. `open`
|
|
6899
|
+
/// and `close` indicate whether this delimiter is opening, closing,
|
|
6900
|
+
/// or both. Returns the end of the delimiter, for convenient
|
|
6901
|
+
/// returning from [parse functions](#InlineParser.parse).
|
|
6902
|
+
addDelimiter(type, from, to, open, close) {
|
|
6903
|
+
return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Open */ : 0) | (close ? 2 /* Close */ : 0)));
|
|
6904
|
+
}
|
|
6905
|
+
/// Add an inline element. Returns the end of the element.
|
|
6906
|
+
addElement(elt) {
|
|
6907
|
+
return this.append(elt);
|
|
6908
|
+
}
|
|
6909
|
+
/// Resolve markers between this.parts.length and from, wrapping matched markers in the
|
|
6910
|
+
/// appropriate node and updating the content of this.parts. @internal
|
|
6911
|
+
resolveMarkers(from) {
|
|
6912
|
+
// Scan forward, looking for closing tokens
|
|
6913
|
+
for (let i = from; i < this.parts.length; i++) {
|
|
6914
|
+
let close = this.parts[i];
|
|
6915
|
+
if (!(close instanceof InlineDelimiter && close.type.resolve && close.side & 2 /* Close */)) continue;
|
|
6916
|
+
let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;
|
|
6917
|
+
let closeSize = close.to - close.from;
|
|
6918
|
+
let open,
|
|
6919
|
+
j = i - 1;
|
|
6920
|
+
// Continue scanning for a matching opening token
|
|
6921
|
+
for (; j >= from; j--) {
|
|
6922
|
+
let part = this.parts[j];
|
|
6923
|
+
if (part instanceof InlineDelimiter && part.side & 1 /* Open */ && part.type == close.type &&
|
|
6924
|
+
// Ignore emphasis delimiters where the character count doesn't match
|
|
6925
|
+
!(emp && (close.side & 1 /* Open */ || part.side & 2 /* Close */) && (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {
|
|
6926
|
+
open = part;
|
|
6927
|
+
break;
|
|
6928
|
+
}
|
|
6929
|
+
}
|
|
6930
|
+
if (!open) continue;
|
|
6931
|
+
let type = close.type.resolve,
|
|
6932
|
+
content = [];
|
|
6933
|
+
let start = open.from,
|
|
6934
|
+
end = close.to;
|
|
6935
|
+
// Emphasis marker effect depends on the character count. Size consumed is minimum of the two
|
|
6936
|
+
// markers.
|
|
6937
|
+
if (emp) {
|
|
6938
|
+
let size = Math.min(2, open.to - open.from, closeSize);
|
|
6939
|
+
start = open.to - size;
|
|
6940
|
+
end = close.from + size;
|
|
6941
|
+
type = size == 1 ? "Emphasis" : "StrongEmphasis";
|
|
6942
|
+
}
|
|
6943
|
+
// Move the covered region into content, optionally adding marker nodes
|
|
6944
|
+
if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to));
|
|
6945
|
+
for (let k = j + 1; k < i; k++) {
|
|
6946
|
+
if (this.parts[k] instanceof Element) content.push(this.parts[k]);
|
|
6947
|
+
this.parts[k] = null;
|
|
6948
|
+
}
|
|
6949
|
+
if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end));
|
|
6950
|
+
let element = this.elt(type, start, end, content);
|
|
6951
|
+
// If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.
|
|
6952
|
+
this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;
|
|
6953
|
+
let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;
|
|
6954
|
+
// Insert the new element in this.parts
|
|
6955
|
+
if (keep) this.parts.splice(i, 0, element);else this.parts[i] = element;
|
|
6956
|
+
}
|
|
6957
|
+
// Collect the elements remaining in this.parts into an array.
|
|
6958
|
+
let result = [];
|
|
6959
|
+
for (let i = from; i < this.parts.length; i++) {
|
|
6960
|
+
let part = this.parts[i];
|
|
6961
|
+
if (part instanceof Element) result.push(part);
|
|
6962
|
+
}
|
|
6963
|
+
return result;
|
|
6964
|
+
}
|
|
6965
|
+
/// Find an opening delimiter of the given type. Returns `null` if
|
|
6966
|
+
/// no delimiter is found, or an index that can be passed to
|
|
6967
|
+
/// [`takeContent`](#InlineContext.takeContent) otherwise.
|
|
6968
|
+
findOpeningDelimiter(type) {
|
|
6969
|
+
for (let i = this.parts.length - 1; i >= 0; i--) {
|
|
6970
|
+
let part = this.parts[i];
|
|
6971
|
+
if (part instanceof InlineDelimiter && part.type == type) return i;
|
|
6972
|
+
}
|
|
6973
|
+
return null;
|
|
6974
|
+
}
|
|
6975
|
+
/// Remove all inline elements and delimiters starting from the
|
|
6976
|
+
/// given index (which you should get from
|
|
6977
|
+
/// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),
|
|
6978
|
+
/// resolve delimiters inside of them, and return them as an array
|
|
6979
|
+
/// of elements.
|
|
6980
|
+
takeContent(startIndex) {
|
|
6981
|
+
let content = this.resolveMarkers(startIndex);
|
|
6982
|
+
this.parts.length = startIndex;
|
|
6983
|
+
return content;
|
|
6984
|
+
}
|
|
6985
|
+
/// Skip space after the given (document) position, returning either
|
|
6986
|
+
/// the position of the next non-space character or the end of the
|
|
6987
|
+
/// section.
|
|
6988
|
+
skipSpace(from) {
|
|
6989
|
+
return skipSpace(this.text, from - this.offset) + this.offset;
|
|
6990
|
+
}
|
|
6991
|
+
elt(type, from, to, children) {
|
|
6992
|
+
if (typeof type == "string") return elt(this.parser.getNodeType(type), from, to, children);
|
|
6993
|
+
return new TreeElement(type, from);
|
|
6994
|
+
}
|
|
6995
|
+
}
|
|
6996
|
+
function injectMarks(elements, marks) {
|
|
6997
|
+
if (!marks.length) return elements;
|
|
6998
|
+
if (!elements.length) return marks;
|
|
6999
|
+
let elts = elements.slice(),
|
|
7000
|
+
eI = 0;
|
|
7001
|
+
for (let mark of marks) {
|
|
7002
|
+
while (eI < elts.length && elts[eI].to < mark.to) eI++;
|
|
7003
|
+
if (eI < elts.length && elts[eI].from < mark.from) {
|
|
7004
|
+
let e = elts[eI];
|
|
7005
|
+
if (e instanceof Element) elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));
|
|
7006
|
+
} else {
|
|
7007
|
+
elts.splice(eI++, 0, mark);
|
|
7008
|
+
}
|
|
7009
|
+
}
|
|
7010
|
+
return elts;
|
|
7011
|
+
}
|
|
7012
|
+
// These are blocks that can span blank lines, and should thus only be
|
|
7013
|
+
// reused if their next sibling is also being reused.
|
|
7014
|
+
const NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];
|
|
7015
|
+
class FragmentCursor {
|
|
7016
|
+
constructor(fragments, input) {
|
|
7017
|
+
this.fragments = fragments;
|
|
7018
|
+
this.input = input;
|
|
7019
|
+
// Index into fragment array
|
|
7020
|
+
this.i = 0;
|
|
7021
|
+
// Active fragment
|
|
7022
|
+
this.fragment = null;
|
|
7023
|
+
this.fragmentEnd = -1;
|
|
7024
|
+
// Cursor into the current fragment, if any. When `moveTo` returns
|
|
7025
|
+
// true, this points at the first block after `pos`.
|
|
7026
|
+
this.cursor = null;
|
|
7027
|
+
if (fragments.length) this.fragment = fragments[this.i++];
|
|
7028
|
+
}
|
|
7029
|
+
nextFragment() {
|
|
7030
|
+
this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;
|
|
7031
|
+
this.cursor = null;
|
|
7032
|
+
this.fragmentEnd = -1;
|
|
7033
|
+
}
|
|
7034
|
+
moveTo(pos, lineStart) {
|
|
7035
|
+
while (this.fragment && this.fragment.to <= pos) this.nextFragment();
|
|
7036
|
+
if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false;
|
|
7037
|
+
if (this.fragmentEnd < 0) {
|
|
7038
|
+
let end = this.fragment.to;
|
|
7039
|
+
while (end > 0 && this.input.read(end - 1, end) != "\n") end--;
|
|
7040
|
+
this.fragmentEnd = end ? end - 1 : 0;
|
|
7041
|
+
}
|
|
7042
|
+
let c = this.cursor;
|
|
7043
|
+
if (!c) {
|
|
7044
|
+
c = this.cursor = this.fragment.tree.cursor();
|
|
7045
|
+
c.firstChild();
|
|
7046
|
+
}
|
|
7047
|
+
let rPos = pos + this.fragment.offset;
|
|
7048
|
+
while (c.to <= rPos) if (!c.parent()) return false;
|
|
7049
|
+
for (;;) {
|
|
7050
|
+
if (c.from >= rPos) return this.fragment.from <= lineStart;
|
|
7051
|
+
if (!c.childAfter(rPos)) return false;
|
|
7052
|
+
}
|
|
7053
|
+
}
|
|
7054
|
+
matches(hash) {
|
|
7055
|
+
let tree = this.cursor.tree;
|
|
7056
|
+
return tree && tree.prop(NodeProp.contextHash) == hash;
|
|
7057
|
+
}
|
|
7058
|
+
takeNodes(cx) {
|
|
7059
|
+
let cur = this.cursor,
|
|
7060
|
+
off = this.fragment.offset,
|
|
7061
|
+
fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);
|
|
7062
|
+
let start = cx.absoluteLineStart,
|
|
7063
|
+
end = start,
|
|
7064
|
+
blockI = cx.block.children.length;
|
|
7065
|
+
let prevEnd = end,
|
|
7066
|
+
prevI = blockI;
|
|
7067
|
+
for (;;) {
|
|
7068
|
+
if (cur.to - off > fragEnd) {
|
|
7069
|
+
if (cur.type.isAnonymous && cur.firstChild()) continue;
|
|
7070
|
+
break;
|
|
7071
|
+
}
|
|
7072
|
+
cx.dontInject.add(cur.tree);
|
|
7073
|
+
cx.addNode(cur.tree, cur.from - off);
|
|
7074
|
+
// Taken content must always end in a block, because incremental
|
|
7075
|
+
// parsing happens on block boundaries. Never stop directly
|
|
7076
|
+
// after an indented code block, since those can continue after
|
|
7077
|
+
// any number of blank lines.
|
|
7078
|
+
if (cur.type.is("Block")) {
|
|
7079
|
+
if (NotLast.indexOf(cur.type.id) < 0) {
|
|
7080
|
+
end = cur.to - off;
|
|
7081
|
+
blockI = cx.block.children.length;
|
|
7082
|
+
} else {
|
|
7083
|
+
end = prevEnd;
|
|
7084
|
+
blockI = prevI;
|
|
7085
|
+
prevEnd = cur.to - off;
|
|
7086
|
+
prevI = cx.block.children.length;
|
|
7087
|
+
}
|
|
7088
|
+
}
|
|
7089
|
+
if (!cur.nextSibling()) break;
|
|
7090
|
+
}
|
|
7091
|
+
while (cx.block.children.length > blockI) {
|
|
7092
|
+
cx.block.children.pop();
|
|
7093
|
+
cx.block.positions.pop();
|
|
7094
|
+
}
|
|
7095
|
+
return end - start;
|
|
7096
|
+
}
|
|
7097
|
+
}
|
|
7098
|
+
const markdownHighlighting = styleTags({
|
|
7099
|
+
"Blockquote/...": tags$1.quote,
|
|
7100
|
+
HorizontalRule: tags$1.contentSeparator,
|
|
7101
|
+
"ATXHeading1/... SetextHeading1/...": tags$1.heading1,
|
|
7102
|
+
"ATXHeading2/... SetextHeading2/...": tags$1.heading2,
|
|
7103
|
+
"ATXHeading3/...": tags$1.heading3,
|
|
7104
|
+
"ATXHeading4/...": tags$1.heading4,
|
|
7105
|
+
"ATXHeading5/...": tags$1.heading5,
|
|
7106
|
+
"ATXHeading6/...": tags$1.heading6,
|
|
7107
|
+
"Comment CommentBlock": tags$1.comment,
|
|
7108
|
+
Escape: tags$1.escape,
|
|
7109
|
+
Entity: tags$1.character,
|
|
7110
|
+
"Emphasis/...": tags$1.emphasis,
|
|
7111
|
+
"StrongEmphasis/...": tags$1.strong,
|
|
7112
|
+
"Link/... Image/...": tags$1.link,
|
|
7113
|
+
"OrderedList/... BulletList/...": tags$1.list,
|
|
7114
|
+
"BlockQuote/...": tags$1.quote,
|
|
7115
|
+
"InlineCode CodeText": tags$1.monospace,
|
|
7116
|
+
URL: tags$1.url,
|
|
7117
|
+
"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark": tags$1.processingInstruction,
|
|
7118
|
+
"CodeInfo LinkLabel": tags$1.labelName,
|
|
7119
|
+
LinkTitle: tags$1.string,
|
|
7120
|
+
Paragraph: tags$1.content
|
|
7121
|
+
});
|
|
7122
|
+
/// The default CommonMark parser.
|
|
7123
|
+
const parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);
|
|
7124
|
+
function leftOverSpace(node, from, to) {
|
|
7125
|
+
let ranges = [];
|
|
7126
|
+
for (let n = node.firstChild, pos = from;; n = n.nextSibling) {
|
|
7127
|
+
let nextPos = n ? n.from : to;
|
|
7128
|
+
if (nextPos > pos) ranges.push({
|
|
7129
|
+
from: pos,
|
|
7130
|
+
to: nextPos
|
|
7131
|
+
});
|
|
7132
|
+
if (!n) break;
|
|
7133
|
+
pos = n.to;
|
|
7134
|
+
}
|
|
7135
|
+
return ranges;
|
|
7136
|
+
}
|
|
7137
|
+
/// Create a Markdown extension to enable nested parsing on code
|
|
7138
|
+
/// blocks and/or embedded HTML.
|
|
7139
|
+
function parseCode(config) {
|
|
7140
|
+
let {
|
|
7141
|
+
codeParser,
|
|
7142
|
+
htmlParser
|
|
7143
|
+
} = config;
|
|
7144
|
+
let wrap = parseMixed((node, input) => {
|
|
7145
|
+
let id = node.type.id;
|
|
7146
|
+
if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {
|
|
7147
|
+
let info = "";
|
|
7148
|
+
if (id == Type.FencedCode) {
|
|
7149
|
+
let infoNode = node.node.getChild(Type.CodeInfo);
|
|
7150
|
+
if (infoNode) info = input.read(infoNode.from, infoNode.to);
|
|
7151
|
+
}
|
|
7152
|
+
let parser = codeParser(info);
|
|
7153
|
+
if (parser) return {
|
|
7154
|
+
parser,
|
|
7155
|
+
overlay: node => node.type.id == Type.CodeText
|
|
7156
|
+
};
|
|
7157
|
+
} else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {
|
|
7158
|
+
return {
|
|
7159
|
+
parser: htmlParser,
|
|
7160
|
+
overlay: leftOverSpace(node.node, node.from, node.to)
|
|
7161
|
+
};
|
|
7162
|
+
}
|
|
7163
|
+
return null;
|
|
7164
|
+
});
|
|
7165
|
+
return {
|
|
7166
|
+
wrap
|
|
7167
|
+
};
|
|
7168
|
+
}
|
|
7169
|
+
const StrikethroughDelim = {
|
|
7170
|
+
resolve: "Strikethrough",
|
|
7171
|
+
mark: "StrikethroughMark"
|
|
7172
|
+
};
|
|
7173
|
+
/// An extension that implements
|
|
7174
|
+
/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)
|
|
7175
|
+
/// Strikethrough syntax using `~~` delimiters.
|
|
7176
|
+
const Strikethrough = {
|
|
7177
|
+
defineNodes: [{
|
|
7178
|
+
name: "Strikethrough",
|
|
7179
|
+
style: {
|
|
7180
|
+
"Strikethrough/...": tags$1.strikethrough
|
|
7181
|
+
}
|
|
7182
|
+
}, {
|
|
7183
|
+
name: "StrikethroughMark",
|
|
7184
|
+
style: tags$1.processingInstruction
|
|
7185
|
+
}],
|
|
7186
|
+
parseInline: [{
|
|
7187
|
+
name: "Strikethrough",
|
|
7188
|
+
parse(cx, next, pos) {
|
|
7189
|
+
if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126) return -1;
|
|
7190
|
+
let before = cx.slice(pos - 1, pos),
|
|
7191
|
+
after = cx.slice(pos + 2, pos + 3);
|
|
7192
|
+
let sBefore = /\s|^$/.test(before),
|
|
7193
|
+
sAfter = /\s|^$/.test(after);
|
|
7194
|
+
let pBefore = Punctuation.test(before),
|
|
7195
|
+
pAfter = Punctuation.test(after);
|
|
7196
|
+
return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));
|
|
7197
|
+
},
|
|
7198
|
+
after: "Emphasis"
|
|
7199
|
+
}]
|
|
7200
|
+
};
|
|
7201
|
+
function parseRow(cx, line, startI = 0, elts, offset = 0) {
|
|
7202
|
+
let count = 0,
|
|
7203
|
+
first = true,
|
|
7204
|
+
cellStart = -1,
|
|
7205
|
+
cellEnd = -1,
|
|
7206
|
+
esc = false;
|
|
7207
|
+
let parseCell = () => {
|
|
7208
|
+
elts.push(cx.elt("TableCell", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));
|
|
7209
|
+
};
|
|
7210
|
+
for (let i = startI; i < line.length; i++) {
|
|
7211
|
+
let next = line.charCodeAt(i);
|
|
7212
|
+
if (next == 124 /* '|' */ && !esc) {
|
|
7213
|
+
if (!first || cellStart > -1) count++;
|
|
7214
|
+
first = false;
|
|
7215
|
+
if (elts) {
|
|
7216
|
+
if (cellStart > -1) parseCell();
|
|
7217
|
+
elts.push(cx.elt("TableDelimiter", i + offset, i + offset + 1));
|
|
7218
|
+
}
|
|
7219
|
+
cellStart = cellEnd = -1;
|
|
7220
|
+
} else if (esc || next != 32 && next != 9) {
|
|
7221
|
+
if (cellStart < 0) cellStart = i;
|
|
7222
|
+
cellEnd = i + 1;
|
|
7223
|
+
}
|
|
7224
|
+
esc = !esc && next == 92;
|
|
7225
|
+
}
|
|
7226
|
+
if (cellStart > -1) {
|
|
7227
|
+
count++;
|
|
7228
|
+
if (elts) parseCell();
|
|
7229
|
+
}
|
|
7230
|
+
return count;
|
|
7231
|
+
}
|
|
7232
|
+
function hasPipe(str, start) {
|
|
7233
|
+
for (let i = start; i < str.length; i++) {
|
|
7234
|
+
let next = str.charCodeAt(i);
|
|
7235
|
+
if (next == 124 /* '|' */) return true;
|
|
7236
|
+
if (next == 92 /* '\\' */) i++;
|
|
7237
|
+
}
|
|
7238
|
+
return false;
|
|
7239
|
+
}
|
|
7240
|
+
const delimiterLine = /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;
|
|
7241
|
+
class TableParser {
|
|
7242
|
+
constructor() {
|
|
7243
|
+
// Null means we haven't seen the second line yet, false means this
|
|
7244
|
+
// isn't a table, and an array means this is a table and we've
|
|
7245
|
+
// parsed the given rows so far.
|
|
7246
|
+
this.rows = null;
|
|
7247
|
+
}
|
|
7248
|
+
nextLine(cx, line, leaf) {
|
|
7249
|
+
if (this.rows == null) {
|
|
7250
|
+
// Second line
|
|
7251
|
+
this.rows = false;
|
|
7252
|
+
let lineText;
|
|
7253
|
+
if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) && delimiterLine.test(lineText = line.text.slice(line.pos))) {
|
|
7254
|
+
let firstRow = [],
|
|
7255
|
+
firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);
|
|
7256
|
+
if (firstCount == parseRow(cx, lineText, line.pos)) this.rows = [cx.elt("TableHeader", leaf.start, leaf.start + leaf.content.length, firstRow), cx.elt("TableDelimiter", cx.lineStart + line.pos, cx.lineStart + line.text.length)];
|
|
7257
|
+
}
|
|
7258
|
+
} else if (this.rows) {
|
|
7259
|
+
// Line after the second
|
|
7260
|
+
let content = [];
|
|
7261
|
+
parseRow(cx, line.text, line.pos, content, cx.lineStart);
|
|
7262
|
+
this.rows.push(cx.elt("TableRow", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));
|
|
7263
|
+
}
|
|
7264
|
+
return false;
|
|
7265
|
+
}
|
|
7266
|
+
finish(cx, leaf) {
|
|
7267
|
+
if (!this.rows) return false;
|
|
7268
|
+
cx.addLeafElement(leaf, cx.elt("Table", leaf.start, leaf.start + leaf.content.length, this.rows));
|
|
7269
|
+
return true;
|
|
7270
|
+
}
|
|
7271
|
+
}
|
|
7272
|
+
/// This extension provides
|
|
7273
|
+
/// [GFM-style](https://github.github.com/gfm/#tables-extension-)
|
|
7274
|
+
/// tables, using syntax like this:
|
|
7275
|
+
///
|
|
7276
|
+
/// ```
|
|
7277
|
+
/// | head 1 | head 2 |
|
|
7278
|
+
/// | --- | --- |
|
|
7279
|
+
/// | cell 1 | cell 2 |
|
|
7280
|
+
/// ```
|
|
7281
|
+
const Table = {
|
|
7282
|
+
defineNodes: [{
|
|
7283
|
+
name: "Table",
|
|
7284
|
+
block: true
|
|
7285
|
+
}, {
|
|
7286
|
+
name: "TableHeader",
|
|
7287
|
+
style: {
|
|
7288
|
+
"TableHeader/...": tags$1.heading
|
|
7289
|
+
}
|
|
7290
|
+
}, "TableRow", {
|
|
7291
|
+
name: "TableCell",
|
|
7292
|
+
style: tags$1.content
|
|
7293
|
+
}, {
|
|
7294
|
+
name: "TableDelimiter",
|
|
7295
|
+
style: tags$1.processingInstruction
|
|
7296
|
+
}],
|
|
7297
|
+
parseBlock: [{
|
|
7298
|
+
name: "Table",
|
|
7299
|
+
leaf(_, leaf) {
|
|
7300
|
+
return hasPipe(leaf.content, 0) ? new TableParser() : null;
|
|
7301
|
+
},
|
|
7302
|
+
endLeaf(cx, line, leaf) {
|
|
7303
|
+
if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos)) return false;
|
|
7304
|
+
let next = cx.scanLine(cx.absoluteLineEnd + 1).text;
|
|
7305
|
+
return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);
|
|
7306
|
+
},
|
|
7307
|
+
before: "SetextHeading"
|
|
7308
|
+
}]
|
|
7309
|
+
};
|
|
7310
|
+
class TaskParser {
|
|
7311
|
+
nextLine() {
|
|
7312
|
+
return false;
|
|
7313
|
+
}
|
|
7314
|
+
finish(cx, leaf) {
|
|
7315
|
+
cx.addLeafElement(leaf, cx.elt("Task", leaf.start, leaf.start + leaf.content.length, [cx.elt("TaskMarker", leaf.start, leaf.start + 3), ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)]));
|
|
7316
|
+
return true;
|
|
7317
|
+
}
|
|
7318
|
+
}
|
|
7319
|
+
/// Extension providing
|
|
7320
|
+
/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)
|
|
7321
|
+
/// task list items, where list items can be prefixed with `[ ]` or
|
|
7322
|
+
/// `[x]` to add a checkbox.
|
|
7323
|
+
const TaskList = {
|
|
7324
|
+
defineNodes: [{
|
|
7325
|
+
name: "Task",
|
|
7326
|
+
block: true,
|
|
7327
|
+
style: tags$1.list
|
|
7328
|
+
}, {
|
|
7329
|
+
name: "TaskMarker",
|
|
7330
|
+
style: tags$1.atom
|
|
7331
|
+
}],
|
|
7332
|
+
parseBlock: [{
|
|
7333
|
+
name: "TaskList",
|
|
7334
|
+
leaf(cx, leaf) {
|
|
7335
|
+
return /^\[[ xX]\]/.test(leaf.content) && cx.parentType().name == "ListItem" ? new TaskParser() : null;
|
|
7336
|
+
},
|
|
7337
|
+
after: "SetextHeading"
|
|
7338
|
+
}]
|
|
7339
|
+
};
|
|
7340
|
+
/// Extension bundle containing [`Table`](#Table),
|
|
7341
|
+
/// [`TaskList`](#TaskList) and [`Strikethrough`](#Strikethrough).
|
|
7342
|
+
const GFM = [Table, TaskList, Strikethrough];
|
|
7343
|
+
function parseSubSuper(ch, node, mark) {
|
|
7344
|
+
return (cx, next, pos) => {
|
|
7345
|
+
if (next != ch || cx.char(pos + 1) == ch) return -1;
|
|
7346
|
+
let elts = [cx.elt(mark, pos, pos + 1)];
|
|
7347
|
+
for (let i = pos + 1; i < cx.end; i++) {
|
|
7348
|
+
let next = cx.char(i);
|
|
7349
|
+
if (next == ch) return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));
|
|
7350
|
+
if (next == 92 /* '\\' */) elts.push(cx.elt("Escape", i, i++ + 2));
|
|
7351
|
+
if (space(next)) break;
|
|
7352
|
+
}
|
|
7353
|
+
return -1;
|
|
7354
|
+
};
|
|
7355
|
+
}
|
|
7356
|
+
/// Extension providing
|
|
7357
|
+
/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)
|
|
7358
|
+
/// superscript using `^` markers.
|
|
7359
|
+
const Superscript = {
|
|
7360
|
+
defineNodes: [{
|
|
7361
|
+
name: "Superscript",
|
|
7362
|
+
style: tags$1.special(tags$1.content)
|
|
7363
|
+
}, {
|
|
7364
|
+
name: "SuperscriptMark",
|
|
7365
|
+
style: tags$1.processingInstruction
|
|
7366
|
+
}],
|
|
7367
|
+
parseInline: [{
|
|
7368
|
+
name: "Superscript",
|
|
7369
|
+
parse: parseSubSuper(94 /* '^' */, "Superscript", "SuperscriptMark")
|
|
7370
|
+
}]
|
|
7371
|
+
};
|
|
7372
|
+
/// Extension providing
|
|
7373
|
+
/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)
|
|
7374
|
+
/// subscript using `~` markers.
|
|
7375
|
+
const Subscript = {
|
|
7376
|
+
defineNodes: [{
|
|
7377
|
+
name: "Subscript",
|
|
7378
|
+
style: tags$1.special(tags$1.content)
|
|
7379
|
+
}, {
|
|
7380
|
+
name: "SubscriptMark",
|
|
7381
|
+
style: tags$1.processingInstruction
|
|
7382
|
+
}],
|
|
7383
|
+
parseInline: [{
|
|
7384
|
+
name: "Subscript",
|
|
7385
|
+
parse: parseSubSuper(126 /* '~' */, "Subscript", "SubscriptMark")
|
|
7386
|
+
}]
|
|
7387
|
+
};
|
|
7388
|
+
/// Extension that parses two colons with only letters, underscores,
|
|
7389
|
+
/// and numbers between them as `Emoji` nodes.
|
|
7390
|
+
const Emoji = {
|
|
7391
|
+
defineNodes: [{
|
|
7392
|
+
name: "Emoji",
|
|
7393
|
+
style: tags$1.character
|
|
7394
|
+
}],
|
|
7395
|
+
parseInline: [{
|
|
7396
|
+
name: "Emoji",
|
|
7397
|
+
parse(cx, next, pos) {
|
|
7398
|
+
let match;
|
|
7399
|
+
if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1;
|
|
7400
|
+
return cx.addElement(cx.elt("Emoji", pos, pos + 1 + match[0].length));
|
|
7401
|
+
}
|
|
7402
|
+
}]
|
|
7403
|
+
};
|
|
7404
|
+
|
|
7405
|
+
const data = /*@__PURE__*/defineLanguageFacet({
|
|
7406
|
+
block: {
|
|
7407
|
+
open: "<!--",
|
|
7408
|
+
close: "-->"
|
|
7409
|
+
}
|
|
7410
|
+
});
|
|
7411
|
+
const commonmark = /*@__PURE__*/parser.configure({
|
|
7412
|
+
props: [/*@__PURE__*/foldNodeProp.add(type => {
|
|
7413
|
+
if (!type.is("Block") || type.is("Document")) return undefined;
|
|
7414
|
+
return (tree, state) => ({
|
|
7415
|
+
from: state.doc.lineAt(tree.from).to,
|
|
7416
|
+
to: tree.to
|
|
7417
|
+
});
|
|
7418
|
+
}), /*@__PURE__*/indentNodeProp.add({
|
|
7419
|
+
Document: () => null
|
|
7420
|
+
}), /*@__PURE__*/languageDataProp.add({
|
|
7421
|
+
Document: data
|
|
7422
|
+
})]
|
|
7423
|
+
});
|
|
7424
|
+
function mkLang(parser) {
|
|
7425
|
+
return new Language(data, parser);
|
|
7426
|
+
}
|
|
7427
|
+
/**
|
|
7428
|
+
Language support for strict CommonMark.
|
|
7429
|
+
*/
|
|
7430
|
+
const commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);
|
|
7431
|
+
const extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji]);
|
|
7432
|
+
/**
|
|
7433
|
+
Language support for [GFM](https://github.github.com/gfm/) plus
|
|
7434
|
+
subscript, superscript, and emoji syntax.
|
|
7435
|
+
*/
|
|
7436
|
+
const markdownLanguage = /*@__PURE__*/mkLang(extended);
|
|
7437
|
+
function getCodeParser(languages, defaultLanguage) {
|
|
7438
|
+
return info => {
|
|
7439
|
+
if (info && languages) {
|
|
7440
|
+
let found = null;
|
|
7441
|
+
// Strip anything after whitespace
|
|
7442
|
+
info = /\S*/.exec(info)[0];
|
|
7443
|
+
if (typeof languages == "function") found = languages(info);else found = LanguageDescription.matchLanguageName(languages, info, true);
|
|
7444
|
+
if (found instanceof LanguageDescription) return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());else if (found) return found.parser;
|
|
7445
|
+
}
|
|
7446
|
+
return defaultLanguage ? defaultLanguage.parser : null;
|
|
7447
|
+
};
|
|
7448
|
+
}
|
|
7449
|
+
function nodeStart(node, doc) {
|
|
7450
|
+
return doc.sliceString(node.from, node.from + 50);
|
|
7451
|
+
}
|
|
7452
|
+
class Context {
|
|
7453
|
+
constructor(node, from, to, spaceBefore, spaceAfter, type, item) {
|
|
7454
|
+
this.node = node;
|
|
7455
|
+
this.from = from;
|
|
7456
|
+
this.to = to;
|
|
7457
|
+
this.spaceBefore = spaceBefore;
|
|
7458
|
+
this.spaceAfter = spaceAfter;
|
|
7459
|
+
this.type = type;
|
|
7460
|
+
this.item = item;
|
|
7461
|
+
}
|
|
7462
|
+
blank(trailing = true) {
|
|
7463
|
+
let result = this.spaceBefore;
|
|
7464
|
+
if (this.node.name == "Blockquote") result += ">";else for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--) result += " ";
|
|
7465
|
+
return result + (trailing ? this.spaceAfter : "");
|
|
7466
|
+
}
|
|
7467
|
+
marker(doc, add) {
|
|
7468
|
+
let number = this.node.name == "OrderedList" ? String(+itemNumber(this.item, doc)[2] + add) : "";
|
|
7469
|
+
return this.spaceBefore + number + this.type + this.spaceAfter;
|
|
7470
|
+
}
|
|
7471
|
+
}
|
|
7472
|
+
function getContext(node, line, doc) {
|
|
7473
|
+
let nodes = [];
|
|
7474
|
+
for (let cur = node; cur && cur.name != "Document"; cur = cur.parent) {
|
|
7475
|
+
if (cur.name == "ListItem" || cur.name == "Blockquote") nodes.push(cur);
|
|
7476
|
+
}
|
|
7477
|
+
let context = [],
|
|
7478
|
+
pos = 0;
|
|
7479
|
+
for (let i = nodes.length - 1; i >= 0; i--) {
|
|
7480
|
+
let node = nodes[i],
|
|
7481
|
+
match,
|
|
7482
|
+
start = pos;
|
|
7483
|
+
if (node.name == "Blockquote" && (match = /^[ \t]*>( ?)/.exec(line.slice(pos)))) {
|
|
7484
|
+
pos += match[0].length;
|
|
7485
|
+
context.push(new Context(node, start, pos, "", match[1], ">", null));
|
|
7486
|
+
} else if (node.name == "ListItem" && node.parent.name == "OrderedList" && (match = /^([ \t]*)\d+([.)])([ \t]*)/.exec(nodeStart(node, doc)))) {
|
|
7487
|
+
let after = match[3],
|
|
7488
|
+
len = match[0].length;
|
|
7489
|
+
if (after.length >= 4) {
|
|
7490
|
+
after = after.slice(0, after.length - 4);
|
|
7491
|
+
len -= 4;
|
|
7492
|
+
}
|
|
7493
|
+
pos += len;
|
|
7494
|
+
context.push(new Context(node.parent, start, pos, match[1], after, match[2], node));
|
|
7495
|
+
} else if (node.name == "ListItem" && node.parent.name == "BulletList" && (match = /^([ \t]*)([-+*])([ \t]{1,4}\[[ xX]\])?([ \t]+)/.exec(nodeStart(node, doc)))) {
|
|
7496
|
+
let after = match[4],
|
|
7497
|
+
len = match[0].length;
|
|
7498
|
+
if (after.length > 4) {
|
|
7499
|
+
after = after.slice(0, after.length - 4);
|
|
7500
|
+
len -= 4;
|
|
7501
|
+
}
|
|
7502
|
+
let type = match[2];
|
|
7503
|
+
if (match[3]) type += match[3].replace(/[xX]/, ' ');
|
|
7504
|
+
pos += len;
|
|
7505
|
+
context.push(new Context(node.parent, start, pos, match[1], after, type, node));
|
|
7506
|
+
}
|
|
7507
|
+
}
|
|
7508
|
+
return context;
|
|
7509
|
+
}
|
|
7510
|
+
function itemNumber(item, doc) {
|
|
7511
|
+
return /^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));
|
|
7512
|
+
}
|
|
7513
|
+
function renumberList(after, doc, changes, offset = 0) {
|
|
7514
|
+
for (let prev = -1, node = after;;) {
|
|
7515
|
+
if (node.name == "ListItem") {
|
|
7516
|
+
let m = itemNumber(node, doc);
|
|
7517
|
+
let number = +m[2];
|
|
7518
|
+
if (prev >= 0) {
|
|
7519
|
+
if (number != prev + 1) return;
|
|
7520
|
+
changes.push({
|
|
7521
|
+
from: node.from + m[1].length,
|
|
7522
|
+
to: node.from + m[0].length,
|
|
7523
|
+
insert: String(prev + 2 + offset)
|
|
7524
|
+
});
|
|
7525
|
+
}
|
|
7526
|
+
prev = number;
|
|
7527
|
+
}
|
|
7528
|
+
let next = node.nextSibling;
|
|
7529
|
+
if (!next) break;
|
|
7530
|
+
node = next;
|
|
7531
|
+
}
|
|
7532
|
+
}
|
|
7533
|
+
/**
|
|
7534
|
+
This command, when invoked in Markdown context with cursor
|
|
7535
|
+
selection(s), will create a new line with the markup for
|
|
7536
|
+
blockquotes and lists that were active on the old line. If the
|
|
7537
|
+
cursor was directly after the end of the markup for the old line,
|
|
7538
|
+
trailing whitespace and list markers are removed from that line.
|
|
7539
|
+
|
|
7540
|
+
The command does nothing in non-Markdown context, so it should
|
|
7541
|
+
not be used as the only binding for Enter (even in a Markdown
|
|
7542
|
+
document, HTML and code regions might use a different language).
|
|
7543
|
+
*/
|
|
7544
|
+
const insertNewlineContinueMarkup = ({
|
|
7545
|
+
state,
|
|
7546
|
+
dispatch
|
|
7547
|
+
}) => {
|
|
7548
|
+
let tree = syntaxTree(state),
|
|
7549
|
+
{
|
|
7550
|
+
doc
|
|
7551
|
+
} = state;
|
|
7552
|
+
let dont = null,
|
|
7553
|
+
changes = state.changeByRange(range => {
|
|
7554
|
+
if (!range.empty || !markdownLanguage.isActiveAt(state, range.from)) return dont = {
|
|
7555
|
+
range
|
|
7556
|
+
};
|
|
7557
|
+
let pos = range.from,
|
|
7558
|
+
line = doc.lineAt(pos);
|
|
7559
|
+
let context = getContext(tree.resolveInner(pos, -1), line.text, doc);
|
|
7560
|
+
while (context.length && context[context.length - 1].from > pos - line.from) context.pop();
|
|
7561
|
+
if (!context.length) return dont = {
|
|
7562
|
+
range
|
|
7563
|
+
};
|
|
7564
|
+
let inner = context[context.length - 1];
|
|
7565
|
+
if (inner.to - inner.spaceAfter.length > pos - line.from) return dont = {
|
|
7566
|
+
range
|
|
7567
|
+
};
|
|
7568
|
+
let emptyLine = pos >= inner.to - inner.spaceAfter.length && !/\S/.test(line.text.slice(inner.to));
|
|
7569
|
+
// Empty line in list
|
|
7570
|
+
if (inner.item && emptyLine) {
|
|
7571
|
+
// First list item or blank line before: delete a level of markup
|
|
7572
|
+
if (inner.node.firstChild.to >= pos || line.from > 0 && !/[^\s>]/.test(doc.lineAt(line.from - 1).text)) {
|
|
7573
|
+
let next = context.length > 1 ? context[context.length - 2] : null;
|
|
7574
|
+
let delTo,
|
|
7575
|
+
insert = "";
|
|
7576
|
+
if (next && next.item) {
|
|
7577
|
+
// Re-add marker for the list at the next level
|
|
7578
|
+
delTo = line.from + next.from;
|
|
7579
|
+
insert = next.marker(doc, 1);
|
|
7580
|
+
} else {
|
|
7581
|
+
delTo = line.from + (next ? next.to : 0);
|
|
7582
|
+
}
|
|
7583
|
+
let changes = [{
|
|
7584
|
+
from: delTo,
|
|
7585
|
+
to: pos,
|
|
7586
|
+
insert
|
|
7587
|
+
}];
|
|
7588
|
+
if (inner.node.name == "OrderedList") renumberList(inner.item, doc, changes, -2);
|
|
7589
|
+
if (next && next.node.name == "OrderedList") renumberList(next.item, doc, changes);
|
|
7590
|
+
return {
|
|
7591
|
+
range: EditorSelection.cursor(delTo + insert.length),
|
|
7592
|
+
changes
|
|
7593
|
+
};
|
|
7594
|
+
} else {
|
|
7595
|
+
// Move this line down
|
|
7596
|
+
let insert = "";
|
|
7597
|
+
for (let i = 0, e = context.length - 2; i <= e; i++) insert += context[i].blank(i < e);
|
|
7598
|
+
insert += state.lineBreak;
|
|
7599
|
+
return {
|
|
7600
|
+
range: EditorSelection.cursor(pos + insert.length),
|
|
7601
|
+
changes: {
|
|
7602
|
+
from: line.from,
|
|
7603
|
+
insert
|
|
7604
|
+
}
|
|
7605
|
+
};
|
|
7606
|
+
}
|
|
7607
|
+
}
|
|
7608
|
+
if (inner.node.name == "Blockquote" && emptyLine && line.from) {
|
|
7609
|
+
let prevLine = doc.lineAt(line.from - 1),
|
|
7610
|
+
quoted = />\s*$/.exec(prevLine.text);
|
|
7611
|
+
// Two aligned empty quoted lines in a row
|
|
7612
|
+
if (quoted && quoted.index == inner.from) {
|
|
7613
|
+
let changes = state.changes([{
|
|
7614
|
+
from: prevLine.from + quoted.index,
|
|
7615
|
+
to: prevLine.to
|
|
7616
|
+
}, {
|
|
7617
|
+
from: line.from + inner.from,
|
|
7618
|
+
to: line.to
|
|
7619
|
+
}]);
|
|
7620
|
+
return {
|
|
7621
|
+
range: range.map(changes),
|
|
7622
|
+
changes
|
|
7623
|
+
};
|
|
7624
|
+
}
|
|
7625
|
+
}
|
|
7626
|
+
let changes = [];
|
|
7627
|
+
if (inner.node.name == "OrderedList") renumberList(inner.item, doc, changes);
|
|
7628
|
+
let insert = state.lineBreak;
|
|
7629
|
+
let continued = inner.item && inner.item.from < line.from;
|
|
7630
|
+
// If not dedented
|
|
7631
|
+
if (!continued || /^[\s\d.)\-+*>]*/.exec(line.text)[0].length >= inner.to) {
|
|
7632
|
+
for (let i = 0, e = context.length - 1; i <= e; i++) insert += i == e && !continued ? context[i].marker(doc, 1) : context[i].blank();
|
|
7633
|
+
}
|
|
7634
|
+
let from = pos;
|
|
7635
|
+
while (from > line.from && /\s/.test(line.text.charAt(from - line.from - 1))) from--;
|
|
7636
|
+
changes.push({
|
|
7637
|
+
from,
|
|
7638
|
+
to: pos,
|
|
7639
|
+
insert
|
|
7640
|
+
});
|
|
7641
|
+
return {
|
|
7642
|
+
range: EditorSelection.cursor(from + insert.length),
|
|
7643
|
+
changes
|
|
7644
|
+
};
|
|
7645
|
+
});
|
|
7646
|
+
if (dont) return false;
|
|
7647
|
+
dispatch(state.update(changes, {
|
|
7648
|
+
scrollIntoView: true,
|
|
7649
|
+
userEvent: "input"
|
|
7650
|
+
}));
|
|
7651
|
+
return true;
|
|
7652
|
+
};
|
|
7653
|
+
function isMark(node) {
|
|
7654
|
+
return node.name == "QuoteMark" || node.name == "ListMark";
|
|
7655
|
+
}
|
|
7656
|
+
function contextNodeForDelete(tree, pos) {
|
|
7657
|
+
let node = tree.resolveInner(pos, -1),
|
|
7658
|
+
scan = pos;
|
|
7659
|
+
if (isMark(node)) {
|
|
7660
|
+
scan = node.from;
|
|
7661
|
+
node = node.parent;
|
|
7662
|
+
}
|
|
7663
|
+
for (let prev; prev = node.childBefore(scan);) {
|
|
7664
|
+
if (isMark(prev)) {
|
|
7665
|
+
scan = prev.from;
|
|
7666
|
+
} else if (prev.name == "OrderedList" || prev.name == "BulletList") {
|
|
7667
|
+
node = prev.lastChild;
|
|
7668
|
+
scan = node.to;
|
|
7669
|
+
} else {
|
|
7670
|
+
break;
|
|
7671
|
+
}
|
|
7672
|
+
}
|
|
7673
|
+
return node;
|
|
7674
|
+
}
|
|
7675
|
+
/**
|
|
7676
|
+
This command will, when invoked in a Markdown context with the
|
|
7677
|
+
cursor directly after list or blockquote markup, delete one level
|
|
7678
|
+
of markup. When the markup is for a list, it will be replaced by
|
|
7679
|
+
spaces on the first invocation (a further invocation will delete
|
|
7680
|
+
the spaces), to make it easy to continue a list.
|
|
7681
|
+
|
|
7682
|
+
When not after Markdown block markup, this command will return
|
|
7683
|
+
false, so it is intended to be bound alongside other deletion
|
|
7684
|
+
commands, with a higher precedence than the more generic commands.
|
|
7685
|
+
*/
|
|
7686
|
+
const deleteMarkupBackward = ({
|
|
7687
|
+
state,
|
|
7688
|
+
dispatch
|
|
7689
|
+
}) => {
|
|
7690
|
+
let tree = syntaxTree(state);
|
|
7691
|
+
let dont = null,
|
|
7692
|
+
changes = state.changeByRange(range => {
|
|
7693
|
+
let pos = range.from,
|
|
7694
|
+
{
|
|
7695
|
+
doc
|
|
7696
|
+
} = state;
|
|
7697
|
+
if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
|
|
7698
|
+
let line = doc.lineAt(pos);
|
|
7699
|
+
let context = getContext(contextNodeForDelete(tree, pos), line.text, doc);
|
|
7700
|
+
if (context.length) {
|
|
7701
|
+
let inner = context[context.length - 1];
|
|
7702
|
+
let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);
|
|
7703
|
+
// Delete extra trailing space after markup
|
|
7704
|
+
if (pos - line.from > spaceEnd && !/\S/.test(line.text.slice(spaceEnd, pos - line.from))) return {
|
|
7705
|
+
range: EditorSelection.cursor(line.from + spaceEnd),
|
|
7706
|
+
changes: {
|
|
7707
|
+
from: line.from + spaceEnd,
|
|
7708
|
+
to: pos
|
|
7709
|
+
}
|
|
7710
|
+
};
|
|
7711
|
+
if (pos - line.from == spaceEnd) {
|
|
7712
|
+
let start = line.from + inner.from;
|
|
7713
|
+
// Replace a list item marker with blank space
|
|
7714
|
+
if (inner.item && inner.node.from < inner.item.from && /\S/.test(line.text.slice(inner.from, inner.to))) return {
|
|
7715
|
+
range,
|
|
7716
|
+
changes: {
|
|
7717
|
+
from: start,
|
|
7718
|
+
to: line.from + inner.to,
|
|
7719
|
+
insert: inner.blank()
|
|
7720
|
+
}
|
|
7721
|
+
};
|
|
7722
|
+
// Delete one level of indentation
|
|
7723
|
+
if (start < pos) return {
|
|
7724
|
+
range: EditorSelection.cursor(start),
|
|
7725
|
+
changes: {
|
|
7726
|
+
from: start,
|
|
7727
|
+
to: pos
|
|
7728
|
+
}
|
|
7729
|
+
};
|
|
7730
|
+
}
|
|
7731
|
+
}
|
|
7732
|
+
}
|
|
7733
|
+
return dont = {
|
|
7734
|
+
range
|
|
7735
|
+
};
|
|
7736
|
+
});
|
|
7737
|
+
if (dont) return false;
|
|
7738
|
+
dispatch(state.update(changes, {
|
|
7739
|
+
scrollIntoView: true,
|
|
7740
|
+
userEvent: "delete"
|
|
7741
|
+
}));
|
|
7742
|
+
return true;
|
|
7743
|
+
};
|
|
7744
|
+
|
|
7745
|
+
/**
|
|
7746
|
+
A small keymap with Markdown-specific bindings. Binds Enter to
|
|
7747
|
+
[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)
|
|
7748
|
+
and Backspace to
|
|
7749
|
+
[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).
|
|
7750
|
+
*/
|
|
7751
|
+
const markdownKeymap = [{
|
|
7752
|
+
key: "Enter",
|
|
7753
|
+
run: insertNewlineContinueMarkup
|
|
7754
|
+
}, {
|
|
7755
|
+
key: "Backspace",
|
|
7756
|
+
run: deleteMarkupBackward
|
|
7757
|
+
}];
|
|
7758
|
+
const htmlNoMatch = /*@__PURE__*/html({
|
|
7759
|
+
matchClosingTags: false
|
|
7760
|
+
});
|
|
7761
|
+
/**
|
|
7762
|
+
Markdown language support.
|
|
7763
|
+
*/
|
|
7764
|
+
function markdown(config = {}) {
|
|
7765
|
+
let {
|
|
7766
|
+
codeLanguages,
|
|
7767
|
+
defaultCodeLanguage,
|
|
7768
|
+
addKeymap = true,
|
|
7769
|
+
base: {
|
|
7770
|
+
parser
|
|
7771
|
+
} = commonmarkLanguage
|
|
7772
|
+
} = config;
|
|
7773
|
+
if (!(parser instanceof MarkdownParser)) throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");
|
|
7774
|
+
let extensions = config.extensions ? [config.extensions] : [];
|
|
7775
|
+
let support = [htmlNoMatch.support],
|
|
7776
|
+
defaultCode;
|
|
7777
|
+
if (defaultCodeLanguage instanceof LanguageSupport) {
|
|
7778
|
+
support.push(defaultCodeLanguage.support);
|
|
7779
|
+
defaultCode = defaultCodeLanguage.language;
|
|
7780
|
+
} else if (defaultCodeLanguage) {
|
|
7781
|
+
defaultCode = defaultCodeLanguage;
|
|
7782
|
+
}
|
|
7783
|
+
let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;
|
|
7784
|
+
extensions.push(parseCode({
|
|
7785
|
+
codeParser,
|
|
7786
|
+
htmlParser: htmlNoMatch.language.parser
|
|
7787
|
+
}));
|
|
7788
|
+
if (addKeymap) support.push(Prec.high(keymap.of(markdownKeymap)));
|
|
7789
|
+
return new LanguageSupport(mkLang(parser.configure(extensions)), support);
|
|
7790
|
+
}
|
|
7791
|
+
|
|
7792
|
+
const JS = javascript({
|
|
7793
|
+
typescript: false
|
|
7794
|
+
});
|
|
7795
|
+
const TS = javascript({
|
|
7796
|
+
typescript: true
|
|
7797
|
+
});
|
|
7798
|
+
const CSS = css();
|
|
7799
|
+
const HTML = html();
|
|
7800
|
+
const JSON$1 = json();
|
|
7801
|
+
const MD = markdown();
|
|
7802
|
+
var languages = {
|
|
7803
|
+
[OrCodeLanguages.JS]: JS,
|
|
7804
|
+
[OrCodeLanguages.TS]: TS,
|
|
7805
|
+
[OrCodeLanguages.CSS]: CSS,
|
|
7806
|
+
[OrCodeLanguages.HTML]: HTML,
|
|
7807
|
+
[OrCodeLanguages.JSON]: JSON$1,
|
|
7808
|
+
[OrCodeLanguages.MD]: MD
|
|
7809
|
+
};
|
|
7810
|
+
|
|
7811
|
+
export { CSS as C, HTML as H, JS as J, MD as M, TS as T, autocompletion as a, closeBracketsKeymap as b, closeBrackets as c, completionKeymap as d, JSON$1 as e, languages as l };
|