@onereach/ui-components 4.4.0-beta.2691.0 → 4.4.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/OrCode/OrCode.js +3792 -6
- package/dist/bundled/v2/components/OrCode/index.js +2 -6
- package/dist/bundled/v2/components/OrCode/lang.js +3 -3941
- package/dist/bundled/v2/components/OrCode/theme.js +1 -2
- package/dist/bundled/v2/components/OrConfirm/OrConfirm.js +3 -4
- package/dist/bundled/v2/components/OrConfirm/index.js +1 -2
- package/dist/bundled/v2/components/OrConfirmV3/OrConfirm.js +1 -1
- package/dist/bundled/v2/components/OrConfirmV3/index.js +1 -1
- package/dist/bundled/v2/components/OrExpansionPanelV3/styles.js +3 -1
- package/dist/bundled/v2/components/OrInlineTextEdit/OrInlineTextEdit.js +2 -2
- package/dist/bundled/v2/components/OrModal/OrModal.js +1346 -3
- package/dist/bundled/v2/components/OrModal/index.js +0 -1
- package/dist/bundled/v2/components/OrSidebarV3/styles.js +1 -1
- package/dist/bundled/v2/components/OrTagV3/OrTag.vue.d.ts +5 -5
- package/dist/bundled/v2/components/OrTagsV3/OrTags.js +163 -0
- package/dist/bundled/v2/components/OrTagsV3/OrTags.vue.d.ts +80 -0
- package/dist/bundled/v2/components/OrTagsV3/index.d.ts +1 -0
- package/dist/bundled/v2/components/OrTagsV3/index.js +37 -0
- package/dist/bundled/v2/components/OrTagsV3/styles.d.ts +4 -0
- package/dist/bundled/v2/components/OrTagsV3/styles.js +26 -0
- package/dist/bundled/v2/components/OrTextV3/OrText.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextarea/OrTextarea.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextareaV3/OrTextarea.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextbox/OrTextbox.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTimePickerV3/OrTimePicker.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrToast/OrToast.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrToastV3/OrToast.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTooltip/OrTooltip.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTooltipV3/OrTooltip.vue.d.ts +2 -2
- package/dist/bundled/v2/components/index.d.ts +4 -1
- package/dist/bundled/v2/components/index.js +13 -17
- package/dist/bundled/v2/{index-0d224ae5.js → index-cf2c3c27.js} +115 -3
- package/dist/bundled/v2/index.js +16 -21
- package/dist/bundled/{v3/index-e9f6b2d8.js → v2/lang-0fb8f78b.js} +4009 -73
- package/dist/bundled/v3/OrCheckboxGroup.vue_vue_type_script_lang-1e71771d.js +60 -0
- package/dist/bundled/v3/{index-d92d0b48.js → OrCode.vue_vue_type_script_lang-74060519.js} +235 -14
- package/dist/bundled/v3/{OrConfirm.vue_vue_type_script_lang-dca252a7.js → OrConfirm.vue_vue_type_script_lang-23e4ce08.js} +1 -1
- package/dist/bundled/v3/{OrConfirm.vue_vue_type_script_lang-4eaa8470.js → OrConfirm.vue_vue_type_script_lang-e5a8f92a.js} +2 -2
- package/dist/bundled/{v2/useFocusTrap-48767a70.js → v3/OrModal.vue_vue_type_script_lang-ae842e5b.js} +106 -3
- package/dist/bundled/v3/OrRadioGroup.vue_vue_type_script_lang-dfffdd80.js +59 -0
- package/dist/bundled/v3/{OrSelect.vue_vue_type_script_lang-264914d3.js → OrSelect.vue_vue_type_script_lang-2c4c9f9d.js} +2 -2
- package/dist/bundled/v3/OrTags.vue_vue_type_script_lang-e75444b5.js +70 -0
- package/dist/bundled/v3/components/OrAvatar/OrAvatar.vue.d.ts +11 -26
- package/dist/bundled/v3/components/OrAvatarV3/OrAvatar.vue.d.ts +8 -24
- package/dist/bundled/v3/components/OrBottomSheetV3/OrBottomSheet.vue.d.ts +20 -33
- package/dist/bundled/v3/components/OrButton/OrButton.vue.d.ts +16 -51
- package/dist/bundled/v3/components/OrButtonV2/OrButton.vue.d.ts +20 -57
- package/dist/bundled/v3/components/OrButtonV3/OrButton.vue.d.ts +15 -35
- package/dist/bundled/v3/components/OrCard/OrCard.vue.d.ts +7 -15
- package/dist/bundled/v3/components/OrCardCollection/OrCardCollection.vue.d.ts +21 -47
- package/dist/bundled/v3/components/OrCardCollectionV3/OrCardCollection.vue.d.ts +22 -70
- package/dist/bundled/v3/components/OrCardV3/OrCard.vue.d.ts +4 -7
- package/dist/bundled/v3/components/OrCarousel/OrCarousel.vue.d.ts +126 -676
- package/dist/bundled/v3/components/OrCarouselItem/OrCarouselItem.vue.d.ts +1 -1
- package/dist/bundled/v3/components/OrCheckbox/OrCheckbox.vue.d.ts +15 -35
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.js +9 -60
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.vue.d.ts +6 -24
- package/dist/bundled/v3/components/OrCheckboxGroupV3/index.js +2 -2
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.js +2 -2
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.vue.d.ts +17 -43
- package/dist/bundled/v3/components/OrCheckboxTreeV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCheckboxV3/OrCheckbox.vue.d.ts +23 -53
- package/dist/bundled/v3/components/OrChip/OrChip.vue.d.ts +9 -25
- package/dist/bundled/v3/components/OrChips/OrChips.vue.d.ts +24 -51
- package/dist/bundled/v3/components/OrCode/OrCode.js +6 -10
- package/dist/bundled/v3/components/OrCode/OrCode.vue.d.ts +24 -69
- package/dist/bundled/v3/components/OrCode/index.js +4 -8
- package/dist/bundled/v3/components/OrCode/lang.js +3 -3941
- package/dist/bundled/v3/components/OrCode/theme.js +1 -2
- package/dist/bundled/v3/components/OrCollapse/OrCollapse.vue.d.ts +17 -39
- package/dist/bundled/v3/components/OrColorPicker/OrColorPicker.vue.d.ts +13 -31
- package/dist/bundled/v3/components/OrCombinedInputV3/OrCombinedInput.vue.d.ts +8 -30
- package/dist/bundled/v3/components/OrConfirm/OrConfirm.js +5 -6
- package/dist/bundled/v3/components/OrConfirm/OrConfirm.vue.d.ts +23 -84
- package/dist/bundled/v3/components/OrConfirm/index.js +3 -4
- package/dist/bundled/v3/components/OrConfirmV3/OrConfirm.js +3 -3
- package/dist/bundled/v3/components/OrConfirmV3/OrConfirm.vue.d.ts +29 -91
- package/dist/bundled/v3/components/OrConfirmV3/index.js +2 -2
- package/dist/bundled/v3/components/OrDatePickerV3/OrDatePicker.vue.d.ts +25 -81
- package/dist/bundled/v3/components/OrDateTimePicker/OrDateTimePicker.vue.d.ts +68 -177
- package/dist/bundled/v3/components/OrDateTimePickerV3/OrDateTimePicker.vue.d.ts +31 -105
- package/dist/bundled/v3/components/OrEmptyStateV3/OrEmptyState.vue.d.ts +11 -28
- package/dist/bundled/v3/components/OrError/OrError.vue.d.ts +4 -8
- package/dist/bundled/v3/components/OrErrorTagV3/OrErrorTag.vue.d.ts +4 -7
- package/dist/bundled/v3/components/OrErrorV3/OrError.vue.d.ts +9 -18
- package/dist/bundled/v3/components/OrExpansionPanelV3/OrExpansionPanel.js +2 -2
- package/dist/bundled/v3/components/OrExpansionPanelV3/OrExpansionPanel.vue.d.ts +14 -35
- package/dist/bundled/v3/components/OrExpansionPanelV3/index.js +1 -1
- package/dist/bundled/v3/components/OrExpansionPanelV3/styles.js +3 -1
- package/dist/bundled/v3/components/OrFabV3/OrFab.vue.d.ts +8 -20
- package/dist/bundled/v3/components/OrFloating/OrFloating.vue.d.ts +15 -46
- package/dist/bundled/v3/components/OrFormGroupV3/OrFormGroup.vue.d.ts +10 -30
- package/dist/bundled/v3/components/OrHint/OrHint.vue.d.ts +4 -8
- package/dist/bundled/v3/components/OrHintV3/OrHint.vue.d.ts +9 -18
- package/dist/bundled/v3/components/OrIcon/OrIcon.vue.d.ts +16 -44
- package/dist/bundled/v3/components/OrIconButtonV2/OrIconButton.vue.d.ts +13 -43
- package/dist/bundled/v3/components/OrIconButtonV3/OrIconButton.vue.d.ts +16 -52
- package/dist/bundled/v3/components/OrIconV3/OrIcon.vue.d.ts +7 -18
- package/dist/bundled/v3/components/OrInlineInputBoxV3/OrInlineInputBox.vue.d.ts +7 -16
- package/dist/bundled/v3/components/OrInlineInputV3/OrInlineInput.vue.d.ts +39 -83
- package/dist/bundled/v3/components/OrInlineTextEdit/OrInlineTextEdit.js +1 -1
- package/dist/bundled/v3/components/OrInlineTextEdit/OrInlineTextEdit.vue.d.ts +43 -95
- package/dist/bundled/v3/components/OrInlineTextareaV3/OrInlineTextarea.vue.d.ts +39 -79
- package/dist/bundled/v3/components/OrInput/OrInput.vue.d.ts +36 -87
- package/dist/bundled/v3/components/OrInputBoxV3/OrInputBox.vue.d.ts +7 -22
- package/dist/bundled/v3/components/OrInputV3/OrInput.vue.d.ts +34 -85
- package/dist/bundled/v3/components/OrLabel/OrLabel.vue.d.ts +9 -20
- package/dist/bundled/v3/components/OrLabelV3/OrLabel.vue.d.ts +9 -24
- package/dist/bundled/v3/components/OrLinkV3/OrLink.vue.d.ts +7 -24
- package/dist/bundled/v3/components/OrList/OrList.vue.d.ts +21 -47
- package/dist/bundled/v3/components/OrListOfInputs/OrListOfInputs.vue.d.ts +11 -27
- package/dist/bundled/v3/components/OrLoader/OrLoader.vue.d.ts +10 -26
- package/dist/bundled/v3/components/OrLoaderV3/OrLoader.vue.d.ts +13 -34
- package/dist/bundled/v3/components/OrMenuItemV3/OrMenuItem.vue.d.ts +13 -34
- package/dist/bundled/v3/components/OrMenuV3/OrMenu.vue.d.ts +16 -43
- package/dist/bundled/v3/components/OrModal/OrModal.js +2 -3
- package/dist/bundled/v3/components/OrModal/OrModal.vue.d.ts +14 -38
- package/dist/bundled/v3/components/OrModal/index.js +1 -2
- package/dist/bundled/v3/components/OrModalV3/OrModal.vue.d.ts +15 -31
- package/dist/bundled/v3/components/OrNotification/OrNotification.vue.d.ts +9 -27
- package/dist/bundled/v3/components/OrNotificationV3/OrNotification.vue.d.ts +9 -20
- package/dist/bundled/v3/components/OrNumberInput/OrNumberInput.vue.d.ts +24 -70
- package/dist/bundled/v3/components/OrOverflowMenu/OrOverflowMenu.vue.d.ts +13 -31
- package/dist/bundled/v3/components/OrOverlay/OrOverlay.vue.d.ts +6 -16
- package/dist/bundled/v3/components/OrOverlayV3/OrOverlay.vue.d.ts +7 -14
- package/dist/bundled/v3/components/OrPaginationV3/OrPagination.vue.d.ts +27 -75
- package/dist/bundled/v3/components/OrPassword/OrPassword.vue.d.ts +22 -63
- package/dist/bundled/v3/components/OrPopoverV3/OrPopover.vue.d.ts +27 -74
- package/dist/bundled/v3/components/OrProgress/OrProgress.vue.d.ts +20 -56
- package/dist/bundled/v3/components/OrProgressV3/OrProgress.vue.d.ts +25 -62
- package/dist/bundled/v3/components/OrRadio/OrRadio.vue.d.ts +13 -35
- package/dist/bundled/v3/components/OrRadioGroup/OrRadioGroup.vue.d.ts +9 -26
- package/dist/bundled/v3/components/OrRadioGroupV3/OrRadioGroup.js +9 -60
- package/dist/bundled/v3/components/OrRadioGroupV3/OrRadioGroup.vue.d.ts +6 -32
- package/dist/bundled/v3/components/OrRadioGroupV3/index.js +1 -1
- package/dist/bundled/v3/components/OrRadioV3/OrRadio.vue.d.ts +21 -49
- package/dist/bundled/v3/components/OrSearch/OrSearch.vue.d.ts +23 -65
- package/dist/bundled/v3/components/OrSearchV3/OrSearch.vue.d.ts +17 -41
- package/dist/bundled/v3/components/OrSegmentedControlV3/OrSegmentedControl.vue.d.ts +9 -25
- package/dist/bundled/v3/components/OrSelect/OrSelect.vue.d.ts +28 -77
- package/dist/bundled/v3/components/OrSelectV3/OrSelect.js +3 -3
- package/dist/bundled/v3/components/OrSelectV3/OrSelect.vue.d.ts +37 -115
- package/dist/bundled/v3/components/OrSelectV3/index.js +2 -2
- package/dist/bundled/v3/components/OrSidebar/OrSidebar.vue.d.ts +14 -33
- package/dist/bundled/v3/components/OrSidebarV3/OrSidebar.js +2 -2
- package/dist/bundled/v3/components/OrSidebarV3/OrSidebar.vue.d.ts +28 -63
- package/dist/bundled/v3/components/OrSidebarV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSidebarV3/styles.js +1 -1
- package/dist/bundled/v3/components/OrSkeletonCircle/OrSkeletonCircle.vue.d.ts +9 -20
- package/dist/bundled/v3/components/OrSkeletonCircleV3/OrSkeletonCircle.vue.d.ts +13 -28
- package/dist/bundled/v3/components/OrSkeletonRect/OrSkeletonRect.vue.d.ts +9 -22
- package/dist/bundled/v3/components/OrSkeletonRectV3/OrSkeletonRect.vue.d.ts +11 -26
- package/dist/bundled/v3/components/OrSkeletonText/OrSkeletonText.vue.d.ts +10 -26
- package/dist/bundled/v3/components/OrSkeletonTextV3/OrSkeletonText.vue.d.ts +16 -40
- package/dist/bundled/v3/components/OrSlider/OrSlider.vue.d.ts +35 -91
- package/dist/bundled/v3/components/OrSortHeaderV3/OrSortHeader.vue.d.ts +13 -25
- package/dist/bundled/v3/components/OrStepper/OrStepper.vue.d.ts +16 -43
- package/dist/bundled/v3/components/OrSwitch/OrSwitch.vue.d.ts +12 -33
- package/dist/bundled/v3/components/OrSwitchV3/OrSwitch.vue.d.ts +22 -53
- package/dist/bundled/v3/components/OrTab/OrTab.vue.d.ts +9 -22
- package/dist/bundled/v3/components/OrTabHeaderItem/OrTabHeaderItem.vue.d.ts +13 -29
- package/dist/bundled/v3/components/OrTabV3/OrTab.vue.d.ts +10 -17
- package/dist/bundled/v3/components/OrTabs/OrTabs.vue.d.ts +4 -17
- package/dist/bundled/v3/components/OrTabsV3/OrTabs.vue.d.ts +24 -69
- package/dist/bundled/v3/components/OrTag/OrTag.vue.d.ts +10 -27
- package/dist/bundled/v3/components/OrTagV3/OrTag.vue.d.ts +15 -26
- package/dist/bundled/v3/components/OrTagsV3/OrTags.js +101 -0
- package/dist/bundled/v3/components/OrTagsV3/OrTags.vue.d.ts +36 -0
- package/dist/bundled/v3/components/OrTagsV3/index.d.ts +1 -0
- package/dist/bundled/v3/components/OrTagsV3/index.js +46 -0
- package/dist/bundled/v3/components/OrTagsV3/styles.d.ts +4 -0
- package/dist/bundled/v3/components/OrTagsV3/styles.js +26 -0
- package/dist/bundled/v3/components/OrTeleport/OrTeleport.vue3.vue.d.ts +4 -10
- package/dist/bundled/v3/components/OrTeleportV3/OrTeleport.vue3.vue.d.ts +4 -10
- package/dist/bundled/v3/components/OrTextV3/OrText.vue.d.ts +11 -24
- package/dist/bundled/v3/components/OrTextarea/OrTextarea.vue.d.ts +37 -85
- package/dist/bundled/v3/components/OrTextareaV3/OrTextarea.vue.d.ts +32 -73
- package/dist/bundled/v3/components/OrTextbox/OrTextbox.vue.d.ts +55 -137
- package/dist/bundled/v3/components/OrTimePickerV3/OrTimePicker.vue.d.ts +25 -79
- package/dist/bundled/v3/components/OrToast/OrToast.vue.d.ts +11 -31
- package/dist/bundled/v3/components/OrToastContainer/OrToastContainer.vue.d.ts +25 -55
- package/dist/bundled/v3/components/OrToastContainerV3/OrToastContainer.vue.d.ts +24 -54
- package/dist/bundled/v3/components/OrToastV3/OrToast.vue.d.ts +16 -38
- package/dist/bundled/v3/components/OrTooltip/OrTooltip.vue.d.ts +14 -33
- package/dist/bundled/v3/components/OrTooltipContent/OrTooltipContent.vue.d.ts +4 -10
- package/dist/bundled/v3/components/OrTooltipV3/OrTooltip.vue.d.ts +13 -37
- package/dist/bundled/v3/components/index.d.ts +4 -1
- package/dist/bundled/v3/components/index.js +24 -26
- package/dist/bundled/v3/directives/dropdown-close.d.ts +3 -1
- package/dist/bundled/v3/directives/dropdown-open.d.ts +3 -1
- package/dist/bundled/v3/hooks/useResponsive/useResponsive.d.ts +2 -2
- package/dist/bundled/v3/{index-0d224ae5.js → index-cf2c3c27.js} +115 -3
- package/dist/bundled/v3/index.js +33 -33
- package/dist/bundled/{v2/index-e9f6b2d8.js → v3/lang-0fb8f78b.js} +4009 -73
- package/dist/esm/v2/OrCheckboxGroup-f470f938.js +121 -0
- package/dist/esm/v2/{OrCheckboxTree-df80d4ab.js → OrCheckboxTree-1304ae59.js} +6 -2
- package/dist/esm/v2/{OrConfirm-b62d9ce4.js → OrConfirm-d0d9d56c.js} +2 -2
- package/dist/esm/v2/{OrExpansionPanel-7c359bb0.js → OrExpansionPanel-d3a2218d.js} +3 -1
- package/dist/esm/v2/OrInlineTextEdit-601163c3.js +400 -0
- package/dist/esm/v2/OrRadioGroup-0de37d76.js +120 -0
- package/dist/esm/v2/{OrSelect-9d6b3363.js → OrSelect-a4c34099.js} +1 -1
- package/dist/esm/v2/{OrSidebar-b8387abe.js → OrSidebar-de938772.js} +1 -1
- package/dist/esm/v2/OrTags-4ffaa13b.js +159 -0
- package/dist/esm/v2/components/index.d.ts +4 -1
- package/dist/esm/v2/components/index.js +10 -29
- package/dist/esm/v2/components/or-checkbox-group-v3/index.js +6 -122
- package/dist/esm/v2/components/or-checkbox-tree-v3/index.js +1 -2
- package/dist/esm/v2/components/or-confirm/index.js +1 -1
- package/dist/esm/v2/components/or-expansion-panel-v3/index.js +1 -1
- package/dist/esm/v2/components/or-inline-text-edit/index.js +1 -1
- package/dist/esm/v2/components/or-radio-group-v3/index.js +6 -120
- package/dist/esm/v2/components/or-select-v3/index.js +2 -2
- package/dist/esm/v2/components/or-sidebar-v3/index.js +1 -1
- package/dist/esm/v2/components/or-tag-v3/OrTag.vue.d.ts +5 -5
- package/dist/esm/v2/components/or-tags-v3/OrTags.vue.d.ts +80 -0
- package/dist/esm/v2/components/or-tags-v3/index.d.ts +1 -0
- package/dist/esm/v2/components/or-tags-v3/index.js +19 -0
- package/dist/esm/v2/components/or-tags-v3/styles.d.ts +4 -0
- package/dist/esm/v2/components/or-text-v3/OrText.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textarea/OrTextarea.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textarea-v3/OrTextarea.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textbox/OrTextbox.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-time-picker-v3/OrTimePicker.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast/OrToast.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast/or-toast-container/OrToastContainer.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast-v3/OrToast.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast-v3/or-toast-container-v3/OrToastContainer.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip/OrTooltip.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip/or-tooltip-content/OrTooltipContent.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip-v3/OrTooltip.vue.d.ts +2 -2
- package/dist/esm/v2/index.js +10 -30
- package/dist/esm/v3/OrCheckboxGroup-c41a99ba.js +88 -0
- package/dist/esm/v3/{OrCheckboxTree-4a85b9b3.js → OrCheckboxTree-fa6288af.js} +6 -2
- package/dist/esm/v3/{OrConfirm-1a94bdea.js → OrConfirm-410da5b4.js} +1 -1
- package/dist/esm/v3/{OrExpansionPanel-99ca7ed7.js → OrExpansionPanel-c016d8fa.js} +3 -1
- package/dist/esm/v3/OrInlineTextEdit-42d59fb9.js +356 -0
- package/dist/esm/v3/OrRadioGroup-5d1fe6fd.js +87 -0
- package/dist/esm/v3/{OrSelect-3dbddc6b.js → OrSelect-046e8e36.js} +1 -1
- package/dist/esm/v3/{OrSidebar-bfd19c4c.js → OrSidebar-3f2502fb.js} +1 -1
- package/dist/esm/v3/OrTags-a082de82.js +147 -0
- package/dist/esm/v3/components/index.d.ts +4 -1
- package/dist/esm/v3/components/index.js +10 -29
- package/dist/esm/v3/components/or-avatar/OrAvatar.vue.d.ts +11 -26
- package/dist/esm/v3/components/or-avatar-v3/OrAvatar.vue.d.ts +8 -24
- package/dist/esm/v3/components/or-bottom-sheet-v3/OrBottomSheet.vue.d.ts +20 -33
- package/dist/esm/v3/components/or-button/OrButton.vue.d.ts +16 -51
- package/dist/esm/v3/components/or-button-v2/OrButton.vue.d.ts +20 -57
- package/dist/esm/v3/components/or-button-v3/OrButton.vue.d.ts +15 -35
- package/dist/esm/v3/components/or-card/OrCard.vue.d.ts +7 -15
- package/dist/esm/v3/components/or-card-collection/OrCardCollection.vue.d.ts +21 -47
- package/dist/esm/v3/components/or-card-collection-v3/OrCardCollection.vue.d.ts +22 -70
- package/dist/esm/v3/components/or-card-collection-v3/partials/OrCardCollectionView.vue3.vue.d.ts +6 -14
- package/dist/esm/v3/components/or-card-v3/OrCard.vue.d.ts +4 -7
- package/dist/esm/v3/components/or-carousel/OrCarousel.vue.d.ts +126 -676
- package/dist/esm/v3/components/or-carousel/or-carousel-item/OrCarouselItem.vue.d.ts +1 -1
- package/dist/esm/v3/components/or-checkbox/OrCheckbox.vue.d.ts +15 -35
- package/dist/esm/v3/components/or-checkbox-group-v3/OrCheckboxGroup.vue.d.ts +6 -24
- package/dist/esm/v3/components/or-checkbox-group-v3/index.js +6 -89
- package/dist/esm/v3/components/or-checkbox-tree-v3/OrCheckboxTree.vue.d.ts +17 -43
- package/dist/esm/v3/components/or-checkbox-tree-v3/index.js +1 -2
- package/dist/esm/v3/components/or-checkbox-v3/OrCheckbox.vue.d.ts +23 -53
- package/dist/esm/v3/components/or-chips/OrChips.vue.d.ts +24 -51
- package/dist/esm/v3/components/or-chips/or-chip/OrChip.vue.d.ts +9 -25
- package/dist/esm/v3/components/or-chips/partials/OrChipsInput.vue.d.ts +17 -37
- package/dist/esm/v3/components/or-code/OrCode.vue.d.ts +24 -69
- package/dist/esm/v3/components/or-collapse/OrCollapse.vue.d.ts +17 -39
- package/dist/esm/v3/components/or-color-picker/OrColorPicker.vue.d.ts +13 -31
- package/dist/esm/v3/components/or-combined-input-v3/OrCombinedInput.vue.d.ts +8 -30
- package/dist/esm/v3/components/or-confirm/OrConfirm.vue.d.ts +23 -84
- package/dist/esm/v3/components/or-confirm/index.js +1 -1
- package/dist/esm/v3/components/or-confirm-v3/OrConfirm.vue.d.ts +29 -91
- package/dist/esm/v3/components/or-date-picker-v3/OrDatePicker.vue.d.ts +25 -81
- package/dist/esm/v3/components/or-date-time-picker/OrDateTimePicker.vue.d.ts +68 -177
- package/dist/esm/v3/components/or-date-time-picker/partials/OrDateTimePickerCalendarItem.vue.d.ts +12 -33
- package/dist/esm/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +31 -105
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-control/OrDateTimePickerDateControl.vue.d.ts +11 -28
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts +17 -39
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-mobile-control/OrDateTimePickerMobileControl.vue.d.ts +7 -15
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +23 -85
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-popover-footer/OrDateTimePickerPopoverFooter.vue.d.ts +7 -11
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-popover-header/OrDateTimePickerPopoverHeader.vue.d.ts +4 -7
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-control/OrDateTimePickerTimeControl.vue.d.ts +11 -28
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +15 -37
- package/dist/esm/v3/components/or-empty-state-v3/OrEmptyState.vue.d.ts +11 -28
- package/dist/esm/v3/components/or-error/OrError.vue.d.ts +4 -8
- package/dist/esm/v3/components/or-error-tag-v3/OrErrorTag.vue.d.ts +4 -7
- package/dist/esm/v3/components/or-error-v3/OrError.vue.d.ts +9 -18
- package/dist/esm/v3/components/or-expansion-panel-v3/OrExpansionPanel.vue.d.ts +14 -35
- package/dist/esm/v3/components/or-expansion-panel-v3/index.js +1 -1
- package/dist/esm/v3/components/or-fab-v3/OrFab.vue.d.ts +8 -20
- package/dist/esm/v3/components/or-floating/OrFloating.vue.d.ts +15 -46
- package/dist/esm/v3/components/or-form-group-v3/OrFormGroup.vue.d.ts +10 -30
- package/dist/esm/v3/components/or-hint/OrHint.vue.d.ts +4 -8
- package/dist/esm/v3/components/or-hint-v3/OrHint.vue.d.ts +9 -18
- package/dist/esm/v3/components/or-icon/OrIcon.vue.d.ts +16 -44
- package/dist/esm/v3/components/or-icon-button-v2/OrIconButton.vue.d.ts +13 -43
- package/dist/esm/v3/components/or-icon-button-v2/partials/OrTooltipWrapper.vue.d.ts +8 -10
- package/dist/esm/v3/components/or-icon-button-v3/OrIconButton.vue.d.ts +16 -52
- package/dist/esm/v3/components/or-icon-v3/OrIcon.vue.d.ts +7 -18
- package/dist/esm/v3/components/or-inline-input-box-v3/OrInlineInputBox.vue.d.ts +7 -16
- package/dist/esm/v3/components/or-inline-input-v3/OrInlineInput.vue.d.ts +39 -83
- package/dist/esm/v3/components/or-inline-text-edit/OrInlineTextEdit.vue.d.ts +43 -95
- package/dist/esm/v3/components/or-inline-text-edit/index.js +1 -1
- package/dist/esm/v3/components/or-inline-textarea-v3/OrInlineTextarea.vue.d.ts +39 -79
- package/dist/esm/v3/components/or-input/OrInput.vue.d.ts +36 -87
- package/dist/esm/v3/components/or-input-box-v3/OrInputBox.vue.d.ts +7 -22
- package/dist/esm/v3/components/or-input-v3/OrInput.vue.d.ts +34 -85
- package/dist/esm/v3/components/or-label/OrLabel.vue.d.ts +9 -20
- package/dist/esm/v3/components/or-label-v3/OrLabel.vue.d.ts +9 -24
- package/dist/esm/v3/components/or-link-v3/OrLink.vue.d.ts +7 -24
- package/dist/esm/v3/components/or-list/OrList.vue.d.ts +21 -47
- package/dist/esm/v3/components/or-list-of-inputs/OrListOfInputs.vue.d.ts +11 -27
- package/dist/esm/v3/components/or-loader/OrLoader.vue.d.ts +10 -26
- package/dist/esm/v3/components/or-loader-v3/OrLoader.vue.d.ts +13 -34
- package/dist/esm/v3/components/or-menu-item-v3/OrMenuItem.vue.d.ts +13 -34
- package/dist/esm/v3/components/or-menu-v3/OrMenu.vue.d.ts +16 -43
- package/dist/esm/v3/components/or-modal/OrModal.vue.d.ts +14 -38
- package/dist/esm/v3/components/or-modal-v3/OrModal.vue.d.ts +15 -31
- package/dist/esm/v3/components/or-notification/OrNotification.vue.d.ts +9 -27
- package/dist/esm/v3/components/or-notification-v3/OrNotification.vue.d.ts +9 -20
- package/dist/esm/v3/components/or-number-input/OrNumberInput.vue.d.ts +24 -70
- package/dist/esm/v3/components/or-overflow-menu/OrOverflowMenu.vue.d.ts +13 -31
- package/dist/esm/v3/components/or-overflow-menu/partials/OrOverflowMenuItem.vue.d.ts +7 -23
- package/dist/esm/v3/components/or-overlay/OrOverlay.vue.d.ts +6 -16
- package/dist/esm/v3/components/or-overlay-v3/OrOverlay.vue.d.ts +7 -14
- package/dist/esm/v3/components/or-pagination-v3/OrPagination.vue.d.ts +27 -75
- package/dist/esm/v3/components/or-password/OrPassword.vue.d.ts +22 -63
- package/dist/esm/v3/components/or-popover-v3/OrPopover.vue.d.ts +27 -74
- package/dist/esm/v3/components/or-progress/OrProgress.vue.d.ts +20 -56
- package/dist/esm/v3/components/or-progress-v3/OrProgress.vue.d.ts +25 -62
- package/dist/esm/v3/components/or-radio/OrRadio.vue.d.ts +13 -35
- package/dist/esm/v3/components/or-radio-group/OrRadioGroup.vue.d.ts +9 -26
- package/dist/esm/v3/components/or-radio-group-v3/OrRadioGroup.vue.d.ts +6 -32
- package/dist/esm/v3/components/or-radio-group-v3/index.js +6 -87
- package/dist/esm/v3/components/or-radio-v3/OrRadio.vue.d.ts +21 -49
- package/dist/esm/v3/components/or-search/OrSearch.vue.d.ts +23 -65
- package/dist/esm/v3/components/or-search-v3/OrSearch.vue.d.ts +17 -41
- package/dist/esm/v3/components/or-segmented-control-v3/OrSegmentedControl.vue.d.ts +9 -25
- package/dist/esm/v3/components/or-segmented-control-v3/partials/or-segmented-control-item/OrSegmentedControlItem.vue.d.ts +8 -20
- package/dist/esm/v3/components/or-select/OrSelect.vue.d.ts +28 -77
- package/dist/esm/v3/components/or-select/partials/OrSelectContent.vue.d.ts +18 -49
- package/dist/esm/v3/components/or-select/partials/OrSelectContentEmpty.vue.d.ts +4 -16
- package/dist/esm/v3/components/or-select/partials/OrSelectContentOptions.vue.d.ts +13 -67
- package/dist/esm/v3/components/or-select/partials/OrSelectInput.vue.d.ts +16 -41
- package/dist/esm/v3/components/or-select/partials/OrSelectInputValue.vue.d.ts +16 -35
- package/dist/esm/v3/components/or-select/partials/OrSelectMain.vue.d.ts +24 -71
- package/dist/esm/v3/components/or-select/partials/OrSelectOption.vue.d.ts +7 -19
- package/dist/esm/v3/components/or-select/partials/OrSelectSearchOptions.vue.d.ts +11 -24
- package/dist/esm/v3/components/or-select-v3/OrSelect.vue.d.ts +37 -115
- package/dist/esm/v3/components/or-select-v3/index.js +2 -2
- package/dist/esm/v3/components/or-sidebar/OrSidebar.vue.d.ts +14 -33
- package/dist/esm/v3/components/or-sidebar-v3/OrSidebar.vue.d.ts +28 -63
- package/dist/esm/v3/components/or-sidebar-v3/index.js +1 -1
- package/dist/esm/v3/components/or-sidebar-v3/partials/or-sidebar-collapse-button/OrSidebarCollapseButton.vue.d.ts +10 -23
- package/dist/esm/v3/components/or-skeleton/or-skeleton-circle/OrSkeletonCircle.vue.d.ts +9 -20
- package/dist/esm/v3/components/or-skeleton/or-skeleton-rect/OrSkeletonRect.vue.d.ts +9 -22
- package/dist/esm/v3/components/or-skeleton/or-skeleton-text/OrSkeletonText.vue.d.ts +10 -26
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-circle-v3/OrSkeletonCircle.vue.d.ts +13 -28
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-rect-v3/OrSkeletonRect.vue.d.ts +11 -26
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-text-v3/OrSkeletonText.vue.d.ts +16 -40
- package/dist/esm/v3/components/or-slider/OrSlider.vue.d.ts +35 -91
- package/dist/esm/v3/components/or-sort-header-v3/OrSortHeader.vue.d.ts +13 -25
- package/dist/esm/v3/components/or-stepper/OrStepper.vue.d.ts +16 -43
- package/dist/esm/v3/components/or-stepper/partials/OrStepperButtonOptions.vue.d.ts +4 -20
- package/dist/esm/v3/components/or-stepper/partials/OrStepperOptionHorizontal.vue.d.ts +4 -26
- package/dist/esm/v3/components/or-stepper/partials/OrStepperOptionVertical.vue.d.ts +4 -26
- package/dist/esm/v3/components/or-stepper/partials/OrStepperTitle.vue.d.ts +6 -22
- package/dist/esm/v3/components/or-stepper/partials/StatusIcon.vue.d.ts +6 -12
- package/dist/esm/v3/components/or-switch/OrSwitch.vue.d.ts +12 -33
- package/dist/esm/v3/components/or-switch-v3/OrSwitch.vue.d.ts +22 -53
- package/dist/esm/v3/components/or-tab/OrTab.vue.d.ts +9 -22
- package/dist/esm/v3/components/or-tab-header-item/OrTabHeaderItem.vue.d.ts +13 -29
- package/dist/esm/v3/components/or-tab-v3/OrTab.vue.d.ts +10 -17
- package/dist/esm/v3/components/or-tabs/OrTabs.vue.d.ts +4 -17
- package/dist/esm/v3/components/or-tabs-v3/OrTabs.vue.d.ts +24 -69
- package/dist/esm/v3/components/or-tag/OrTag.vue.d.ts +10 -27
- package/dist/esm/v3/components/or-tag-v3/OrTag.vue.d.ts +15 -26
- package/dist/esm/v3/components/or-tags-v3/OrTags.vue.d.ts +36 -0
- package/dist/esm/v3/components/or-tags-v3/index.d.ts +1 -0
- package/dist/esm/v3/components/or-tags-v3/index.js +18 -0
- package/dist/esm/v3/components/or-tags-v3/styles.d.ts +4 -0
- package/dist/esm/v3/components/or-teleport/OrTeleport.vue3.vue.d.ts +4 -10
- package/dist/esm/v3/components/or-teleport-v3/OrTeleport.vue3.vue.d.ts +4 -10
- package/dist/esm/v3/components/or-text-v3/OrText.vue.d.ts +11 -24
- package/dist/esm/v3/components/or-textarea/OrTextarea.vue.d.ts +37 -85
- package/dist/esm/v3/components/or-textarea-v3/OrTextarea.vue.d.ts +32 -73
- package/dist/esm/v3/components/or-textbox/OrTextbox.vue.d.ts +55 -137
- package/dist/esm/v3/components/or-time-picker-v3/OrTimePicker.vue.d.ts +25 -79
- package/dist/esm/v3/components/or-toast/OrToast.vue.d.ts +11 -31
- package/dist/esm/v3/components/or-toast/or-toast-container/OrToastContainer.vue.d.ts +25 -55
- package/dist/esm/v3/components/or-toast-v3/OrToast.vue.d.ts +16 -38
- package/dist/esm/v3/components/or-toast-v3/or-toast-container-v3/OrToastContainer.vue.d.ts +24 -54
- package/dist/esm/v3/components/or-tooltip/OrTooltip.vue.d.ts +14 -33
- package/dist/esm/v3/components/or-tooltip/or-tooltip-content/OrTooltipContent.vue.d.ts +4 -10
- package/dist/esm/v3/components/or-tooltip-v3/OrTooltip.vue.d.ts +13 -37
- package/dist/esm/v3/directives/dropdown-close.d.ts +3 -1
- package/dist/esm/v3/directives/dropdown-open.d.ts +3 -1
- package/dist/esm/v3/hooks/useResponsive/useResponsive.d.ts +2 -2
- package/dist/esm/v3/index.js +10 -30
- package/package.json +5 -25
- package/src/components/index.ts +4 -1
- package/src/components/or-confirm/OrConfirm.vue +1 -1
- package/src/components/or-expansion-panel-v3/styles.ts +4 -1
- package/src/components/or-inline-text-edit/OrInlineTextEdit.vue +6 -6
- package/src/components/or-sidebar-v3/styles.ts +1 -1
- package/src/components/or-tag-v3/OrTag.vue +3 -2
- package/src/components/or-tags-v3/OrTags.docs.mdx +7 -0
- package/src/components/or-tags-v3/OrTags.stories3.ts +101 -0
- package/src/components/or-tags-v3/OrTags.vue +129 -0
- package/src/components/or-tags-v3/index.ts +1 -0
- package/src/components/or-tags-v3/styles.ts +41 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.js +0 -2178
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +0 -220
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.d.ts +0 -1
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.js +0 -70
- package/dist/bundled/v2/components/OrRichTextEditorV3/props.d.ts +0 -4
- package/dist/bundled/v2/components/OrRichTextEditorV3/props.js +0 -7
- 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 -46
- 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/codemirror/types.js +0 -1
- 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-1182caa8.js +0 -9633
- package/dist/bundled/v2/index-85c2efe8.js +0 -7122
- package/dist/bundled/v2/index-d92d0b48.js +0 -3805
- package/dist/bundled/v2/index.es-3f39f316.js +0 -115
- package/dist/bundled/v2/markdown-d43767b0.js +0 -17980
- package/dist/bundled/v3/OrCode.vue_vue_type_script_lang-7e29b3d0.js +0 -237
- package/dist/bundled/v3/OrModal.vue_vue_type_script_lang-2c009ee0.js +0 -108
- package/dist/bundled/v3/OrRichTextEditor.vue_vue_type_script_lang-8bc72542.js +0 -1869
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.js +0 -283
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +0 -220
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.d.ts +0 -1
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.js +0 -86
- package/dist/bundled/v3/components/OrRichTextEditorV3/props.d.ts +0 -4
- package/dist/bundled/v3/components/OrRichTextEditorV3/props.js +0 -7
- 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 -46
- 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/codemirror/types.js +0 -1
- 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-1182caa8.js +0 -9633
- package/dist/bundled/v3/index-85c2efe8.js +0 -7122
- package/dist/bundled/v3/index.es-3f39f316.js +0 -115
- package/dist/bundled/v3/markdown-d43767b0.js +0 -17980
- package/dist/bundled/v3/useFocusTrap-48767a70.js +0 -1348
- package/dist/esm/v2/OrInlineTextEdit-a129aaf1.js +0 -400
- package/dist/esm/v2/OrRichTextEditor-95d1070d.js +0 -901
- package/dist/esm/v2/codemirrorView-be2c7423.js +0 -353
- package/dist/esm/v2/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +0 -220
- 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/props.d.ts +0 -4
- 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/v2/flattenDeep-fe0af413.js +0 -6
- package/dist/esm/v3/OrInlineTextEdit-4f4ecba4.js +0 -356
- package/dist/esm/v3/OrRichTextEditor-bdee1f41.js +0 -834
- package/dist/esm/v3/codemirrorView-be2c7423.js +0 -353
- package/dist/esm/v3/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +0 -220
- 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/props.d.ts +0 -4
- 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/dist/esm/v3/flattenDeep-fe0af413.js +0 -6
- 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 -142
- package/src/components/or-rich-text-editor-v3/OrRichTextEditor.vue +0 -749
- package/src/components/or-rich-text-editor-v3/index.ts +0 -1
- package/src/components/or-rich-text-editor-v3/props.ts +0 -4
- package/src/components/or-rich-text-editor-v3/styles.ts +0 -56
- 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 -120
- package/dist/bundled/v2/{index-f6664cb1.js → index-968c331a.js} +0 -0
- package/dist/bundled/v3/{OrCheckboxTree.vue_vue_type_script_lang-528dd4d5.js → OrCheckboxTree.vue_vue_type_script_lang-46436cf3.js} +1 -1
- /package/dist/bundled/v3/{OrExpansionPanel.vue_vue_type_script_lang-f1b6ff7d.js → OrExpansionPanel.vue_vue_type_script_lang-d4ed6199.js} +0 -0
- /package/dist/bundled/v3/{OrSidebar.vue_vue_type_script_lang-d7f700de.js → OrSidebar.vue_vue_type_script_lang-5723e223.js} +0 -0
- /package/dist/bundled/v3/{index-f6664cb1.js → index-968c331a.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-cf2c3c27.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.
|
|
@@ -706,7 +707,7 @@ class CompletionState {
|
|
|
706
707
|
this.open = open;
|
|
707
708
|
}
|
|
708
709
|
static start() {
|
|
709
|
-
return new CompletionState(none, "cm-ac-" + Math.floor(Math.random() * 2e6).toString(36), null);
|
|
710
|
+
return new CompletionState(none$1, "cm-ac-" + Math.floor(Math.random() * 2e6).toString(36), null);
|
|
710
711
|
}
|
|
711
712
|
update(tr) {
|
|
712
713
|
let {
|
|
@@ -756,7 +757,7 @@ function makeAttrs(id, selected) {
|
|
|
756
757
|
if (selected > -1) result["aria-activedescendant"] = id + "-" + selected;
|
|
757
758
|
return result;
|
|
758
759
|
}
|
|
759
|
-
const none = [];
|
|
760
|
+
const none$1 = [];
|
|
760
761
|
function getUserEvent(tr) {
|
|
761
762
|
return tr.isUserEvent("input.type") ? "input" : tr.isUserEvent("delete.backward") ? "delete" : null;
|
|
762
763
|
}
|
|
@@ -1701,7 +1702,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1701
1702
|
next = nextChar(state.doc, pos),
|
|
1702
1703
|
start;
|
|
1703
1704
|
if (next == token) {
|
|
1704
|
-
if (nodeStart(state, pos)) {
|
|
1705
|
+
if (nodeStart$1(state, pos)) {
|
|
1705
1706
|
return {
|
|
1706
1707
|
changes: {
|
|
1707
1708
|
insert: token + token,
|
|
@@ -1717,7 +1718,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1717
1718
|
effects: skipBracketEffect.of(pos)
|
|
1718
1719
|
};
|
|
1719
1720
|
}
|
|
1720
|
-
} else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart(state, start)) {
|
|
1721
|
+
} 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)) {
|
|
1721
1722
|
return {
|
|
1722
1723
|
changes: {
|
|
1723
1724
|
insert: token + token + token + token,
|
|
@@ -1745,7 +1746,7 @@ function handleSame(state, token, allowTriple, config) {
|
|
|
1745
1746
|
userEvent: "input.type"
|
|
1746
1747
|
});
|
|
1747
1748
|
}
|
|
1748
|
-
function nodeStart(state, pos) {
|
|
1749
|
+
function nodeStart$1(state, pos) {
|
|
1749
1750
|
let tree = syntaxTree(state).resolveInner(pos + 1);
|
|
1750
1751
|
return tree.parent && tree.from == pos;
|
|
1751
1752
|
}
|
|
@@ -2682,7 +2683,7 @@ function cutAt(tree, pos, side) {
|
|
|
2682
2683
|
}
|
|
2683
2684
|
}
|
|
2684
2685
|
}
|
|
2685
|
-
class FragmentCursor {
|
|
2686
|
+
class FragmentCursor$1 {
|
|
2686
2687
|
constructor(fragments, nodeSet) {
|
|
2687
2688
|
this.fragments = fragments;
|
|
2688
2689
|
this.nodeSet = nodeSet;
|
|
@@ -2918,7 +2919,7 @@ class Parse {
|
|
|
2918
2919
|
from
|
|
2919
2920
|
} = ranges[0];
|
|
2920
2921
|
this.stacks = [Stack.start(this, parser.top[0], from)];
|
|
2921
|
-
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor(fragments, parser.nodeSet) : null;
|
|
2922
|
+
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor$1(fragments, parser.nodeSet) : null;
|
|
2922
2923
|
}
|
|
2923
2924
|
get parsedPos() {
|
|
2924
2925
|
return this.minStackPos;
|
|
@@ -3416,6 +3417,730 @@ function getSpecializer(spec) {
|
|
|
3416
3417
|
return spec.get;
|
|
3417
3418
|
}
|
|
3418
3419
|
|
|
3420
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3421
|
+
const scriptText = 54,
|
|
3422
|
+
StartCloseScriptTag = 1,
|
|
3423
|
+
styleText = 55,
|
|
3424
|
+
StartCloseStyleTag = 2,
|
|
3425
|
+
textareaText = 56,
|
|
3426
|
+
StartCloseTextareaTag = 3,
|
|
3427
|
+
EndTag = 4,
|
|
3428
|
+
SelfClosingEndTag = 5,
|
|
3429
|
+
StartTag = 6,
|
|
3430
|
+
StartScriptTag = 7,
|
|
3431
|
+
StartStyleTag = 8,
|
|
3432
|
+
StartTextareaTag = 9,
|
|
3433
|
+
StartSelfClosingTag = 10,
|
|
3434
|
+
StartCloseTag = 11,
|
|
3435
|
+
NoMatchStartCloseTag = 12,
|
|
3436
|
+
MismatchedStartCloseTag = 13,
|
|
3437
|
+
missingCloseTag = 57,
|
|
3438
|
+
IncompleteCloseTag = 14,
|
|
3439
|
+
commentContent$1 = 58,
|
|
3440
|
+
Element$1 = 20,
|
|
3441
|
+
TagName = 22,
|
|
3442
|
+
Attribute = 23,
|
|
3443
|
+
AttributeName = 24,
|
|
3444
|
+
AttributeValue = 26,
|
|
3445
|
+
UnquotedAttributeValue = 27,
|
|
3446
|
+
ScriptText = 28,
|
|
3447
|
+
StyleText = 31,
|
|
3448
|
+
TextareaText = 34,
|
|
3449
|
+
OpenTag = 36,
|
|
3450
|
+
CloseTag = 37,
|
|
3451
|
+
Dialect_noMatch = 0,
|
|
3452
|
+
Dialect_selfClosing = 1;
|
|
3453
|
+
|
|
3454
|
+
/* Hand-written tokenizers for HTML. */
|
|
3455
|
+
|
|
3456
|
+
const selfClosers = {
|
|
3457
|
+
area: true,
|
|
3458
|
+
base: true,
|
|
3459
|
+
br: true,
|
|
3460
|
+
col: true,
|
|
3461
|
+
command: true,
|
|
3462
|
+
embed: true,
|
|
3463
|
+
frame: true,
|
|
3464
|
+
hr: true,
|
|
3465
|
+
img: true,
|
|
3466
|
+
input: true,
|
|
3467
|
+
keygen: true,
|
|
3468
|
+
link: true,
|
|
3469
|
+
meta: true,
|
|
3470
|
+
param: true,
|
|
3471
|
+
source: true,
|
|
3472
|
+
track: true,
|
|
3473
|
+
wbr: true,
|
|
3474
|
+
menuitem: true
|
|
3475
|
+
};
|
|
3476
|
+
const implicitlyClosed = {
|
|
3477
|
+
dd: true,
|
|
3478
|
+
li: true,
|
|
3479
|
+
optgroup: true,
|
|
3480
|
+
option: true,
|
|
3481
|
+
p: true,
|
|
3482
|
+
rp: true,
|
|
3483
|
+
rt: true,
|
|
3484
|
+
tbody: true,
|
|
3485
|
+
td: true,
|
|
3486
|
+
tfoot: true,
|
|
3487
|
+
th: true,
|
|
3488
|
+
tr: true
|
|
3489
|
+
};
|
|
3490
|
+
const closeOnOpen = {
|
|
3491
|
+
dd: {
|
|
3492
|
+
dd: true,
|
|
3493
|
+
dt: true
|
|
3494
|
+
},
|
|
3495
|
+
dt: {
|
|
3496
|
+
dd: true,
|
|
3497
|
+
dt: true
|
|
3498
|
+
},
|
|
3499
|
+
li: {
|
|
3500
|
+
li: true
|
|
3501
|
+
},
|
|
3502
|
+
option: {
|
|
3503
|
+
option: true,
|
|
3504
|
+
optgroup: true
|
|
3505
|
+
},
|
|
3506
|
+
optgroup: {
|
|
3507
|
+
optgroup: true
|
|
3508
|
+
},
|
|
3509
|
+
p: {
|
|
3510
|
+
address: true,
|
|
3511
|
+
article: true,
|
|
3512
|
+
aside: true,
|
|
3513
|
+
blockquote: true,
|
|
3514
|
+
dir: true,
|
|
3515
|
+
div: true,
|
|
3516
|
+
dl: true,
|
|
3517
|
+
fieldset: true,
|
|
3518
|
+
footer: true,
|
|
3519
|
+
form: true,
|
|
3520
|
+
h1: true,
|
|
3521
|
+
h2: true,
|
|
3522
|
+
h3: true,
|
|
3523
|
+
h4: true,
|
|
3524
|
+
h5: true,
|
|
3525
|
+
h6: true,
|
|
3526
|
+
header: true,
|
|
3527
|
+
hgroup: true,
|
|
3528
|
+
hr: true,
|
|
3529
|
+
menu: true,
|
|
3530
|
+
nav: true,
|
|
3531
|
+
ol: true,
|
|
3532
|
+
p: true,
|
|
3533
|
+
pre: true,
|
|
3534
|
+
section: true,
|
|
3535
|
+
table: true,
|
|
3536
|
+
ul: true
|
|
3537
|
+
},
|
|
3538
|
+
rp: {
|
|
3539
|
+
rp: true,
|
|
3540
|
+
rt: true
|
|
3541
|
+
},
|
|
3542
|
+
rt: {
|
|
3543
|
+
rp: true,
|
|
3544
|
+
rt: true
|
|
3545
|
+
},
|
|
3546
|
+
tbody: {
|
|
3547
|
+
tbody: true,
|
|
3548
|
+
tfoot: true
|
|
3549
|
+
},
|
|
3550
|
+
td: {
|
|
3551
|
+
td: true,
|
|
3552
|
+
th: true
|
|
3553
|
+
},
|
|
3554
|
+
tfoot: {
|
|
3555
|
+
tbody: true
|
|
3556
|
+
},
|
|
3557
|
+
th: {
|
|
3558
|
+
td: true,
|
|
3559
|
+
th: true
|
|
3560
|
+
},
|
|
3561
|
+
thead: {
|
|
3562
|
+
tbody: true,
|
|
3563
|
+
tfoot: true
|
|
3564
|
+
},
|
|
3565
|
+
tr: {
|
|
3566
|
+
tr: true
|
|
3567
|
+
}
|
|
3568
|
+
};
|
|
3569
|
+
function nameChar(ch) {
|
|
3570
|
+
return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161;
|
|
3571
|
+
}
|
|
3572
|
+
function isSpace(ch) {
|
|
3573
|
+
return ch == 9 || ch == 10 || ch == 13 || ch == 32;
|
|
3574
|
+
}
|
|
3575
|
+
let cachedName = null,
|
|
3576
|
+
cachedInput = null,
|
|
3577
|
+
cachedPos = 0;
|
|
3578
|
+
function tagNameAfter(input, offset) {
|
|
3579
|
+
let pos = input.pos + offset;
|
|
3580
|
+
if (cachedPos == pos && cachedInput == input) return cachedName;
|
|
3581
|
+
let next = input.peek(offset);
|
|
3582
|
+
while (isSpace(next)) next = input.peek(++offset);
|
|
3583
|
+
let name = "";
|
|
3584
|
+
for (;;) {
|
|
3585
|
+
if (!nameChar(next)) break;
|
|
3586
|
+
name += String.fromCharCode(next);
|
|
3587
|
+
next = input.peek(++offset);
|
|
3588
|
+
}
|
|
3589
|
+
// Undefined to signal there's a <? or <!, null for just missing
|
|
3590
|
+
cachedInput = input;
|
|
3591
|
+
cachedPos = pos;
|
|
3592
|
+
return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null;
|
|
3593
|
+
}
|
|
3594
|
+
const lessThan = 60,
|
|
3595
|
+
greaterThan = 62,
|
|
3596
|
+
slash$1 = 47,
|
|
3597
|
+
question = 63,
|
|
3598
|
+
bang = 33,
|
|
3599
|
+
dash$1 = 45;
|
|
3600
|
+
function ElementContext(name, parent) {
|
|
3601
|
+
this.name = name;
|
|
3602
|
+
this.parent = parent;
|
|
3603
|
+
this.hash = parent ? parent.hash : 0;
|
|
3604
|
+
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
|
|
3605
|
+
}
|
|
3606
|
+
const startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];
|
|
3607
|
+
const elementContext = new ContextTracker({
|
|
3608
|
+
start: null,
|
|
3609
|
+
shift(context, term, stack, input) {
|
|
3610
|
+
return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || "", context) : context;
|
|
3611
|
+
},
|
|
3612
|
+
reduce(context, term) {
|
|
3613
|
+
return term == Element$1 && context ? context.parent : context;
|
|
3614
|
+
},
|
|
3615
|
+
reuse(context, node, stack, input) {
|
|
3616
|
+
let type = node.type.id;
|
|
3617
|
+
return type == StartTag || type == OpenTag ? new ElementContext(tagNameAfter(input, 1) || "", context) : context;
|
|
3618
|
+
},
|
|
3619
|
+
hash(context) {
|
|
3620
|
+
return context ? context.hash : 0;
|
|
3621
|
+
},
|
|
3622
|
+
strict: false
|
|
3623
|
+
});
|
|
3624
|
+
const tagStart = new ExternalTokenizer((input, stack) => {
|
|
3625
|
+
if (input.next != lessThan) {
|
|
3626
|
+
// End of file, close any open tags
|
|
3627
|
+
if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);
|
|
3628
|
+
return;
|
|
3629
|
+
}
|
|
3630
|
+
input.advance();
|
|
3631
|
+
let close = input.next == slash$1;
|
|
3632
|
+
if (close) input.advance();
|
|
3633
|
+
let name = tagNameAfter(input, 0);
|
|
3634
|
+
if (name === undefined) return;
|
|
3635
|
+
if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag);
|
|
3636
|
+
let parent = stack.context ? stack.context.name : null;
|
|
3637
|
+
if (close) {
|
|
3638
|
+
if (name == parent) return input.acceptToken(StartCloseTag);
|
|
3639
|
+
if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2);
|
|
3640
|
+
if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag);
|
|
3641
|
+
for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return;
|
|
3642
|
+
input.acceptToken(MismatchedStartCloseTag);
|
|
3643
|
+
} else {
|
|
3644
|
+
if (name == "script") return input.acceptToken(StartScriptTag);
|
|
3645
|
+
if (name == "style") return input.acceptToken(StartStyleTag);
|
|
3646
|
+
if (name == "textarea") return input.acceptToken(StartTextareaTag);
|
|
3647
|
+
if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag);
|
|
3648
|
+
if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);else input.acceptToken(StartTag);
|
|
3649
|
+
}
|
|
3650
|
+
}, {
|
|
3651
|
+
contextual: true
|
|
3652
|
+
});
|
|
3653
|
+
const commentContent = new ExternalTokenizer(input => {
|
|
3654
|
+
for (let dashes = 0, i = 0;; i++) {
|
|
3655
|
+
if (input.next < 0) {
|
|
3656
|
+
if (i) input.acceptToken(commentContent$1);
|
|
3657
|
+
break;
|
|
3658
|
+
}
|
|
3659
|
+
if (input.next == dash$1) {
|
|
3660
|
+
dashes++;
|
|
3661
|
+
} else if (input.next == greaterThan && dashes >= 2) {
|
|
3662
|
+
if (i > 3) input.acceptToken(commentContent$1, -2);
|
|
3663
|
+
break;
|
|
3664
|
+
} else {
|
|
3665
|
+
dashes = 0;
|
|
3666
|
+
}
|
|
3667
|
+
input.advance();
|
|
3668
|
+
}
|
|
3669
|
+
});
|
|
3670
|
+
function inForeignElement(context) {
|
|
3671
|
+
for (; context; context = context.parent) if (context.name == "svg" || context.name == "math") return true;
|
|
3672
|
+
return false;
|
|
3673
|
+
}
|
|
3674
|
+
const endTag = new ExternalTokenizer((input, stack) => {
|
|
3675
|
+
if (input.next == slash$1 && input.peek(1) == greaterThan) {
|
|
3676
|
+
let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);
|
|
3677
|
+
input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);
|
|
3678
|
+
} else if (input.next == greaterThan) {
|
|
3679
|
+
input.acceptToken(EndTag, 1);
|
|
3680
|
+
}
|
|
3681
|
+
});
|
|
3682
|
+
function contentTokenizer(tag, textToken, endToken) {
|
|
3683
|
+
let lastState = 2 + tag.length;
|
|
3684
|
+
return new ExternalTokenizer(input => {
|
|
3685
|
+
// state means:
|
|
3686
|
+
// - 0 nothing matched
|
|
3687
|
+
// - 1 '<' matched
|
|
3688
|
+
// - 2 '</' + possibly whitespace matched
|
|
3689
|
+
// - 3-(1+tag.length) part of the tag matched
|
|
3690
|
+
// - lastState whole tag + possibly whitespace matched
|
|
3691
|
+
for (let state = 0, matchedLen = 0, i = 0;; i++) {
|
|
3692
|
+
if (input.next < 0) {
|
|
3693
|
+
if (i) input.acceptToken(textToken);
|
|
3694
|
+
break;
|
|
3695
|
+
}
|
|
3696
|
+
if (state == 0 && input.next == lessThan || state == 1 && input.next == slash$1 || state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {
|
|
3697
|
+
state++;
|
|
3698
|
+
matchedLen++;
|
|
3699
|
+
} else if ((state == 2 || state == lastState) && isSpace(input.next)) {
|
|
3700
|
+
matchedLen++;
|
|
3701
|
+
} else if (state == lastState && input.next == greaterThan) {
|
|
3702
|
+
if (i > matchedLen) input.acceptToken(textToken, -matchedLen);else input.acceptToken(endToken, -(matchedLen - 2));
|
|
3703
|
+
break;
|
|
3704
|
+
} else if ((input.next == 10 /* '\n' */ || input.next == 13 /* '\r' */) && i) {
|
|
3705
|
+
input.acceptToken(textToken, 1);
|
|
3706
|
+
break;
|
|
3707
|
+
} else {
|
|
3708
|
+
state = matchedLen = 0;
|
|
3709
|
+
}
|
|
3710
|
+
input.advance();
|
|
3711
|
+
}
|
|
3712
|
+
});
|
|
3713
|
+
}
|
|
3714
|
+
const scriptTokens = contentTokenizer("script", scriptText, StartCloseScriptTag);
|
|
3715
|
+
const styleTokens = contentTokenizer("style", styleText, StartCloseStyleTag);
|
|
3716
|
+
const textareaTokens = contentTokenizer("textarea", textareaText, StartCloseTextareaTag);
|
|
3717
|
+
const htmlHighlighting = styleTags({
|
|
3718
|
+
"Text RawText": tags$1.content,
|
|
3719
|
+
"StartTag StartCloseTag SelfClosingEndTag EndTag": tags$1.angleBracket,
|
|
3720
|
+
TagName: tags$1.tagName,
|
|
3721
|
+
"MismatchedCloseTag/TagName": [tags$1.tagName, tags$1.invalid],
|
|
3722
|
+
AttributeName: tags$1.attributeName,
|
|
3723
|
+
"AttributeValue UnquotedAttributeValue": tags$1.attributeValue,
|
|
3724
|
+
Is: tags$1.definitionOperator,
|
|
3725
|
+
"EntityReference CharacterReference": tags$1.character,
|
|
3726
|
+
Comment: tags$1.blockComment,
|
|
3727
|
+
ProcessingInst: tags$1.processingInstruction,
|
|
3728
|
+
DoctypeDecl: tags$1.documentMeta
|
|
3729
|
+
});
|
|
3730
|
+
|
|
3731
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3732
|
+
const parser$4 = LRParser.deserialize({
|
|
3733
|
+
version: 14,
|
|
3734
|
+
states: ",xOVO!rOOO!WQ#tO'#CqO!]Q#tO'#CzO!bQ#tO'#C}O!gQ#tO'#DQO!lQ#tO'#DSO!qOaO'#CpO!|ObO'#CpO#XOdO'#CpO$eO!rO'#CpOOO`'#Cp'#CpO$lO$fO'#DTO$tQ#tO'#DVO$yQ#tO'#DWOOO`'#Dk'#DkOOO`'#DY'#DYQVO!rOOO%OQ&rO,59]O%WQ&rO,59fO%`Q&rO,59iO%hQ&rO,59lO%sQ&rO,59nOOOa'#D^'#D^O%{OaO'#CxO&WOaO,59[OOOb'#D_'#D_O&`ObO'#C{O&kObO,59[OOOd'#D`'#D`O&sOdO'#DOO'OOdO,59[OOO`'#Da'#DaO'WO!rO,59[O'_Q#tO'#DROOO`,59[,59[OOOp'#Db'#DbO'dO$fO,59oOOO`,59o,59oO'lQ#|O,59qO'qQ#|O,59rOOO`-E7W-E7WO'vQ&rO'#CsOOQW'#DZ'#DZO(UQ&rO1G.wOOOa1G.w1G.wO(^Q&rO1G/QOOOb1G/Q1G/QO(fQ&rO1G/TOOOd1G/T1G/TO(nQ&rO1G/WOOO`1G/W1G/WOOO`1G/Y1G/YO(yQ&rO1G/YOOOa-E7[-E7[O)RQ#tO'#CyOOO`1G.v1G.vOOOb-E7]-E7]O)WQ#tO'#C|OOOd-E7^-E7^O)]Q#tO'#DPOOO`-E7_-E7_O)bQ#|O,59mOOOp-E7`-E7`OOO`1G/Z1G/ZOOO`1G/]1G/]OOO`1G/^1G/^O)gQ,UO,59_OOQW-E7X-E7XOOOa7+$c7+$cOOOb7+$l7+$lOOOd7+$o7+$oOOO`7+$r7+$rOOO`7+$t7+$tO)rQ#|O,59eO)wQ#|O,59hO)|Q#|O,59kOOO`1G/X1G/XO*RO7[O'#CvO*dOMhO'#CvOOQW1G.y1G.yOOO`1G/P1G/POOO`1G/S1G/SOOO`1G/V1G/VOOOO'#D['#D[O*uO7[O,59bOOQW,59b,59bOOOO'#D]'#D]O+WOMhO,59bOOOO-E7Y-E7YOOQW1G.|1G.|OOOO-E7Z-E7Z",
|
|
3735
|
+
stateData: "+s~O!^OS~OUSOVPOWQOXROYTO[]O][O^^O`^Oa^Ob^Oc^Ox^O{_O!dZO~OfaO~OfbO~OfcO~OfdO~OfeO~O!WfOPlP!ZlP~O!XiOQoP!ZoP~O!YlORrP!ZrP~OUSOVPOWQOXROYTOZqO[]O][O^^O`^Oa^Ob^Oc^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OfvO~OfwO~OS|OhyO~OS!OOhyO~OS!QOhyO~OS!SOT!TOhyO~OS!TOhyO~O!WfOPlX!ZlX~OP!WO!Z!XO~O!XiOQoX!ZoX~OQ!ZO!Z!XO~O!YlORrX!ZrX~OR!]O!Z!XO~O!Z!XO~P#dOf!_O~O![sO!e!aO~OS!bO~OS!cO~Oi!dOSgXhgXTgX~OS!fOhyO~OS!gOhyO~OS!hOhyO~OS!iOT!jOhyO~OS!jOhyO~Of!kO~Of!lO~Of!mO~OS!nO~Ok!qO!`!oO!b!pO~OS!rO~OS!sO~OS!tO~Oa!uOb!uOc!uO!`!wO!a!uO~Oa!xOb!xOc!xO!b!wO!c!xO~Oa!uOb!uOc!uO!`!{O!a!uO~Oa!xOb!xOc!xO!b!{O!c!xO~OT~bac!dx{!d~",
|
|
3736
|
+
goto: "%p!`PPPPPPPPPPPPPPPPPPPP!a!gP!mPP!yP!|#P#S#Y#]#`#f#i#l#r#x!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",
|
|
3737
|
+
nodeNames: "⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl",
|
|
3738
|
+
maxTerm: 67,
|
|
3739
|
+
context: elementContext,
|
|
3740
|
+
nodeProps: [["closedBy", -10, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13, "EndTag", 6, "EndTag SelfClosingEndTag", -4, 21, 30, 33, 36, "CloseTag"], ["openedBy", 4, "StartTag StartCloseTag", 5, "StartTag", -4, 29, 32, 35, 37, "OpenTag"], ["group", -9, 14, 17, 18, 19, 20, 39, 40, 41, 42, "Entity", 16, "Entity TextContent", -3, 28, 31, 34, "TextContent Entity"]],
|
|
3741
|
+
propSources: [htmlHighlighting],
|
|
3742
|
+
skippedNodes: [0],
|
|
3743
|
+
repeatNodeCount: 9,
|
|
3744
|
+
tokenData: "#%g!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs4ysv-_vw5iwxJ^x}-_}!OKP!O!P-_!P!Q$q!Q![-_![!]!!O!]!^-_!^!_!&W!_!`#$o!`!a&X!a!c-_!c!}!!O!}#R-_#R#S!!O#S#T3V#T#o!!O#o#s-_#s$f$q$f%W-_%W%o!!O%o%p-_%p&a!!O&a&b-_&b1p!!O1p4U-_4U4d!!O4d4e-_4e$IS!!O$IS$I`-_$I`$Ib!!O$Ib$Kh-_$Kh%#t!!O%#t&/x-_&/x&Et!!O&Et&FV-_&FV;'S!!O;'S;:j!&Q;:j;=`4s<%l?&r-_?&r?Ah!!O?Ah?BY$q?BY?Mn!!O?MnO$q!Z$|c`PkW!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+UYkWOX+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!_-ljhS`PkW!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[/echSkWOX+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+PS0uXhSqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0pS1eP;=`<%l0p[1kP;=`<%l/^!U1wbhS!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!V3bchS`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&}!_5rjhSkWc!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!Z7ibkWOX7dXZ8qZ[7d[^8q^p7dqr7drs8qst+Ptw7dwx8qx!]7d!]!^9f!^!a8q!a#S7d#S#T8q#T;'S7d;'S;=`:]<%lO7d!R8tVOp8qqs8qt!]8q!]!^9Z!^;'S8q;'S;=`9`<%lO8q!R9`Oa!R!R9cP;=`<%l8q!Z9mYkWa!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z:`P;=`<%l7d!_:jjhSkWOX7dXZ8qZ[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!_<echSkWa!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=udhSOp8qqr=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?[XhSa!Rqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0p!V?zP;=`<%l=p!_@QP;=`<%l:c!_@[ihSkWOXAyXZCTZ[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!ZBOakWOXAyXZCTZ[Ay[^CT^pAyqrAyrsCTswAywxCTx!]Ay!]!^Cu!^!aCT!a#SAy#S#TCT#T;'SAy;'S;=`Dl<%lOAy!RCWUOpCTq!]CT!]!^Cj!^;'SCT;'S;=`Co<%lOCT!RCoOb!R!RCrP;=`<%lCT!ZC|YkWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZDoP;=`<%lAy!_DyihSkWOXAyXZCTZ[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!_FqchSkWb!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!VHRchSOpCTqrG|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!VIeXhSb!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^lhS`PkW!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!aMckhS`PkW!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!!_!ZhSfQ`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!O!!O!O!P!!O!P!Q$q!Q![!!O![!]!!O!]!^-_!^!_1n!_!a&X!a!c-_!c!}!!O!}#R-_#R#S!!O#S#T3V#T#o!!O#o#s-_#s$f$q$f$}-_$}%O!!O%O%W-_%W%o!!O%o%p-_%p&a!!O&a&b-_&b1p!!O1p4U!!O4U4d!!O4d4e-_4e$IS!!O$IS$I`-_$I`$Ib!!O$Ib$Je-_$Je$Jg!!O$Jg$Kh-_$Kh%#t!!O%#t&/x-_&/x&Et!!O&Et&FV-_&FV;'S!!O;'S;:j!&Q;:j;=`4s<%l?&r-_?&r?Ah!!O?Ah?BY$q?BY?Mn!!O?MnO$q!a!&TP;=`<%l!!O!V!&achS!a`!cpOq*Vqr!'lrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!b!Ey!b#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!'uhhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!)a!O!P1n!P!Q*V!Q!_1n!_!a*V!a!f1n!f!g!,]!g#W1n#W#X!<y#X#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!)jdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!*x!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!+TbhS!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!,fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!q1n!q!r!-t!r#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!-}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!e1n!e!f!/]!f#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!/fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!v1n!v!w!0t!w#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!0}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!{1n!{!|!2]!|#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!2fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!r1n!r!s!3t!s#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!3}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!g1n!g!h!5]!h#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!5fchS!a`!cpOq!6qqr!5]rs!7hsv!5]vw!;`wx!9[x!P!5]!P!Q!6q!Q!_!5]!_!`!6q!`!a!:j!a#s!5]#s$f!6q$f;'S!5];'S;=`!<s<%l?Ah!5]?Ah?BY!6q?BY?Mn!5]?MnO!6q!R!6xY!a`!cpOr!6qrs!7hsv!6qvw!8Swx!9[x!`!6q!`!a!:j!a;'S!6q;'S;=`!;Y<%lO!6qq!7mV!cpOv!7hvx!8Sx!`!7h!`!a!8q!a;'S!7h;'S;=`!9U<%lO!7hP!8VTO!`!8S!`!a!8f!a;'S!8S;'S;=`!8k<%lO!8SP!8kO{PP!8nP;=`<%l!8Sq!8xS!cp{POv(Vx;'S(V;'S;=`(h<%lO(Vq!9XP;=`<%l!7ha!9aX!a`Or!9[rs!8Ssv!9[vw!8Sw!`!9[!`!a!9|!a;'S!9[;'S;=`!:d<%lO!9[a!:TT!a`{POr)esv)ew;'S)e;'S;=`)y<%lO)ea!:gP;=`<%l!9[!R!:sV!a`!cp{POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;]P;=`<%l!6qT!;ebhSOq!8Sqr!;`rs!8Ssw!;`wx!8Sx!P!;`!P!Q!8S!Q!_!;`!_!`!8S!`!a!8f!a#s!;`#s$f!8S$f;'S!;`;'S;=`!<m<%l?Ah!;`?Ah?BY!8S?BY?Mn!;`?MnO!8ST!<pP;=`<%l!;`!V!<vP;=`<%l!5]!V!=SdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#c1n#c#d!>b#d#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!>kdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#V1n#V#W!?y#W#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!@SdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#h1n#h#i!Ab#i#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!AkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#m1n#m#n!By#n#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!CSdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#d1n#d#e!Db#e#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!DkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#X1n#X#Y!5]#Y#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!FSchS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!a!G_!a!b##T!b#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!R!GfY!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!a!G_!a!b!Lv!b;'S!G_;'S;=`!N]<%lO!G_q!HZV!cpOv!HUvx!Hpx!a!HU!a!b!Iq!b;'S!HU;'S;=`!Jp<%lO!HUP!HsTO!a!Hp!a!b!IS!b;'S!Hp;'S;=`!Ik<%lO!HpP!IVTO!`!Hp!`!a!If!a;'S!Hp;'S;=`!Ik<%lO!HpP!IkOxPP!InP;=`<%l!Hpq!IvV!cpOv!HUvx!Hpx!`!HU!`!a!J]!a;'S!HU;'S;=`!Jp<%lO!HUq!JdS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!JsP;=`<%l!HUa!J{X!a`Or!Jvrs!Hpsv!Jvvw!Hpw!a!Jv!a!b!Kh!b;'S!Jv;'S;=`!Lp<%lO!Jva!KmX!a`Or!Jvrs!Hpsv!Jvvw!Hpw!`!Jv!`!a!LY!a;'S!Jv;'S;=`!Lp<%lO!Jva!LaT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!LsP;=`<%l!Jv!R!L}Y!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!`!G_!`!a!Mm!a;'S!G_;'S;=`!N]<%lO!G_!R!MvV!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!N`P;=`<%l!G_T!NhbhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!a!Hp!a!b# p!b#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT# ubhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!`!Hp!`!a!If!a#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT##QP;=`<%l!Nc!V##^chS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!`!G_!`!a!Mm!a#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!V#$lP;=`<%l!Ey!V#$zXiS`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X",
|
|
3745
|
+
tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],
|
|
3746
|
+
topRules: {
|
|
3747
|
+
"Document": [0, 15]
|
|
3748
|
+
},
|
|
3749
|
+
dialects: {
|
|
3750
|
+
noMatch: 0,
|
|
3751
|
+
selfClosing: 485
|
|
3752
|
+
},
|
|
3753
|
+
tokenPrec: 487
|
|
3754
|
+
});
|
|
3755
|
+
function getAttrs(openTag, input) {
|
|
3756
|
+
let attrs = Object.create(null);
|
|
3757
|
+
for (let att of openTag.getChildren(Attribute)) {
|
|
3758
|
+
let name = att.getChild(AttributeName),
|
|
3759
|
+
value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);
|
|
3760
|
+
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);
|
|
3761
|
+
}
|
|
3762
|
+
return attrs;
|
|
3763
|
+
}
|
|
3764
|
+
function findTagName(openTag, input) {
|
|
3765
|
+
let tagNameNode = openTag.getChild(TagName);
|
|
3766
|
+
return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : " ";
|
|
3767
|
+
}
|
|
3768
|
+
function maybeNest(node, input, tags) {
|
|
3769
|
+
let attrs;
|
|
3770
|
+
for (let tag of tags) {
|
|
3771
|
+
if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input)))) return {
|
|
3772
|
+
parser: tag.parser
|
|
3773
|
+
};
|
|
3774
|
+
}
|
|
3775
|
+
return null;
|
|
3776
|
+
}
|
|
3777
|
+
|
|
3778
|
+
// tags?: {
|
|
3779
|
+
// tag: string,
|
|
3780
|
+
// attrs?: ({[attr: string]: string}) => boolean,
|
|
3781
|
+
// parser: Parser
|
|
3782
|
+
// }[]
|
|
3783
|
+
// attributes?: {
|
|
3784
|
+
// name: string,
|
|
3785
|
+
// tagName?: string,
|
|
3786
|
+
// parser: Parser
|
|
3787
|
+
// }[]
|
|
3788
|
+
|
|
3789
|
+
function configureNesting() {
|
|
3790
|
+
let tags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
3791
|
+
let attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
3792
|
+
let script = [],
|
|
3793
|
+
style = [],
|
|
3794
|
+
textarea = [],
|
|
3795
|
+
other = [];
|
|
3796
|
+
for (let tag of tags) {
|
|
3797
|
+
let array = tag.tag == "script" ? script : tag.tag == "style" ? style : tag.tag == "textarea" ? textarea : other;
|
|
3798
|
+
array.push(tag);
|
|
3799
|
+
}
|
|
3800
|
+
let attrs = attributes.length ? Object.create(null) : null;
|
|
3801
|
+
for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);
|
|
3802
|
+
return parseMixed((node, input) => {
|
|
3803
|
+
let id = node.type.id;
|
|
3804
|
+
if (id == ScriptText) return maybeNest(node, input, script);
|
|
3805
|
+
if (id == StyleText) return maybeNest(node, input, style);
|
|
3806
|
+
if (id == TextareaText) return maybeNest(node, input, textarea);
|
|
3807
|
+
if (id == Element$1 && other.length) {
|
|
3808
|
+
let n = node.node,
|
|
3809
|
+
open = n.firstChild,
|
|
3810
|
+
tagName = open && findTagName(open, input),
|
|
3811
|
+
attrs;
|
|
3812
|
+
if (tagName) for (let tag of other) {
|
|
3813
|
+
if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {
|
|
3814
|
+
let close = n.lastChild;
|
|
3815
|
+
return {
|
|
3816
|
+
parser: tag.parser,
|
|
3817
|
+
overlay: [{
|
|
3818
|
+
from: open.to,
|
|
3819
|
+
to: close.type.id == CloseTag ? close.from : n.to
|
|
3820
|
+
}]
|
|
3821
|
+
};
|
|
3822
|
+
}
|
|
3823
|
+
}
|
|
3824
|
+
}
|
|
3825
|
+
if (attrs && id == Attribute) {
|
|
3826
|
+
let n = node.node,
|
|
3827
|
+
nameNode;
|
|
3828
|
+
if (nameNode = n.firstChild) {
|
|
3829
|
+
let matches = attrs[input.read(nameNode.from, nameNode.to)];
|
|
3830
|
+
if (matches) for (let attr of matches) {
|
|
3831
|
+
if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue;
|
|
3832
|
+
let value = n.lastChild;
|
|
3833
|
+
if (value.type.id == AttributeValue) {
|
|
3834
|
+
let from = value.from + 1;
|
|
3835
|
+
let last = value.lastChild,
|
|
3836
|
+
to = value.to - (last && last.isError ? 0 : 1);
|
|
3837
|
+
if (to > from) return {
|
|
3838
|
+
parser: attr.parser,
|
|
3839
|
+
overlay: [{
|
|
3840
|
+
from,
|
|
3841
|
+
to
|
|
3842
|
+
}]
|
|
3843
|
+
};
|
|
3844
|
+
} else if (value.type.id == UnquotedAttributeValue) {
|
|
3845
|
+
return {
|
|
3846
|
+
parser: attr.parser,
|
|
3847
|
+
overlay: [{
|
|
3848
|
+
from: value.from,
|
|
3849
|
+
to: value.to
|
|
3850
|
+
}]
|
|
3851
|
+
};
|
|
3852
|
+
}
|
|
3853
|
+
}
|
|
3854
|
+
}
|
|
3855
|
+
}
|
|
3856
|
+
return null;
|
|
3857
|
+
});
|
|
3858
|
+
}
|
|
3859
|
+
|
|
3860
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3861
|
+
const descendantOp = 94,
|
|
3862
|
+
Unit = 1,
|
|
3863
|
+
callee = 95,
|
|
3864
|
+
identifier$2 = 96,
|
|
3865
|
+
VariableName = 2;
|
|
3866
|
+
|
|
3867
|
+
/* Hand-written tokenizers for CSS tokens that can't be
|
|
3868
|
+
expressed by Lezer's built-in tokenizer. */
|
|
3869
|
+
|
|
3870
|
+
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];
|
|
3871
|
+
const colon = 58,
|
|
3872
|
+
parenL = 40,
|
|
3873
|
+
underscore = 95,
|
|
3874
|
+
bracketL = 91,
|
|
3875
|
+
dash = 45,
|
|
3876
|
+
period = 46,
|
|
3877
|
+
hash = 35,
|
|
3878
|
+
percent = 37;
|
|
3879
|
+
function isAlpha(ch) {
|
|
3880
|
+
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161;
|
|
3881
|
+
}
|
|
3882
|
+
function isDigit(ch) {
|
|
3883
|
+
return ch >= 48 && ch <= 57;
|
|
3884
|
+
}
|
|
3885
|
+
const identifiers = new ExternalTokenizer((input, stack) => {
|
|
3886
|
+
for (let inside = false, dashes = 0, i = 0;; i++) {
|
|
3887
|
+
let {
|
|
3888
|
+
next
|
|
3889
|
+
} = input;
|
|
3890
|
+
if (isAlpha(next) || next == dash || next == underscore || inside && isDigit(next)) {
|
|
3891
|
+
if (!inside && (next != dash || i > 0)) inside = true;
|
|
3892
|
+
if (dashes === i && next == dash) dashes++;
|
|
3893
|
+
input.advance();
|
|
3894
|
+
} else {
|
|
3895
|
+
if (inside) input.acceptToken(next == parenL ? callee : dashes == 2 && stack.canShift(VariableName) ? VariableName : identifier$2);
|
|
3896
|
+
break;
|
|
3897
|
+
}
|
|
3898
|
+
}
|
|
3899
|
+
});
|
|
3900
|
+
const descendant = new ExternalTokenizer(input => {
|
|
3901
|
+
if (space$2.includes(input.peek(-1))) {
|
|
3902
|
+
let {
|
|
3903
|
+
next
|
|
3904
|
+
} = input;
|
|
3905
|
+
if (isAlpha(next) || next == underscore || next == hash || next == period || next == bracketL || next == colon || next == dash) input.acceptToken(descendantOp);
|
|
3906
|
+
}
|
|
3907
|
+
});
|
|
3908
|
+
const unitToken = new ExternalTokenizer(input => {
|
|
3909
|
+
if (!space$2.includes(input.peek(-1))) {
|
|
3910
|
+
let {
|
|
3911
|
+
next
|
|
3912
|
+
} = input;
|
|
3913
|
+
if (next == percent) {
|
|
3914
|
+
input.advance();
|
|
3915
|
+
input.acceptToken(Unit);
|
|
3916
|
+
}
|
|
3917
|
+
if (isAlpha(next)) {
|
|
3918
|
+
do {
|
|
3919
|
+
input.advance();
|
|
3920
|
+
} while (isAlpha(input.next));
|
|
3921
|
+
input.acceptToken(Unit);
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
});
|
|
3925
|
+
const cssHighlighting = styleTags({
|
|
3926
|
+
"AtKeyword import charset namespace keyframes media supports": tags$1.definitionKeyword,
|
|
3927
|
+
"from to selector": tags$1.keyword,
|
|
3928
|
+
NamespaceName: tags$1.namespace,
|
|
3929
|
+
KeyframeName: tags$1.labelName,
|
|
3930
|
+
TagName: tags$1.tagName,
|
|
3931
|
+
ClassName: tags$1.className,
|
|
3932
|
+
PseudoClassName: tags$1.constant(tags$1.className),
|
|
3933
|
+
IdName: tags$1.labelName,
|
|
3934
|
+
"FeatureName PropertyName": tags$1.propertyName,
|
|
3935
|
+
AttributeName: tags$1.attributeName,
|
|
3936
|
+
NumberLiteral: tags$1.number,
|
|
3937
|
+
KeywordQuery: tags$1.keyword,
|
|
3938
|
+
UnaryQueryOp: tags$1.operatorKeyword,
|
|
3939
|
+
"CallTag ValueName": tags$1.atom,
|
|
3940
|
+
VariableName: tags$1.variableName,
|
|
3941
|
+
Callee: tags$1.operatorKeyword,
|
|
3942
|
+
Unit: tags$1.unit,
|
|
3943
|
+
"UniversalSelector NestingSelector": tags$1.definitionOperator,
|
|
3944
|
+
MatchOp: tags$1.compareOperator,
|
|
3945
|
+
"ChildOp SiblingOp, LogicOp": tags$1.logicOperator,
|
|
3946
|
+
BinOp: tags$1.arithmeticOperator,
|
|
3947
|
+
Important: tags$1.modifier,
|
|
3948
|
+
Comment: tags$1.blockComment,
|
|
3949
|
+
ParenthesizedContent: tags$1.special(tags$1.name),
|
|
3950
|
+
ColorLiteral: tags$1.color,
|
|
3951
|
+
StringLiteral: tags$1.string,
|
|
3952
|
+
":": tags$1.punctuation,
|
|
3953
|
+
"PseudoOp #": tags$1.derefOperator,
|
|
3954
|
+
"; ,": tags$1.separator,
|
|
3955
|
+
"( )": tags$1.paren,
|
|
3956
|
+
"[ ]": tags$1.squareBracket,
|
|
3957
|
+
"{ }": tags$1.brace
|
|
3958
|
+
});
|
|
3959
|
+
|
|
3960
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3961
|
+
const spec_callee = {
|
|
3962
|
+
__proto__: null,
|
|
3963
|
+
lang: 32,
|
|
3964
|
+
"nth-child": 32,
|
|
3965
|
+
"nth-last-child": 32,
|
|
3966
|
+
"nth-of-type": 32,
|
|
3967
|
+
"nth-last-of-type": 32,
|
|
3968
|
+
dir: 32,
|
|
3969
|
+
"host-context": 32,
|
|
3970
|
+
url: 60,
|
|
3971
|
+
"url-prefix": 60,
|
|
3972
|
+
domain: 60,
|
|
3973
|
+
regexp: 60,
|
|
3974
|
+
selector: 134
|
|
3975
|
+
};
|
|
3976
|
+
const spec_AtKeyword = {
|
|
3977
|
+
__proto__: null,
|
|
3978
|
+
"@import": 114,
|
|
3979
|
+
"@media": 138,
|
|
3980
|
+
"@charset": 142,
|
|
3981
|
+
"@namespace": 146,
|
|
3982
|
+
"@keyframes": 152,
|
|
3983
|
+
"@supports": 164
|
|
3984
|
+
};
|
|
3985
|
+
const spec_identifier$1 = {
|
|
3986
|
+
__proto__: null,
|
|
3987
|
+
not: 128,
|
|
3988
|
+
only: 128,
|
|
3989
|
+
from: 158,
|
|
3990
|
+
to: 160
|
|
3991
|
+
};
|
|
3992
|
+
const parser$3 = LRParser.deserialize({
|
|
3993
|
+
version: 14,
|
|
3994
|
+
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",
|
|
3995
|
+
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~",
|
|
3996
|
+
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",
|
|
3997
|
+
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",
|
|
3998
|
+
maxTerm: 108,
|
|
3999
|
+
nodeProps: [["openedBy", 17, "(", 48, "{"], ["closedBy", 18, ")", 49, "}"]],
|
|
4000
|
+
propSources: [cssHighlighting],
|
|
4001
|
+
skippedNodes: [0, 3],
|
|
4002
|
+
repeatNodeCount: 8,
|
|
4003
|
+
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$}",
|
|
4004
|
+
tokenizers: [descendant, unitToken, identifiers, 0, 1, 2, 3],
|
|
4005
|
+
topRules: {
|
|
4006
|
+
"StyleSheet": [0, 4],
|
|
4007
|
+
"Styles": [1, 84]
|
|
4008
|
+
},
|
|
4009
|
+
specialized: [{
|
|
4010
|
+
term: 95,
|
|
4011
|
+
get: value => spec_callee[value] || -1
|
|
4012
|
+
}, {
|
|
4013
|
+
term: 56,
|
|
4014
|
+
get: value => spec_AtKeyword[value] || -1
|
|
4015
|
+
}, {
|
|
4016
|
+
term: 96,
|
|
4017
|
+
get: value => spec_identifier$1[value] || -1
|
|
4018
|
+
}],
|
|
4019
|
+
tokenPrec: 1123
|
|
4020
|
+
});
|
|
4021
|
+
|
|
4022
|
+
let _properties = null;
|
|
4023
|
+
function properties() {
|
|
4024
|
+
if (!_properties && typeof document == "object" && document.body) {
|
|
4025
|
+
let names = [];
|
|
4026
|
+
for (let prop in document.body.style) {
|
|
4027
|
+
if (!/[A-Z]|^-|^(item|length)$/.test(prop)) names.push(prop);
|
|
4028
|
+
}
|
|
4029
|
+
_properties = names.sort().map(name => ({
|
|
4030
|
+
type: "property",
|
|
4031
|
+
label: name
|
|
4032
|
+
}));
|
|
4033
|
+
}
|
|
4034
|
+
return _properties || [];
|
|
4035
|
+
}
|
|
4036
|
+
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 => ({
|
|
4037
|
+
type: "class",
|
|
4038
|
+
label: name
|
|
4039
|
+
}));
|
|
4040
|
+
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 => ({
|
|
4041
|
+
type: "keyword",
|
|
4042
|
+
label: name
|
|
4043
|
+
})).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 => ({
|
|
4044
|
+
type: "constant",
|
|
4045
|
+
label: name
|
|
4046
|
+
})));
|
|
4047
|
+
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 => ({
|
|
4048
|
+
type: "type",
|
|
4049
|
+
label: name
|
|
4050
|
+
}));
|
|
4051
|
+
const identifier$1 = /^[\w-]*/;
|
|
4052
|
+
/**
|
|
4053
|
+
CSS property and value keyword completion source.
|
|
4054
|
+
*/
|
|
4055
|
+
const cssCompletionSource = context => {
|
|
4056
|
+
let {
|
|
4057
|
+
state,
|
|
4058
|
+
pos
|
|
4059
|
+
} = context,
|
|
4060
|
+
node = syntaxTree(state).resolveInner(pos, -1);
|
|
4061
|
+
if (node.name == "PropertyName") return {
|
|
4062
|
+
from: node.from,
|
|
4063
|
+
options: properties(),
|
|
4064
|
+
validFor: identifier$1
|
|
4065
|
+
};
|
|
4066
|
+
if (node.name == "ValueName") return {
|
|
4067
|
+
from: node.from,
|
|
4068
|
+
options: values,
|
|
4069
|
+
validFor: identifier$1
|
|
4070
|
+
};
|
|
4071
|
+
if (node.name == "PseudoClassName") return {
|
|
4072
|
+
from: node.from,
|
|
4073
|
+
options: pseudoClasses,
|
|
4074
|
+
validFor: identifier$1
|
|
4075
|
+
};
|
|
4076
|
+
if (node.name == "TagName") {
|
|
4077
|
+
for (let {
|
|
4078
|
+
parent
|
|
4079
|
+
} = node; parent; parent = parent.parent) if (parent.name == "Block") return {
|
|
4080
|
+
from: node.from,
|
|
4081
|
+
options: properties(),
|
|
4082
|
+
validFor: identifier$1
|
|
4083
|
+
};
|
|
4084
|
+
return {
|
|
4085
|
+
from: node.from,
|
|
4086
|
+
options: tags,
|
|
4087
|
+
validFor: identifier$1
|
|
4088
|
+
};
|
|
4089
|
+
}
|
|
4090
|
+
if (!context.explicit) return null;
|
|
4091
|
+
let above = node.resolve(pos),
|
|
4092
|
+
before = above.childBefore(pos);
|
|
4093
|
+
if (before && before.name == ":" && above.name == "PseudoClassSelector") return {
|
|
4094
|
+
from: pos,
|
|
4095
|
+
options: pseudoClasses,
|
|
4096
|
+
validFor: identifier$1
|
|
4097
|
+
};
|
|
4098
|
+
if (before && before.name == ":" && above.name == "Declaration" || above.name == "ArgList") return {
|
|
4099
|
+
from: pos,
|
|
4100
|
+
options: values,
|
|
4101
|
+
validFor: identifier$1
|
|
4102
|
+
};
|
|
4103
|
+
if (above.name == "Block") return {
|
|
4104
|
+
from: pos,
|
|
4105
|
+
options: properties(),
|
|
4106
|
+
validFor: identifier$1
|
|
4107
|
+
};
|
|
4108
|
+
return null;
|
|
4109
|
+
};
|
|
4110
|
+
|
|
4111
|
+
/**
|
|
4112
|
+
A language provider based on the [Lezer CSS
|
|
4113
|
+
parser](https://github.com/lezer-parser/css), extended with
|
|
4114
|
+
highlighting and indentation information.
|
|
4115
|
+
*/
|
|
4116
|
+
const cssLanguage = /*@__PURE__*/LRLanguage.define({
|
|
4117
|
+
parser: /*@__PURE__*/parser$3.configure({
|
|
4118
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
4119
|
+
Declaration: /*@__PURE__*/continuedIndent()
|
|
4120
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
4121
|
+
Block: foldInside
|
|
4122
|
+
})]
|
|
4123
|
+
}),
|
|
4124
|
+
languageData: {
|
|
4125
|
+
commentTokens: {
|
|
4126
|
+
block: {
|
|
4127
|
+
open: "/*",
|
|
4128
|
+
close: "*/"
|
|
4129
|
+
}
|
|
4130
|
+
},
|
|
4131
|
+
indentOnInput: /^\s*\}$/,
|
|
4132
|
+
wordChars: "-"
|
|
4133
|
+
}
|
|
4134
|
+
});
|
|
4135
|
+
/**
|
|
4136
|
+
Language support for CSS.
|
|
4137
|
+
*/
|
|
4138
|
+
function css() {
|
|
4139
|
+
return new LanguageSupport(cssLanguage, cssLanguage.data.of({
|
|
4140
|
+
autocomplete: cssCompletionSource
|
|
4141
|
+
}));
|
|
4142
|
+
}
|
|
4143
|
+
|
|
3419
4144
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3420
4145
|
const noSemi = 302,
|
|
3421
4146
|
incdec = 1,
|
|
@@ -3429,7 +4154,7 @@ const noSemi = 302,
|
|
|
3429
4154
|
/* Hand-written tokenizers for JavaScript tokens that can't be
|
|
3430
4155
|
expressed by lezer's built-in tokenizer. */
|
|
3431
4156
|
|
|
3432
|
-
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];
|
|
4157
|
+
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];
|
|
3433
4158
|
const braceR = 125,
|
|
3434
4159
|
semicolon = 59,
|
|
3435
4160
|
slash = 47,
|
|
@@ -3457,7 +4182,7 @@ const noSemicolon = new ExternalTokenizer((input, stack) => {
|
|
|
3457
4182
|
next
|
|
3458
4183
|
} = input,
|
|
3459
4184
|
after;
|
|
3460
|
-
if (space.indexOf(next) > -1) return;
|
|
4185
|
+
if (space$1.indexOf(next) > -1) return;
|
|
3461
4186
|
if (next == slash && ((after = input.peek(1)) == slash || after == star)) return;
|
|
3462
4187
|
if (next != braceR && next != semicolon && next != -1 && !stack.context && stack.canShift(noSemi)) input.acceptToken(noSemi);
|
|
3463
4188
|
}, {
|
|
@@ -3479,61 +4204,61 @@ const incdecToken = new ExternalTokenizer((input, stack) => {
|
|
|
3479
4204
|
contextual: true
|
|
3480
4205
|
});
|
|
3481
4206
|
const jsHighlight = styleTags({
|
|
3482
|
-
"get set async static": tags.modifier,
|
|
3483
|
-
"for while do if else switch try catch finally return throw break continue default case": tags.controlKeyword,
|
|
3484
|
-
"in of await yield void typeof delete instanceof": tags.operatorKeyword,
|
|
3485
|
-
"let var const function class extends": tags.definitionKeyword,
|
|
3486
|
-
"import export from": tags.moduleKeyword,
|
|
3487
|
-
"with debugger as new": tags.keyword,
|
|
3488
|
-
TemplateString: tags.special(tags.string),
|
|
3489
|
-
super: tags.atom,
|
|
3490
|
-
BooleanLiteral: tags.bool,
|
|
3491
|
-
this: tags.self,
|
|
3492
|
-
null: tags.null,
|
|
3493
|
-
Star: tags.modifier,
|
|
3494
|
-
VariableName: tags.variableName,
|
|
3495
|
-
"CallExpression/VariableName TaggedTemplateExpression/VariableName": tags.function(tags.variableName),
|
|
3496
|
-
VariableDefinition: tags.definition(tags.variableName),
|
|
3497
|
-
Label: tags.labelName,
|
|
3498
|
-
PropertyName: tags.propertyName,
|
|
3499
|
-
PrivatePropertyName: tags.special(tags.propertyName),
|
|
3500
|
-
"CallExpression/MemberExpression/PropertyName": tags.function(tags.propertyName),
|
|
3501
|
-
"FunctionDeclaration/VariableDefinition": tags.function(tags.definition(tags.variableName)),
|
|
3502
|
-
"ClassDeclaration/VariableDefinition": tags.definition(tags.className),
|
|
3503
|
-
PropertyDefinition: tags.definition(tags.propertyName),
|
|
3504
|
-
PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),
|
|
3505
|
-
UpdateOp: tags.updateOperator,
|
|
3506
|
-
LineComment: tags.lineComment,
|
|
3507
|
-
BlockComment: tags.blockComment,
|
|
3508
|
-
Number: tags.number,
|
|
3509
|
-
String: tags.string,
|
|
3510
|
-
Escape: tags.escape,
|
|
3511
|
-
ArithOp: tags.arithmeticOperator,
|
|
3512
|
-
LogicOp: tags.logicOperator,
|
|
3513
|
-
BitOp: tags.bitwiseOperator,
|
|
3514
|
-
CompareOp: tags.compareOperator,
|
|
3515
|
-
RegExp: tags.regexp,
|
|
3516
|
-
Equals: tags.definitionOperator,
|
|
3517
|
-
Arrow: tags.function(tags.punctuation),
|
|
3518
|
-
": Spread": tags.punctuation,
|
|
3519
|
-
"( )": tags.paren,
|
|
3520
|
-
"[ ]": tags.squareBracket,
|
|
3521
|
-
"{ }": tags.brace,
|
|
3522
|
-
"InterpolationStart InterpolationEnd": tags.special(tags.brace),
|
|
3523
|
-
".": tags.derefOperator,
|
|
3524
|
-
", ;": tags.separator,
|
|
3525
|
-
"@": tags.meta,
|
|
3526
|
-
TypeName: tags.typeName,
|
|
3527
|
-
TypeDefinition: tags.definition(tags.typeName),
|
|
3528
|
-
"type enum interface implements namespace module declare": tags.definitionKeyword,
|
|
3529
|
-
"abstract global Privacy readonly override": tags.modifier,
|
|
3530
|
-
"is keyof unique infer": tags.operatorKeyword,
|
|
3531
|
-
JSXAttributeValue: tags.attributeValue,
|
|
3532
|
-
JSXText: tags.content,
|
|
3533
|
-
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags.angleBracket,
|
|
3534
|
-
"JSXIdentifier JSXNameSpacedName": tags.tagName,
|
|
3535
|
-
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags.attributeName,
|
|
3536
|
-
"JSXBuiltin/JSXIdentifier": tags.standard(tags.tagName)
|
|
4207
|
+
"get set async static": tags$1.modifier,
|
|
4208
|
+
"for while do if else switch try catch finally return throw break continue default case": tags$1.controlKeyword,
|
|
4209
|
+
"in of await yield void typeof delete instanceof": tags$1.operatorKeyword,
|
|
4210
|
+
"let var const function class extends": tags$1.definitionKeyword,
|
|
4211
|
+
"import export from": tags$1.moduleKeyword,
|
|
4212
|
+
"with debugger as new": tags$1.keyword,
|
|
4213
|
+
TemplateString: tags$1.special(tags$1.string),
|
|
4214
|
+
super: tags$1.atom,
|
|
4215
|
+
BooleanLiteral: tags$1.bool,
|
|
4216
|
+
this: tags$1.self,
|
|
4217
|
+
null: tags$1.null,
|
|
4218
|
+
Star: tags$1.modifier,
|
|
4219
|
+
VariableName: tags$1.variableName,
|
|
4220
|
+
"CallExpression/VariableName TaggedTemplateExpression/VariableName": tags$1.function(tags$1.variableName),
|
|
4221
|
+
VariableDefinition: tags$1.definition(tags$1.variableName),
|
|
4222
|
+
Label: tags$1.labelName,
|
|
4223
|
+
PropertyName: tags$1.propertyName,
|
|
4224
|
+
PrivatePropertyName: tags$1.special(tags$1.propertyName),
|
|
4225
|
+
"CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
|
|
4226
|
+
"FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
|
|
4227
|
+
"ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
|
|
4228
|
+
PropertyDefinition: tags$1.definition(tags$1.propertyName),
|
|
4229
|
+
PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
|
|
4230
|
+
UpdateOp: tags$1.updateOperator,
|
|
4231
|
+
LineComment: tags$1.lineComment,
|
|
4232
|
+
BlockComment: tags$1.blockComment,
|
|
4233
|
+
Number: tags$1.number,
|
|
4234
|
+
String: tags$1.string,
|
|
4235
|
+
Escape: tags$1.escape,
|
|
4236
|
+
ArithOp: tags$1.arithmeticOperator,
|
|
4237
|
+
LogicOp: tags$1.logicOperator,
|
|
4238
|
+
BitOp: tags$1.bitwiseOperator,
|
|
4239
|
+
CompareOp: tags$1.compareOperator,
|
|
4240
|
+
RegExp: tags$1.regexp,
|
|
4241
|
+
Equals: tags$1.definitionOperator,
|
|
4242
|
+
Arrow: tags$1.function(tags$1.punctuation),
|
|
4243
|
+
": Spread": tags$1.punctuation,
|
|
4244
|
+
"( )": tags$1.paren,
|
|
4245
|
+
"[ ]": tags$1.squareBracket,
|
|
4246
|
+
"{ }": tags$1.brace,
|
|
4247
|
+
"InterpolationStart InterpolationEnd": tags$1.special(tags$1.brace),
|
|
4248
|
+
".": tags$1.derefOperator,
|
|
4249
|
+
", ;": tags$1.separator,
|
|
4250
|
+
"@": tags$1.meta,
|
|
4251
|
+
TypeName: tags$1.typeName,
|
|
4252
|
+
TypeDefinition: tags$1.definition(tags$1.typeName),
|
|
4253
|
+
"type enum interface implements namespace module declare": tags$1.definitionKeyword,
|
|
4254
|
+
"abstract global Privacy readonly override": tags$1.modifier,
|
|
4255
|
+
"is keyof unique infer": tags$1.operatorKeyword,
|
|
4256
|
+
JSXAttributeValue: tags$1.attributeValue,
|
|
4257
|
+
JSXText: tags$1.content,
|
|
4258
|
+
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
|
|
4259
|
+
"JSXIdentifier JSXNameSpacedName": tags$1.tagName,
|
|
4260
|
+
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
|
|
4261
|
+
"JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
|
|
3537
4262
|
});
|
|
3538
4263
|
|
|
3539
4264
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
@@ -3620,7 +4345,7 @@ const spec_LessThan = {
|
|
|
3620
4345
|
__proto__: null,
|
|
3621
4346
|
"<": 137
|
|
3622
4347
|
};
|
|
3623
|
-
const parser = LRParser.deserialize({
|
|
4348
|
+
const parser$2 = LRParser.deserialize({
|
|
3624
4349
|
version: 14,
|
|
3625
4350
|
states: "$EnO`QUOOO%QQUOOO'TQWOOP(bOSOOO*pQ(CjO'#CfO*wOpO'#CgO+VO!bO'#CgO+eO07`O'#DZO-vQUO'#DaO.WQUO'#DlO%QQUO'#DvO0_QUO'#EOOOQ(CY'#EW'#EWO0uQSO'#ETOOQO'#I`'#I`O0}QSO'#GkOOQO'#Ei'#EiO1YQSO'#EhO1_QSO'#EhO3aQ(CjO'#JcO6QQ(CjO'#JdO6nQSO'#FWO6sQ#tO'#FoOOQ(CY'#F`'#F`O7OO&jO'#F`O7^Q,UO'#FvO8tQSO'#FuOOQ(CY'#Jd'#JdOOQ(CW'#Jc'#JcOOQQ'#J}'#J}O8yQSO'#IPO9OQ(C[O'#IQOOQQ'#JP'#JPOOQQ'#IU'#IUQ`QUOOO%QQUO'#DnO9WQUO'#DzO%QQUO'#D|O9_QSO'#GkO9dQ,UO'#ClO9rQSO'#EgO9}QSO'#ErO:SQ,UO'#F_O:qQSO'#GkO:vQSO'#GoO;RQSO'#GoO;aQSO'#GrO;aQSO'#GsO;aQSO'#GuO9_QSO'#GxO<QQSO'#G{O=cQSO'#CbO=sQSO'#HYO={QSO'#H`O={QSO'#HbO`QUO'#HdO={QSO'#HfO={QSO'#HiO>QQSO'#HoO>VQ(C]O'#HuO%QQUO'#HwO>bQ(C]O'#HyO>mQ(C]O'#H{O9OQ(C[O'#H}O>xQ(CjO'#CfO?zQWO'#DfQOQSOOO@bQSO'#EPO9dQ,UO'#EgO@mQSO'#EgO@xQ`O'#F_OOQQ'#Cd'#CdOOQ(CW'#Dk'#DkOOQ(CW'#Jg'#JgO%QQUO'#JgOBUQWO'#E`OOQ(CW'#E_'#E_OB`Q(C`O'#E`OBzQWO'#ESOOQO'#Jj'#JjOC`QWO'#ESOCmQWO'#E`ODTQWO'#EfODWQWO'#E`ODqQWO'#E`OAQQWO'#E`OBzQWO'#E`PEbO?MpO'#C`POOO)CDn)CDnOOOO'#IV'#IVOEmOpO,59ROOQ(CY,59R,59ROOOO'#IW'#IWOE{O!bO,59RO%QQUO'#D]OOOO'#IY'#IYOFZO07`O,59uOOQ(CY,59u,59uOFiQUO'#IZOF|QSO'#JeOIOQbO'#JeO+sQUO'#JeOIVQSO,59{OImQSO'#EiOIzQSO'#JrOJVQSO'#JqOJVQSO'#JqOJ_QSO,5;VOJdQSO'#JpOOQ(CY,5:W,5:WOJkQUO,5:WOLlQ(CjO,5:bOM]QSO,5:jOMbQSO'#JnON[Q(C[O'#JoO:vQSO'#JnONcQSO'#JnONkQSO,5;UONpQSO'#JnOOQ(CY'#Cf'#CfO%QQUO'#EOO! dQ`O,5:oOOQO'#Jk'#JkOOQO-E<^-E<^O9_QSO,5=VO! zQSO,5=VO!!PQUO,5;SO!$SQ,UO'#EdO!%gQSO,5;SO!'PQ,UO'#DpO!'WQUO'#DuO!'bQWO,5;]O!'jQWO,5;]O%QQUO,5;]OOQQ'#FO'#FOOOQQ'#FQ'#FQO%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'#FU'#FUO!'xQUO,5;oOOQ(CY,5;t,5;tOOQ(CY,5;u,5;uO!){QSO,5;uOOQ(CY,5;v,5;vO%QQUO'#IfO!*TQ(C[O,5<cO!$SQ,UO,5;^O!*rQ,UO,5;^O%QQUO,5;rO!*yQ#tO'#FeO!+vQ#tO'#JvO!+bQ#tO'#JvO!+}Q#tO'#JvOOQO'#Jv'#JvO!,cQ#tO,5;}OOOO,5<Z,5<ZO!,tQUO'#FqOOOO'#Ie'#IeO7OO&jO,5;zO!,{Q#tO'#FsOOQ(CY,5;z,5;zO!-lQ7[O'#CrOOQ(CY'#Cv'#CvO!.PQSO'#CvO!.UO07`O'#CzO!.rQ,UO,5<`O!.yQSO,5<bO!0`QMhO'#GQO!0mQSO'#GRO!0rQSO'#GRO!0wQMhO'#GVO!1vQWO'#GZO!2iQ7[O'#J^OOQ(CY'#J^'#J^O!2sQSO'#J]O!3RQSO'#J[O!3ZQSO'#CqOOQ(CY'#Ct'#CtOOQ(CY'#DO'#DOOOQ(CY'#DQ'#DQO0xQSO'#DSO!%lQ,UO'#FxO!%lQ,UO'#FzO!3cQSO'#F|O!3hQSO'#F}O!0rQSO'#GTO!%lQ,UO'#GYO!3mQSO'#EjO!4XQSO,5<aO`QUO,5>kOOQQ'#JX'#JXOOQQ,5>l,5>lOOQQ-E<S-E<SO!6WQ(CjO,5:YO!8tQ(CjO,5:fO%QQUO,5:fO!;_Q(CjO,5:hOOQ(CW'#Co'#CoO!<OQ,UO,5=VO!<^Q(C[O'#JYO8tQSO'#JYO!<oQ(C[O,59WO!<zQWO,59WO!=SQ,UO,59WO9dQ,UO,59WO!=_QSO,5;SO!=gQSO'#HXO!=xQSO'#KRO%QQUO,5;wO!>QQWO,5;yO!>VQSO,5=rO!>[QSO,5=rO!>aQSO,5=rO9OQ(C[O,5=rO!>oQSO'#EkO!?iQWO'#ElOOQ(CW'#Jp'#JpO!?pQ(C[O'#KOO9OQ(C[O,5=ZO;aQSO,5=aOOQO'#Cr'#CrO!?{QWO,5=^O!@TQ,UO,5=_O!@`QSO,5=aO!@eQ`O,5=dO>QQSO'#G}O9_QSO'#HPO!@mQSO'#HPO9dQ,UO'#HSO!@rQSO'#HSOOQQ,5=g,5=gO!@wQSO'#HTO!APQSO'#ClO!AUQSO,58|O!A`QSO,58|O!ChQUO,58|OOQQ,58|,58|O!CuQ(C[O,58|O%QQUO,58|O!DQQUO'#H[OOQQ'#H]'#H]OOQQ'#H^'#H^O`QUO,5=tO!DbQSO,5=tO`QUO,5=zO`QUO,5=|O!DgQSO,5>OO`QUO,5>QO!DlQSO,5>TO!DqQUO,5>ZOOQQ,5>a,5>aO%QQUO,5>aO9OQ(C[O,5>cOOQQ,5>e,5>eO!HxQSO,5>eOOQQ,5>g,5>gO!HxQSO,5>gOOQQ,5>i,5>iO!H}QWO'#DXO%QQUO'#JgO!IlQWO'#JgO!JZQWO'#DgO!JlQWO'#DgO!L}QUO'#DgO!MUQSO'#JfO!M^QSO,5:QO!McQSO'#EmO!MqQSO'#JsO!MyQSO,5;WO!NOQWO'#DgO!N]QWO'#EROOQ(CY,5:k,5:kO%QQUO,5:kO!NdQSO,5:kO>QQSO,5;RO!<zQWO,5;RO!=SQ,UO,5;RO9dQ,UO,5;RO!NlQSO,5@RO!NqQ!LQO,5:oO# wQ(C`O,5:zOBzQWO,5:nO#!cQWO,5:nO#!pQWO,5:zO##WQWO,5:zO##qQWO,5:zO#$bQWO,5:zOBzQWO,5:zO!<oQ(C[O,5:nOOQ(CW'#Ec'#EcOOQO,5:z,5:zO%QQUO,5:zO#%UQ(C[O,5:zO#%aQ(C[O,5:zO!<zQWO,5:nOOQO,5;Q,5;QO#%oQ(C[O,5:zPOOO'#IT'#ITP#&TO?MpO,58zPOOO,58z,58zOOOO-E<T-E<TOOQ(CY1G.m1G.mOOOO-E<U-E<UO#&`Q`O,59wOOOO-E<W-E<WOOQ(CY1G/a1G/aO#&eQbO,5>uO+sQUO,5>uOOQO,5>{,5>{O#&oQUO'#IZOOQO-E<X-E<XO#&|QSO,5@PO#'UQbO,5@PO#']QSO,5@]OOQ(CY1G/g1G/gO%QQUO,5@^O#'eQSO'#IaOOQO-E<_-E<_O#']QSO,5@]OOQ(CW1G0q1G0qOOQ(CY1G/r1G/rOOQ(CY1G0U1G0UO#'yQSO,5@YO:vQSO,5@YO#(RQSO,5@YO%QQUO,5@ZO#(aQ(C[O,5@ZO#(rQ(C[O,5@ZO#(yQSO'#IcO#'yQSO,5@YOOQ(CW1G0p1G0pO!'bQWO,5:qO!'mQWO,5:qOOQO,5:s,5:sO#)hQSO,5:sO#)pQ,UO1G2qO9_QSO1G2qOOQ(CY1G0n1G0nO#*OQ(CjO1G0nO#+TQ(ChO,5;OOOQ(CY'#GP'#GPO#+qQ(CjO'#J^O!!PQUO1G0nO#-yQ,UO'#JhO#.TQSO,5:[O#.YQbO'#JiO%QQUO'#JiO#.dQSO,5:aOOQ(CY'#DX'#DXOOQ(CY1G0w1G0wO%QQUO1G0wOOQ(CY1G1a1G1aO#.iQSO1G0wO#1QQ(CjO1G0xO#1XQ(CjO1G0xO#3rQ(CjO1G0xO#3yQ(CjO1G0xO#6TQ(CjO1G0xO#6kQ(CjO1G0xO#9eQ(CjO1G0xO#9lQ(CjO1G0xO#<VQ(CjO1G0xO#<^Q(CjO1G0xO#>UQ(CjO1G0xO#AUQ$IUO'#CfO#CSQ$IUO1G1ZO#EQQ$IUO'#JdO!*OQSO1G1aO#EeQ(CjO,5?QOOQ(CW-E<d-E<dO#FXQ(CjO1G0xOOQ(CY1G0x1G0xO#HdQ(CjO1G1^O#IWQ#tO,5<RO#I`Q#tO,5<SO#IhQ#tO'#FjO#JPQSO'#FiOOQO'#Jw'#JwOOQO'#Id'#IdO#JUQ#tO1G1iOOQ(CY1G1i1G1iOOOO1G1t1G1tO#JgQ$IUO'#JcO#JqQSO,5<]O!'xQUO,5<]OOOO-E<c-E<cOOQ(CY1G1f1G1fO#JvQWO'#JvOOQ(CY,5<_,5<_O#KOQWO,5<_OOQ(CY,59b,59bO!$SQ,UO'#C|OOOO'#IX'#IXO#KTO07`O,59fOOQ(CY,59f,59fO%QQUO1G1zO!3hQSO'#IhO#K`QSO,5<sOOQ(CY,5<p,5<pOOQO'#Gf'#GfO!%lQ,UO,5=POOQO'#Gh'#GhO!%lQ,UO,5=RO!$SQ,UO,5=TOOQO1G1|1G1|O#KnQ`O'#CoO#LRQ`O,5<lO#LYQSO'#JzO9_QSO'#JzO#LhQSO,5<nO!%lQ,UO,5<mO#LmQSO'#GSO#LxQSO,5<mO#L}Q`O'#GPO#M[Q`O'#J{O#MfQSO'#J{O!$SQ,UO'#J{O#MkQSO,5<qO#MpQWO'#G[O!1qQWO'#G[O#NRQSO'#G^O#NWQSO'#G`O!0rQSO'#GcO#N]Q(C[O'#IjO#NhQWO,5<uOOQ(CY,5<u,5<uO#NoQWO'#G[O#N}QWO'#G]O$ VQWO'#G]OOQ(CY,5=U,5=UO!%lQ,UO,5?wO!%lQ,UO,5?wO$ [QSO'#IkO$ gQSO,5?vO$ oQSO,59]O$!`Q,UO,59nOOQ(CY,59n,59nO$#RQ,UO,5<dO$#tQ,UO,5<fO?rQSO,5<hOOQ(CY,5<i,5<iO$$OQSO,5<oO$$TQ,UO,5<tO!!PQUO1G1{O$$eQSO1G1{OOQQ1G4V1G4VOOQ(CY1G/t1G/tO!){QSO1G/tO$&dQ(CjO1G0QOOQQ1G2q1G2qO!$SQ,UO1G2qO%QQUO1G2qO$'TQSO1G2qO$'`Q,UO'#EdOOQ(CW,5?t,5?tO$'jQ(C[O,5?tOOQQ1G.r1G.rO!<oQ(C[O1G.rO!<zQWO1G.rO!=SQ,UO1G.rO$'{QSO1G0nO$(QQSO'#CfO$(]QSO'#KSO$(eQSO,5=sO$(jQSO'#KSO$(oQSO'#KSO$(zQSO'#IsO$)YQSO,5@mO$)bQbO1G1cOOQ(CY1G1e1G1eO9_QSO1G3^O?rQSO1G3^O$)iQSO1G3^O$)nQSO1G3^OOQQ1G3^1G3^O:vQSO'#JqO:vQSO'#EmO%QQUO'#EmO:vQSO'#ImO$)sQ(C[O,5@jOOQQ1G2u1G2uO!@`QSO1G2{O!$SQ,UO1G2xO$*OQSO1G2xOOQQ1G2y1G2yO!$SQ,UO1G2yO$*TQSO1G2yO$*]QWO'#GwOOQQ1G2{1G2{O!1qQWO'#IoO!@eQ`O1G3OOOQQ1G3O1G3OOOQQ,5=i,5=iO$*eQ,UO,5=kO9_QSO,5=kO#NWQSO,5=nO8tQSO,5=nO!<zQWO,5=nO!=SQ,UO,5=nO9dQ,UO,5=nO$*sQSO'#KQO$+OQSO,5=oOOQQ1G.h1G.hO$+TQ(C[O1G.hO?rQSO1G.hO$+`QSO1G.hO9OQ(C[O1G.hO$+kQbO,5@oO$,OQSO,5@oO$,ZQUO,5=vO$,bQSO,5=vO:vQSO,5@oOOQQ1G3`1G3`O`QUO1G3`OOQQ1G3f1G3fOOQQ1G3h1G3hO={QSO1G3jO$,gQUO1G3lO$0hQUO'#HkOOQQ1G3o1G3oO$0uQSO'#HqO>QQSO'#HsOOQQ1G3u1G3uO$0}QUO1G3uO9OQ(C[O1G3{OOQQ1G3}1G3}OOQ(CW'#GW'#GWO9OQ(C[O1G4PO9OQ(C[O1G4RO$5RQSO,5@RO!'xQUO,5;XO:vQSO,5;XO>QQSO,5:RO!'xQUO,5:RO!<zQWO,5:RO$5WQ$IUO,5:ROOQO,5;X,5;XO$5bQWO'#I[O$5xQSO,5@QOOQ(CY1G/l1G/lO$6QQWO'#IbO$6[QSO,5@_OOQ(CW1G0r1G0rO!JlQWO,5:ROOQO'#I_'#I_O$6dQWO,5:mOOQ(CY,5:m,5:mO!NgQSO1G0VOOQ(CY1G0V1G0VO%QQUO1G0VOOQ(CY1G0m1G0mO>QQSO1G0mO!<zQWO1G0mO!=SQ,UO1G0mOOQ(CW1G5m1G5mO!<oQ(C[O1G0YOOQO1G0f1G0fO%QQUO1G0fO$6kQ(C[O1G0fO$6vQ(C[O1G0fO!<zQWO1G0YOBzQWO1G0YO$7UQ(C`O1G0fO$7pQWO1G0YOBzQWO1G0fO$7}QWO1G0fO$8eQWO1G0fO$9OQWO1G0fO$9oQ(C[O1G0fOOQO1G0Y1G0YO$:TQ(CjO1G0fPOOO-E<R-E<RPOOO1G.f1G.fOOOO1G/c1G/cO$:_Q`O,5<cO$:gQbO1G4aOOQO1G4g1G4gO%QQUO,5>uO$:qQSO1G5kO$:yQSO1G5wO$;RQbO1G5xO:vQSO,5>{O$;]QSO1G5tO$;]QSO1G5tO:vQSO1G5tO$;eQ(CjO1G5uO%QQUO1G5uO$;uQ(C[O1G5uO$<WQSO,5>}O:vQSO,5>}OOQO,5>},5>}O$<lQSO,5>}OOQO-E<a-E<aOOQO1G0]1G0]OOQO1G0_1G0_O!*OQSO1G0_OOQQ7+(]7+(]O!$SQ,UO7+(]O%QQUO7+(]O$<zQSO7+(]O$=VQ,UO7+(]O$=eQ(CjO,59nO$?mQ(CjO,5<dO$AxQ(CjO,5<fO$DTQ(CjO,5<tOOQ(CY7+&Y7+&YO$FfQ(CjO7+&YO$GYQ,UO'#I]O$GdQSO,5@SOOQ(CY1G/v1G/vO$GlQUO'#I^O$GyQSO,5@TO$HRQbO,5@TOOQ(CY1G/{1G/{O$H]QSO7+&cOOQ(CY7+&c7+&cO$HbQ$IUO,5:bO%QQUO7+&uO$HlQ$IUO,5:YO$HyQ$IUO,5:fO$ITQ$IUO,5:hOOQ(CY7+&{7+&{OOQO1G1m1G1mOOQO1G1n1G1nO$I_Q#tO,5<UO!'xQUO,5<TOOQO-E<b-E<bOOQ(CY7+'T7+'TOOOO7+'`7+'`OOOO1G1w1G1wO$IjQSO1G1wOOQ(CY1G1y1G1yO$IoQ`O,59hOOOO-E<V-E<VOOQ(CY1G/Q1G/QO$IvQ(CjO7+'fOOQ(CY,5?S,5?SO$JjQSO,5?SOOQ(CY1G2_1G2_P$JoQSO'#IhPOQ(CY-E<f-E<fO$KcQ,UO1G2kO$LUQ,UO1G2mO$L`Q`O1G2oOOQ(CY1G2W1G2WO$LgQSO'#IgO$LuQSO,5@fO$LuQSO,5@fO$L}QSO,5@fO$MYQSO,5@fOOQO1G2Y1G2YO$MhQ,UO1G2XO!%lQ,UO1G2XO$MxQMhO'#IiO$NYQSO,5@gO!$SQ,UO,5@gO$NbQ`O,5@gOOQ(CY1G2]1G2]OOQ(CW,5<v,5<vOOQ(CW,5<w,5<wO$NlQSO,5<wOBuQSO,5<wO!<zQWO,5<vOOQO'#G_'#G_O$NqQSO,5<xOOQ(CW,5<z,5<zO$NlQSO,5<}OOQO,5?U,5?UOOQO-E<h-E<hOOQ(CY1G2a1G2aO!1qQWO,5<vO$NyQSO,5<wO#NRQSO,5<xO!1qQWO,5<wO% UQ,UO1G5cO% `Q,UO1G5cOOQO,5?V,5?VOOQO-E<i-E<iOOQO1G.w1G.wO!>QQWO,59pO%QQUO,59pO% mQSO1G2SO!%lQ,UO1G2ZO% rQ(CjO7+'gOOQ(CY7+'g7+'gO!!PQUO7+'gOOQ(CY7+%`7+%`O%!fQ`O'#J|O!NgQSO7+(]O%!pQbO7+(]O$<}QSO7+(]O%!wQ(ChO'#CfO%#[Q(ChO,5<{O%#|QSO,5<{OOQ(CW1G5`1G5`OOQQ7+$^7+$^O!<oQ(C[O7+$^O!<zQWO7+$^O!!PQUO7+&YO%$RQSO'#IrO%$gQSO,5@nOOQO1G3_1G3_O9_QSO,5@nO%$gQSO,5@nO%$oQSO,5@nOOQO,5?_,5?_OOQO-E<q-E<qOOQ(CY7+&}7+&}O%$tQSO7+(xO9OQ(C[O7+(xO9_QSO7+(xO?rQSO7+(xO%$yQSO,5;XOOQ(CW,5?X,5?XOOQ(CW-E<k-E<kOOQQ7+(g7+(gO%%OQ(ChO7+(dO!$SQ,UO7+(dO%%YQ`O7+(eOOQQ7+(e7+(eO!$SQ,UO7+(eO%%aQSO'#KPO%%lQSO,5=cOOQO,5?Z,5?ZOOQO-E<m-E<mOOQQ7+(j7+(jO%&{QWO'#HQOOQQ1G3V1G3VO!$SQ,UO1G3VO%QQUO1G3VO%'SQSO1G3VO%'_Q,UO1G3VO9OQ(C[O1G3YO#NWQSO1G3YO8tQSO1G3YO!<zQWO1G3YO!=SQ,UO1G3YO%'mQSO'#IqO%'xQSO,5@lO%(QQWO,5@lOOQ(CW1G3Z1G3ZOOQQ7+$S7+$SO?rQSO7+$SO9OQ(C[O7+$SO%(]QSO7+$SO%QQUO1G6ZO%QQUO1G6[O%(bQUO1G3bO%(iQSO1G3bO%(nQUO1G3bO%(uQ(C[O1G6ZOOQQ7+(z7+(zO9OQ(C[O7+)UO`QUO7+)WOOQQ'#KV'#KVOOQQ'#It'#ItO%)PQUO,5>VOOQQ,5>V,5>VO%QQUO'#HlO%)^QSO'#HnOOQQ,5>],5>]O:vQSO,5>]OOQQ,5>_,5>_OOQQ7+)a7+)aOOQQ7+)g7+)gOOQQ7+)k7+)kOOQQ7+)m7+)mO%)cQWO1G5mO%)wQ$IUO1G0sO%*RQSO1G0sOOQO1G/m1G/mO%*^Q$IUO1G/mO>QQSO1G/mO!'xQUO'#DgOOQO,5>v,5>vOOQO-E<Y-E<YOOQO,5>|,5>|OOQO-E<`-E<`O!<zQWO1G/mOOQO-E<]-E<]OOQ(CY1G0X1G0XOOQ(CY7+%q7+%qO!NgQSO7+%qOOQ(CY7+&X7+&XO>QQSO7+&XO!<zQWO7+&XOOQO7+%t7+%tO$:TQ(CjO7+&QOOQO7+&Q7+&QO%QQUO7+&QO%*hQ(C[O7+&QO!<oQ(C[O7+%tO!<zQWO7+%tO%*sQ(C[O7+&QOBzQWO7+%tO%+RQ(C[O7+&QO%+gQ(C`O7+&QO%+qQWO7+%tOBzQWO7+&QO%,OQWO7+&QO%,fQWO7+&QO%-PQSO7++`O%-PQSO7++`O%-XQ(CjO7++aO%QQUO7++aOOQO1G4i1G4iO:vQSO1G4iO%-iQSO1G4iOOQO7+%y7+%yO!NgQSO<<KwO%!pQbO<<KwO%-wQSO<<KwOOQQ<<Kw<<KwO!$SQ,UO<<KwO%QQUO<<KwO%.PQSO<<KwO%.[Q(CjO1G2kO%0gQ(CjO1G2mO%2rQ(CjO1G2XO%5TQ,UO,5>wOOQO-E<Z-E<ZO%5_QbO,5>xO%QQUO,5>xOOQO-E<[-E<[O%5iQSO1G5oOOQ(CY<<I}<<I}O%5qQ$IUO1G0nO%7{Q$IUO1G0xO%8SQ$IUO1G0xO%:WQ$IUO1G0xO%:_Q$IUO1G0xO%<SQ$IUO1G0xO%<jQ$IUO1G0xO%>}Q$IUO1G0xO%?UQ$IUO1G0xO%AYQ$IUO1G0xO%AaQ$IUO1G0xO%CXQ$IUO1G0xO%ClQ(CjO<<JaO%DqQ$IUO1G0xO%FgQ$IUO'#J^O%HjQ$IUO1G1^O%HwQ$IUO1G0QO!'xQUO'#FlOOQO'#Jx'#JxOOQO1G1p1G1pO%IRQSO1G1oO%IWQ$IUO,5?QOOOO7+'c7+'cOOOO1G/S1G/SOOQ(CY1G4n1G4nO!%lQ,UO7+(ZO%IbQSO,5?RO9_QSO,5?ROOQO-E<e-E<eO%IpQSO1G6QO%IpQSO1G6QO%IxQSO1G6QO%JTQ,UO7+'sO%JeQ`O,5?TO%JoQSO,5?TO!$SQ,UO,5?TOOQO-E<g-E<gO%JtQ`O1G6RO%KOQSO1G6ROOQ(CW1G2c1G2cO$NlQSO1G2cOOQ(CW1G2b1G2bO%KWQSO1G2dO!$SQ,UO1G2dOOQ(CW1G2i1G2iO!<zQWO1G2bOBuQSO1G2cO%K]QSO1G2dO%KeQSO1G2cO!%lQ,UO7+*}OOQ(CY1G/[1G/[O%KpQSO1G/[OOQ(CY7+'n7+'nO%KuQ,UO7+'uO%LVQ(CjO<<KROOQ(CY<<KR<<KRO!$SQ,UO'#IlO%LyQSO,5@hO!$SQ,UO1G2gOOQQ<<Gx<<GxO!<oQ(C[O<<GxO%MRQ(CjO<<ItOOQ(CY<<It<<ItOOQO,5?^,5?^O%MuQSO,5?^O$(oQSO,5?^OOQO-E<p-E<pO%MzQSO1G6YO%MzQSO1G6YO9_QSO1G6YO?rQSO<<LdOOQQ<<Ld<<LdO%NSQSO<<LdO9OQ(C[O<<LdO%NXQSO1G0sOOQQ<<LO<<LOO%%OQ(ChO<<LOOOQQ<<LP<<LPO%%YQ`O<<LPO%N^QWO'#InO%NiQSO,5@kO!'xQUO,5@kOOQQ1G2}1G2}O%NqQ(C`O'#JgO& ]QUO'#JgO& dQWO'#E`O&!QQ(C[O'#E`OB`Q(C`O'#E`O(YQWO'#HROOQO'#Ip'#IpO9OQ(C[O'#IpO&!fQWO,5=lOOQQ,5=l,5=lO&#OQWO'#E`O& vQWO'#E`O&#VQWO'#E`O&#pQWO'#E`O& jQWO'#E`O&$aQWO'#HRO&$rQSO7+(qO&$wQSO7+(qOOQQ7+(q7+(qO!$SQ,UO7+(qO%QQUO7+(qO&%PQSO7+(qOOQQ7+(t7+(tO9OQ(C[O7+(tO#NWQSO7+(tO8tQSO7+(tO!<zQWO7+(tO&%[QSO,5?]OOQO-E<o-E<oOOQO'#HU'#HUO&%gQSO1G6WO9OQ(C[O<<GnOOQQ<<Gn<<GnO?rQSO<<GnO&%oQSO7++uO&%tQSO7++vOOQQ7+(|7+(|O&%yQSO7+(|O&&OQUO7+(|O&&VQSO7+(|O%QQUO7++uO%QQUO7++vOOQQ<<Lp<<LpOOQQ<<Lr<<LrOOQQ-E<r-E<rOOQQ1G3q1G3qO&&[QSO,5>WOOQQ,5>Y,5>YO&&aQSO1G3wO:vQSO7+&_O!'xQUO7+&_OOQO7+%X7+%XO&&fQ$IUO1G5xO>QQSO7+%XOOQ(CY<<I]<<I]OOQ(CY<<Is<<IsO>QQSO<<IsOOQO<<Il<<IlO$:TQ(CjO<<IlO%QQUO<<IlOOQO<<I`<<I`O!<oQ(C[O<<I`O&&pQ(C[O<<IlO!<zQWO<<I`O&&{Q(C[O<<IlOBzQWO<<I`O&'ZQ(C[O<<IlO&'oQ(C`O<<IlO&'yQWO<<I`OBzQWO<<IlO&(WQWO<<IlO&(nQSO<<NzO&(vQ(CjO<<N{OOQO7+*T7+*TO:vQSO7+*TOOQQANAcANAcO&)WQSOANAcO!$SQ,UOANAcO!NgQSOANAcO%!pQbOANAcO%QQUOANAcO&)`Q(CjO7+'sO&+qQ(CjO7+'uO&.SQbO1G4dO&.^Q$IUO7+&YO&.kQ$IUO,59nO&0nQ$IUO,5<dO&2qQ$IUO,5<fO&4tQ$IUO,5<tO&6jQ$IUO7+'fO&6wQ$IUO7+'gO&7UQSO,5<WOOQO7+'Z7+'ZO&7ZQ,UO<<KuOOQO1G4m1G4mO&7bQSO1G4mO&7mQSO1G4mO&7{QSO7++lO&7{QSO7++lO!$SQ,UO1G4oO&8TQ`O1G4oO&8_QSO7++mOOQ(CW7+'}7+'}O$NlQSO7+(OO&8gQ`O7+(OOOQ(CW7+'|7+'|O$NlQSO7+'}O&8nQSO7+(OO!$SQ,UO7+(OOBuQSO7+'}O&8sQ,UO<<NiOOQ(CY7+$v7+$vO&8}Q`O,5?WOOQO-E<j-E<jO&9XQ(ChO7+(ROOQQAN=dAN=dO9_QSO1G4xOOQO1G4x1G4xO&9iQSO1G4xO&9nQSO7++tO&9nQSO7++tO9OQ(C[OANBOO?rQSOANBOOOQQANBOANBOOOQQANAjANAjOOQQANAkANAkO&9vQSO,5?YOOQO-E<l-E<lO&:RQ$IUO1G6VO&:]Q(C[O,5=mO8tQSO,5=mO&<nQbO'#CfO&<xQWO,5:zO&=SQWO,5:zO&=aQWO,5:zO&=tQWO,5:zO!<zQWO,5=mOOQO,5?[,5?[OOQO-E<n-E<nOOQQ1G3W1G3WO& ]QUO,5<xO%NqQ(C`O,5=mO# wQ(C`O,5:zO(YQWO,5=mO&>[QWO,5=mO&>mQWO,5:zOOQQ<<L]<<L]O!$SQ,UO<<L]O&$rQSO<<L]O&?WQSO<<L]O%QQUO<<L]OOQQ<<L`<<L`O9OQ(C[O<<L`O#NWQSO<<L`O8tQSO<<L`O&?`QWO1G4wO&?kQSO7++rOOQQAN=YAN=YO9OQ(C[OAN=YOOQQ<= a<= aOOQQ<= b<= bOOQQ<<Lh<<LhO&?sQSO<<LhO&?xQUO<<LhO&@PQSO<= aO&@UQSO<= bOOQQ1G3r1G3rO>QQSO7+)cO&@ZQSO<<IyO&@fQ$IUO<<IyOOQO<<Hs<<HsOOQ(CYAN?_AN?_OOQOAN?WAN?WO$:TQ(CjOAN?WOOQOAN>zAN>zO%QQUOAN?WO!<oQ(C[OAN>zO&@pQ(C[OAN?WO!<zQWOAN>zO&@{Q(C[OAN?WOBzQWOAN>zO&AZQ(C[OAN?WO&AoQ(C`OAN?WO&AyQWOAN>zOBzQWOAN?WOOQO<<Mo<<MoOOQQG26}G26}O!$SQ,UOG26}O!NgQSOG26}O&BWQSOG26}O%!pQbOG26}O&B`Q$IUO<<JaO&BmQ$IUO1G2XO&DcQ$IUO1G2kO&FfQ$IUO1G2mO&HiQ$IUO<<KRO&HvQ$IUO<<ItOOQO1G1r1G1rO!%lQ,UOANAaOOQO7+*X7+*XO&ITQSO7+*XO&I`QSO<= WO&IhQ`O7+*ZOOQ(CW<<Kj<<KjO$NlQSO<<KjOOQ(CW<<Ki<<KiO&IrQ`O<<KjO$NlQSO<<KiOOQO7+*d7+*dO9_QSO7+*dO&IyQSO<= `OOQQG27jG27jO9OQ(C[OG27jO!'xQUO1G4tO&JRQSO7++qOOQO1G3X1G3XO9OQ(C[O1G3XO&:]Q(C[O1G3XO&JZQWO1G0fO&JeQWO1G0fO&JrQWO1G0fO8tQSO1G3XO!<zQWO1G3XO(YQWO1G3XO%NqQ(C`O1G3XO$7UQ(C`O1G0fO&KVQWO1G3XO&$rQSOANAwOOQQANAwANAwO!$SQ,UOANAwO&KhQSOANAwOOQQANAzANAzO9OQ(C[OANAzO#NWQSOANAzOOQO'#HV'#HVOOQO7+*c7+*cOOQQG22tG22tOOQQANBSANBSO&KpQSOANBSOOQQAND{AND{OOQQAND|AND|OOQQ<<L}<<L}O!'xQUOAN?eOOQOG24rG24rO$:TQ(CjOG24rOOQOG24fG24fO%QQUOG24rO!<oQ(C[OG24fO&KuQ(C[OG24rO!<zQWOG24fO&LQQ(C[OG24rOBzQWOG24fO&L`Q(C[OG24rO!NgQSOLD,iOOQQLD,iLD,iO!$SQ,UOLD,iO&LtQSOLD,iO&L|Q$IUO7+'sO&NrQ$IUO7+'uO'!hQ,UOG26{OOQO<<Ms<<MsOOQ(CWANAUANAUO$NlQSOANAUOOQ(CWANATANATOOQO<<NO<<NOOOQQLD-ULD-UO'!xQ$IUO7+*`OOQO7+(s7+(sO9OQ(C[O7+(sO'#SQWO7+&QO'#^QWO7+&QO&:]Q(C[O7+(sO8tQSO7+(sO!<zQWO7+(sO(YQWO7+(sOOQQG27cG27cO&$rQSOG27cO!$SQ,UOG27cOOQQG27fG27fO9OQ(C[OG27fOOQQG27nG27nO'#kQ$IUOG25POOQOLD*^LD*^O$:TQ(CjOLD*^OOQOLD*QLD*QO%QQUOLD*^O!<oQ(C[OLD*QO'#uQ(C[OLD*^O!<zQWOLD*QO'$QQ(C[OLD*^OOQQ!$(!T!$(!TO!NgQSO!$(!TO!$SQ,UO!$(!TO'$`Q(CjOG26{OOQ(CWG26pG26pOOQO<<L_<<L_O'&qQWO<<IlO9OQ(C[O<<L_O&:]Q(C[O<<L_O8tQSO<<L_O!<zQWO<<L_OOQQLD,}LD,}O&$rQSOLD,}OOQQLD-QLD-QOOQO!$'Mx!$'MxO$:TQ(CjO!$'MxOOQO!$'Ml!$'MlO%QQUO!$'MxO!<oQ(C[O!$'MlO'&{Q(C[O!$'MxOOQQ!)9Eo!)9EoO!NgQSO!)9EoOOQOANAyANAyO9OQ(C[OANAyO&:]Q(C[OANAyO8tQSOANAyOOQQ!$(!i!$(!iOOQO!)9Cd!)9CdO$:TQ(CjO!)9CdOOQO!)9CW!)9CWO%QQUO!)9CdOOQQ!.K;Z!.K;ZO''WQ$IUOG26{OOQOG27eG27eO9OQ(C[OG27eO&:]Q(C[OG27eOOQO!.K9O!.K9OO$:TQ(CjO!.K9OOOQOLD-PLD-PO9OQ(C[OLD-POOQO!4/.j!4/.jOOQO!$(!k!$(!kO!'xQUO'#DvO0uQSO'#ETO'(|QbO'#JcO!'xQUO'#DnO')TQUO'#DzO!'xQUO'#D|O')[QbO'#CfO'+rQbO'#CfO',SQUO,5;SO!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO,5;^O!'xQUO'#IfO'.VQSO,5<cO'._Q,UO,5;^O'/rQ,UO,5;^O!'xQUO,5;rO0xQSO'#DSO0xQSO'#DSO!$SQ,UO'#FxO'._Q,UO'#FxO!$SQ,UO'#FzO'._Q,UO'#FzO!$SQ,UO'#GYO'._Q,UO'#GYO!'xQUO,5:fO!'xQUO,5@^O',SQUO1G0nO'/yQ$IUO'#CfO!'xQUO1G1zO!$SQ,UO,5=PO'._Q,UO,5=PO!$SQ,UO,5=RO'._Q,UO,5=RO!$SQ,UO,5<mO'._Q,UO,5<mO',SQUO1G1{O!'xQUO7+&uO!$SQ,UO1G2XO'._Q,UO1G2XO!$SQ,UO1G2ZO'._Q,UO1G2ZO',SQUO7+'gO',SQUO7+&YO!$SQ,UOANAaO'._Q,UOANAaO'0TQSO'#EhO'0YQSO'#EhO'0bQSO'#FWO'0gQSO'#ErO'0lQSO'#JrO'0wQSO'#JpO'1SQSO,5;SO'1XQ,UO,5<`O'1`QSO'#GRO'1eQSO'#GRO'1jQSO,5<aO'1rQSO,5;SO'1zQ$IUO1G1ZO'2RQSO,5<mO'2WQSO,5<mO'2]QSO,5<oO'2bQSO,5<oO'2gQSO1G1{O'2lQSO1G0nO'2qQ,UO<<KuO'2xQ,UO<<KuO7^Q,UO'#FvO8tQSO'#FuO@mQSO'#EgO!'xQUO,5;oO!0rQSO'#GRO!0rQSO'#GRO!0rQSO'#GTO!0rQSO'#GTO!%lQ,UO7+(ZO!%lQ,UO7+(ZO$L`Q`O1G2oO$L`Q`O1G2oO!$SQ,UO,5=TO!$SQ,UO,5=T",
|
|
3626
4351
|
stateData: "'4R~O'mOS'nOSROS'oRQ~OPYOQYOV!TO^pOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O#p}O$QzO$UfO%`{O%b!OO%d|O%e|O%h!PO%j!QO%m!RO%n!RO%p!SO%}!UO&T!VO&V!WO&X!XO&Z!YO&^!ZO&d![O&j!]O&l!^O&n!_O&p!`O&r!aO'tSO'vTO'yUO(RVO(`[O(miO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't!bO'vTO'yUO(RVO(`[O(miO~O^!qOl!kO|!lO![!rO!]!pO!^!pO!x<XO!|!wO!}!vO#O!tO#P!uO#Q!sO#T!xO#U!xO'u!iO'vTO'yUO(U!jO(`!nO~O'o!yO~OPYXXYX^YXkYXyYXzYX|YX!VYX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX'kYX(RYX(aYX(hYX(iYX~O!a$zX~P(gO[!{O'v!}O'w!{O'x!}O~O[#OO'x!}O'y!}O'z#OO~Oq#QO!O#RO(S#RO(T#TO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't<^O'vTO'yUO(RVO(`[O(miO~O!U#XO!V#UO!S(XP!S(eP~P+sO!W#aO~P`OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO'vTO'yUO(RVO(`[O(miO~O!U#gO!x]O#b#jO#c#gO't<_O!g(bP~P._O!h#lO't#kO~O!t#pO!x]O%`#qO~O#d#rO~O!a#sO#d#rO~OP$ZOX$bOk$OOy#wOz#xO|#yO!V$_O!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO#u$VO#v$WO(RVO(a$XO(h#zO(i#{O~O^(VX'k(VX'i(VX!g(VX!S(VX!X(VX%a(VX!a(VX~P1gO#X$cO#{$cOP(WXX(WXk(WXy(WXz(WX|(WX!V(WX!e(WX!h(WX!l(WX#g(WX#h(WX#i(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#q(WX#s(WX#u(WX#v(WX(R(WX(a(WX(h(WX(i(WX!X(WX%a(WX~O^(WX!f(WX'k(WX'i(WX!S(WX!g(WXo(WX!a(WX~P3}O#X$cO~O$W$eO$Y$dO$a$jO~O!X$kO$UfO$d$lO$f$nO~Oi%QOk$rOl$qOm$qOs%ROu%SOw%TO|$yO!X$zO!c%YO!h$vO#c%ZO$Q%WO$m%UO$o%VO$r%XO't$pO'vTO'yUO'}%PO(R$sOd(OP~O!h%[O~O!a%^O~O^%_O'k%_O~O'u!iO~P%QO't%fO~O!h%[O't%fO'u!iO'}%PO~Ob%mO!h%[O't%fO~O#o$QO~Oy%rO!X%oO!h%qO%b%uO't%fO'u!iO'vTO'yUO](uP~O!t#pO~O|%wO!X%xO't%fO~O|%wO!X%xO%j%|O't%fO~O't%}O~O#p}O%b!OO%d|O%e|O%h!PO%j!QO%m!RO%n!RO~Oa&WOb&VO!t&TO%`&UO%r&SO~P;fOa&ZObwO!X&YO!tvO!x]O#p}O%`{O%d|O%e|O%h!PO%j!QO%m!RO%n!RO%p!SO~O_&^O#X&aO%b&[O'u!iO~P<eO!h&bO!q&fO~O!h#lO~O!XXO~O^%_O'j&nO'k%_O~O^%_O'j&qO'k%_O~O^%_O'j&sO'k%_O~O'iYX!SYXoYX!gYX&RYX!XYX%aYX!aYX~P(gO!['QO!]&yO!^&yO'u!iO'vTO'yUO~Ol&wO|&vO!U&zO(U&uO!W(YP!W(gP~P?fOg'TO!X'RO't%fO~Ob'YO!h%[O't%fO~Oy%rO!h%qO~Ol!kO|!lO!['_O!]'^O!^'^O!}'bO#O'aO#P'aO#Q'`O#T'dO#U'dO'u!iO'vTO'yUO(U!jO(`!nO~O!x<XO!|'cO~PAQO^%_O!a#sO!h%[O!l'jO#X'hO'k%_O'}%PO(a'fO~Ol!kO|!lO'vTO'yUO(U!jO(`!nO~O!]'^O!^'^O'u!iO~PBzO!['_O!]'^O!^'^O#T'dO#U'dO'u!iO~PBzO!XXO!['_O!]'^O!^'^O#Q'`O#T'dO#U'dO'u!iO~PBzO!['_O!]'^O!^'^O#O'aO#P'aO#Q'`O#T'dO#U'dO'u!iO~PBzO'p'nO'q'nO'r'pO~O[!{O'v'rO'w!{O'x'rO~O[#OO'x'rO'y'rO'z#OO~Oq#QO!O#RO(S#RO(T'vO~O!U'xO!S&}X!S'TX!V&}X!V'TX~P+sO!V'zO!S(XX~OP$ZOX$bOk$OOy#wOz#xO|#yO!V'zO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO#u$VO#v$WO(RVO(a$XO(h#zO(i#{O~O!S(XX~PGUO!S(PO~O!S(dX!V(dX!a(dX!g(dX(a(dX~O#X(dX#d#]X!W(dX~PI[O#X(QO!S(fX!V(fX~O!V(RO!S(eX~O!S(UO~O#X$cO~PI[O!W(VO~P`Oy#wOz#xO|#yO!f#uO!h#vO(RVOP!jaX!jak!ja!V!ja!e!ja!l!ja#g!ja#h!ja#i!ja#j!ja#k!ja#l!ja#m!ja#n!ja#o!ja#q!ja#s!ja#u!ja#v!ja(a!ja(h!ja(i!ja~O^!ja'k!ja'i!ja!S!ja!g!jao!ja!X!ja%a!ja!a!ja~PJrO!g(WO~O|%wO!X%xO!x]O#b(ZO#c(YO't%fO~O!a#sO#X([O(a'fO!V(cX^(cX'k(cX~O!g(cX~PMvO!V(_O!g(bX~O!g(aO~O|%wO!X%xO#c(YO't%fO~Oy(bOz(cO!f#uO!h#vO!x!wa|!wa~O!t!wa%`!wa!X!wa#b!wa#c!wa't!wa~P! OO!t(gO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't!bO'vTO'yUO(RVO(`[O(miO~Oi%QOk$rOl$qOm$qOs%ROu%SOw<qO|$yO!X$zO!c={O!h$vO#c<wO$Q%WO$m<sO$o<uO$r%XO't(kO'vTO'yUO'}%PO(R$sO~O#d(mO~Oi%QOk$rOl$qOm$qOs%ROu%SOw%TO|$yO!X$zO!c%YO!h$vO#c%ZO$Q%WO$m%UO$o%VO$r%XO't(kO'vTO'yUO'}%PO(R$sO~Od([P~P!%lO!U(qO!g(]P~P%QO(U(sO(`[O~O|(uO!h#vO(U(sO(`[O~OP<WOQ<WOa=wOb!fOikOk<WOlkOmkOskOu<WOw<WO|WO!QkO!RkO!X!cO!c<ZO!hZO!k<WO!l<WO!m<WO!o<[O!q<]O!t!eO$Q!hO$UfO't)TO'vTO'yUO(RVO(`[O(m=uO~Oz)WO!h#vO~O!V$_O^$ka'k$ka'i$ka!g$ka!S$ka!X$ka%a$ka!a$ka~O#p)[O~P!$SOy)_O!a)^O!X$XX$T$XX$W$XX$Y$XX$a$XX~O!a)^O!X(jX$T(jX$W(jX$Y(jX$a(jX~Oy)_O~P!+bOy)_O!X(jX$T(jX$W(jX$Y(jX$a(jX~O!X)aO$T)eO$W)`O$Y)`O$a)fO~O!U)iO~P!'xO$W$eO$Y$dO$a)mO~Og$sXy$sX|$sX!f$sX(h$sX(i$sX~OdfXd$sXgfX!VfX#XfX~P!-WOl)oO~Oq)pO(S)qO(T)sO~Og)|Oy)uO|)vO(h)xO(i)zO~Od)tO~P!.aOd)}O~Oi%QOk$rOl$qOm$qOs%ROu%SOw<qO|$yO!X$zO!c={O!h$vO#c<wO$Q%WO$m<sO$o<uO$r%XO'vTO'yUO'}%PO(R$sO~O!U*RO't*OO!g(nP~P!/OO#d*TO~O!h*UO~O!U*ZO't*WO!S(oP~P!/OOk*gO|*_O![*eO!]*^O!^*^O!h*UO#T*fO%W*aO'u!iO(U!jO~O!W*dO~P!1UO!f#uOg(QXy(QX|(QX(h(QX(i(QX!V(QX#X(QX~Od(QX#y(QX~P!1}Og*jO#X*iOd(PX!V(PX~O!V*kOd(OX~O't%}Od(OP~O!h*rO~O't(kO~O|%wO!U#gO!X%xO!x]O#b#jO#c#gO't%fO!g(bP~O!a#sO#d*vO~OP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO#u$VO#v$WO(RVO(a$XO(h#zO(i#{O~O^!ba!V!ba'k!ba'i!ba!S!ba!g!bao!ba!X!ba%a!ba!a!ba~P!4aOy#wOz#xO|#yO!f#uO!h#vO(RVOP!naX!nak!na!V!na!e!na!l!na#g!na#h!na#i!na#j!na#k!na#l!na#m!na#n!na#o!na#q!na#s!na#u!na#v!na(a!na(h!na(i!na~O^!na'k!na'i!na!S!na!g!nao!na!X!na%a!na!a!na~P!6zOy#wOz#xO|#yO!f#uO!h#vO(RVOP!paX!pak!pa!V!pa!e!pa!l!pa#g!pa#h!pa#i!pa#j!pa#k!pa#l!pa#m!pa#n!pa#o!pa#q!pa#s!pa#u!pa#v!pa(a!pa(h!pa(i!pa~O^!pa'k!pa'i!pa!S!pa!g!pao!pa!X!pa%a!pa!a!pa~P!9eOg+OO!X'RO%a*}O'}%PO~O!a+QO^'|X!X'|X'k'|X!V'|X~O^%_O!XXO'k%_O~O!h%[O'}%PO~O!h%[O't%fO'}%PO~O!a#sO#d(mO~O%b+^O't+YO'vTO'yUO!W(vP~O!V+_O](uX~O(U(sO~OX+cO~O]+dO~O!X%oO't%fO'u!iO](uP~O|%wO!U+hO!V(RO!X%xO't%fO!S(eP~Ol&}O|+jO!U+iO'vTO'yUO(U(sO~O!W(gP~P!?TO!V+kO^(rX'k(rX~O#X+oO'}%PO~Og+rO!X$zO'}%PO~O!X+tO~Oy+vO!XXO~O!t+{O~Ob,QO~O't#kO!W(tP~Ob%mO~O%b!OO't%}O~P<eOX,WO],VO~OPYOQYOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O$UfO%`{O'vTO'yUO(RVO(`[O(miO~O!X!cO$Q!hO't!bO~P!AhO],VO^%_O'k%_O~O^,[O#p,^O%d,^O%e,^O~P%QO!h&bO~O&T,cO~O!X,eO~O&f,gO&h,hOP&caQ&caV&ca^&caa&cab&cai&cak&cal&cam&cas&cau&caw&ca|&ca!Q&ca!R&ca!X&ca!c&ca!h&ca!k&ca!l&ca!m&ca!o&ca!q&ca!t&ca!x&ca#p&ca$Q&ca$U&ca%`&ca%b&ca%d&ca%e&ca%h&ca%j&ca%m&ca%n&ca%p&ca%}&ca&T&ca&V&ca&X&ca&Z&ca&^&ca&d&ca&j&ca&l&ca&n&ca&p&ca&r&ca'i&ca't&ca'v&ca'y&ca(R&ca(`&ca(m&ca!W&ca&[&ca_&ca&a&ca~O't,mO~O!V{X!V!_X!W{X!W!_X!a{X!a!_X!h!_X#X{X'}!_X~O!a,rO#X,qO!V#aX!V(ZX!W#aX!W(ZX!a(ZX!h(ZX'}(ZX~O!a,tO!h%[O'}%PO!V!ZX!W!ZX~Ol!kO|!lO'vTO'yUO(U!jO~OP<WOQ<WOa=wOb!fOikOk<WOlkOmkOskOu<WOw<WO|WO!QkO!RkO!X!cO!c<ZO!hZO!k<WO!l<WO!m<WO!o<[O!q<]O!t!eO$Q!hO$UfO'vTO'yUO(RVO(`[O(m=uO~O't<|O~P!J}O!V,xO!W(YX~O!W,zO~O!a,rO#X,qO!V#aX!W#aX~O!V,{O!W(gX~O!W,}O~O!]-OO!^-OO'u!iO~P!JlO!W-RO~P'TOg-UO!X'RO~O!S-ZO~Ol!wa![!wa!]!wa!^!wa!|!wa!}!wa#O!wa#P!wa#Q!wa#T!wa#U!wa'u!wa'v!wa'y!wa(U!wa(`!wa~P! OO^%_O!a#sO!h%[O!l-`O#X-^O'k%_O'}%PO(a'fO~O!]-bO!^-bO'u!iO~PBzO![-dO!]-bO!^-bO#T-eO#U-eO'u!iO~PBzO![-dO!]-bO!^-bO#Q-fO#T-eO#U-eO'u!iO~PBzO![-dO!]-bO!^-bO#O-gO#P-gO#Q-fO#T-eO#U-eO'u!iO~PBzO![-dO!]-bO!^-bO!}-hO#O-gO#P-gO#Q-fO#T-eO#U-eO'u!iO~PBzO^%_O#X-^O'k%_O~O^%_O!a#sO#X-^O'k%_O~O^%_O!a#sO!l-`O#X-^O'k%_O(a'fO~O'p'nO'q'nO'r-mO~Oo-nO~O!S&}a!V&}a~P!4aO!U-rO!S&}X!V&}X~P%QO!V'zO!S(Xa~O!S(Xa~PGUO!V(RO!S(ea~O|%wO!U-vO!X%xO't%fO!S'TX!V'TX~O!V(_O!g(ba~O|%wO!X%xO#c-yO't%fO~O#X-{O!V(ca!g(ca^(ca'k(ca~O!a#sO~P#(aO|%wO!U.OO!X%xO!x]O#b.QO#c.OO't%fO!V'VX!g'VX~Oz.UO!h#vO~Og.XO!X'RO%a.WO'}%PO~O^#[i!V#[i'k#[i'i#[i!S#[i!g#[io#[i!X#[i%a#[i!a#[i~P!4aOg>ROy)uO|)vO(h)xO(i)zO~O#d#Wa^#Wa#X#Wa'k#Wa!V#Wa!g#Wa!X#Wa!S#Wa~P#*rO#d(QXP(QXX(QX^(QXk(QXz(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX'k(QX(R(QX(a(QX!g(QX!S(QX'i(QXo(QX!X(QX%a(QX!a(QX~P!1}O!V.bOd([X~P!.aOd.dO~O!V.eO!g(]X~P!4aO!g.hO~O!S.jO~OP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO(RVOX#fi^#fik#fi!V#fi!e#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O#g#fi~P#.nO#g#|O~P#.nOP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O(RVOX#fi^#fi!V#fi!e#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~Ok#fi~P#1`Ok$OO~P#1`OP$ZOk$OOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO(RVO^#fi!V#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~OX#fi!e#fi#l#fi#m#fi#n#fi#o#fi~P#4QOX$bO!e$QO#l$QO#m$QO#n$aO#o$QO~P#4QOP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO(RVO^#fi!V#fi#s#fi#u#fi#v#fi'k#fi(a#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(h#fi~P#7RO(h#zO~P#7ROP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO(RVO(h#zO^#fi!V#fi#u#fi#v#fi'k#fi(a#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(i#fi~P#9sO(i#{O~P#9sOP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO#u$VO(RVO(h#zO(i#{O~O^#fi!V#fi#v#fi'k#fi(a#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~P#<eOPYXXYXkYXyYXzYX|YX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(aYX(hYX(iYX!VYX!WYX~O#yYX~P#?OOP$ZOX<oOk<cOy#wOz#xO|#yO!e<eO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO#k<dO#l<eO#m<eO#n<nO#o<eO#q<fO#s<hO#u<jO#v<kO(RVO(a$XO(h#zO(i#{O~O#y.lO~P#A]OP(WXX(WXk(WXy(WXz(WX|(WX!e(WX!f(WX!h(WX!l(WX#g(WX#h(WX#i(WX#j(WX#k(WX#l(WX#m(WX#n(WX#q(WX#s(WX#u(WX#v(WX(R(WX(a(WX(h(WX(i(WX!V(WX~O#X<pO#{<pO#o(WX#y(WX!W(WX~P#CZO^'Ya!V'Ya'k'Ya'i'Ya!g'Ya!S'Yao'Ya!X'Ya%a'Ya!a'Ya~P!4aOP#fiX#fi^#fik#fiz#fi!V#fi!e#fi!f#fi!h#fi!l#fi#g#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(R#fi(a#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~P#*rO^#zi!V#zi'k#zi'i#zi!S#zi!g#zio#zi!X#zi%a#zi!a#zi~P!4aO$W.qO$Y.qO~O$W.rO$Y.rO~O!a)^O#X.sO!X$^X$T$^X$W$^X$Y$^X$a$^X~O!U.tO~O!X)aO$T.vO$W)`O$Y)`O$a.wO~O!V<lO!W(VX~P#A]O!W.xO~O!a)^O$a(jX~O$a.zO~Oq)pO(S)qO(T.}O~Ol/QO!S/RO'vTO'yUO~O!VcX!acX!gcX!g$sX(acX~P!-WO!g/XO~P#*rO!V/YO!a#sO(a'fO!g(nX~O!g/_O~O!U*RO't%fO!g(nP~O#d/aO~O!S$sX!V$sX!a$zX~P!-WO!V/bO!S(oX~P#*rO!a/dO~O!S/fO~Ok/jO!a#sO!h%[O'}%PO(a'fO~O't/lO~O!a+QO~O^%_O!V/pO'k%_O~O!W/rO~P!1UO!]/sO!^/sO'u!iO(U!jO~O|/uO(U!jO~O#T/vO~O't%}Od'_X!V'_X~O!V*kOd(Oa~Od/{O~Oy/|Oz/|O|/}Ogva(hva(iva!Vva#Xva~Odva#yva~P$ tOy)uO|)vOg$la(h$la(i$la!V$la#X$la~Od$la#y$la~P$!jOy)uO|)vOg$na(h$na(i$na!V$na#X$na~Od$na#y$na~P$#]O#d0PO~Od$|a!V$|a#X$|a#y$|a~P!.aO#d0SO~Oy#wOz#xO|#yO!f#uO!h#vO(RVOP!niX!nik!ni!V!ni!e!ni!l!ni#g!ni#h!ni#i!ni#j!ni#k!ni#l!ni#m!ni#n!ni#o!ni#q!ni#s!ni#u!ni#v!ni(a!ni(h!ni(i!ni~O^!ni'k!ni'i!ni!S!ni!g!nio!ni!X!ni%a!ni!a!ni~P$$jOg.XO!X'RO%a.WO~Oi0ZO't0YO~P!/RO!a+QO^'|a!X'|a'k'|a!V'|a~O#d0aO~OXYX!VcX!WcX~O!V0bO!W(vX~O!W0dO~OX0eO~O't+YO'vTO'yUO~O!X%oO't%fO]'gX!V'gX~O!V+_O](ua~O!g0jO~P!4aOX0mO~O]0nO~O!V+kO^(ra'k(ra~O#X0tO~Og0wO!X$zO~O(U(sO!W(sP~Og1QO!X0}O%a1PO'}%PO~OX1[O!V1YO!W(tX~O!W1]O~O]1_O^%_O'k%_O~O't#kO'vTO'yUO~O#X$cO#o1bO#{$cO&R1cO^(WX~P#CZO#X$cO#o1bO&R1cO~O^1dO~P%QO^1fO~O&[1jOP&YiQ&YiV&Yi^&Yia&Yib&Yii&Yik&Yil&Yim&Yis&Yiu&Yiw&Yi|&Yi!Q&Yi!R&Yi!X&Yi!c&Yi!h&Yi!k&Yi!l&Yi!m&Yi!o&Yi!q&Yi!t&Yi!x&Yi#p&Yi$Q&Yi$U&Yi%`&Yi%b&Yi%d&Yi%e&Yi%h&Yi%j&Yi%m&Yi%n&Yi%p&Yi%}&Yi&T&Yi&V&Yi&X&Yi&Z&Yi&^&Yi&d&Yi&j&Yi&l&Yi&n&Yi&p&Yi&r&Yi'i&Yi't&Yi'v&Yi'y&Yi(R&Yi(`&Yi(m&Yi!W&Yi_&Yi&a&Yi~O_1pO!W1nO&a1oO~P`O!XXO!h1rO~O&h,hOP&ciQ&ciV&ci^&cia&cib&cii&cik&cil&cim&cis&ciu&ciw&ci|&ci!Q&ci!R&ci!X&ci!c&ci!h&ci!k&ci!l&ci!m&ci!o&ci!q&ci!t&ci!x&ci#p&ci$Q&ci$U&ci%`&ci%b&ci%d&ci%e&ci%h&ci%j&ci%m&ci%n&ci%p&ci%}&ci&T&ci&V&ci&X&ci&Z&ci&^&ci&d&ci&j&ci&l&ci&n&ci&p&ci&r&ci'i&ci't&ci'v&ci'y&ci(R&ci(`&ci(m&ci!W&ci&[&ci_&ci&a&ci~O!S1xO~O!V!Za!W!Za~P#A]Ol!kO|!lO!U2OO(U!jO!V'OX!W'OX~P?fO!V,xO!W(Ya~O!V'UX!W'UX~P!?TO!V,{O!W(ga~O!W2VO~P'TO^%_O#X2`O'k%_O~O^%_O!a#sO#X2`O'k%_O~O^%_O!a#sO!h%[O!l2dO#X2`O'k%_O'}%PO(a'fO~O!]2eO!^2eO'u!iO~PBzO![2hO!]2eO!^2eO#T2iO#U2iO'u!iO~PBzO![2hO!]2eO!^2eO#Q2jO#T2iO#U2iO'u!iO~PBzO![2hO!]2eO!^2eO#O2kO#P2kO#Q2jO#T2iO#U2iO'u!iO~PBzO^%_O!a#sO!l2dO#X2`O'k%_O(a'fO~O^%_O'k%_O~P!4aO!V$_Oo$ka~O!S&}i!V&}i~P!4aO!V'zO!S(Xi~O!V(RO!S(ei~O!S(fi!V(fi~P!4aO!V(_O!g(bi~O!V(ci!g(ci^(ci'k(ci~P!4aO#X2oO!V(ci!g(ci^(ci'k(ci~O|%wO!X%xO!x]O#b2rO#c2qO't%fO~O|%wO!X%xO#c2qO't%fO~Og2yO!X'RO%a2xO~Og2yO!X'RO%a2xO'}%PO~O#dvaPvaXva^vakva!eva!fva!hva!lva#gva#hva#iva#jva#kva#lva#mva#nva#ova#qva#sva#uva#vva'kva(Rva(ava!gva!Sva'ivaova!Xva%ava!ava~P$ tO#d$laP$laX$la^$lak$laz$la!e$la!f$la!h$la!l$la#g$la#h$la#i$la#j$la#k$la#l$la#m$la#n$la#o$la#q$la#s$la#u$la#v$la'k$la(R$la(a$la!g$la!S$la'i$lao$la!X$la%a$la!a$la~P$!jO#d$naP$naX$na^$nak$naz$na!e$na!f$na!h$na!l$na#g$na#h$na#i$na#j$na#k$na#l$na#m$na#n$na#o$na#q$na#s$na#u$na#v$na'k$na(R$na(a$na!g$na!S$na'i$nao$na!X$na%a$na!a$na~P$#]O#d$|aP$|aX$|a^$|ak$|az$|a!V$|a!e$|a!f$|a!h$|a!l$|a#g$|a#h$|a#i$|a#j$|a#k$|a#l$|a#m$|a#n$|a#o$|a#q$|a#s$|a#u$|a#v$|a'k$|a(R$|a(a$|a!g$|a!S$|a'i$|a#X$|ao$|a!X$|a%a$|a!a$|a~P#*rO^#[q!V#[q'k#[q'i#[q!S#[q!g#[qo#[q!X#[q%a#[q!a#[q~P!4aOd'PX!V'PX~P!%lO!V.bOd([a~O!U3RO!V'QX!g'QX~P%QO!V.eO!g(]a~O!V.eO!g(]a~P!4aO!S3UO~O#y!ja!W!ja~PJrO#y!ba!V!ba!W!ba~P#A]O#y!na!W!na~P!6zO#y!pa!W!pa~P!9eO!X3hO$UfO$_3iO~O!W3mO~Oo3nO~P#*rO^$hq!V$hq'k$hq'i$hq!S$hq!g$hqo$hq!X$hq%a$hq!a$hq~P!4aO!S3oO~Ol/QO'vTO'yUO~Oy)uO|)vO(i)zOg%Xi(h%Xi!V%Xi#X%Xi~Od%Xi#y%Xi~P$JzOy)uO|)vOg%Zi(h%Zi(i%Zi!V%Zi#X%Zi~Od%Zi#y%Zi~P$KmO(a$XO~P#*rO!U3rO't%fO!V'ZX!g'ZX~O!V/YO!g(na~O!V/YO!a#sO!g(na~O!V/YO!a#sO(a'fO!g(na~Od$ui!V$ui#X$ui#y$ui~P!.aO!U3zO't*WO!S']X!V']X~P!/OO!V/bO!S(oa~O!V/bO!S(oa~P#*rO!a#sO~O!a#sO#o4SO~Ok4VO!a#sO(a'fO~Od(Pi!V(Pi~P!.aO#X4YOd(Pi!V(Pi~P!.aO!g4]O~O^$iq!V$iq'k$iq'i$iq!S$iq!g$iqo$iq!X$iq%a$iq!a$iq~P!4aO!V4aO!X(pX~P#*rO!f#uO~P3}O^$sX!X$sX%UYX'k$sX!V$sX~P!-WO%U4cO^hXghXyhX|hX!XhX'khX(hhX(ihX!VhX~O%U4cO~O%b4jO't+YO'vTO'yUO!V'fX!W'fX~O!V0bO!W(va~OX4nO~O]4oO~O!S4sO~O^%_O'k%_O~P#*rO!X$zO~P#*rO!V4xO#X4zO!W(sX~O!W4{O~Ol!kO|4}O![5]O!]5RO!^5RO!x<XO!|5[O!}5ZO#O5YO#P5YO#Q5XO#T5WO#U!xO'u!iO'vTO'yUO(U!jO(`!nO~O!W5VO~P%%qOg5bO!X0}O%a5aO~Og5bO!X0}O%a5aO'}%PO~O't#kO!V'eX!W'eX~O!V1YO!W(ta~O'vTO'yUO(U5kO~O]5oO~O!g5rO~P%QO^5tO~O^5tO~P%QO#o5vO&R5wO~PMvO_1pO!W5{O&a1oO~P`O!a5}O~O!a6PO!V(Zi!W(Zi!a(Zi!h(Zi'}(Zi~O!V#ai!W#ai~P#A]O#X6QO!V#ai!W#ai~O!V!Zi!W!Zi~P#A]O^%_O#X6ZO'k%_O~O^%_O!a#sO#X6ZO'k%_O~O^%_O!a#sO!l6`O#X6ZO'k%_O(a'fO~O!h%[O'}%PO~P%+RO!]6aO!^6aO'u!iO~PBzO![6dO!]6aO!^6aO#T6eO#U6eO'u!iO~PBzO![6dO!]6aO!^6aO#Q6fO#T6eO#U6eO'u!iO~PBzO!V(_O!g(bq~O!V(cq!g(cq^(cq'k(cq~P!4aO|%wO!X%xO#c6jO't%fO~O!X'RO%a6mO~Og6pO!X'RO%a6mO~O#d%XiP%XiX%Xi^%Xik%Xiz%Xi!e%Xi!f%Xi!h%Xi!l%Xi#g%Xi#h%Xi#i%Xi#j%Xi#k%Xi#l%Xi#m%Xi#n%Xi#o%Xi#q%Xi#s%Xi#u%Xi#v%Xi'k%Xi(R%Xi(a%Xi!g%Xi!S%Xi'i%Xio%Xi!X%Xi%a%Xi!a%Xi~P$JzO#d%ZiP%ZiX%Zi^%Zik%Ziz%Zi!e%Zi!f%Zi!h%Zi!l%Zi#g%Zi#h%Zi#i%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#q%Zi#s%Zi#u%Zi#v%Zi'k%Zi(R%Zi(a%Zi!g%Zi!S%Zi'i%Zio%Zi!X%Zi%a%Zi!a%Zi~P$KmO#d$uiP$uiX$ui^$uik$uiz$ui!V$ui!e$ui!f$ui!h$ui!l$ui#g$ui#h$ui#i$ui#j$ui#k$ui#l$ui#m$ui#n$ui#o$ui#q$ui#s$ui#u$ui#v$ui'k$ui(R$ui(a$ui!g$ui!S$ui'i$ui#X$uio$ui!X$ui%a$ui!a$ui~P#*rOd'Pa!V'Pa~P!.aO!V'Qa!g'Qa~P!4aO!V.eO!g(]i~O#y#[i!V#[i!W#[i~P#A]OP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO(RVOX#fik#fi!e#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(a#fi(h#fi(i#fi!V#fi!W#fi~O#g#fi~P%6OO#g<aO~P%6OOP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO(RVOX#fi!e#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(a#fi(h#fi(i#fi!V#fi!W#fi~Ok#fi~P%8ZOk<cO~P%8ZOP$ZOk<cOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO#k<dO(RVO#q#fi#s#fi#u#fi#v#fi#y#fi(a#fi(h#fi(i#fi!V#fi!W#fi~OX#fi!e#fi#l#fi#m#fi#n#fi#o#fi~P%:fOX<oO!e<eO#l<eO#m<eO#n<nO#o<eO~P%:fOP$ZOX<oOk<cOy#wOz#xO|#yO!e<eO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO#k<dO#l<eO#m<eO#n<nO#o<eO#q<fO(RVO#s#fi#u#fi#v#fi#y#fi(a#fi(i#fi!V#fi!W#fi~O(h#fi~P%=QO(h#zO~P%=QOP$ZOX<oOk<cOy#wOz#xO|#yO!e<eO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO#k<dO#l<eO#m<eO#n<nO#o<eO#q<fO#s<hO(RVO(h#zO#u#fi#v#fi#y#fi(a#fi!V#fi!W#fi~O(i#fi~P%?]O(i#{O~P%?]OP$ZOX<oOk<cOy#wOz#xO|#yO!e<eO!f#uO!h#vO!l$ZO#g<aO#h<bO#i<bO#j<bO#k<dO#l<eO#m<eO#n<nO#o<eO#q<fO#s<hO#u<jO(RVO(h#zO(i#{O~O#v#fi#y#fi(a#fi!V#fi!W#fi~P%AhO^#wy!V#wy'k#wy'i#wy!S#wy!g#wyo#wy!X#wy%a#wy!a#wy~P!4aOg>SOy)uO|)vO(h)xO(i)zO~OP#fiX#fik#fiz#fi!e#fi!f#fi!h#fi!l#fi#g#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(R#fi(a#fi!V#fi!W#fi~P%D`O!f#uOP(QXX(QXg(QXk(QXy(QXz(QX|(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX#y(QX(R(QX(a(QX(h(QX(i(QX!V(QX!W(QX~O#y#zi!V#zi!W#zi~P#A]O#y!ni!W!ni~P$$jO!W6|O~O!V'Ya!W'Ya~P#A]O!a#sO(a'fO!V'Za!g'Za~O!V/YO!g(ni~O!V/YO!a#sO!g(ni~Od$uq!V$uq#X$uq#y$uq~P!.aO!S']a!V']a~P#*rO!a7TO~O!V/bO!S(oi~P#*rO!V/bO!S(oi~O!S7XO~O!a#sO#o7^O~Ok7_O!a#sO(a'fO~O!S7aO~Od$wq!V$wq#X$wq#y$wq~P!.aO^$iy!V$iy'k$iy'i$iy!S$iy!g$iyo$iy!X$iy%a$iy!a$iy~P!4aO!V4aO!X(pa~O^#[y!V#[y'k#[y'i#[y!S#[y!g#[yo#[y!X#[y%a#[y!a#[y~P!4aOX7fO~O!V0bO!W(vi~O]7lO~O!a6PO~O(U(sO!V'bX!W'bX~O!V4xO!W(sa~O!h%[O'}%PO^(ZX!a(ZX!l(ZX#X(ZX'k(ZX(a(ZX~O't7uO~P._O!x<XO!|7yO!}7xO#O7wO#P7wO#Q7vO#T'dO#U'dO~PBzO^%_O!a#sO!l'jO#X'hO'k%_O(a'fO~O!W7}O~P%%qOl!kO'vTO'yUO(U!jO(`!nO~O|8OO~P&!mO![8SO!]8RO!^8RO#Q7vO#T'dO#U'dO'u!iO~PBzO![8SO!]8RO!^8RO#O8TO#P8TO#Q7vO#T'dO#U'dO'u!iO~PBzO!]8RO!^8RO'u!iO(U!jO(`!nO~O!X0}O~O!X0}O%a8VO~Og8YO!X0}O%a8VO~OX8_O!V'ea!W'ea~O!V1YO!W(ti~O!g8cO~O!g8dO~O!g8eO~O!g8eO~P%QO^8gO~O!a8jO~O!g8kO~O!V(fi!W(fi~P#A]O^%_O#X8sO'k%_O~O^%_O!a#sO#X8sO'k%_O~O^%_O!a#sO!l8wO#X8sO'k%_O(a'fO~O!h%[O'}%PO~P&'ZO!]8xO!^8xO'u!iO~PBzO![8{O!]8xO!^8xO#T8|O#U8|O'u!iO~PBzO!V(_O!g(by~O!V(cy!g(cy^(cy'k(cy~P!4aO!X'RO%a9PO~O#d$uqP$uqX$uq^$uqk$uqz$uq!V$uq!e$uq!f$uq!h$uq!l$uq#g$uq#h$uq#i$uq#j$uq#k$uq#l$uq#m$uq#n$uq#o$uq#q$uq#s$uq#u$uq#v$uq'k$uq(R$uq(a$uq!g$uq!S$uq'i$uq#X$uqo$uq!X$uq%a$uq!a$uq~P#*rO#d$wqP$wqX$wq^$wqk$wqz$wq!V$wq!e$wq!f$wq!h$wq!l$wq#g$wq#h$wq#i$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#q$wq#s$wq#u$wq#v$wq'k$wq(R$wq(a$wq!g$wq!S$wq'i$wq#X$wqo$wq!X$wq%a$wq!a$wq~P#*rO!V'Qi!g'Qi~P!4aO#y#[q!V#[q!W#[q~P#A]Oy/|Oz/|O|/}OPvaXvagvakva!eva!fva!hva!lva#gva#hva#iva#jva#kva#lva#mva#nva#ova#qva#sva#uva#vva#yva(Rva(ava(hva(iva!Vva!Wva~Oy)uO|)vOP$laX$lag$lak$laz$la!e$la!f$la!h$la!l$la#g$la#h$la#i$la#j$la#k$la#l$la#m$la#n$la#o$la#q$la#s$la#u$la#v$la#y$la(R$la(a$la(h$la(i$la!V$la!W$la~Oy)uO|)vOP$naX$nag$nak$naz$na!e$na!f$na!h$na!l$na#g$na#h$na#i$na#j$na#k$na#l$na#m$na#n$na#o$na#q$na#s$na#u$na#v$na#y$na(R$na(a$na(h$na(i$na!V$na!W$na~OP$|aX$|ak$|az$|a!e$|a!f$|a!h$|a!l$|a#g$|a#h$|a#i$|a#j$|a#k$|a#l$|a#m$|a#n$|a#o$|a#q$|a#s$|a#u$|a#v$|a#y$|a(R$|a(a$|a!V$|a!W$|a~P%D`O#y$hq!V$hq!W$hq~P#A]O#y$iq!V$iq!W$iq~P#A]O!W9ZO~O#y9[O~P!.aO!a#sO!V'Zi!g'Zi~O!a#sO(a'fO!V'Zi!g'Zi~O!V/YO!g(nq~O!S']i!V']i~P#*rO!V/bO!S(oq~O!S9bO~P#*rO!S9bO~Od(Py!V(Py~P!.aO!V'`a!X'`a~P#*rO^%Tq!X%Tq'k%Tq!V%Tq~P#*rOX9gO~O!V0bO!W(vq~O#X9kO!V'ba!W'ba~O!V4xO!W(si~P#A]O^%_O!a+QO'k%_O~OPYXXYXkYXyYXzYX|YX!SYX!VYX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(aYX(hYX(iYX~O!a%RX#o%RX~P&:hO#T-eO#U-eO~PBzO#Q9pO#T-eO#U-eO~PBzO#O9qO#P9qO#Q9pO#T-eO#U-eO~PBzO!}9rO#O9qO#P9qO#Q9pO#T-eO#U-eO~PBzO!]9uO!^9uO'u!iO(U!jO(`!nO~O![9xO!]9uO!^9uO#Q9pO#T-eO#U-eO'u!iO~PBzO!X0}O%a9{O~O'vTO'yUO(U:QO~O!V1YO!W(tq~O!g:TO~O!g:TO~P%QO!g:VO~O!g:WO~O#X:YO!V#ay!W#ay~O!V#ay!W#ay~P#A]O^%_O#X:^O'k%_O~O^%_O!a#sO#X:^O'k%_O~O^%_O!a#sO!l:bO#X:^O'k%_O(a'fO~O!h%[O'}%PO~P&AZO!]:cO!^:cO'u!iO~PBzO!X'RO%a:gO~O#y#wy!V#wy!W#wy~P#A]OP$uiX$uik$uiz$ui!e$ui!f$ui!h$ui!l$ui#g$ui#h$ui#i$ui#j$ui#k$ui#l$ui#m$ui#n$ui#o$ui#q$ui#s$ui#u$ui#v$ui#y$ui(R$ui(a$ui!V$ui!W$ui~P%D`Oy)uO|)vO(i)zOP%XiX%Xig%Xik%Xiz%Xi!e%Xi!f%Xi!h%Xi!l%Xi#g%Xi#h%Xi#i%Xi#j%Xi#k%Xi#l%Xi#m%Xi#n%Xi#o%Xi#q%Xi#s%Xi#u%Xi#v%Xi#y%Xi(R%Xi(a%Xi(h%Xi!V%Xi!W%Xi~Oy)uO|)vOP%ZiX%Zig%Zik%Ziz%Zi!e%Zi!f%Zi!h%Zi!l%Zi#g%Zi#h%Zi#i%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#q%Zi#s%Zi#u%Zi#v%Zi#y%Zi(R%Zi(a%Zi(h%Zi(i%Zi!V%Zi!W%Zi~O#y$iy!V$iy!W$iy~P#A]O#y#[y!V#[y!W#[y~P#A]O!a#sO!V'Zq!g'Zq~O!V/YO!g(ny~O!S']q!V']q~P#*rO!S:nO~P#*rO!V0bO!W(vy~O!V4xO!W(sq~O#T2iO#U2iO~PBzO#Q:uO#T2iO#U2iO~PBzO#O:vO#P:vO#Q:uO#T2iO#U2iO~PBzO!]:zO!^:zO'u!iO(U!jO(`!nO~O!X0}O%a:}O~O!g;QO~O^%_O#X;VO'k%_O~O^%_O!a#sO#X;VO'k%_O~O^%_O!a#sO!l;ZO#X;VO'k%_O(a'fO~O!X'RO%a;^O~OP$uqX$uqk$uqz$uq!e$uq!f$uq!h$uq!l$uq#g$uq#h$uq#i$uq#j$uq#k$uq#l$uq#m$uq#n$uq#o$uq#q$uq#s$uq#u$uq#v$uq#y$uq(R$uq(a$uq!V$uq!W$uq~P%D`OP$wqX$wqk$wqz$wq!e$wq!f$wq!h$wq!l$wq#g$wq#h$wq#i$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#q$wq#s$wq#u$wq#v$wq#y$wq(R$wq(a$wq!V$wq!W$wq~P%D`Od%]!Z!V%]!Z#X%]!Z#y%]!Z~P!.aO!V'bq!W'bq~P#A]O#T6eO#U6eO~PBzO#Q;bO#T6eO#U6eO~PBzO!V#a!Z!W#a!Z~P#A]O^%_O#X;mO'k%_O~O^%_O!a#sO#X;mO'k%_O~O#d%]!ZP%]!ZX%]!Z^%]!Zk%]!Zz%]!Z!V%]!Z!e%]!Z!f%]!Z!h%]!Z!l%]!Z#g%]!Z#h%]!Z#i%]!Z#j%]!Z#k%]!Z#l%]!Z#m%]!Z#n%]!Z#o%]!Z#q%]!Z#s%]!Z#u%]!Z#v%]!Z'k%]!Z(R%]!Z(a%]!Z!g%]!Z!S%]!Z'i%]!Z#X%]!Zo%]!Z!X%]!Z%a%]!Z!a%]!Z~P#*rO#T8|O#U8|O~PBzO^%_O#X;zO'k%_O~OP%]!ZX%]!Zk%]!Zz%]!Z!e%]!Z!f%]!Z!h%]!Z!l%]!Z#g%]!Z#h%]!Z#i%]!Z#j%]!Z#k%]!Z#l%]!Z#m%]!Z#n%]!Z#o%]!Z#q%]!Z#s%]!Z#u%]!Z#v%]!Z#y%]!Z(R%]!Z(a%]!Z!V%]!Z!W%]!Z~P%D`Oo(VX~P1gO'u!iO~P!'xO!ScX!VcX#XcX~P&:hOPYXXYXkYXyYXzYX|YX!VYX!VcX!eYX!fYX!hYX!lYX#XYX#XcX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(aYX(hYX(iYX~O!acX!gYX!gcX(acX~P')iOP<WOQ<WOa=wOb!fOikOk<WOlkOmkOskOu<WOw<WO|WO!QkO!RkO!XXO!c<ZO!hZO!k<WO!l<WO!m<WO!o<[O!q<]O!t!eO$Q!hO$UfO't)TO'vTO'yUO(RVO(`[O(m=uO~O!V<lO!W$ka~Oi%QOk$rOl$qOm$qOs%ROu%SOw<rO|$yO!X$zO!c=|O!h$vO#c<xO$Q%WO$m<tO$o<vO$r%XO't(kO'vTO'yUO'}%PO(R$sO~O#p)[O~P'._O!WYX!WcX~P')iO#d<`O~O!a#sO#d<`O~O#X<pO~O#o<eO~O#X<zO!V(fX!W(fX~O#X<pO!V(dX!W(dX~O#d<{O~Od<}O~P!.aO#d=SO~O#d=TO~O!a#sO#d=UO~O!a#sO#d<{O~O#y=VO~P#A]O#d=WO~O#d=XO~O#d=YO~O#d=ZO~O#d=[O~O#d=]O~O#y=^O~P!.aO#y=_O~P!.aO$U~!f!|!}#P#Q#T#b#c#n(m$m$o$r%U%`%a%b%h%j%m%n%p%r~'oR$U(m#h!R'm'u#il#g#jky'n(U'n't$W$Y$W~",
|
|
@@ -3791,7 +4516,7 @@ parser](https://github.com/lezer-parser/javascript), extended with
|
|
|
3791
4516
|
highlighting and indentation information.
|
|
3792
4517
|
*/
|
|
3793
4518
|
const javascriptLanguage = /*@__PURE__*/LRLanguage.define({
|
|
3794
|
-
parser: /*@__PURE__*/parser.configure({
|
|
4519
|
+
parser: /*@__PURE__*/parser$2.configure({
|
|
3795
4520
|
props: [/*@__PURE__*/indentNodeProp.add({
|
|
3796
4521
|
IfStatement: /*@__PURE__*/continuedIndent({
|
|
3797
4522
|
except: /^\s*({|else\b)/
|
|
@@ -3883,9 +4608,9 @@ function javascript() {
|
|
|
3883
4608
|
autocomplete: ifNotIn(dontComplete, completeFromList(snippets.concat(keywords)))
|
|
3884
4609
|
}), javascriptLanguage.data.of({
|
|
3885
4610
|
autocomplete: localCompletionSource
|
|
3886
|
-
}), config.jsx ? autoCloseTags : []]);
|
|
4611
|
+
}), config.jsx ? autoCloseTags$1 : []]);
|
|
3887
4612
|
}
|
|
3888
|
-
function elementName(doc, tree) {
|
|
4613
|
+
function elementName$1(doc, tree) {
|
|
3889
4614
|
let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : doc.length;
|
|
3890
4615
|
if (!tree) return "";
|
|
3891
4616
|
let name = tree.getChild("JSXIdentifier");
|
|
@@ -3896,7 +4621,7 @@ const android = typeof navigator == "object" && /*@__PURE__*/ /Android\b/.test(n
|
|
|
3896
4621
|
Extension that will automatically insert JSX close tags when a `>` or
|
|
3897
4622
|
`/` is typed.
|
|
3898
4623
|
*/
|
|
3899
|
-
const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
4624
|
+
const autoCloseTags$1 = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
3900
4625
|
if ((android ? view.composing : view.compositionStarted) || view.state.readOnly || from != to || text != ">" && text != "/" || !javascriptLanguage.isActiveAt(view.state, from, -1)) return false;
|
|
3901
4626
|
let {
|
|
3902
4627
|
state
|
|
@@ -3918,7 +4643,7 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3918
4643
|
}
|
|
3919
4644
|
};
|
|
3920
4645
|
} else if (text == ">" && around.name == "JSXIdentifier") {
|
|
3921
|
-
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 {
|
|
4646
|
+
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 {
|
|
3922
4647
|
range: EditorSelection.cursor(head + 1),
|
|
3923
4648
|
changes: {
|
|
3924
4649
|
from: head,
|
|
@@ -3928,7 +4653,7 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3928
4653
|
} else if (text == "/" && around.name == "JSXFragmentTag") {
|
|
3929
4654
|
let empty = around.parent,
|
|
3930
4655
|
base = empty === null || empty === void 0 ? void 0 : empty.parent;
|
|
3931
|
-
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))) {
|
|
4656
|
+
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))) {
|
|
3932
4657
|
let insert = `/${name}>`;
|
|
3933
4658
|
return {
|
|
3934
4659
|
range: EditorSelection.cursor(head + insert.length),
|
|
@@ -3951,4 +4676,3215 @@ const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, t
|
|
|
3951
4676
|
return true;
|
|
3952
4677
|
});
|
|
3953
4678
|
|
|
3954
|
-
|
|
4679
|
+
const Targets = ["_blank", "_self", "_top", "_parent"];
|
|
4680
|
+
const Charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"];
|
|
4681
|
+
const Methods = ["get", "post", "put", "delete"];
|
|
4682
|
+
const Encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"];
|
|
4683
|
+
const Bool = ["true", "false"];
|
|
4684
|
+
const S = {}; // Empty tag spec
|
|
4685
|
+
const Tags = {
|
|
4686
|
+
a: {
|
|
4687
|
+
attrs: {
|
|
4688
|
+
href: null,
|
|
4689
|
+
ping: null,
|
|
4690
|
+
type: null,
|
|
4691
|
+
media: null,
|
|
4692
|
+
target: Targets,
|
|
4693
|
+
hreflang: null
|
|
4694
|
+
}
|
|
4695
|
+
},
|
|
4696
|
+
abbr: S,
|
|
4697
|
+
acronym: S,
|
|
4698
|
+
address: S,
|
|
4699
|
+
applet: S,
|
|
4700
|
+
area: {
|
|
4701
|
+
attrs: {
|
|
4702
|
+
alt: null,
|
|
4703
|
+
coords: null,
|
|
4704
|
+
href: null,
|
|
4705
|
+
target: null,
|
|
4706
|
+
ping: null,
|
|
4707
|
+
media: null,
|
|
4708
|
+
hreflang: null,
|
|
4709
|
+
type: null,
|
|
4710
|
+
shape: ["default", "rect", "circle", "poly"]
|
|
4711
|
+
}
|
|
4712
|
+
},
|
|
4713
|
+
article: S,
|
|
4714
|
+
aside: S,
|
|
4715
|
+
audio: {
|
|
4716
|
+
attrs: {
|
|
4717
|
+
src: null,
|
|
4718
|
+
mediagroup: null,
|
|
4719
|
+
crossorigin: ["anonymous", "use-credentials"],
|
|
4720
|
+
preload: ["none", "metadata", "auto"],
|
|
4721
|
+
autoplay: ["autoplay"],
|
|
4722
|
+
loop: ["loop"],
|
|
4723
|
+
controls: ["controls"]
|
|
4724
|
+
}
|
|
4725
|
+
},
|
|
4726
|
+
b: S,
|
|
4727
|
+
base: {
|
|
4728
|
+
attrs: {
|
|
4729
|
+
href: null,
|
|
4730
|
+
target: Targets
|
|
4731
|
+
}
|
|
4732
|
+
},
|
|
4733
|
+
basefont: S,
|
|
4734
|
+
bdi: S,
|
|
4735
|
+
bdo: S,
|
|
4736
|
+
big: S,
|
|
4737
|
+
blockquote: {
|
|
4738
|
+
attrs: {
|
|
4739
|
+
cite: null
|
|
4740
|
+
}
|
|
4741
|
+
},
|
|
4742
|
+
body: S,
|
|
4743
|
+
br: S,
|
|
4744
|
+
button: {
|
|
4745
|
+
attrs: {
|
|
4746
|
+
form: null,
|
|
4747
|
+
formaction: null,
|
|
4748
|
+
name: null,
|
|
4749
|
+
value: null,
|
|
4750
|
+
autofocus: ["autofocus"],
|
|
4751
|
+
disabled: ["autofocus"],
|
|
4752
|
+
formenctype: Encs,
|
|
4753
|
+
formmethod: Methods,
|
|
4754
|
+
formnovalidate: ["novalidate"],
|
|
4755
|
+
formtarget: Targets,
|
|
4756
|
+
type: ["submit", "reset", "button"]
|
|
4757
|
+
}
|
|
4758
|
+
},
|
|
4759
|
+
canvas: {
|
|
4760
|
+
attrs: {
|
|
4761
|
+
width: null,
|
|
4762
|
+
height: null
|
|
4763
|
+
}
|
|
4764
|
+
},
|
|
4765
|
+
caption: S,
|
|
4766
|
+
center: S,
|
|
4767
|
+
cite: S,
|
|
4768
|
+
code: S,
|
|
4769
|
+
col: {
|
|
4770
|
+
attrs: {
|
|
4771
|
+
span: null
|
|
4772
|
+
}
|
|
4773
|
+
},
|
|
4774
|
+
colgroup: {
|
|
4775
|
+
attrs: {
|
|
4776
|
+
span: null
|
|
4777
|
+
}
|
|
4778
|
+
},
|
|
4779
|
+
command: {
|
|
4780
|
+
attrs: {
|
|
4781
|
+
type: ["command", "checkbox", "radio"],
|
|
4782
|
+
label: null,
|
|
4783
|
+
icon: null,
|
|
4784
|
+
radiogroup: null,
|
|
4785
|
+
command: null,
|
|
4786
|
+
title: null,
|
|
4787
|
+
disabled: ["disabled"],
|
|
4788
|
+
checked: ["checked"]
|
|
4789
|
+
}
|
|
4790
|
+
},
|
|
4791
|
+
data: {
|
|
4792
|
+
attrs: {
|
|
4793
|
+
value: null
|
|
4794
|
+
}
|
|
4795
|
+
},
|
|
4796
|
+
datagrid: {
|
|
4797
|
+
attrs: {
|
|
4798
|
+
disabled: ["disabled"],
|
|
4799
|
+
multiple: ["multiple"]
|
|
4800
|
+
}
|
|
4801
|
+
},
|
|
4802
|
+
datalist: {
|
|
4803
|
+
attrs: {
|
|
4804
|
+
data: null
|
|
4805
|
+
}
|
|
4806
|
+
},
|
|
4807
|
+
dd: S,
|
|
4808
|
+
del: {
|
|
4809
|
+
attrs: {
|
|
4810
|
+
cite: null,
|
|
4811
|
+
datetime: null
|
|
4812
|
+
}
|
|
4813
|
+
},
|
|
4814
|
+
details: {
|
|
4815
|
+
attrs: {
|
|
4816
|
+
open: ["open"]
|
|
4817
|
+
}
|
|
4818
|
+
},
|
|
4819
|
+
dfn: S,
|
|
4820
|
+
dir: S,
|
|
4821
|
+
div: S,
|
|
4822
|
+
dl: S,
|
|
4823
|
+
dt: S,
|
|
4824
|
+
em: S,
|
|
4825
|
+
embed: {
|
|
4826
|
+
attrs: {
|
|
4827
|
+
src: null,
|
|
4828
|
+
type: null,
|
|
4829
|
+
width: null,
|
|
4830
|
+
height: null
|
|
4831
|
+
}
|
|
4832
|
+
},
|
|
4833
|
+
eventsource: {
|
|
4834
|
+
attrs: {
|
|
4835
|
+
src: null
|
|
4836
|
+
}
|
|
4837
|
+
},
|
|
4838
|
+
fieldset: {
|
|
4839
|
+
attrs: {
|
|
4840
|
+
disabled: ["disabled"],
|
|
4841
|
+
form: null,
|
|
4842
|
+
name: null
|
|
4843
|
+
}
|
|
4844
|
+
},
|
|
4845
|
+
figcaption: S,
|
|
4846
|
+
figure: S,
|
|
4847
|
+
font: S,
|
|
4848
|
+
footer: S,
|
|
4849
|
+
form: {
|
|
4850
|
+
attrs: {
|
|
4851
|
+
action: null,
|
|
4852
|
+
name: null,
|
|
4853
|
+
"accept-charset": Charsets,
|
|
4854
|
+
autocomplete: ["on", "off"],
|
|
4855
|
+
enctype: Encs,
|
|
4856
|
+
method: Methods,
|
|
4857
|
+
novalidate: ["novalidate"],
|
|
4858
|
+
target: Targets
|
|
4859
|
+
}
|
|
4860
|
+
},
|
|
4861
|
+
frame: S,
|
|
4862
|
+
frameset: S,
|
|
4863
|
+
h1: S,
|
|
4864
|
+
h2: S,
|
|
4865
|
+
h3: S,
|
|
4866
|
+
h4: S,
|
|
4867
|
+
h5: S,
|
|
4868
|
+
h6: S,
|
|
4869
|
+
head: {
|
|
4870
|
+
children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"]
|
|
4871
|
+
},
|
|
4872
|
+
header: S,
|
|
4873
|
+
hgroup: S,
|
|
4874
|
+
hr: S,
|
|
4875
|
+
html: {
|
|
4876
|
+
attrs: {
|
|
4877
|
+
manifest: null
|
|
4878
|
+
}
|
|
4879
|
+
},
|
|
4880
|
+
i: S,
|
|
4881
|
+
iframe: {
|
|
4882
|
+
attrs: {
|
|
4883
|
+
src: null,
|
|
4884
|
+
srcdoc: null,
|
|
4885
|
+
name: null,
|
|
4886
|
+
width: null,
|
|
4887
|
+
height: null,
|
|
4888
|
+
sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"],
|
|
4889
|
+
seamless: ["seamless"]
|
|
4890
|
+
}
|
|
4891
|
+
},
|
|
4892
|
+
img: {
|
|
4893
|
+
attrs: {
|
|
4894
|
+
alt: null,
|
|
4895
|
+
src: null,
|
|
4896
|
+
ismap: null,
|
|
4897
|
+
usemap: null,
|
|
4898
|
+
width: null,
|
|
4899
|
+
height: null,
|
|
4900
|
+
crossorigin: ["anonymous", "use-credentials"]
|
|
4901
|
+
}
|
|
4902
|
+
},
|
|
4903
|
+
input: {
|
|
4904
|
+
attrs: {
|
|
4905
|
+
alt: null,
|
|
4906
|
+
dirname: null,
|
|
4907
|
+
form: null,
|
|
4908
|
+
formaction: null,
|
|
4909
|
+
height: null,
|
|
4910
|
+
list: null,
|
|
4911
|
+
max: null,
|
|
4912
|
+
maxlength: null,
|
|
4913
|
+
min: null,
|
|
4914
|
+
name: null,
|
|
4915
|
+
pattern: null,
|
|
4916
|
+
placeholder: null,
|
|
4917
|
+
size: null,
|
|
4918
|
+
src: null,
|
|
4919
|
+
step: null,
|
|
4920
|
+
value: null,
|
|
4921
|
+
width: null,
|
|
4922
|
+
accept: ["audio/*", "video/*", "image/*"],
|
|
4923
|
+
autocomplete: ["on", "off"],
|
|
4924
|
+
autofocus: ["autofocus"],
|
|
4925
|
+
checked: ["checked"],
|
|
4926
|
+
disabled: ["disabled"],
|
|
4927
|
+
formenctype: Encs,
|
|
4928
|
+
formmethod: Methods,
|
|
4929
|
+
formnovalidate: ["novalidate"],
|
|
4930
|
+
formtarget: Targets,
|
|
4931
|
+
multiple: ["multiple"],
|
|
4932
|
+
readonly: ["readonly"],
|
|
4933
|
+
required: ["required"],
|
|
4934
|
+
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"]
|
|
4935
|
+
}
|
|
4936
|
+
},
|
|
4937
|
+
ins: {
|
|
4938
|
+
attrs: {
|
|
4939
|
+
cite: null,
|
|
4940
|
+
datetime: null
|
|
4941
|
+
}
|
|
4942
|
+
},
|
|
4943
|
+
kbd: S,
|
|
4944
|
+
keygen: {
|
|
4945
|
+
attrs: {
|
|
4946
|
+
challenge: null,
|
|
4947
|
+
form: null,
|
|
4948
|
+
name: null,
|
|
4949
|
+
autofocus: ["autofocus"],
|
|
4950
|
+
disabled: ["disabled"],
|
|
4951
|
+
keytype: ["RSA"]
|
|
4952
|
+
}
|
|
4953
|
+
},
|
|
4954
|
+
label: {
|
|
4955
|
+
attrs: {
|
|
4956
|
+
for: null,
|
|
4957
|
+
form: null
|
|
4958
|
+
}
|
|
4959
|
+
},
|
|
4960
|
+
legend: S,
|
|
4961
|
+
li: {
|
|
4962
|
+
attrs: {
|
|
4963
|
+
value: null
|
|
4964
|
+
}
|
|
4965
|
+
},
|
|
4966
|
+
link: {
|
|
4967
|
+
attrs: {
|
|
4968
|
+
href: null,
|
|
4969
|
+
type: null,
|
|
4970
|
+
hreflang: null,
|
|
4971
|
+
media: null,
|
|
4972
|
+
sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"]
|
|
4973
|
+
}
|
|
4974
|
+
},
|
|
4975
|
+
map: {
|
|
4976
|
+
attrs: {
|
|
4977
|
+
name: null
|
|
4978
|
+
}
|
|
4979
|
+
},
|
|
4980
|
+
mark: S,
|
|
4981
|
+
menu: {
|
|
4982
|
+
attrs: {
|
|
4983
|
+
label: null,
|
|
4984
|
+
type: ["list", "context", "toolbar"]
|
|
4985
|
+
}
|
|
4986
|
+
},
|
|
4987
|
+
meta: {
|
|
4988
|
+
attrs: {
|
|
4989
|
+
content: null,
|
|
4990
|
+
charset: Charsets,
|
|
4991
|
+
name: ["viewport", "application-name", "author", "description", "generator", "keywords"],
|
|
4992
|
+
"http-equiv": ["content-language", "content-type", "default-style", "refresh"]
|
|
4993
|
+
}
|
|
4994
|
+
},
|
|
4995
|
+
meter: {
|
|
4996
|
+
attrs: {
|
|
4997
|
+
value: null,
|
|
4998
|
+
min: null,
|
|
4999
|
+
low: null,
|
|
5000
|
+
high: null,
|
|
5001
|
+
max: null,
|
|
5002
|
+
optimum: null
|
|
5003
|
+
}
|
|
5004
|
+
},
|
|
5005
|
+
nav: S,
|
|
5006
|
+
noframes: S,
|
|
5007
|
+
noscript: S,
|
|
5008
|
+
object: {
|
|
5009
|
+
attrs: {
|
|
5010
|
+
data: null,
|
|
5011
|
+
type: null,
|
|
5012
|
+
name: null,
|
|
5013
|
+
usemap: null,
|
|
5014
|
+
form: null,
|
|
5015
|
+
width: null,
|
|
5016
|
+
height: null,
|
|
5017
|
+
typemustmatch: ["typemustmatch"]
|
|
5018
|
+
}
|
|
5019
|
+
},
|
|
5020
|
+
ol: {
|
|
5021
|
+
attrs: {
|
|
5022
|
+
reversed: ["reversed"],
|
|
5023
|
+
start: null,
|
|
5024
|
+
type: ["1", "a", "A", "i", "I"]
|
|
5025
|
+
},
|
|
5026
|
+
children: ["li", "script", "template", "ul", "ol"]
|
|
5027
|
+
},
|
|
5028
|
+
optgroup: {
|
|
5029
|
+
attrs: {
|
|
5030
|
+
disabled: ["disabled"],
|
|
5031
|
+
label: null
|
|
5032
|
+
}
|
|
5033
|
+
},
|
|
5034
|
+
option: {
|
|
5035
|
+
attrs: {
|
|
5036
|
+
disabled: ["disabled"],
|
|
5037
|
+
label: null,
|
|
5038
|
+
selected: ["selected"],
|
|
5039
|
+
value: null
|
|
5040
|
+
}
|
|
5041
|
+
},
|
|
5042
|
+
output: {
|
|
5043
|
+
attrs: {
|
|
5044
|
+
for: null,
|
|
5045
|
+
form: null,
|
|
5046
|
+
name: null
|
|
5047
|
+
}
|
|
5048
|
+
},
|
|
5049
|
+
p: S,
|
|
5050
|
+
param: {
|
|
5051
|
+
attrs: {
|
|
5052
|
+
name: null,
|
|
5053
|
+
value: null
|
|
5054
|
+
}
|
|
5055
|
+
},
|
|
5056
|
+
pre: S,
|
|
5057
|
+
progress: {
|
|
5058
|
+
attrs: {
|
|
5059
|
+
value: null,
|
|
5060
|
+
max: null
|
|
5061
|
+
}
|
|
5062
|
+
},
|
|
5063
|
+
q: {
|
|
5064
|
+
attrs: {
|
|
5065
|
+
cite: null
|
|
5066
|
+
}
|
|
5067
|
+
},
|
|
5068
|
+
rp: S,
|
|
5069
|
+
rt: S,
|
|
5070
|
+
ruby: S,
|
|
5071
|
+
s: S,
|
|
5072
|
+
samp: S,
|
|
5073
|
+
script: {
|
|
5074
|
+
attrs: {
|
|
5075
|
+
type: ["text/javascript"],
|
|
5076
|
+
src: null,
|
|
5077
|
+
async: ["async"],
|
|
5078
|
+
defer: ["defer"],
|
|
5079
|
+
charset: Charsets
|
|
5080
|
+
}
|
|
5081
|
+
},
|
|
5082
|
+
section: S,
|
|
5083
|
+
select: {
|
|
5084
|
+
attrs: {
|
|
5085
|
+
form: null,
|
|
5086
|
+
name: null,
|
|
5087
|
+
size: null,
|
|
5088
|
+
autofocus: ["autofocus"],
|
|
5089
|
+
disabled: ["disabled"],
|
|
5090
|
+
multiple: ["multiple"]
|
|
5091
|
+
}
|
|
5092
|
+
},
|
|
5093
|
+
slot: {
|
|
5094
|
+
attrs: {
|
|
5095
|
+
name: null
|
|
5096
|
+
}
|
|
5097
|
+
},
|
|
5098
|
+
small: S,
|
|
5099
|
+
source: {
|
|
5100
|
+
attrs: {
|
|
5101
|
+
src: null,
|
|
5102
|
+
type: null,
|
|
5103
|
+
media: null
|
|
5104
|
+
}
|
|
5105
|
+
},
|
|
5106
|
+
span: S,
|
|
5107
|
+
strike: S,
|
|
5108
|
+
strong: S,
|
|
5109
|
+
style: {
|
|
5110
|
+
attrs: {
|
|
5111
|
+
type: ["text/css"],
|
|
5112
|
+
media: null,
|
|
5113
|
+
scoped: null
|
|
5114
|
+
}
|
|
5115
|
+
},
|
|
5116
|
+
sub: S,
|
|
5117
|
+
summary: S,
|
|
5118
|
+
sup: S,
|
|
5119
|
+
table: S,
|
|
5120
|
+
tbody: S,
|
|
5121
|
+
td: {
|
|
5122
|
+
attrs: {
|
|
5123
|
+
colspan: null,
|
|
5124
|
+
rowspan: null,
|
|
5125
|
+
headers: null
|
|
5126
|
+
}
|
|
5127
|
+
},
|
|
5128
|
+
template: S,
|
|
5129
|
+
textarea: {
|
|
5130
|
+
attrs: {
|
|
5131
|
+
dirname: null,
|
|
5132
|
+
form: null,
|
|
5133
|
+
maxlength: null,
|
|
5134
|
+
name: null,
|
|
5135
|
+
placeholder: null,
|
|
5136
|
+
rows: null,
|
|
5137
|
+
cols: null,
|
|
5138
|
+
autofocus: ["autofocus"],
|
|
5139
|
+
disabled: ["disabled"],
|
|
5140
|
+
readonly: ["readonly"],
|
|
5141
|
+
required: ["required"],
|
|
5142
|
+
wrap: ["soft", "hard"]
|
|
5143
|
+
}
|
|
5144
|
+
},
|
|
5145
|
+
tfoot: S,
|
|
5146
|
+
th: {
|
|
5147
|
+
attrs: {
|
|
5148
|
+
colspan: null,
|
|
5149
|
+
rowspan: null,
|
|
5150
|
+
headers: null,
|
|
5151
|
+
scope: ["row", "col", "rowgroup", "colgroup"]
|
|
5152
|
+
}
|
|
5153
|
+
},
|
|
5154
|
+
thead: S,
|
|
5155
|
+
time: {
|
|
5156
|
+
attrs: {
|
|
5157
|
+
datetime: null
|
|
5158
|
+
}
|
|
5159
|
+
},
|
|
5160
|
+
title: S,
|
|
5161
|
+
tr: S,
|
|
5162
|
+
track: {
|
|
5163
|
+
attrs: {
|
|
5164
|
+
src: null,
|
|
5165
|
+
label: null,
|
|
5166
|
+
default: null,
|
|
5167
|
+
kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
|
|
5168
|
+
srclang: null
|
|
5169
|
+
}
|
|
5170
|
+
},
|
|
5171
|
+
tt: S,
|
|
5172
|
+
u: S,
|
|
5173
|
+
ul: {
|
|
5174
|
+
children: ["li", "script", "template", "ul", "ol"]
|
|
5175
|
+
},
|
|
5176
|
+
var: S,
|
|
5177
|
+
video: {
|
|
5178
|
+
attrs: {
|
|
5179
|
+
src: null,
|
|
5180
|
+
poster: null,
|
|
5181
|
+
width: null,
|
|
5182
|
+
height: null,
|
|
5183
|
+
crossorigin: ["anonymous", "use-credentials"],
|
|
5184
|
+
preload: ["auto", "metadata", "none"],
|
|
5185
|
+
autoplay: ["autoplay"],
|
|
5186
|
+
mediagroup: ["movie"],
|
|
5187
|
+
muted: ["muted"],
|
|
5188
|
+
controls: ["controls"]
|
|
5189
|
+
}
|
|
5190
|
+
},
|
|
5191
|
+
wbr: S
|
|
5192
|
+
};
|
|
5193
|
+
const GlobalAttrs = {
|
|
5194
|
+
accesskey: null,
|
|
5195
|
+
class: null,
|
|
5196
|
+
contenteditable: Bool,
|
|
5197
|
+
contextmenu: null,
|
|
5198
|
+
dir: ["ltr", "rtl", "auto"],
|
|
5199
|
+
draggable: ["true", "false", "auto"],
|
|
5200
|
+
dropzone: ["copy", "move", "link", "string:", "file:"],
|
|
5201
|
+
hidden: ["hidden"],
|
|
5202
|
+
id: null,
|
|
5203
|
+
inert: ["inert"],
|
|
5204
|
+
itemid: null,
|
|
5205
|
+
itemprop: null,
|
|
5206
|
+
itemref: null,
|
|
5207
|
+
itemscope: ["itemscope"],
|
|
5208
|
+
itemtype: null,
|
|
5209
|
+
lang: ["ar", "bn", "de", "en-GB", "en-US", "es", "fr", "hi", "id", "ja", "pa", "pt", "ru", "tr", "zh"],
|
|
5210
|
+
spellcheck: Bool,
|
|
5211
|
+
autocorrect: Bool,
|
|
5212
|
+
autocapitalize: Bool,
|
|
5213
|
+
style: null,
|
|
5214
|
+
tabindex: null,
|
|
5215
|
+
title: null,
|
|
5216
|
+
translate: ["yes", "no"],
|
|
5217
|
+
onclick: null,
|
|
5218
|
+
rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"],
|
|
5219
|
+
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(" "),
|
|
5220
|
+
"aria-activedescendant": null,
|
|
5221
|
+
"aria-atomic": Bool,
|
|
5222
|
+
"aria-autocomplete": ["inline", "list", "both", "none"],
|
|
5223
|
+
"aria-busy": Bool,
|
|
5224
|
+
"aria-checked": ["true", "false", "mixed", "undefined"],
|
|
5225
|
+
"aria-controls": null,
|
|
5226
|
+
"aria-describedby": null,
|
|
5227
|
+
"aria-disabled": Bool,
|
|
5228
|
+
"aria-dropeffect": null,
|
|
5229
|
+
"aria-expanded": ["true", "false", "undefined"],
|
|
5230
|
+
"aria-flowto": null,
|
|
5231
|
+
"aria-grabbed": ["true", "false", "undefined"],
|
|
5232
|
+
"aria-haspopup": Bool,
|
|
5233
|
+
"aria-hidden": Bool,
|
|
5234
|
+
"aria-invalid": ["true", "false", "grammar", "spelling"],
|
|
5235
|
+
"aria-label": null,
|
|
5236
|
+
"aria-labelledby": null,
|
|
5237
|
+
"aria-level": null,
|
|
5238
|
+
"aria-live": ["off", "polite", "assertive"],
|
|
5239
|
+
"aria-multiline": Bool,
|
|
5240
|
+
"aria-multiselectable": Bool,
|
|
5241
|
+
"aria-owns": null,
|
|
5242
|
+
"aria-posinset": null,
|
|
5243
|
+
"aria-pressed": ["true", "false", "mixed", "undefined"],
|
|
5244
|
+
"aria-readonly": Bool,
|
|
5245
|
+
"aria-relevant": null,
|
|
5246
|
+
"aria-required": Bool,
|
|
5247
|
+
"aria-selected": ["true", "false", "undefined"],
|
|
5248
|
+
"aria-setsize": null,
|
|
5249
|
+
"aria-sort": ["ascending", "descending", "none", "other"],
|
|
5250
|
+
"aria-valuemax": null,
|
|
5251
|
+
"aria-valuemin": null,
|
|
5252
|
+
"aria-valuenow": null,
|
|
5253
|
+
"aria-valuetext": null
|
|
5254
|
+
};
|
|
5255
|
+
class Schema {
|
|
5256
|
+
constructor(extraTags, extraAttrs) {
|
|
5257
|
+
this.tags = Object.assign(Object.assign({}, Tags), extraTags);
|
|
5258
|
+
this.globalAttrs = Object.assign(Object.assign({}, GlobalAttrs), extraAttrs);
|
|
5259
|
+
this.allTags = Object.keys(this.tags);
|
|
5260
|
+
this.globalAttrNames = Object.keys(this.globalAttrs);
|
|
5261
|
+
}
|
|
5262
|
+
}
|
|
5263
|
+
Schema.default = /*@__PURE__*/new Schema();
|
|
5264
|
+
function elementName(doc, tree) {
|
|
5265
|
+
let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : doc.length;
|
|
5266
|
+
if (!tree) return "";
|
|
5267
|
+
let tag = tree.firstChild;
|
|
5268
|
+
let name = tag && tag.getChild("TagName");
|
|
5269
|
+
return name ? doc.sliceString(name.from, Math.min(name.to, max)) : "";
|
|
5270
|
+
}
|
|
5271
|
+
function findParentElement(tree) {
|
|
5272
|
+
let skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
5273
|
+
for (let cur = tree.parent; cur; cur = cur.parent) if (cur.name == "Element") {
|
|
5274
|
+
if (skip) skip = false;else return cur;
|
|
5275
|
+
}
|
|
5276
|
+
return null;
|
|
5277
|
+
}
|
|
5278
|
+
function allowedChildren(doc, tree, schema) {
|
|
5279
|
+
let parentInfo = schema.tags[elementName(doc, findParentElement(tree, true))];
|
|
5280
|
+
return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;
|
|
5281
|
+
}
|
|
5282
|
+
function openTags(doc, tree) {
|
|
5283
|
+
let open = [];
|
|
5284
|
+
for (let parent = tree; parent = findParentElement(parent);) {
|
|
5285
|
+
let tagName = elementName(doc, parent);
|
|
5286
|
+
if (tagName && parent.lastChild.name == "CloseTag") break;
|
|
5287
|
+
if (tagName && open.indexOf(tagName) < 0 && (tree.name == "EndTag" || tree.from >= parent.firstChild.to)) open.push(tagName);
|
|
5288
|
+
}
|
|
5289
|
+
return open;
|
|
5290
|
+
}
|
|
5291
|
+
const identifier = /^[:\-\.\w\u00b7-\uffff]*$/;
|
|
5292
|
+
function completeTag(state, schema, tree, from, to) {
|
|
5293
|
+
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? "" : ">";
|
|
5294
|
+
return {
|
|
5295
|
+
from,
|
|
5296
|
+
to,
|
|
5297
|
+
options: allowedChildren(state.doc, tree, schema).map(tagName => ({
|
|
5298
|
+
label: tagName,
|
|
5299
|
+
type: "type"
|
|
5300
|
+
})).concat(openTags(state.doc, tree).map((tag, i) => ({
|
|
5301
|
+
label: "/" + tag,
|
|
5302
|
+
apply: "/" + tag + end,
|
|
5303
|
+
type: "type",
|
|
5304
|
+
boost: 99 - i
|
|
5305
|
+
}))),
|
|
5306
|
+
validFor: /^\/?[:\-\.\w\u00b7-\uffff]*$/
|
|
5307
|
+
};
|
|
5308
|
+
}
|
|
5309
|
+
function completeCloseTag(state, tree, from, to) {
|
|
5310
|
+
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? "" : ">";
|
|
5311
|
+
return {
|
|
5312
|
+
from,
|
|
5313
|
+
to,
|
|
5314
|
+
options: openTags(state.doc, tree).map((tag, i) => ({
|
|
5315
|
+
label: tag,
|
|
5316
|
+
apply: tag + end,
|
|
5317
|
+
type: "type",
|
|
5318
|
+
boost: 99 - i
|
|
5319
|
+
})),
|
|
5320
|
+
validFor: identifier
|
|
5321
|
+
};
|
|
5322
|
+
}
|
|
5323
|
+
function completeStartTag(state, schema, tree, pos) {
|
|
5324
|
+
let options = [],
|
|
5325
|
+
level = 0;
|
|
5326
|
+
for (let tagName of allowedChildren(state.doc, tree, schema)) options.push({
|
|
5327
|
+
label: "<" + tagName,
|
|
5328
|
+
type: "type"
|
|
5329
|
+
});
|
|
5330
|
+
for (let open of openTags(state.doc, tree)) options.push({
|
|
5331
|
+
label: "</" + open + ">",
|
|
5332
|
+
type: "type",
|
|
5333
|
+
boost: 99 - level++
|
|
5334
|
+
});
|
|
5335
|
+
return {
|
|
5336
|
+
from: pos,
|
|
5337
|
+
to: pos,
|
|
5338
|
+
options,
|
|
5339
|
+
validFor: /^<\/?[:\-\.\w\u00b7-\uffff]*$/
|
|
5340
|
+
};
|
|
5341
|
+
}
|
|
5342
|
+
function completeAttrName(state, schema, tree, from, to) {
|
|
5343
|
+
let elt = findParentElement(tree),
|
|
5344
|
+
info = elt ? schema.tags[elementName(state.doc, elt)] : null;
|
|
5345
|
+
let names = info && info.attrs ? Object.keys(info.attrs).concat(schema.globalAttrNames) : schema.globalAttrNames;
|
|
5346
|
+
return {
|
|
5347
|
+
from,
|
|
5348
|
+
to,
|
|
5349
|
+
options: names.map(attrName => ({
|
|
5350
|
+
label: attrName,
|
|
5351
|
+
type: "property"
|
|
5352
|
+
})),
|
|
5353
|
+
validFor: identifier
|
|
5354
|
+
};
|
|
5355
|
+
}
|
|
5356
|
+
function completeAttrValue(state, schema, tree, from, to) {
|
|
5357
|
+
var _a;
|
|
5358
|
+
let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild("AttributeName");
|
|
5359
|
+
let options = [],
|
|
5360
|
+
token = undefined;
|
|
5361
|
+
if (nameNode) {
|
|
5362
|
+
let attrName = state.sliceDoc(nameNode.from, nameNode.to);
|
|
5363
|
+
let attrs = schema.globalAttrs[attrName];
|
|
5364
|
+
if (!attrs) {
|
|
5365
|
+
let elt = findParentElement(tree),
|
|
5366
|
+
info = elt ? schema.tags[elementName(state.doc, elt)] : null;
|
|
5367
|
+
attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];
|
|
5368
|
+
}
|
|
5369
|
+
if (attrs) {
|
|
5370
|
+
let base = state.sliceDoc(from, to).toLowerCase(),
|
|
5371
|
+
quoteStart = '"',
|
|
5372
|
+
quoteEnd = '"';
|
|
5373
|
+
if (/^['"]/.test(base)) {
|
|
5374
|
+
token = base[0] == '"' ? /^[^"]*$/ : /^[^']*$/;
|
|
5375
|
+
quoteStart = "";
|
|
5376
|
+
quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? "" : base[0];
|
|
5377
|
+
base = base.slice(1);
|
|
5378
|
+
from++;
|
|
5379
|
+
} else {
|
|
5380
|
+
token = /^[^\s<>='"]*$/;
|
|
5381
|
+
}
|
|
5382
|
+
for (let value of attrs) options.push({
|
|
5383
|
+
label: value,
|
|
5384
|
+
apply: quoteStart + value + quoteEnd,
|
|
5385
|
+
type: "constant"
|
|
5386
|
+
});
|
|
5387
|
+
}
|
|
5388
|
+
}
|
|
5389
|
+
return {
|
|
5390
|
+
from,
|
|
5391
|
+
to,
|
|
5392
|
+
options,
|
|
5393
|
+
validFor: token
|
|
5394
|
+
};
|
|
5395
|
+
}
|
|
5396
|
+
function htmlCompletionFor(schema, context) {
|
|
5397
|
+
let {
|
|
5398
|
+
state,
|
|
5399
|
+
pos
|
|
5400
|
+
} = context,
|
|
5401
|
+
around = syntaxTree(state).resolveInner(pos),
|
|
5402
|
+
tree = around.resolve(pos, -1);
|
|
5403
|
+
for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {
|
|
5404
|
+
let last = before.lastChild;
|
|
5405
|
+
if (!last || !last.type.isError || last.from < last.to) break;
|
|
5406
|
+
around = tree = before;
|
|
5407
|
+
scan = last.from;
|
|
5408
|
+
}
|
|
5409
|
+
if (tree.name == "TagName") {
|
|
5410
|
+
return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos) : completeTag(state, schema, tree, tree.from, pos);
|
|
5411
|
+
} else if (tree.name == "StartTag") {
|
|
5412
|
+
return completeTag(state, schema, tree, pos, pos);
|
|
5413
|
+
} else if (tree.name == "StartCloseTag" || tree.name == "IncompleteCloseTag") {
|
|
5414
|
+
return completeCloseTag(state, tree, pos, pos);
|
|
5415
|
+
} else if (context.explicit && (tree.name == "OpenTag" || tree.name == "SelfClosingTag") || tree.name == "AttributeName") {
|
|
5416
|
+
return completeAttrName(state, schema, tree, tree.name == "AttributeName" ? tree.from : pos, pos);
|
|
5417
|
+
} else if (tree.name == "Is" || tree.name == "AttributeValue" || tree.name == "UnquotedAttributeValue") {
|
|
5418
|
+
return completeAttrValue(state, schema, tree, tree.name == "Is" ? pos : tree.from, pos);
|
|
5419
|
+
} else if (context.explicit && (around.name == "Element" || around.name == "Text" || around.name == "Document")) {
|
|
5420
|
+
return completeStartTag(state, schema, tree, pos);
|
|
5421
|
+
} else {
|
|
5422
|
+
return null;
|
|
5423
|
+
}
|
|
5424
|
+
}
|
|
5425
|
+
/**
|
|
5426
|
+
Create a completion source for HTML extended with additional tags
|
|
5427
|
+
or attributes.
|
|
5428
|
+
*/
|
|
5429
|
+
function htmlCompletionSourceWith(config) {
|
|
5430
|
+
let {
|
|
5431
|
+
extraTags,
|
|
5432
|
+
extraGlobalAttributes: extraAttrs
|
|
5433
|
+
} = config;
|
|
5434
|
+
let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;
|
|
5435
|
+
return context => htmlCompletionFor(schema, context);
|
|
5436
|
+
}
|
|
5437
|
+
|
|
5438
|
+
/**
|
|
5439
|
+
A language provider based on the [Lezer HTML
|
|
5440
|
+
parser](https://github.com/lezer-parser/html), extended with the
|
|
5441
|
+
JavaScript and CSS parsers to parse the content of `<script>` and
|
|
5442
|
+
`<style>` tags.
|
|
5443
|
+
*/
|
|
5444
|
+
const htmlLanguage = /*@__PURE__*/LRLanguage.define({
|
|
5445
|
+
parser: /*@__PURE__*/parser$4.configure({
|
|
5446
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
5447
|
+
Element(context) {
|
|
5448
|
+
let after = /^(\s*)(<\/)?/.exec(context.textAfter);
|
|
5449
|
+
if (context.node.to <= context.pos + after[0].length) return context.continue();
|
|
5450
|
+
return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);
|
|
5451
|
+
},
|
|
5452
|
+
"OpenTag CloseTag SelfClosingTag"(context) {
|
|
5453
|
+
return context.column(context.node.from) + context.unit;
|
|
5454
|
+
},
|
|
5455
|
+
Document(context) {
|
|
5456
|
+
if (context.pos + /\s*/.exec(context.textAfter)[0].length < context.node.to) return context.continue();
|
|
5457
|
+
let endElt = null,
|
|
5458
|
+
close;
|
|
5459
|
+
for (let cur = context.node;;) {
|
|
5460
|
+
let last = cur.lastChild;
|
|
5461
|
+
if (!last || last.name != "Element" || last.to != cur.to) break;
|
|
5462
|
+
endElt = cur = last;
|
|
5463
|
+
}
|
|
5464
|
+
if (endElt && !((close = endElt.lastChild) && (close.name == "CloseTag" || close.name == "SelfClosingTag"))) return context.lineIndent(endElt.from) + context.unit;
|
|
5465
|
+
return null;
|
|
5466
|
+
}
|
|
5467
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
5468
|
+
Element(node) {
|
|
5469
|
+
let first = node.firstChild,
|
|
5470
|
+
last = node.lastChild;
|
|
5471
|
+
if (!first || first.name != "OpenTag") return null;
|
|
5472
|
+
return {
|
|
5473
|
+
from: first.to,
|
|
5474
|
+
to: last.name == "CloseTag" ? last.from : node.to
|
|
5475
|
+
};
|
|
5476
|
+
}
|
|
5477
|
+
})],
|
|
5478
|
+
wrap: /*@__PURE__*/configureNesting([{
|
|
5479
|
+
tag: "script",
|
|
5480
|
+
attrs(attrs) {
|
|
5481
|
+
return !attrs.type || /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);
|
|
5482
|
+
},
|
|
5483
|
+
parser: javascriptLanguage.parser
|
|
5484
|
+
}, {
|
|
5485
|
+
tag: "style",
|
|
5486
|
+
attrs(attrs) {
|
|
5487
|
+
return (!attrs.lang || attrs.lang == "css") && (!attrs.type || /^(text\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));
|
|
5488
|
+
},
|
|
5489
|
+
parser: cssLanguage.parser
|
|
5490
|
+
}])
|
|
5491
|
+
}),
|
|
5492
|
+
languageData: {
|
|
5493
|
+
commentTokens: {
|
|
5494
|
+
block: {
|
|
5495
|
+
open: "<!--",
|
|
5496
|
+
close: "-->"
|
|
5497
|
+
}
|
|
5498
|
+
},
|
|
5499
|
+
indentOnInput: /^\s*<\/\w+\W$/,
|
|
5500
|
+
wordChars: "-._"
|
|
5501
|
+
}
|
|
5502
|
+
});
|
|
5503
|
+
/**
|
|
5504
|
+
Language support for HTML, including
|
|
5505
|
+
[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and
|
|
5506
|
+
CSS support extensions.
|
|
5507
|
+
*/
|
|
5508
|
+
function html() {
|
|
5509
|
+
let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
5510
|
+
let lang = htmlLanguage;
|
|
5511
|
+
if (config.matchClosingTags === false) lang = lang.configure({
|
|
5512
|
+
dialect: "noMatch"
|
|
5513
|
+
});
|
|
5514
|
+
return new LanguageSupport(lang, [htmlLanguage.data.of({
|
|
5515
|
+
autocomplete: htmlCompletionSourceWith(config)
|
|
5516
|
+
}), config.autoCloseTags !== false ? autoCloseTags : [], javascript().support, css().support]);
|
|
5517
|
+
}
|
|
5518
|
+
/**
|
|
5519
|
+
Extension that will automatically insert close tags when a `>` or
|
|
5520
|
+
`/` is typed.
|
|
5521
|
+
*/
|
|
5522
|
+
const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
5523
|
+
if (view.composing || view.state.readOnly || from != to || text != ">" && text != "/" || !htmlLanguage.isActiveAt(view.state, from, -1)) return false;
|
|
5524
|
+
let {
|
|
5525
|
+
state
|
|
5526
|
+
} = view;
|
|
5527
|
+
let changes = state.changeByRange(range => {
|
|
5528
|
+
var _a, _b, _c;
|
|
5529
|
+
let {
|
|
5530
|
+
head
|
|
5531
|
+
} = range,
|
|
5532
|
+
around = syntaxTree(state).resolveInner(head, -1),
|
|
5533
|
+
name;
|
|
5534
|
+
if (around.name == "TagName" || around.name == "StartTag") around = around.parent;
|
|
5535
|
+
if (text == ">" && around.name == "OpenTag") {
|
|
5536
|
+
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 {
|
|
5537
|
+
range: EditorSelection.cursor(head + 1),
|
|
5538
|
+
changes: {
|
|
5539
|
+
from: head,
|
|
5540
|
+
insert: `></${name}>`
|
|
5541
|
+
}
|
|
5542
|
+
};
|
|
5543
|
+
} else if (text == "/" && around.name == "OpenTag") {
|
|
5544
|
+
let empty = around.parent,
|
|
5545
|
+
base = empty === null || empty === void 0 ? void 0 : empty.parent;
|
|
5546
|
+
if (empty.from == head - 1 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" && (name = elementName(state.doc, base, head))) {
|
|
5547
|
+
let insert = `/${name}>`;
|
|
5548
|
+
return {
|
|
5549
|
+
range: EditorSelection.cursor(head + insert.length),
|
|
5550
|
+
changes: {
|
|
5551
|
+
from: head,
|
|
5552
|
+
insert
|
|
5553
|
+
}
|
|
5554
|
+
};
|
|
5555
|
+
}
|
|
5556
|
+
}
|
|
5557
|
+
return {
|
|
5558
|
+
range
|
|
5559
|
+
};
|
|
5560
|
+
});
|
|
5561
|
+
if (changes.changes.empty) return false;
|
|
5562
|
+
view.dispatch(changes, {
|
|
5563
|
+
userEvent: "input.type",
|
|
5564
|
+
scrollIntoView: true
|
|
5565
|
+
});
|
|
5566
|
+
return true;
|
|
5567
|
+
});
|
|
5568
|
+
|
|
5569
|
+
const jsonHighlighting = styleTags({
|
|
5570
|
+
String: tags$1.string,
|
|
5571
|
+
Number: tags$1.number,
|
|
5572
|
+
"True False": tags$1.bool,
|
|
5573
|
+
PropertyName: tags$1.propertyName,
|
|
5574
|
+
Null: tags$1.null,
|
|
5575
|
+
",": tags$1.separator,
|
|
5576
|
+
"[ ]": tags$1.squareBracket,
|
|
5577
|
+
"{ }": tags$1.brace
|
|
5578
|
+
});
|
|
5579
|
+
|
|
5580
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
5581
|
+
const parser$1 = LRParser.deserialize({
|
|
5582
|
+
version: 14,
|
|
5583
|
+
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",
|
|
5584
|
+
stateData: "#O~OcOS~OQSORSOSSOTSOWQO]ROePO~OVXOeUO~O[[O~PVOg^O~Oh_OVfX~OVaO~OhbO[iX~O[dO~Oh_OVfa~OhbO[ia~O",
|
|
5585
|
+
goto: "!kjPPPPPPkPPkqwPPk{!RPPP!XP!ePP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",
|
|
5586
|
+
nodeNames: "⚠ JsonText True False Null Number String } { Object Property PropertyName ] [ Array",
|
|
5587
|
+
maxTerm: 25,
|
|
5588
|
+
nodeProps: [["openedBy", 7, "{", 12, "["], ["closedBy", 8, "}", 13, "]"]],
|
|
5589
|
+
propSources: [jsonHighlighting],
|
|
5590
|
+
skippedNodes: [0],
|
|
5591
|
+
repeatNodeCount: 2,
|
|
5592
|
+
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~",
|
|
5593
|
+
tokenizers: [0],
|
|
5594
|
+
topRules: {
|
|
5595
|
+
"JsonText": [0, 1]
|
|
5596
|
+
},
|
|
5597
|
+
tokenPrec: 0
|
|
5598
|
+
});
|
|
5599
|
+
|
|
5600
|
+
/**
|
|
5601
|
+
A language provider that provides JSON parsing.
|
|
5602
|
+
*/
|
|
5603
|
+
const jsonLanguage = /*@__PURE__*/LRLanguage.define({
|
|
5604
|
+
parser: /*@__PURE__*/parser$1.configure({
|
|
5605
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
5606
|
+
Object: /*@__PURE__*/continuedIndent({
|
|
5607
|
+
except: /^\s*\}/
|
|
5608
|
+
}),
|
|
5609
|
+
Array: /*@__PURE__*/continuedIndent({
|
|
5610
|
+
except: /^\s*\]/
|
|
5611
|
+
})
|
|
5612
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
5613
|
+
"Object Array": foldInside
|
|
5614
|
+
})]
|
|
5615
|
+
}),
|
|
5616
|
+
languageData: {
|
|
5617
|
+
closeBrackets: {
|
|
5618
|
+
brackets: ["[", "{", '"']
|
|
5619
|
+
},
|
|
5620
|
+
indentOnInput: /^\s*[\}\]]$/
|
|
5621
|
+
}
|
|
5622
|
+
});
|
|
5623
|
+
/**
|
|
5624
|
+
JSON language support.
|
|
5625
|
+
*/
|
|
5626
|
+
function json() {
|
|
5627
|
+
return new LanguageSupport(jsonLanguage);
|
|
5628
|
+
}
|
|
5629
|
+
|
|
5630
|
+
class CompositeBlock {
|
|
5631
|
+
constructor(type,
|
|
5632
|
+
// Used for indentation in list items, markup character in lists
|
|
5633
|
+
value, from, hash, end, children, positions) {
|
|
5634
|
+
this.type = type;
|
|
5635
|
+
this.value = value;
|
|
5636
|
+
this.from = from;
|
|
5637
|
+
this.hash = hash;
|
|
5638
|
+
this.end = end;
|
|
5639
|
+
this.children = children;
|
|
5640
|
+
this.positions = positions;
|
|
5641
|
+
this.hashProp = [[NodeProp.contextHash, hash]];
|
|
5642
|
+
}
|
|
5643
|
+
static create(type, value, from, parentHash, end) {
|
|
5644
|
+
let hash = parentHash + (parentHash << 8) + type + (value << 4) | 0;
|
|
5645
|
+
return new CompositeBlock(type, value, from, hash, end, [], []);
|
|
5646
|
+
}
|
|
5647
|
+
addChild(child, pos) {
|
|
5648
|
+
if (child.prop(NodeProp.contextHash) != this.hash) child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);
|
|
5649
|
+
this.children.push(child);
|
|
5650
|
+
this.positions.push(pos);
|
|
5651
|
+
}
|
|
5652
|
+
toTree(nodeSet) {
|
|
5653
|
+
let end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.end;
|
|
5654
|
+
let last = this.children.length - 1;
|
|
5655
|
+
if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from);
|
|
5656
|
+
let tree = new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({
|
|
5657
|
+
makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)
|
|
5658
|
+
});
|
|
5659
|
+
return tree;
|
|
5660
|
+
}
|
|
5661
|
+
}
|
|
5662
|
+
var Type;
|
|
5663
|
+
(function (Type) {
|
|
5664
|
+
Type[Type["Document"] = 1] = "Document";
|
|
5665
|
+
Type[Type["CodeBlock"] = 2] = "CodeBlock";
|
|
5666
|
+
Type[Type["FencedCode"] = 3] = "FencedCode";
|
|
5667
|
+
Type[Type["Blockquote"] = 4] = "Blockquote";
|
|
5668
|
+
Type[Type["HorizontalRule"] = 5] = "HorizontalRule";
|
|
5669
|
+
Type[Type["BulletList"] = 6] = "BulletList";
|
|
5670
|
+
Type[Type["OrderedList"] = 7] = "OrderedList";
|
|
5671
|
+
Type[Type["ListItem"] = 8] = "ListItem";
|
|
5672
|
+
Type[Type["ATXHeading1"] = 9] = "ATXHeading1";
|
|
5673
|
+
Type[Type["ATXHeading2"] = 10] = "ATXHeading2";
|
|
5674
|
+
Type[Type["ATXHeading3"] = 11] = "ATXHeading3";
|
|
5675
|
+
Type[Type["ATXHeading4"] = 12] = "ATXHeading4";
|
|
5676
|
+
Type[Type["ATXHeading5"] = 13] = "ATXHeading5";
|
|
5677
|
+
Type[Type["ATXHeading6"] = 14] = "ATXHeading6";
|
|
5678
|
+
Type[Type["SetextHeading1"] = 15] = "SetextHeading1";
|
|
5679
|
+
Type[Type["SetextHeading2"] = 16] = "SetextHeading2";
|
|
5680
|
+
Type[Type["HTMLBlock"] = 17] = "HTMLBlock";
|
|
5681
|
+
Type[Type["LinkReference"] = 18] = "LinkReference";
|
|
5682
|
+
Type[Type["Paragraph"] = 19] = "Paragraph";
|
|
5683
|
+
Type[Type["CommentBlock"] = 20] = "CommentBlock";
|
|
5684
|
+
Type[Type["ProcessingInstructionBlock"] = 21] = "ProcessingInstructionBlock";
|
|
5685
|
+
// Inline
|
|
5686
|
+
Type[Type["Escape"] = 22] = "Escape";
|
|
5687
|
+
Type[Type["Entity"] = 23] = "Entity";
|
|
5688
|
+
Type[Type["HardBreak"] = 24] = "HardBreak";
|
|
5689
|
+
Type[Type["Emphasis"] = 25] = "Emphasis";
|
|
5690
|
+
Type[Type["StrongEmphasis"] = 26] = "StrongEmphasis";
|
|
5691
|
+
Type[Type["Link"] = 27] = "Link";
|
|
5692
|
+
Type[Type["Image"] = 28] = "Image";
|
|
5693
|
+
Type[Type["InlineCode"] = 29] = "InlineCode";
|
|
5694
|
+
Type[Type["HTMLTag"] = 30] = "HTMLTag";
|
|
5695
|
+
Type[Type["Comment"] = 31] = "Comment";
|
|
5696
|
+
Type[Type["ProcessingInstruction"] = 32] = "ProcessingInstruction";
|
|
5697
|
+
Type[Type["URL"] = 33] = "URL";
|
|
5698
|
+
// Smaller tokens
|
|
5699
|
+
Type[Type["HeaderMark"] = 34] = "HeaderMark";
|
|
5700
|
+
Type[Type["QuoteMark"] = 35] = "QuoteMark";
|
|
5701
|
+
Type[Type["ListMark"] = 36] = "ListMark";
|
|
5702
|
+
Type[Type["LinkMark"] = 37] = "LinkMark";
|
|
5703
|
+
Type[Type["EmphasisMark"] = 38] = "EmphasisMark";
|
|
5704
|
+
Type[Type["CodeMark"] = 39] = "CodeMark";
|
|
5705
|
+
Type[Type["CodeText"] = 40] = "CodeText";
|
|
5706
|
+
Type[Type["CodeInfo"] = 41] = "CodeInfo";
|
|
5707
|
+
Type[Type["LinkTitle"] = 42] = "LinkTitle";
|
|
5708
|
+
Type[Type["LinkLabel"] = 43] = "LinkLabel";
|
|
5709
|
+
})(Type || (Type = {}));
|
|
5710
|
+
/// Data structure used to accumulate a block's content during [leaf
|
|
5711
|
+
/// block parsing](#BlockParser.leaf).
|
|
5712
|
+
class LeafBlock {
|
|
5713
|
+
/// @internal
|
|
5714
|
+
constructor(
|
|
5715
|
+
/// The start position of the block.
|
|
5716
|
+
start,
|
|
5717
|
+
/// The block's text content.
|
|
5718
|
+
content) {
|
|
5719
|
+
this.start = start;
|
|
5720
|
+
this.content = content;
|
|
5721
|
+
/// @internal
|
|
5722
|
+
this.marks = [];
|
|
5723
|
+
/// The block parsers active for this block.
|
|
5724
|
+
this.parsers = [];
|
|
5725
|
+
}
|
|
5726
|
+
}
|
|
5727
|
+
/// Data structure used during block-level per-line parsing.
|
|
5728
|
+
class Line {
|
|
5729
|
+
constructor() {
|
|
5730
|
+
/// The line's full text.
|
|
5731
|
+
this.text = "";
|
|
5732
|
+
/// The base indent provided by the composite contexts (that have
|
|
5733
|
+
/// been handled so far).
|
|
5734
|
+
this.baseIndent = 0;
|
|
5735
|
+
/// The string position corresponding to the base indent.
|
|
5736
|
+
this.basePos = 0;
|
|
5737
|
+
/// The number of contexts handled @internal
|
|
5738
|
+
this.depth = 0;
|
|
5739
|
+
/// Any markers (i.e. block quote markers) parsed for the contexts. @internal
|
|
5740
|
+
this.markers = [];
|
|
5741
|
+
/// The position of the next non-whitespace character beyond any
|
|
5742
|
+
/// list, blockquote, or other composite block markers.
|
|
5743
|
+
this.pos = 0;
|
|
5744
|
+
/// The column of the next non-whitespace character.
|
|
5745
|
+
this.indent = 0;
|
|
5746
|
+
/// The character code of the character after `pos`.
|
|
5747
|
+
this.next = -1;
|
|
5748
|
+
}
|
|
5749
|
+
/// @internal
|
|
5750
|
+
forward() {
|
|
5751
|
+
if (this.basePos > this.pos) this.forwardInner();
|
|
5752
|
+
}
|
|
5753
|
+
/// @internal
|
|
5754
|
+
forwardInner() {
|
|
5755
|
+
let newPos = this.skipSpace(this.basePos);
|
|
5756
|
+
this.indent = this.countIndent(newPos, this.pos, this.indent);
|
|
5757
|
+
this.pos = newPos;
|
|
5758
|
+
this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);
|
|
5759
|
+
}
|
|
5760
|
+
/// Skip whitespace after the given position, return the position of
|
|
5761
|
+
/// the next non-space character or the end of the line if there's
|
|
5762
|
+
/// only space after `from`.
|
|
5763
|
+
skipSpace(from) {
|
|
5764
|
+
return skipSpace(this.text, from);
|
|
5765
|
+
}
|
|
5766
|
+
/// @internal
|
|
5767
|
+
reset(text) {
|
|
5768
|
+
this.text = text;
|
|
5769
|
+
this.baseIndent = this.basePos = this.pos = this.indent = 0;
|
|
5770
|
+
this.forwardInner();
|
|
5771
|
+
this.depth = 1;
|
|
5772
|
+
while (this.markers.length) this.markers.pop();
|
|
5773
|
+
}
|
|
5774
|
+
/// Move the line's base position forward to the given position.
|
|
5775
|
+
/// This should only be called by composite [block
|
|
5776
|
+
/// parsers](#BlockParser.parse) or [markup skipping
|
|
5777
|
+
/// functions](#NodeSpec.composite).
|
|
5778
|
+
moveBase(to) {
|
|
5779
|
+
this.basePos = to;
|
|
5780
|
+
this.baseIndent = this.countIndent(to, this.pos, this.indent);
|
|
5781
|
+
}
|
|
5782
|
+
/// Move the line's base position forward to the given _column_.
|
|
5783
|
+
moveBaseColumn(indent) {
|
|
5784
|
+
this.baseIndent = indent;
|
|
5785
|
+
this.basePos = this.findColumn(indent);
|
|
5786
|
+
}
|
|
5787
|
+
/// Store a composite-block-level marker. Should be called from
|
|
5788
|
+
/// [markup skipping functions](#NodeSpec.composite) when they
|
|
5789
|
+
/// consume any non-whitespace characters.
|
|
5790
|
+
addMarker(elt) {
|
|
5791
|
+
this.markers.push(elt);
|
|
5792
|
+
}
|
|
5793
|
+
/// Find the column position at `to`, optionally starting at a given
|
|
5794
|
+
/// position and column.
|
|
5795
|
+
countIndent(to) {
|
|
5796
|
+
let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
5797
|
+
let indent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
5798
|
+
for (let i = from; i < to; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;
|
|
5799
|
+
return indent;
|
|
5800
|
+
}
|
|
5801
|
+
/// Find the position corresponding to the given column.
|
|
5802
|
+
findColumn(goal) {
|
|
5803
|
+
let i = 0;
|
|
5804
|
+
for (let indent = 0; i < this.text.length && indent < goal; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;
|
|
5805
|
+
return i;
|
|
5806
|
+
}
|
|
5807
|
+
/// @internal
|
|
5808
|
+
scrub() {
|
|
5809
|
+
if (!this.baseIndent) return this.text;
|
|
5810
|
+
let result = "";
|
|
5811
|
+
for (let i = 0; i < this.basePos; i++) result += " ";
|
|
5812
|
+
return result + this.text.slice(this.basePos);
|
|
5813
|
+
}
|
|
5814
|
+
}
|
|
5815
|
+
function skipForList(bl, cx, line) {
|
|
5816
|
+
if (line.pos == line.text.length || bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent) return true;
|
|
5817
|
+
if (line.indent >= line.baseIndent + 4) return false;
|
|
5818
|
+
let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);
|
|
5819
|
+
return size > 0 && (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) && line.text.charCodeAt(line.pos + size - 1) == bl.value;
|
|
5820
|
+
}
|
|
5821
|
+
const DefaultSkipMarkup = {
|
|
5822
|
+
[Type.Blockquote](bl, cx, line) {
|
|
5823
|
+
if (line.next != 62 /* '>' */) return false;
|
|
5824
|
+
line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));
|
|
5825
|
+
line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));
|
|
5826
|
+
bl.end = cx.lineStart + line.text.length;
|
|
5827
|
+
return true;
|
|
5828
|
+
},
|
|
5829
|
+
[Type.ListItem](bl, _cx, line) {
|
|
5830
|
+
if (line.indent < line.baseIndent + bl.value && line.next > -1) return false;
|
|
5831
|
+
line.moveBaseColumn(line.baseIndent + bl.value);
|
|
5832
|
+
return true;
|
|
5833
|
+
},
|
|
5834
|
+
[Type.OrderedList]: skipForList,
|
|
5835
|
+
[Type.BulletList]: skipForList,
|
|
5836
|
+
[Type.Document]() {
|
|
5837
|
+
return true;
|
|
5838
|
+
}
|
|
5839
|
+
};
|
|
5840
|
+
function space(ch) {
|
|
5841
|
+
return ch == 32 || ch == 9 || ch == 10 || ch == 13;
|
|
5842
|
+
}
|
|
5843
|
+
function skipSpace(line) {
|
|
5844
|
+
let i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
5845
|
+
while (i < line.length && space(line.charCodeAt(i))) i++;
|
|
5846
|
+
return i;
|
|
5847
|
+
}
|
|
5848
|
+
function skipSpaceBack(line, i, to) {
|
|
5849
|
+
while (i > to && space(line.charCodeAt(i - 1))) i--;
|
|
5850
|
+
return i;
|
|
5851
|
+
}
|
|
5852
|
+
function isFencedCode(line) {
|
|
5853
|
+
if (line.next != 96 && line.next != 126 /* '`~' */) return -1;
|
|
5854
|
+
let pos = line.pos + 1;
|
|
5855
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++;
|
|
5856
|
+
if (pos < line.pos + 3) return -1;
|
|
5857
|
+
if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1;
|
|
5858
|
+
return pos;
|
|
5859
|
+
}
|
|
5860
|
+
function isBlockquote(line) {
|
|
5861
|
+
return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;
|
|
5862
|
+
}
|
|
5863
|
+
function isHorizontalRule(line, cx, breaking) {
|
|
5864
|
+
if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */) return -1;
|
|
5865
|
+
let count = 1;
|
|
5866
|
+
for (let pos = line.pos + 1; pos < line.text.length; pos++) {
|
|
5867
|
+
let ch = line.text.charCodeAt(pos);
|
|
5868
|
+
if (ch == line.next) count++;else if (!space(ch)) return -1;
|
|
5869
|
+
}
|
|
5870
|
+
// Setext headers take precedence
|
|
5871
|
+
if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1;
|
|
5872
|
+
return count < 3 ? -1 : 1;
|
|
5873
|
+
}
|
|
5874
|
+
function inList(cx, type) {
|
|
5875
|
+
for (let i = cx.stack.length - 1; i >= 0; i--) if (cx.stack[i].type == type) return true;
|
|
5876
|
+
return false;
|
|
5877
|
+
}
|
|
5878
|
+
function isBulletList(line, cx, breaking) {
|
|
5879
|
+
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;
|
|
5880
|
+
}
|
|
5881
|
+
function isOrderedList(line, cx, breaking) {
|
|
5882
|
+
let pos = line.pos,
|
|
5883
|
+
next = line.next;
|
|
5884
|
+
for (;;) {
|
|
5885
|
+
if (next >= 48 && next <= 57 /* '0-9' */) pos++;else break;
|
|
5886
|
+
if (pos == line.text.length) return -1;
|
|
5887
|
+
next = line.text.charCodeAt(pos);
|
|
5888
|
+
}
|
|
5889
|
+
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;
|
|
5890
|
+
return pos + 1 - line.pos;
|
|
5891
|
+
}
|
|
5892
|
+
function isAtxHeading(line) {
|
|
5893
|
+
if (line.next != 35 /* '#' */) return -1;
|
|
5894
|
+
let pos = line.pos + 1;
|
|
5895
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++;
|
|
5896
|
+
if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1;
|
|
5897
|
+
let size = pos - line.pos;
|
|
5898
|
+
return size > 6 ? -1 : size;
|
|
5899
|
+
}
|
|
5900
|
+
function isSetextUnderline(line) {
|
|
5901
|
+
if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4) return -1;
|
|
5902
|
+
let pos = line.pos + 1;
|
|
5903
|
+
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++;
|
|
5904
|
+
let end = pos;
|
|
5905
|
+
while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++;
|
|
5906
|
+
return pos == line.text.length ? end : -1;
|
|
5907
|
+
}
|
|
5908
|
+
const EmptyLine = /^[ \t]*$/,
|
|
5909
|
+
CommentEnd = /-->/,
|
|
5910
|
+
ProcessingEnd = /\?>/;
|
|
5911
|
+
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]];
|
|
5912
|
+
function isHTMLBlock(line, _cx, breaking) {
|
|
5913
|
+
if (line.next != 60 /* '<' */) return -1;
|
|
5914
|
+
let rest = line.text.slice(line.pos);
|
|
5915
|
+
for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++) if (HTMLBlockStyle[i][0].test(rest)) return i;
|
|
5916
|
+
return -1;
|
|
5917
|
+
}
|
|
5918
|
+
function getListIndent(line, pos) {
|
|
5919
|
+
let indentAfter = line.countIndent(pos, line.pos, line.indent);
|
|
5920
|
+
let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);
|
|
5921
|
+
return indented >= indentAfter + 5 ? indentAfter + 1 : indented;
|
|
5922
|
+
}
|
|
5923
|
+
function addCodeText(marks, from, to) {
|
|
5924
|
+
let last = marks.length - 1;
|
|
5925
|
+
if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText) marks[last].to = to;else marks.push(elt(Type.CodeText, from, to));
|
|
5926
|
+
}
|
|
5927
|
+
// Rules for parsing blocks. A return value of false means the rule
|
|
5928
|
+
// doesn't apply here, true means it does. When true is returned and
|
|
5929
|
+
// `p.line` has been updated, the rule is assumed to have consumed a
|
|
5930
|
+
// leaf block. Otherwise, it is assumed to have opened a context.
|
|
5931
|
+
const DefaultBlockParsers = {
|
|
5932
|
+
LinkReference: undefined,
|
|
5933
|
+
IndentedCode(cx, line) {
|
|
5934
|
+
let base = line.baseIndent + 4;
|
|
5935
|
+
if (line.indent < base) return false;
|
|
5936
|
+
let start = line.findColumn(base);
|
|
5937
|
+
let from = cx.lineStart + start,
|
|
5938
|
+
to = cx.lineStart + line.text.length;
|
|
5939
|
+
let marks = [],
|
|
5940
|
+
pendingMarks = [];
|
|
5941
|
+
addCodeText(marks, from, to);
|
|
5942
|
+
while (cx.nextLine() && line.depth >= cx.stack.length) {
|
|
5943
|
+
if (line.pos == line.text.length) {
|
|
5944
|
+
// Empty
|
|
5945
|
+
addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);
|
|
5946
|
+
for (let m of line.markers) pendingMarks.push(m);
|
|
5947
|
+
} else if (line.indent < base) {
|
|
5948
|
+
break;
|
|
5949
|
+
} else {
|
|
5950
|
+
if (pendingMarks.length) {
|
|
5951
|
+
for (let m of pendingMarks) {
|
|
5952
|
+
if (m.type == Type.CodeText) addCodeText(marks, m.from, m.to);else marks.push(m);
|
|
5953
|
+
}
|
|
5954
|
+
pendingMarks = [];
|
|
5955
|
+
}
|
|
5956
|
+
addCodeText(marks, cx.lineStart - 1, cx.lineStart);
|
|
5957
|
+
for (let m of line.markers) marks.push(m);
|
|
5958
|
+
to = cx.lineStart + line.text.length;
|
|
5959
|
+
let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);
|
|
5960
|
+
if (codeStart < to) addCodeText(marks, codeStart, to);
|
|
5961
|
+
}
|
|
5962
|
+
}
|
|
5963
|
+
if (pendingMarks.length) {
|
|
5964
|
+
pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);
|
|
5965
|
+
if (pendingMarks.length) line.markers = pendingMarks.concat(line.markers);
|
|
5966
|
+
}
|
|
5967
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);
|
|
5968
|
+
return true;
|
|
5969
|
+
},
|
|
5970
|
+
FencedCode(cx, line) {
|
|
5971
|
+
let fenceEnd = isFencedCode(line);
|
|
5972
|
+
if (fenceEnd < 0) return false;
|
|
5973
|
+
let from = cx.lineStart + line.pos,
|
|
5974
|
+
ch = line.next,
|
|
5975
|
+
len = fenceEnd - line.pos;
|
|
5976
|
+
let infoFrom = line.skipSpace(fenceEnd),
|
|
5977
|
+
infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);
|
|
5978
|
+
let marks = [elt(Type.CodeMark, from, from + len)];
|
|
5979
|
+
if (infoFrom < infoTo) marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));
|
|
5980
|
+
for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {
|
|
5981
|
+
let i = line.pos;
|
|
5982
|
+
if (line.indent - line.baseIndent < 4) while (i < line.text.length && line.text.charCodeAt(i) == ch) i++;
|
|
5983
|
+
if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {
|
|
5984
|
+
for (let m of line.markers) marks.push(m);
|
|
5985
|
+
marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));
|
|
5986
|
+
cx.nextLine();
|
|
5987
|
+
break;
|
|
5988
|
+
} else {
|
|
5989
|
+
if (!first) addCodeText(marks, cx.lineStart - 1, cx.lineStart);
|
|
5990
|
+
for (let m of line.markers) marks.push(m);
|
|
5991
|
+
let textStart = cx.lineStart + line.basePos,
|
|
5992
|
+
textEnd = cx.lineStart + line.text.length;
|
|
5993
|
+
if (textStart < textEnd) addCodeText(marks, textStart, textEnd);
|
|
5994
|
+
}
|
|
5995
|
+
}
|
|
5996
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.FencedCode, cx.prevLineEnd() - from), from);
|
|
5997
|
+
return true;
|
|
5998
|
+
},
|
|
5999
|
+
Blockquote(cx, line) {
|
|
6000
|
+
let size = isBlockquote(line);
|
|
6001
|
+
if (size < 0) return false;
|
|
6002
|
+
cx.startContext(Type.Blockquote, line.pos);
|
|
6003
|
+
cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);
|
|
6004
|
+
line.moveBase(line.pos + size);
|
|
6005
|
+
return null;
|
|
6006
|
+
},
|
|
6007
|
+
HorizontalRule(cx, line) {
|
|
6008
|
+
if (isHorizontalRule(line, cx, false) < 0) return false;
|
|
6009
|
+
let from = cx.lineStart + line.pos;
|
|
6010
|
+
cx.nextLine();
|
|
6011
|
+
cx.addNode(Type.HorizontalRule, from);
|
|
6012
|
+
return true;
|
|
6013
|
+
},
|
|
6014
|
+
BulletList(cx, line) {
|
|
6015
|
+
let size = isBulletList(line, cx, false);
|
|
6016
|
+
if (size < 0) return false;
|
|
6017
|
+
if (cx.block.type != Type.BulletList) cx.startContext(Type.BulletList, line.basePos, line.next);
|
|
6018
|
+
let newBase = getListIndent(line, line.pos + 1);
|
|
6019
|
+
cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);
|
|
6020
|
+
cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);
|
|
6021
|
+
line.moveBaseColumn(newBase);
|
|
6022
|
+
return null;
|
|
6023
|
+
},
|
|
6024
|
+
OrderedList(cx, line) {
|
|
6025
|
+
let size = isOrderedList(line, cx, false);
|
|
6026
|
+
if (size < 0) return false;
|
|
6027
|
+
if (cx.block.type != Type.OrderedList) cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));
|
|
6028
|
+
let newBase = getListIndent(line, line.pos + size);
|
|
6029
|
+
cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);
|
|
6030
|
+
cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);
|
|
6031
|
+
line.moveBaseColumn(newBase);
|
|
6032
|
+
return null;
|
|
6033
|
+
},
|
|
6034
|
+
ATXHeading(cx, line) {
|
|
6035
|
+
let size = isAtxHeading(line);
|
|
6036
|
+
if (size < 0) return false;
|
|
6037
|
+
let off = line.pos,
|
|
6038
|
+
from = cx.lineStart + off;
|
|
6039
|
+
let endOfSpace = skipSpaceBack(line.text, line.text.length, off),
|
|
6040
|
+
after = endOfSpace;
|
|
6041
|
+
while (after > off && line.text.charCodeAt(after - 1) == line.next) after--;
|
|
6042
|
+
if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1))) after = line.text.length;
|
|
6043
|
+
let buf = cx.buffer.write(Type.HeaderMark, 0, size).writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);
|
|
6044
|
+
if (after < line.text.length) buf.write(Type.HeaderMark, after - off, endOfSpace - off);
|
|
6045
|
+
let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);
|
|
6046
|
+
cx.nextLine();
|
|
6047
|
+
cx.addNode(node, from);
|
|
6048
|
+
return true;
|
|
6049
|
+
},
|
|
6050
|
+
HTMLBlock(cx, line) {
|
|
6051
|
+
let type = isHTMLBlock(line, cx, false);
|
|
6052
|
+
if (type < 0) return false;
|
|
6053
|
+
let from = cx.lineStart + line.pos,
|
|
6054
|
+
end = HTMLBlockStyle[type][1];
|
|
6055
|
+
let marks = [],
|
|
6056
|
+
trailing = end != EmptyLine;
|
|
6057
|
+
while (!end.test(line.text) && cx.nextLine()) {
|
|
6058
|
+
if (line.depth < cx.stack.length) {
|
|
6059
|
+
trailing = false;
|
|
6060
|
+
break;
|
|
6061
|
+
}
|
|
6062
|
+
for (let m of line.markers) marks.push(m);
|
|
6063
|
+
}
|
|
6064
|
+
if (trailing) cx.nextLine();
|
|
6065
|
+
let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;
|
|
6066
|
+
let to = cx.prevLineEnd();
|
|
6067
|
+
cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);
|
|
6068
|
+
return true;
|
|
6069
|
+
},
|
|
6070
|
+
SetextHeading: undefined // Specifies relative precedence for block-continue function
|
|
6071
|
+
};
|
|
6072
|
+
// This implements a state machine that incrementally parses link references. At each
|
|
6073
|
+
// next line, it looks ahead to see if the line continues the reference or not. If it
|
|
6074
|
+
// doesn't and a valid link is available ending before that line, it finishes that.
|
|
6075
|
+
// Similarly, on `finish` (when the leaf is terminated by external circumstances), it
|
|
6076
|
+
// creates a link reference if there's a valid reference up to the current point.
|
|
6077
|
+
class LinkReferenceParser {
|
|
6078
|
+
constructor(leaf) {
|
|
6079
|
+
this.stage = 0 /* Start */;
|
|
6080
|
+
this.elts = [];
|
|
6081
|
+
this.pos = 0;
|
|
6082
|
+
this.start = leaf.start;
|
|
6083
|
+
this.advance(leaf.content);
|
|
6084
|
+
}
|
|
6085
|
+
nextLine(cx, line, leaf) {
|
|
6086
|
+
if (this.stage == -1 /* Failed */) return false;
|
|
6087
|
+
let content = leaf.content + "\n" + line.scrub();
|
|
6088
|
+
let finish = this.advance(content);
|
|
6089
|
+
if (finish > -1 && finish < content.length) return this.complete(cx, leaf, finish);
|
|
6090
|
+
return false;
|
|
6091
|
+
}
|
|
6092
|
+
finish(cx, leaf) {
|
|
6093
|
+
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);
|
|
6094
|
+
return false;
|
|
6095
|
+
}
|
|
6096
|
+
complete(cx, leaf, len) {
|
|
6097
|
+
cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));
|
|
6098
|
+
return true;
|
|
6099
|
+
}
|
|
6100
|
+
nextStage(elt) {
|
|
6101
|
+
if (elt) {
|
|
6102
|
+
this.pos = elt.to - this.start;
|
|
6103
|
+
this.elts.push(elt);
|
|
6104
|
+
this.stage++;
|
|
6105
|
+
return true;
|
|
6106
|
+
}
|
|
6107
|
+
if (elt === false) this.stage = -1 /* Failed */;
|
|
6108
|
+
return false;
|
|
6109
|
+
}
|
|
6110
|
+
advance(content) {
|
|
6111
|
+
for (;;) {
|
|
6112
|
+
if (this.stage == -1 /* Failed */) {
|
|
6113
|
+
return -1;
|
|
6114
|
+
} else if (this.stage == 0 /* Start */) {
|
|
6115
|
+
if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true))) return -1;
|
|
6116
|
+
if (content.charCodeAt(this.pos) != 58 /* ':' */) return this.stage = -1 /* Failed */;
|
|
6117
|
+
this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));
|
|
6118
|
+
this.pos++;
|
|
6119
|
+
} else if (this.stage == 1 /* Label */) {
|
|
6120
|
+
if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start))) return -1;
|
|
6121
|
+
} else if (this.stage == 2 /* Link */) {
|
|
6122
|
+
let skip = skipSpace(content, this.pos),
|
|
6123
|
+
end = 0;
|
|
6124
|
+
if (skip > this.pos) {
|
|
6125
|
+
let title = parseLinkTitle(content, skip, this.start);
|
|
6126
|
+
if (title) {
|
|
6127
|
+
let titleEnd = lineEnd(content, title.to - this.start);
|
|
6128
|
+
if (titleEnd > 0) {
|
|
6129
|
+
this.nextStage(title);
|
|
6130
|
+
end = titleEnd;
|
|
6131
|
+
}
|
|
6132
|
+
}
|
|
6133
|
+
}
|
|
6134
|
+
if (!end) end = lineEnd(content, this.pos);
|
|
6135
|
+
return end > 0 && end < content.length ? end : -1;
|
|
6136
|
+
} else {
|
|
6137
|
+
// RefStage.Title
|
|
6138
|
+
return lineEnd(content, this.pos);
|
|
6139
|
+
}
|
|
6140
|
+
}
|
|
6141
|
+
}
|
|
6142
|
+
}
|
|
6143
|
+
function lineEnd(text, pos) {
|
|
6144
|
+
for (; pos < text.length; pos++) {
|
|
6145
|
+
let next = text.charCodeAt(pos);
|
|
6146
|
+
if (next == 10) break;
|
|
6147
|
+
if (!space(next)) return -1;
|
|
6148
|
+
}
|
|
6149
|
+
return pos;
|
|
6150
|
+
}
|
|
6151
|
+
class SetextHeadingParser {
|
|
6152
|
+
nextLine(cx, line, leaf) {
|
|
6153
|
+
let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);
|
|
6154
|
+
let next = line.next;
|
|
6155
|
+
if (underline < 0) return false;
|
|
6156
|
+
let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);
|
|
6157
|
+
cx.nextLine();
|
|
6158
|
+
cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [...cx.parser.parseInline(leaf.content, leaf.start), underlineMark]));
|
|
6159
|
+
return true;
|
|
6160
|
+
}
|
|
6161
|
+
finish() {
|
|
6162
|
+
return false;
|
|
6163
|
+
}
|
|
6164
|
+
}
|
|
6165
|
+
const DefaultLeafBlocks = {
|
|
6166
|
+
LinkReference(_, leaf) {
|
|
6167
|
+
return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null;
|
|
6168
|
+
},
|
|
6169
|
+
SetextHeading() {
|
|
6170
|
+
return new SetextHeadingParser();
|
|
6171
|
+
}
|
|
6172
|
+
};
|
|
6173
|
+
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];
|
|
6174
|
+
const scanLineResult = {
|
|
6175
|
+
text: "",
|
|
6176
|
+
end: 0
|
|
6177
|
+
};
|
|
6178
|
+
/// Block-level parsing functions get access to this context object.
|
|
6179
|
+
class BlockContext {
|
|
6180
|
+
/// @internal
|
|
6181
|
+
constructor(
|
|
6182
|
+
/// The parser configuration used.
|
|
6183
|
+
parser,
|
|
6184
|
+
/// @internal
|
|
6185
|
+
input, fragments,
|
|
6186
|
+
/// @internal
|
|
6187
|
+
ranges) {
|
|
6188
|
+
this.parser = parser;
|
|
6189
|
+
this.input = input;
|
|
6190
|
+
this.ranges = ranges;
|
|
6191
|
+
this.line = new Line();
|
|
6192
|
+
this.atEnd = false;
|
|
6193
|
+
/// @internal
|
|
6194
|
+
this.dontInject = new Set();
|
|
6195
|
+
this.stoppedAt = null;
|
|
6196
|
+
/// The range index that absoluteLineStart points into @internal
|
|
6197
|
+
this.rangeI = 0;
|
|
6198
|
+
this.to = ranges[ranges.length - 1].to;
|
|
6199
|
+
this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;
|
|
6200
|
+
this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);
|
|
6201
|
+
this.stack = [this.block];
|
|
6202
|
+
this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;
|
|
6203
|
+
this.readLine();
|
|
6204
|
+
}
|
|
6205
|
+
get parsedPos() {
|
|
6206
|
+
return this.absoluteLineStart;
|
|
6207
|
+
}
|
|
6208
|
+
advance() {
|
|
6209
|
+
if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt) return this.finish();
|
|
6210
|
+
let {
|
|
6211
|
+
line
|
|
6212
|
+
} = this;
|
|
6213
|
+
for (;;) {
|
|
6214
|
+
while (line.depth < this.stack.length) this.finishContext();
|
|
6215
|
+
for (let mark of line.markers) this.addNode(mark.type, mark.from, mark.to);
|
|
6216
|
+
if (line.pos < line.text.length) break;
|
|
6217
|
+
// Empty line
|
|
6218
|
+
if (!this.nextLine()) return this.finish();
|
|
6219
|
+
}
|
|
6220
|
+
if (this.fragments && this.reuseFragment(line.basePos)) return null;
|
|
6221
|
+
start: for (;;) {
|
|
6222
|
+
for (let type of this.parser.blockParsers) if (type) {
|
|
6223
|
+
let result = type(this, line);
|
|
6224
|
+
if (result != false) {
|
|
6225
|
+
if (result == true) return null;
|
|
6226
|
+
line.forward();
|
|
6227
|
+
continue start;
|
|
6228
|
+
}
|
|
6229
|
+
}
|
|
6230
|
+
break;
|
|
6231
|
+
}
|
|
6232
|
+
let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));
|
|
6233
|
+
for (let parse of this.parser.leafBlockParsers) if (parse) {
|
|
6234
|
+
let parser = parse(this, leaf);
|
|
6235
|
+
if (parser) leaf.parsers.push(parser);
|
|
6236
|
+
}
|
|
6237
|
+
lines: while (this.nextLine()) {
|
|
6238
|
+
if (line.pos == line.text.length) break;
|
|
6239
|
+
if (line.indent < line.baseIndent + 4) {
|
|
6240
|
+
for (let stop of this.parser.endLeafBlock) if (stop(this, line, leaf)) break lines;
|
|
6241
|
+
}
|
|
6242
|
+
for (let parser of leaf.parsers) if (parser.nextLine(this, line, leaf)) return null;
|
|
6243
|
+
leaf.content += "\n" + line.scrub();
|
|
6244
|
+
for (let m of line.markers) leaf.marks.push(m);
|
|
6245
|
+
}
|
|
6246
|
+
this.finishLeaf(leaf);
|
|
6247
|
+
return null;
|
|
6248
|
+
}
|
|
6249
|
+
stopAt(pos) {
|
|
6250
|
+
if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError("Can't move stoppedAt forward");
|
|
6251
|
+
this.stoppedAt = pos;
|
|
6252
|
+
}
|
|
6253
|
+
reuseFragment(start) {
|
|
6254
|
+
if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) || !this.fragments.matches(this.block.hash)) return false;
|
|
6255
|
+
let taken = this.fragments.takeNodes(this);
|
|
6256
|
+
if (!taken) return false;
|
|
6257
|
+
let withoutGaps = taken,
|
|
6258
|
+
end = this.absoluteLineStart + taken;
|
|
6259
|
+
for (let i = 1; i < this.ranges.length; i++) {
|
|
6260
|
+
let gapFrom = this.ranges[i - 1].to,
|
|
6261
|
+
gapTo = this.ranges[i].from;
|
|
6262
|
+
if (gapFrom >= this.lineStart && gapTo < end) withoutGaps -= gapTo - gapFrom;
|
|
6263
|
+
}
|
|
6264
|
+
this.lineStart += withoutGaps;
|
|
6265
|
+
this.absoluteLineStart += taken;
|
|
6266
|
+
this.moveRangeI();
|
|
6267
|
+
if (this.absoluteLineStart < this.to) {
|
|
6268
|
+
this.lineStart++;
|
|
6269
|
+
this.absoluteLineStart++;
|
|
6270
|
+
this.readLine();
|
|
6271
|
+
} else {
|
|
6272
|
+
this.atEnd = true;
|
|
6273
|
+
this.readLine();
|
|
6274
|
+
}
|
|
6275
|
+
return true;
|
|
6276
|
+
}
|
|
6277
|
+
/// The number of parent blocks surrounding the current block.
|
|
6278
|
+
get depth() {
|
|
6279
|
+
return this.stack.length;
|
|
6280
|
+
}
|
|
6281
|
+
/// Get the type of the parent block at the given depth. When no
|
|
6282
|
+
/// depth is passed, return the type of the innermost parent.
|
|
6283
|
+
parentType() {
|
|
6284
|
+
let depth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.depth - 1;
|
|
6285
|
+
return this.parser.nodeSet.types[this.stack[depth].type];
|
|
6286
|
+
}
|
|
6287
|
+
/// Move to the next input line. This should only be called by
|
|
6288
|
+
/// (non-composite) [block parsers](#BlockParser.parse) that consume
|
|
6289
|
+
/// the line directly, or leaf block parser
|
|
6290
|
+
/// [`nextLine`](#LeafBlockParser.nextLine) methods when they
|
|
6291
|
+
/// consume the current line (and return true).
|
|
6292
|
+
nextLine() {
|
|
6293
|
+
this.lineStart += this.line.text.length;
|
|
6294
|
+
if (this.absoluteLineEnd >= this.to) {
|
|
6295
|
+
this.absoluteLineStart = this.absoluteLineEnd;
|
|
6296
|
+
this.atEnd = true;
|
|
6297
|
+
this.readLine();
|
|
6298
|
+
return false;
|
|
6299
|
+
} else {
|
|
6300
|
+
this.lineStart++;
|
|
6301
|
+
this.absoluteLineStart = this.absoluteLineEnd + 1;
|
|
6302
|
+
this.moveRangeI();
|
|
6303
|
+
this.readLine();
|
|
6304
|
+
return true;
|
|
6305
|
+
}
|
|
6306
|
+
}
|
|
6307
|
+
moveRangeI() {
|
|
6308
|
+
while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {
|
|
6309
|
+
this.rangeI++;
|
|
6310
|
+
this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);
|
|
6311
|
+
}
|
|
6312
|
+
}
|
|
6313
|
+
/// @internal
|
|
6314
|
+
scanLine(start) {
|
|
6315
|
+
let r = scanLineResult;
|
|
6316
|
+
r.end = start;
|
|
6317
|
+
if (start >= this.to) {
|
|
6318
|
+
r.text = "";
|
|
6319
|
+
} else {
|
|
6320
|
+
r.text = this.lineChunkAt(start);
|
|
6321
|
+
r.end += r.text.length;
|
|
6322
|
+
if (this.ranges.length > 1) {
|
|
6323
|
+
let textOffset = this.absoluteLineStart,
|
|
6324
|
+
rangeI = this.rangeI;
|
|
6325
|
+
while (this.ranges[rangeI].to < r.end) {
|
|
6326
|
+
rangeI++;
|
|
6327
|
+
let nextFrom = this.ranges[rangeI].from;
|
|
6328
|
+
let after = this.lineChunkAt(nextFrom);
|
|
6329
|
+
r.end = nextFrom + after.length;
|
|
6330
|
+
r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;
|
|
6331
|
+
textOffset = r.end - r.text.length;
|
|
6332
|
+
}
|
|
6333
|
+
}
|
|
6334
|
+
}
|
|
6335
|
+
return r;
|
|
6336
|
+
}
|
|
6337
|
+
/// @internal
|
|
6338
|
+
readLine() {
|
|
6339
|
+
let {
|
|
6340
|
+
line
|
|
6341
|
+
} = this,
|
|
6342
|
+
{
|
|
6343
|
+
text,
|
|
6344
|
+
end
|
|
6345
|
+
} = this.scanLine(this.absoluteLineStart);
|
|
6346
|
+
this.absoluteLineEnd = end;
|
|
6347
|
+
line.reset(text);
|
|
6348
|
+
for (; line.depth < this.stack.length; line.depth++) {
|
|
6349
|
+
let cx = this.stack[line.depth],
|
|
6350
|
+
handler = this.parser.skipContextMarkup[cx.type];
|
|
6351
|
+
if (!handler) throw new Error("Unhandled block context " + Type[cx.type]);
|
|
6352
|
+
if (!handler(cx, this, line)) break;
|
|
6353
|
+
line.forward();
|
|
6354
|
+
}
|
|
6355
|
+
}
|
|
6356
|
+
lineChunkAt(pos) {
|
|
6357
|
+
let next = this.input.chunk(pos),
|
|
6358
|
+
text;
|
|
6359
|
+
if (!this.input.lineChunks) {
|
|
6360
|
+
let eol = next.indexOf("\n");
|
|
6361
|
+
text = eol < 0 ? next : next.slice(0, eol);
|
|
6362
|
+
} else {
|
|
6363
|
+
text = next == "\n" ? "" : next;
|
|
6364
|
+
}
|
|
6365
|
+
return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;
|
|
6366
|
+
}
|
|
6367
|
+
/// The end position of the previous line.
|
|
6368
|
+
prevLineEnd() {
|
|
6369
|
+
return this.atEnd ? this.lineStart : this.lineStart - 1;
|
|
6370
|
+
}
|
|
6371
|
+
/// @internal
|
|
6372
|
+
startContext(type, start) {
|
|
6373
|
+
let value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
6374
|
+
this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);
|
|
6375
|
+
this.stack.push(this.block);
|
|
6376
|
+
}
|
|
6377
|
+
/// Start a composite block. Should only be called from [block
|
|
6378
|
+
/// parser functions](#BlockParser.parse) that return null.
|
|
6379
|
+
startComposite(type, start) {
|
|
6380
|
+
let value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
6381
|
+
this.startContext(this.parser.getNodeType(type), start, value);
|
|
6382
|
+
}
|
|
6383
|
+
/// @internal
|
|
6384
|
+
addNode(block, from, to) {
|
|
6385
|
+
if (typeof block == "number") block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);
|
|
6386
|
+
this.block.addChild(block, from - this.block.from);
|
|
6387
|
+
}
|
|
6388
|
+
/// Add a block element. Can be called by [block
|
|
6389
|
+
/// parsers](#BlockParser.parse).
|
|
6390
|
+
addElement(elt) {
|
|
6391
|
+
this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);
|
|
6392
|
+
}
|
|
6393
|
+
/// Add a block element from a [leaf parser](#LeafBlockParser). This
|
|
6394
|
+
/// makes sure any extra composite block markup (such as blockquote
|
|
6395
|
+
/// markers) inside the block are also added to the syntax tree.
|
|
6396
|
+
addLeafElement(leaf, elt) {
|
|
6397
|
+
this.addNode(this.buffer.writeElements(injectMarks(elt.children, leaf.marks), -elt.from).finish(elt.type, elt.to - elt.from), elt.from);
|
|
6398
|
+
}
|
|
6399
|
+
/// @internal
|
|
6400
|
+
finishContext() {
|
|
6401
|
+
let cx = this.stack.pop();
|
|
6402
|
+
let top = this.stack[this.stack.length - 1];
|
|
6403
|
+
top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);
|
|
6404
|
+
this.block = top;
|
|
6405
|
+
}
|
|
6406
|
+
finish() {
|
|
6407
|
+
while (this.stack.length > 1) this.finishContext();
|
|
6408
|
+
return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));
|
|
6409
|
+
}
|
|
6410
|
+
addGaps(tree) {
|
|
6411
|
+
return this.ranges.length > 1 ? injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.dontInject) : tree;
|
|
6412
|
+
}
|
|
6413
|
+
/// @internal
|
|
6414
|
+
finishLeaf(leaf) {
|
|
6415
|
+
for (let parser of leaf.parsers) if (parser.finish(this, leaf)) return;
|
|
6416
|
+
let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);
|
|
6417
|
+
this.addNode(this.buffer.writeElements(inline, -leaf.start).finish(Type.Paragraph, leaf.content.length), leaf.start);
|
|
6418
|
+
}
|
|
6419
|
+
elt(type, from, to, children) {
|
|
6420
|
+
if (typeof type == "string") return elt(this.parser.getNodeType(type), from, to, children);
|
|
6421
|
+
return new TreeElement(type, from);
|
|
6422
|
+
}
|
|
6423
|
+
/// @internal
|
|
6424
|
+
get buffer() {
|
|
6425
|
+
return new Buffer(this.parser.nodeSet);
|
|
6426
|
+
}
|
|
6427
|
+
}
|
|
6428
|
+
function injectGaps(ranges, rangeI, tree, offset, dont) {
|
|
6429
|
+
if (dont.has(tree.tree)) return tree.tree;
|
|
6430
|
+
let rangeEnd = ranges[rangeI].to;
|
|
6431
|
+
let children = [],
|
|
6432
|
+
positions = [],
|
|
6433
|
+
start = tree.from + offset;
|
|
6434
|
+
function movePastNext(upto, inclusive) {
|
|
6435
|
+
while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {
|
|
6436
|
+
let size = ranges[rangeI + 1].from - rangeEnd;
|
|
6437
|
+
offset += size;
|
|
6438
|
+
upto += size;
|
|
6439
|
+
rangeI++;
|
|
6440
|
+
rangeEnd = ranges[rangeI].to;
|
|
6441
|
+
}
|
|
6442
|
+
}
|
|
6443
|
+
for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {
|
|
6444
|
+
movePastNext(ch.from + offset, true);
|
|
6445
|
+
let from = ch.from + offset,
|
|
6446
|
+
node;
|
|
6447
|
+
if (ch.to + offset > rangeEnd) {
|
|
6448
|
+
node = injectGaps(ranges, rangeI, ch, offset, dont);
|
|
6449
|
+
movePastNext(ch.to + offset, false);
|
|
6450
|
+
} else {
|
|
6451
|
+
node = ch.toTree();
|
|
6452
|
+
}
|
|
6453
|
+
children.push(node);
|
|
6454
|
+
positions.push(from - start);
|
|
6455
|
+
}
|
|
6456
|
+
movePastNext(tree.to + offset, false);
|
|
6457
|
+
return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);
|
|
6458
|
+
}
|
|
6459
|
+
/// A Markdown parser configuration.
|
|
6460
|
+
class MarkdownParser extends Parser {
|
|
6461
|
+
/// @internal
|
|
6462
|
+
constructor(
|
|
6463
|
+
/// The parser's syntax [node
|
|
6464
|
+
/// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).
|
|
6465
|
+
nodeSet,
|
|
6466
|
+
/// @internal
|
|
6467
|
+
blockParsers,
|
|
6468
|
+
/// @internal
|
|
6469
|
+
leafBlockParsers,
|
|
6470
|
+
/// @internal
|
|
6471
|
+
blockNames,
|
|
6472
|
+
/// @internal
|
|
6473
|
+
endLeafBlock,
|
|
6474
|
+
/// @internal
|
|
6475
|
+
skipContextMarkup,
|
|
6476
|
+
/// @internal
|
|
6477
|
+
inlineParsers,
|
|
6478
|
+
/// @internal
|
|
6479
|
+
inlineNames,
|
|
6480
|
+
/// @internal
|
|
6481
|
+
wrappers) {
|
|
6482
|
+
super();
|
|
6483
|
+
this.nodeSet = nodeSet;
|
|
6484
|
+
this.blockParsers = blockParsers;
|
|
6485
|
+
this.leafBlockParsers = leafBlockParsers;
|
|
6486
|
+
this.blockNames = blockNames;
|
|
6487
|
+
this.endLeafBlock = endLeafBlock;
|
|
6488
|
+
this.skipContextMarkup = skipContextMarkup;
|
|
6489
|
+
this.inlineParsers = inlineParsers;
|
|
6490
|
+
this.inlineNames = inlineNames;
|
|
6491
|
+
this.wrappers = wrappers;
|
|
6492
|
+
/// @internal
|
|
6493
|
+
this.nodeTypes = Object.create(null);
|
|
6494
|
+
for (let t of nodeSet.types) this.nodeTypes[t.name] = t.id;
|
|
6495
|
+
}
|
|
6496
|
+
createParse(input, fragments, ranges) {
|
|
6497
|
+
let parse = new BlockContext(this, input, fragments, ranges);
|
|
6498
|
+
for (let w of this.wrappers) parse = w(parse, input, fragments, ranges);
|
|
6499
|
+
return parse;
|
|
6500
|
+
}
|
|
6501
|
+
/// Reconfigure the parser.
|
|
6502
|
+
configure(spec) {
|
|
6503
|
+
let config = resolveConfig(spec);
|
|
6504
|
+
if (!config) return this;
|
|
6505
|
+
let {
|
|
6506
|
+
nodeSet,
|
|
6507
|
+
skipContextMarkup
|
|
6508
|
+
} = this;
|
|
6509
|
+
let blockParsers = this.blockParsers.slice(),
|
|
6510
|
+
leafBlockParsers = this.leafBlockParsers.slice(),
|
|
6511
|
+
blockNames = this.blockNames.slice(),
|
|
6512
|
+
inlineParsers = this.inlineParsers.slice(),
|
|
6513
|
+
inlineNames = this.inlineNames.slice(),
|
|
6514
|
+
endLeafBlock = this.endLeafBlock.slice(),
|
|
6515
|
+
wrappers = this.wrappers;
|
|
6516
|
+
if (nonEmpty(config.defineNodes)) {
|
|
6517
|
+
skipContextMarkup = Object.assign({}, skipContextMarkup);
|
|
6518
|
+
let nodeTypes = nodeSet.types.slice(),
|
|
6519
|
+
styles;
|
|
6520
|
+
for (let s of config.defineNodes) {
|
|
6521
|
+
let {
|
|
6522
|
+
name,
|
|
6523
|
+
block,
|
|
6524
|
+
composite,
|
|
6525
|
+
style
|
|
6526
|
+
} = typeof s == "string" ? {
|
|
6527
|
+
name: s
|
|
6528
|
+
} : s;
|
|
6529
|
+
if (nodeTypes.some(t => t.name == name)) continue;
|
|
6530
|
+
if (composite) skipContextMarkup[nodeTypes.length] = (bl, cx, line) => composite(cx, line, bl.value);
|
|
6531
|
+
let id = nodeTypes.length;
|
|
6532
|
+
let group = composite ? ["Block", "BlockContext"] : !block ? undefined : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? ["Block", "LeafBlock", "Heading"] : ["Block", "LeafBlock"];
|
|
6533
|
+
nodeTypes.push(NodeType.define({
|
|
6534
|
+
id,
|
|
6535
|
+
name,
|
|
6536
|
+
props: group && [[NodeProp.group, group]]
|
|
6537
|
+
}));
|
|
6538
|
+
if (style) {
|
|
6539
|
+
if (!styles) styles = {};
|
|
6540
|
+
if (Array.isArray(style) || style instanceof Tag) styles[name] = style;else Object.assign(styles, style);
|
|
6541
|
+
}
|
|
6542
|
+
}
|
|
6543
|
+
nodeSet = new NodeSet(nodeTypes);
|
|
6544
|
+
if (styles) nodeSet = nodeSet.extend(styleTags(styles));
|
|
6545
|
+
}
|
|
6546
|
+
if (nonEmpty(config.props)) nodeSet = nodeSet.extend(...config.props);
|
|
6547
|
+
if (nonEmpty(config.remove)) {
|
|
6548
|
+
for (let rm of config.remove) {
|
|
6549
|
+
let block = this.blockNames.indexOf(rm),
|
|
6550
|
+
inline = this.inlineNames.indexOf(rm);
|
|
6551
|
+
if (block > -1) blockParsers[block] = leafBlockParsers[block] = undefined;
|
|
6552
|
+
if (inline > -1) inlineParsers[inline] = undefined;
|
|
6553
|
+
}
|
|
6554
|
+
}
|
|
6555
|
+
if (nonEmpty(config.parseBlock)) {
|
|
6556
|
+
for (let spec of config.parseBlock) {
|
|
6557
|
+
let found = blockNames.indexOf(spec.name);
|
|
6558
|
+
if (found > -1) {
|
|
6559
|
+
blockParsers[found] = spec.parse;
|
|
6560
|
+
leafBlockParsers[found] = spec.leaf;
|
|
6561
|
+
} else {
|
|
6562
|
+
let pos = spec.before ? findName(blockNames, spec.before) : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;
|
|
6563
|
+
blockParsers.splice(pos, 0, spec.parse);
|
|
6564
|
+
leafBlockParsers.splice(pos, 0, spec.leaf);
|
|
6565
|
+
blockNames.splice(pos, 0, spec.name);
|
|
6566
|
+
}
|
|
6567
|
+
if (spec.endLeaf) endLeafBlock.push(spec.endLeaf);
|
|
6568
|
+
}
|
|
6569
|
+
}
|
|
6570
|
+
if (nonEmpty(config.parseInline)) {
|
|
6571
|
+
for (let spec of config.parseInline) {
|
|
6572
|
+
let found = inlineNames.indexOf(spec.name);
|
|
6573
|
+
if (found > -1) {
|
|
6574
|
+
inlineParsers[found] = spec.parse;
|
|
6575
|
+
} else {
|
|
6576
|
+
let pos = spec.before ? findName(inlineNames, spec.before) : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;
|
|
6577
|
+
inlineParsers.splice(pos, 0, spec.parse);
|
|
6578
|
+
inlineNames.splice(pos, 0, spec.name);
|
|
6579
|
+
}
|
|
6580
|
+
}
|
|
6581
|
+
}
|
|
6582
|
+
if (config.wrap) wrappers = wrappers.concat(config.wrap);
|
|
6583
|
+
return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);
|
|
6584
|
+
}
|
|
6585
|
+
/// @internal
|
|
6586
|
+
getNodeType(name) {
|
|
6587
|
+
let found = this.nodeTypes[name];
|
|
6588
|
+
if (found == null) throw new RangeError(`Unknown node type '${name}'`);
|
|
6589
|
+
return found;
|
|
6590
|
+
}
|
|
6591
|
+
/// Parse the given piece of inline text at the given offset,
|
|
6592
|
+
/// returning an array of [`Element`](#Element) objects representing
|
|
6593
|
+
/// the inline content.
|
|
6594
|
+
parseInline(text, offset) {
|
|
6595
|
+
let cx = new InlineContext(this, text, offset);
|
|
6596
|
+
outer: for (let pos = offset; pos < cx.end;) {
|
|
6597
|
+
let next = cx.char(pos);
|
|
6598
|
+
for (let token of this.inlineParsers) if (token) {
|
|
6599
|
+
let result = token(cx, next, pos);
|
|
6600
|
+
if (result >= 0) {
|
|
6601
|
+
pos = result;
|
|
6602
|
+
continue outer;
|
|
6603
|
+
}
|
|
6604
|
+
}
|
|
6605
|
+
pos++;
|
|
6606
|
+
}
|
|
6607
|
+
return cx.resolveMarkers(0);
|
|
6608
|
+
}
|
|
6609
|
+
}
|
|
6610
|
+
function nonEmpty(a) {
|
|
6611
|
+
return a != null && a.length > 0;
|
|
6612
|
+
}
|
|
6613
|
+
function resolveConfig(spec) {
|
|
6614
|
+
if (!Array.isArray(spec)) return spec;
|
|
6615
|
+
if (spec.length == 0) return null;
|
|
6616
|
+
let conf = resolveConfig(spec[0]);
|
|
6617
|
+
if (spec.length == 1) return conf;
|
|
6618
|
+
let rest = resolveConfig(spec.slice(1));
|
|
6619
|
+
if (!rest || !conf) return conf || rest;
|
|
6620
|
+
let conc = (a, b) => (a || none).concat(b || none);
|
|
6621
|
+
let wrapA = conf.wrap,
|
|
6622
|
+
wrapB = rest.wrap;
|
|
6623
|
+
return {
|
|
6624
|
+
props: conc(conf.props, rest.props),
|
|
6625
|
+
defineNodes: conc(conf.defineNodes, rest.defineNodes),
|
|
6626
|
+
parseBlock: conc(conf.parseBlock, rest.parseBlock),
|
|
6627
|
+
parseInline: conc(conf.parseInline, rest.parseInline),
|
|
6628
|
+
remove: conc(conf.remove, rest.remove),
|
|
6629
|
+
wrap: !wrapA ? wrapB : !wrapB ? wrapA : (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)
|
|
6630
|
+
};
|
|
6631
|
+
}
|
|
6632
|
+
function findName(names, name) {
|
|
6633
|
+
let found = names.indexOf(name);
|
|
6634
|
+
if (found < 0) throw new RangeError(`Position specified relative to unknown parser ${name}`);
|
|
6635
|
+
return found;
|
|
6636
|
+
}
|
|
6637
|
+
let nodeTypes = [NodeType.none];
|
|
6638
|
+
for (let i = 1, name; name = Type[i]; i++) {
|
|
6639
|
+
nodeTypes[i] = NodeType.define({
|
|
6640
|
+
id: i,
|
|
6641
|
+
name,
|
|
6642
|
+
props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? ["Block", "BlockContext"] : ["Block", "LeafBlock"]]]
|
|
6643
|
+
});
|
|
6644
|
+
}
|
|
6645
|
+
const none = [];
|
|
6646
|
+
class Buffer {
|
|
6647
|
+
constructor(nodeSet) {
|
|
6648
|
+
this.nodeSet = nodeSet;
|
|
6649
|
+
this.content = [];
|
|
6650
|
+
this.nodes = [];
|
|
6651
|
+
}
|
|
6652
|
+
write(type, from, to) {
|
|
6653
|
+
let children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
|
6654
|
+
this.content.push(type, from, to, 4 + children * 4);
|
|
6655
|
+
return this;
|
|
6656
|
+
}
|
|
6657
|
+
writeElements(elts) {
|
|
6658
|
+
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
6659
|
+
for (let e of elts) e.writeTo(this, offset);
|
|
6660
|
+
return this;
|
|
6661
|
+
}
|
|
6662
|
+
finish(type, length) {
|
|
6663
|
+
return Tree.build({
|
|
6664
|
+
buffer: this.content,
|
|
6665
|
+
nodeSet: this.nodeSet,
|
|
6666
|
+
reused: this.nodes,
|
|
6667
|
+
topID: type,
|
|
6668
|
+
length
|
|
6669
|
+
});
|
|
6670
|
+
}
|
|
6671
|
+
}
|
|
6672
|
+
/// Elements are used to compose syntax nodes during parsing.
|
|
6673
|
+
class Element {
|
|
6674
|
+
/// @internal
|
|
6675
|
+
constructor(
|
|
6676
|
+
/// The node's
|
|
6677
|
+
/// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).
|
|
6678
|
+
type,
|
|
6679
|
+
/// The start of the node, as an offset from the start of the document.
|
|
6680
|
+
from,
|
|
6681
|
+
/// The end of the node.
|
|
6682
|
+
to) {
|
|
6683
|
+
let children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : none;
|
|
6684
|
+
this.type = type;
|
|
6685
|
+
this.from = from;
|
|
6686
|
+
this.to = to;
|
|
6687
|
+
this.children = children;
|
|
6688
|
+
}
|
|
6689
|
+
/// @internal
|
|
6690
|
+
writeTo(buf, offset) {
|
|
6691
|
+
let startOff = buf.content.length;
|
|
6692
|
+
buf.writeElements(this.children, offset);
|
|
6693
|
+
buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);
|
|
6694
|
+
}
|
|
6695
|
+
/// @internal
|
|
6696
|
+
toTree(nodeSet) {
|
|
6697
|
+
return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);
|
|
6698
|
+
}
|
|
6699
|
+
}
|
|
6700
|
+
class TreeElement {
|
|
6701
|
+
constructor(tree, from) {
|
|
6702
|
+
this.tree = tree;
|
|
6703
|
+
this.from = from;
|
|
6704
|
+
}
|
|
6705
|
+
get to() {
|
|
6706
|
+
return this.from + this.tree.length;
|
|
6707
|
+
}
|
|
6708
|
+
get type() {
|
|
6709
|
+
return this.tree.type.id;
|
|
6710
|
+
}
|
|
6711
|
+
get children() {
|
|
6712
|
+
return none;
|
|
6713
|
+
}
|
|
6714
|
+
writeTo(buf, offset) {
|
|
6715
|
+
buf.nodes.push(this.tree);
|
|
6716
|
+
buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);
|
|
6717
|
+
}
|
|
6718
|
+
toTree() {
|
|
6719
|
+
return this.tree;
|
|
6720
|
+
}
|
|
6721
|
+
}
|
|
6722
|
+
function elt(type, from, to, children) {
|
|
6723
|
+
return new Element(type, from, to, children);
|
|
6724
|
+
}
|
|
6725
|
+
const EmphasisUnderscore = {
|
|
6726
|
+
resolve: "Emphasis",
|
|
6727
|
+
mark: "EmphasisMark"
|
|
6728
|
+
};
|
|
6729
|
+
const EmphasisAsterisk = {
|
|
6730
|
+
resolve: "Emphasis",
|
|
6731
|
+
mark: "EmphasisMark"
|
|
6732
|
+
};
|
|
6733
|
+
const LinkStart = {},
|
|
6734
|
+
ImageStart = {};
|
|
6735
|
+
class InlineDelimiter {
|
|
6736
|
+
constructor(type, from, to, side) {
|
|
6737
|
+
this.type = type;
|
|
6738
|
+
this.from = from;
|
|
6739
|
+
this.to = to;
|
|
6740
|
+
this.side = side;
|
|
6741
|
+
}
|
|
6742
|
+
}
|
|
6743
|
+
const Escapable = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
|
|
6744
|
+
let Punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;
|
|
6745
|
+
try {
|
|
6746
|
+
Punctuation = new RegExp("[\\p{Pc}|\\p{Pd}|\\p{Pe}|\\p{Pf}|\\p{Pi}|\\p{Po}|\\p{Ps}]", "u");
|
|
6747
|
+
} catch (_) {}
|
|
6748
|
+
const DefaultInline = {
|
|
6749
|
+
Escape(cx, next, start) {
|
|
6750
|
+
if (next != 92 /* '\\' */ || start == cx.end - 1) return -1;
|
|
6751
|
+
let escaped = cx.char(start + 1);
|
|
6752
|
+
for (let i = 0; i < Escapable.length; i++) if (Escapable.charCodeAt(i) == escaped) return cx.append(elt(Type.Escape, start, start + 2));
|
|
6753
|
+
return -1;
|
|
6754
|
+
},
|
|
6755
|
+
Entity(cx, next, start) {
|
|
6756
|
+
if (next != 38 /* '&' */) return -1;
|
|
6757
|
+
let m = /^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(cx.slice(start + 1, start + 31));
|
|
6758
|
+
return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;
|
|
6759
|
+
},
|
|
6760
|
+
InlineCode(cx, next, start) {
|
|
6761
|
+
if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96) return -1;
|
|
6762
|
+
let pos = start + 1;
|
|
6763
|
+
while (pos < cx.end && cx.char(pos) == 96) pos++;
|
|
6764
|
+
let size = pos - start,
|
|
6765
|
+
curSize = 0;
|
|
6766
|
+
for (; pos < cx.end; pos++) {
|
|
6767
|
+
if (cx.char(pos) == 96) {
|
|
6768
|
+
curSize++;
|
|
6769
|
+
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)]));
|
|
6770
|
+
} else {
|
|
6771
|
+
curSize = 0;
|
|
6772
|
+
}
|
|
6773
|
+
}
|
|
6774
|
+
return -1;
|
|
6775
|
+
},
|
|
6776
|
+
HTMLTag(cx, next, start) {
|
|
6777
|
+
if (next != 60 /* '<' */ || start == cx.end - 1) return -1;
|
|
6778
|
+
let after = cx.slice(start + 1, cx.end);
|
|
6779
|
+
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);
|
|
6780
|
+
if (url) return cx.append(elt(Type.URL, start, start + 1 + url[0].length));
|
|
6781
|
+
let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);
|
|
6782
|
+
if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));
|
|
6783
|
+
let procInst = /^\?[^]*?\?>/.exec(after);
|
|
6784
|
+
if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));
|
|
6785
|
+
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);
|
|
6786
|
+
if (!m) return -1;
|
|
6787
|
+
return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));
|
|
6788
|
+
},
|
|
6789
|
+
Emphasis(cx, next, start) {
|
|
6790
|
+
if (next != 95 && next != 42) return -1;
|
|
6791
|
+
let pos = start + 1;
|
|
6792
|
+
while (cx.char(pos) == next) pos++;
|
|
6793
|
+
let before = cx.slice(start - 1, start),
|
|
6794
|
+
after = cx.slice(pos, pos + 1);
|
|
6795
|
+
let pBefore = Punctuation.test(before),
|
|
6796
|
+
pAfter = Punctuation.test(after);
|
|
6797
|
+
let sBefore = /\s|^$/.test(before),
|
|
6798
|
+
sAfter = /\s|^$/.test(after);
|
|
6799
|
+
let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);
|
|
6800
|
+
let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);
|
|
6801
|
+
let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);
|
|
6802
|
+
let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);
|
|
6803
|
+
return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Open */ : 0) | (canClose ? 2 /* Close */ : 0)));
|
|
6804
|
+
},
|
|
6805
|
+
HardBreak(cx, next, start) {
|
|
6806
|
+
if (next == 92 /* '\\' */ && cx.char(start + 1) == 10 /* '\n' */) return cx.append(elt(Type.HardBreak, start, start + 2));
|
|
6807
|
+
if (next == 32) {
|
|
6808
|
+
let pos = start + 1;
|
|
6809
|
+
while (cx.char(pos) == 32) pos++;
|
|
6810
|
+
if (cx.char(pos) == 10 && pos >= start + 2) return cx.append(elt(Type.HardBreak, start, pos + 1));
|
|
6811
|
+
}
|
|
6812
|
+
return -1;
|
|
6813
|
+
},
|
|
6814
|
+
Link(cx, next, start) {
|
|
6815
|
+
return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Open */)) : -1;
|
|
6816
|
+
},
|
|
6817
|
+
Image(cx, next, start) {
|
|
6818
|
+
return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */ ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Open */)) : -1;
|
|
6819
|
+
},
|
|
6820
|
+
LinkEnd(cx, next, start) {
|
|
6821
|
+
if (next != 93 /* ']' */) return -1;
|
|
6822
|
+
// Scanning back to the next link/image start marker
|
|
6823
|
+
for (let i = cx.parts.length - 1; i >= 0; i--) {
|
|
6824
|
+
let part = cx.parts[i];
|
|
6825
|
+
if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {
|
|
6826
|
+
// If this one has been set invalid (because it would produce
|
|
6827
|
+
// a nested link) or there's no valid link here ignore both.
|
|
6828
|
+
if (!part.side || cx.skipSpace(part.to) == start && !/[(\[]/.test(cx.slice(start + 1, start + 2))) {
|
|
6829
|
+
cx.parts[i] = null;
|
|
6830
|
+
return -1;
|
|
6831
|
+
}
|
|
6832
|
+
// Finish the content and replace the entire range in
|
|
6833
|
+
// this.parts with the link/image node.
|
|
6834
|
+
let content = cx.takeContent(i);
|
|
6835
|
+
let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);
|
|
6836
|
+
// Set any open-link markers before this link to invalid.
|
|
6837
|
+
if (part.type == LinkStart) for (let j = 0; j < i; j++) {
|
|
6838
|
+
let p = cx.parts[j];
|
|
6839
|
+
if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = 0;
|
|
6840
|
+
}
|
|
6841
|
+
return link.to;
|
|
6842
|
+
}
|
|
6843
|
+
}
|
|
6844
|
+
return -1;
|
|
6845
|
+
}
|
|
6846
|
+
};
|
|
6847
|
+
function finishLink(cx, content, type, start, startPos) {
|
|
6848
|
+
let {
|
|
6849
|
+
text
|
|
6850
|
+
} = cx,
|
|
6851
|
+
next = cx.char(startPos),
|
|
6852
|
+
endPos = startPos;
|
|
6853
|
+
content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));
|
|
6854
|
+
content.push(elt(Type.LinkMark, startPos - 1, startPos));
|
|
6855
|
+
if (next == 40 /* '(' */) {
|
|
6856
|
+
let pos = cx.skipSpace(startPos + 1);
|
|
6857
|
+
let dest = parseURL(text, pos - cx.offset, cx.offset),
|
|
6858
|
+
title;
|
|
6859
|
+
if (dest) {
|
|
6860
|
+
pos = cx.skipSpace(dest.to);
|
|
6861
|
+
title = parseLinkTitle(text, pos - cx.offset, cx.offset);
|
|
6862
|
+
if (title) pos = cx.skipSpace(title.to);
|
|
6863
|
+
}
|
|
6864
|
+
if (cx.char(pos) == 41 /* ')' */) {
|
|
6865
|
+
content.push(elt(Type.LinkMark, startPos, startPos + 1));
|
|
6866
|
+
endPos = pos + 1;
|
|
6867
|
+
if (dest) content.push(dest);
|
|
6868
|
+
if (title) content.push(title);
|
|
6869
|
+
content.push(elt(Type.LinkMark, pos, endPos));
|
|
6870
|
+
}
|
|
6871
|
+
} else if (next == 91 /* '[' */) {
|
|
6872
|
+
let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);
|
|
6873
|
+
if (label) {
|
|
6874
|
+
content.push(label);
|
|
6875
|
+
endPos = label.to;
|
|
6876
|
+
}
|
|
6877
|
+
}
|
|
6878
|
+
return elt(type, start, endPos, content);
|
|
6879
|
+
}
|
|
6880
|
+
// These return `null` when falling off the end of the input, `false`
|
|
6881
|
+
// when parsing fails otherwise (for use in the incremental link
|
|
6882
|
+
// reference parser).
|
|
6883
|
+
function parseURL(text, start, offset) {
|
|
6884
|
+
let next = text.charCodeAt(start);
|
|
6885
|
+
if (next == 60 /* '<' */) {
|
|
6886
|
+
for (let pos = start + 1; pos < text.length; pos++) {
|
|
6887
|
+
let ch = text.charCodeAt(pos);
|
|
6888
|
+
if (ch == 62 /* '>' */) return elt(Type.URL, start + offset, pos + 1 + offset);
|
|
6889
|
+
if (ch == 60 || ch == 10 /* '<\n' */) return false;
|
|
6890
|
+
}
|
|
6891
|
+
return null;
|
|
6892
|
+
} else {
|
|
6893
|
+
let depth = 0,
|
|
6894
|
+
pos = start;
|
|
6895
|
+
for (let escaped = false; pos < text.length; pos++) {
|
|
6896
|
+
let ch = text.charCodeAt(pos);
|
|
6897
|
+
if (space(ch)) {
|
|
6898
|
+
break;
|
|
6899
|
+
} else if (escaped) {
|
|
6900
|
+
escaped = false;
|
|
6901
|
+
} else if (ch == 40 /* '(' */) {
|
|
6902
|
+
depth++;
|
|
6903
|
+
} else if (ch == 41 /* ')' */) {
|
|
6904
|
+
if (!depth) break;
|
|
6905
|
+
depth--;
|
|
6906
|
+
} else if (ch == 92 /* '\\' */) {
|
|
6907
|
+
escaped = true;
|
|
6908
|
+
}
|
|
6909
|
+
}
|
|
6910
|
+
return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;
|
|
6911
|
+
}
|
|
6912
|
+
}
|
|
6913
|
+
function parseLinkTitle(text, start, offset) {
|
|
6914
|
+
let next = text.charCodeAt(start);
|
|
6915
|
+
if (next != 39 && next != 34 && next != 40 /* '"\'(' */) return false;
|
|
6916
|
+
let end = next == 40 ? 41 : next;
|
|
6917
|
+
for (let pos = start + 1, escaped = false; pos < text.length; pos++) {
|
|
6918
|
+
let ch = text.charCodeAt(pos);
|
|
6919
|
+
if (escaped) escaped = false;else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset);else if (ch == 92 /* '\\' */) escaped = true;
|
|
6920
|
+
}
|
|
6921
|
+
return null;
|
|
6922
|
+
}
|
|
6923
|
+
function parseLinkLabel(text, start, offset, requireNonWS) {
|
|
6924
|
+
for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {
|
|
6925
|
+
let ch = text.charCodeAt(pos);
|
|
6926
|
+
if (escaped) escaped = false;else if (ch == 93 /* ']' */) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);else {
|
|
6927
|
+
if (requireNonWS && !space(ch)) requireNonWS = false;
|
|
6928
|
+
if (ch == 91 /* '[' */) return false;else if (ch == 92 /* '\\' */) escaped = true;
|
|
6929
|
+
}
|
|
6930
|
+
}
|
|
6931
|
+
return null;
|
|
6932
|
+
}
|
|
6933
|
+
/// Inline parsing functions get access to this context, and use it to
|
|
6934
|
+
/// read the content and emit syntax nodes.
|
|
6935
|
+
class InlineContext {
|
|
6936
|
+
/// @internal
|
|
6937
|
+
constructor(
|
|
6938
|
+
/// The parser that is being used.
|
|
6939
|
+
parser,
|
|
6940
|
+
/// The text of this inline section.
|
|
6941
|
+
text,
|
|
6942
|
+
/// The starting offset of the section in the document.
|
|
6943
|
+
offset) {
|
|
6944
|
+
this.parser = parser;
|
|
6945
|
+
this.text = text;
|
|
6946
|
+
this.offset = offset;
|
|
6947
|
+
/// @internal
|
|
6948
|
+
this.parts = [];
|
|
6949
|
+
}
|
|
6950
|
+
/// Get the character code at the given (document-relative)
|
|
6951
|
+
/// position.
|
|
6952
|
+
char(pos) {
|
|
6953
|
+
return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset);
|
|
6954
|
+
}
|
|
6955
|
+
/// The position of the end of this inline section.
|
|
6956
|
+
get end() {
|
|
6957
|
+
return this.offset + this.text.length;
|
|
6958
|
+
}
|
|
6959
|
+
/// Get a substring of this inline section. Again uses
|
|
6960
|
+
/// document-relative positions.
|
|
6961
|
+
slice(from, to) {
|
|
6962
|
+
return this.text.slice(from - this.offset, to - this.offset);
|
|
6963
|
+
}
|
|
6964
|
+
/// @internal
|
|
6965
|
+
append(elt) {
|
|
6966
|
+
this.parts.push(elt);
|
|
6967
|
+
return elt.to;
|
|
6968
|
+
}
|
|
6969
|
+
/// Add a [delimiter](#DelimiterType) at this given position. `open`
|
|
6970
|
+
/// and `close` indicate whether this delimiter is opening, closing,
|
|
6971
|
+
/// or both. Returns the end of the delimiter, for convenient
|
|
6972
|
+
/// returning from [parse functions](#InlineParser.parse).
|
|
6973
|
+
addDelimiter(type, from, to, open, close) {
|
|
6974
|
+
return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Open */ : 0) | (close ? 2 /* Close */ : 0)));
|
|
6975
|
+
}
|
|
6976
|
+
/// Add an inline element. Returns the end of the element.
|
|
6977
|
+
addElement(elt) {
|
|
6978
|
+
return this.append(elt);
|
|
6979
|
+
}
|
|
6980
|
+
/// Resolve markers between this.parts.length and from, wrapping matched markers in the
|
|
6981
|
+
/// appropriate node and updating the content of this.parts. @internal
|
|
6982
|
+
resolveMarkers(from) {
|
|
6983
|
+
// Scan forward, looking for closing tokens
|
|
6984
|
+
for (let i = from; i < this.parts.length; i++) {
|
|
6985
|
+
let close = this.parts[i];
|
|
6986
|
+
if (!(close instanceof InlineDelimiter && close.type.resolve && close.side & 2 /* Close */)) continue;
|
|
6987
|
+
let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;
|
|
6988
|
+
let closeSize = close.to - close.from;
|
|
6989
|
+
let open,
|
|
6990
|
+
j = i - 1;
|
|
6991
|
+
// Continue scanning for a matching opening token
|
|
6992
|
+
for (; j >= from; j--) {
|
|
6993
|
+
let part = this.parts[j];
|
|
6994
|
+
if (part instanceof InlineDelimiter && part.side & 1 /* Open */ && part.type == close.type &&
|
|
6995
|
+
// Ignore emphasis delimiters where the character count doesn't match
|
|
6996
|
+
!(emp && (close.side & 1 /* Open */ || part.side & 2 /* Close */) && (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {
|
|
6997
|
+
open = part;
|
|
6998
|
+
break;
|
|
6999
|
+
}
|
|
7000
|
+
}
|
|
7001
|
+
if (!open) continue;
|
|
7002
|
+
let type = close.type.resolve,
|
|
7003
|
+
content = [];
|
|
7004
|
+
let start = open.from,
|
|
7005
|
+
end = close.to;
|
|
7006
|
+
// Emphasis marker effect depends on the character count. Size consumed is minimum of the two
|
|
7007
|
+
// markers.
|
|
7008
|
+
if (emp) {
|
|
7009
|
+
let size = Math.min(2, open.to - open.from, closeSize);
|
|
7010
|
+
start = open.to - size;
|
|
7011
|
+
end = close.from + size;
|
|
7012
|
+
type = size == 1 ? "Emphasis" : "StrongEmphasis";
|
|
7013
|
+
}
|
|
7014
|
+
// Move the covered region into content, optionally adding marker nodes
|
|
7015
|
+
if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to));
|
|
7016
|
+
for (let k = j + 1; k < i; k++) {
|
|
7017
|
+
if (this.parts[k] instanceof Element) content.push(this.parts[k]);
|
|
7018
|
+
this.parts[k] = null;
|
|
7019
|
+
}
|
|
7020
|
+
if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end));
|
|
7021
|
+
let element = this.elt(type, start, end, content);
|
|
7022
|
+
// If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.
|
|
7023
|
+
this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;
|
|
7024
|
+
let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;
|
|
7025
|
+
// Insert the new element in this.parts
|
|
7026
|
+
if (keep) this.parts.splice(i, 0, element);else this.parts[i] = element;
|
|
7027
|
+
}
|
|
7028
|
+
// Collect the elements remaining in this.parts into an array.
|
|
7029
|
+
let result = [];
|
|
7030
|
+
for (let i = from; i < this.parts.length; i++) {
|
|
7031
|
+
let part = this.parts[i];
|
|
7032
|
+
if (part instanceof Element) result.push(part);
|
|
7033
|
+
}
|
|
7034
|
+
return result;
|
|
7035
|
+
}
|
|
7036
|
+
/// Find an opening delimiter of the given type. Returns `null` if
|
|
7037
|
+
/// no delimiter is found, or an index that can be passed to
|
|
7038
|
+
/// [`takeContent`](#InlineContext.takeContent) otherwise.
|
|
7039
|
+
findOpeningDelimiter(type) {
|
|
7040
|
+
for (let i = this.parts.length - 1; i >= 0; i--) {
|
|
7041
|
+
let part = this.parts[i];
|
|
7042
|
+
if (part instanceof InlineDelimiter && part.type == type) return i;
|
|
7043
|
+
}
|
|
7044
|
+
return null;
|
|
7045
|
+
}
|
|
7046
|
+
/// Remove all inline elements and delimiters starting from the
|
|
7047
|
+
/// given index (which you should get from
|
|
7048
|
+
/// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),
|
|
7049
|
+
/// resolve delimiters inside of them, and return them as an array
|
|
7050
|
+
/// of elements.
|
|
7051
|
+
takeContent(startIndex) {
|
|
7052
|
+
let content = this.resolveMarkers(startIndex);
|
|
7053
|
+
this.parts.length = startIndex;
|
|
7054
|
+
return content;
|
|
7055
|
+
}
|
|
7056
|
+
/// Skip space after the given (document) position, returning either
|
|
7057
|
+
/// the position of the next non-space character or the end of the
|
|
7058
|
+
/// section.
|
|
7059
|
+
skipSpace(from) {
|
|
7060
|
+
return skipSpace(this.text, from - this.offset) + this.offset;
|
|
7061
|
+
}
|
|
7062
|
+
elt(type, from, to, children) {
|
|
7063
|
+
if (typeof type == "string") return elt(this.parser.getNodeType(type), from, to, children);
|
|
7064
|
+
return new TreeElement(type, from);
|
|
7065
|
+
}
|
|
7066
|
+
}
|
|
7067
|
+
function injectMarks(elements, marks) {
|
|
7068
|
+
if (!marks.length) return elements;
|
|
7069
|
+
if (!elements.length) return marks;
|
|
7070
|
+
let elts = elements.slice(),
|
|
7071
|
+
eI = 0;
|
|
7072
|
+
for (let mark of marks) {
|
|
7073
|
+
while (eI < elts.length && elts[eI].to < mark.to) eI++;
|
|
7074
|
+
if (eI < elts.length && elts[eI].from < mark.from) {
|
|
7075
|
+
let e = elts[eI];
|
|
7076
|
+
if (e instanceof Element) elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));
|
|
7077
|
+
} else {
|
|
7078
|
+
elts.splice(eI++, 0, mark);
|
|
7079
|
+
}
|
|
7080
|
+
}
|
|
7081
|
+
return elts;
|
|
7082
|
+
}
|
|
7083
|
+
// These are blocks that can span blank lines, and should thus only be
|
|
7084
|
+
// reused if their next sibling is also being reused.
|
|
7085
|
+
const NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];
|
|
7086
|
+
class FragmentCursor {
|
|
7087
|
+
constructor(fragments, input) {
|
|
7088
|
+
this.fragments = fragments;
|
|
7089
|
+
this.input = input;
|
|
7090
|
+
// Index into fragment array
|
|
7091
|
+
this.i = 0;
|
|
7092
|
+
// Active fragment
|
|
7093
|
+
this.fragment = null;
|
|
7094
|
+
this.fragmentEnd = -1;
|
|
7095
|
+
// Cursor into the current fragment, if any. When `moveTo` returns
|
|
7096
|
+
// true, this points at the first block after `pos`.
|
|
7097
|
+
this.cursor = null;
|
|
7098
|
+
if (fragments.length) this.fragment = fragments[this.i++];
|
|
7099
|
+
}
|
|
7100
|
+
nextFragment() {
|
|
7101
|
+
this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;
|
|
7102
|
+
this.cursor = null;
|
|
7103
|
+
this.fragmentEnd = -1;
|
|
7104
|
+
}
|
|
7105
|
+
moveTo(pos, lineStart) {
|
|
7106
|
+
while (this.fragment && this.fragment.to <= pos) this.nextFragment();
|
|
7107
|
+
if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false;
|
|
7108
|
+
if (this.fragmentEnd < 0) {
|
|
7109
|
+
let end = this.fragment.to;
|
|
7110
|
+
while (end > 0 && this.input.read(end - 1, end) != "\n") end--;
|
|
7111
|
+
this.fragmentEnd = end ? end - 1 : 0;
|
|
7112
|
+
}
|
|
7113
|
+
let c = this.cursor;
|
|
7114
|
+
if (!c) {
|
|
7115
|
+
c = this.cursor = this.fragment.tree.cursor();
|
|
7116
|
+
c.firstChild();
|
|
7117
|
+
}
|
|
7118
|
+
let rPos = pos + this.fragment.offset;
|
|
7119
|
+
while (c.to <= rPos) if (!c.parent()) return false;
|
|
7120
|
+
for (;;) {
|
|
7121
|
+
if (c.from >= rPos) return this.fragment.from <= lineStart;
|
|
7122
|
+
if (!c.childAfter(rPos)) return false;
|
|
7123
|
+
}
|
|
7124
|
+
}
|
|
7125
|
+
matches(hash) {
|
|
7126
|
+
let tree = this.cursor.tree;
|
|
7127
|
+
return tree && tree.prop(NodeProp.contextHash) == hash;
|
|
7128
|
+
}
|
|
7129
|
+
takeNodes(cx) {
|
|
7130
|
+
let cur = this.cursor,
|
|
7131
|
+
off = this.fragment.offset,
|
|
7132
|
+
fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);
|
|
7133
|
+
let start = cx.absoluteLineStart,
|
|
7134
|
+
end = start,
|
|
7135
|
+
blockI = cx.block.children.length;
|
|
7136
|
+
let prevEnd = end,
|
|
7137
|
+
prevI = blockI;
|
|
7138
|
+
for (;;) {
|
|
7139
|
+
if (cur.to - off > fragEnd) {
|
|
7140
|
+
if (cur.type.isAnonymous && cur.firstChild()) continue;
|
|
7141
|
+
break;
|
|
7142
|
+
}
|
|
7143
|
+
cx.dontInject.add(cur.tree);
|
|
7144
|
+
cx.addNode(cur.tree, cur.from - off);
|
|
7145
|
+
// Taken content must always end in a block, because incremental
|
|
7146
|
+
// parsing happens on block boundaries. Never stop directly
|
|
7147
|
+
// after an indented code block, since those can continue after
|
|
7148
|
+
// any number of blank lines.
|
|
7149
|
+
if (cur.type.is("Block")) {
|
|
7150
|
+
if (NotLast.indexOf(cur.type.id) < 0) {
|
|
7151
|
+
end = cur.to - off;
|
|
7152
|
+
blockI = cx.block.children.length;
|
|
7153
|
+
} else {
|
|
7154
|
+
end = prevEnd;
|
|
7155
|
+
blockI = prevI;
|
|
7156
|
+
prevEnd = cur.to - off;
|
|
7157
|
+
prevI = cx.block.children.length;
|
|
7158
|
+
}
|
|
7159
|
+
}
|
|
7160
|
+
if (!cur.nextSibling()) break;
|
|
7161
|
+
}
|
|
7162
|
+
while (cx.block.children.length > blockI) {
|
|
7163
|
+
cx.block.children.pop();
|
|
7164
|
+
cx.block.positions.pop();
|
|
7165
|
+
}
|
|
7166
|
+
return end - start;
|
|
7167
|
+
}
|
|
7168
|
+
}
|
|
7169
|
+
const markdownHighlighting = styleTags({
|
|
7170
|
+
"Blockquote/...": tags$1.quote,
|
|
7171
|
+
HorizontalRule: tags$1.contentSeparator,
|
|
7172
|
+
"ATXHeading1/... SetextHeading1/...": tags$1.heading1,
|
|
7173
|
+
"ATXHeading2/... SetextHeading2/...": tags$1.heading2,
|
|
7174
|
+
"ATXHeading3/...": tags$1.heading3,
|
|
7175
|
+
"ATXHeading4/...": tags$1.heading4,
|
|
7176
|
+
"ATXHeading5/...": tags$1.heading5,
|
|
7177
|
+
"ATXHeading6/...": tags$1.heading6,
|
|
7178
|
+
"Comment CommentBlock": tags$1.comment,
|
|
7179
|
+
Escape: tags$1.escape,
|
|
7180
|
+
Entity: tags$1.character,
|
|
7181
|
+
"Emphasis/...": tags$1.emphasis,
|
|
7182
|
+
"StrongEmphasis/...": tags$1.strong,
|
|
7183
|
+
"Link/... Image/...": tags$1.link,
|
|
7184
|
+
"OrderedList/... BulletList/...": tags$1.list,
|
|
7185
|
+
"BlockQuote/...": tags$1.quote,
|
|
7186
|
+
"InlineCode CodeText": tags$1.monospace,
|
|
7187
|
+
URL: tags$1.url,
|
|
7188
|
+
"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark": tags$1.processingInstruction,
|
|
7189
|
+
"CodeInfo LinkLabel": tags$1.labelName,
|
|
7190
|
+
LinkTitle: tags$1.string,
|
|
7191
|
+
Paragraph: tags$1.content
|
|
7192
|
+
});
|
|
7193
|
+
/// The default CommonMark parser.
|
|
7194
|
+
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), []);
|
|
7195
|
+
function leftOverSpace(node, from, to) {
|
|
7196
|
+
let ranges = [];
|
|
7197
|
+
for (let n = node.firstChild, pos = from;; n = n.nextSibling) {
|
|
7198
|
+
let nextPos = n ? n.from : to;
|
|
7199
|
+
if (nextPos > pos) ranges.push({
|
|
7200
|
+
from: pos,
|
|
7201
|
+
to: nextPos
|
|
7202
|
+
});
|
|
7203
|
+
if (!n) break;
|
|
7204
|
+
pos = n.to;
|
|
7205
|
+
}
|
|
7206
|
+
return ranges;
|
|
7207
|
+
}
|
|
7208
|
+
/// Create a Markdown extension to enable nested parsing on code
|
|
7209
|
+
/// blocks and/or embedded HTML.
|
|
7210
|
+
function parseCode(config) {
|
|
7211
|
+
let {
|
|
7212
|
+
codeParser,
|
|
7213
|
+
htmlParser
|
|
7214
|
+
} = config;
|
|
7215
|
+
let wrap = parseMixed((node, input) => {
|
|
7216
|
+
let id = node.type.id;
|
|
7217
|
+
if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {
|
|
7218
|
+
let info = "";
|
|
7219
|
+
if (id == Type.FencedCode) {
|
|
7220
|
+
let infoNode = node.node.getChild(Type.CodeInfo);
|
|
7221
|
+
if (infoNode) info = input.read(infoNode.from, infoNode.to);
|
|
7222
|
+
}
|
|
7223
|
+
let parser = codeParser(info);
|
|
7224
|
+
if (parser) return {
|
|
7225
|
+
parser,
|
|
7226
|
+
overlay: node => node.type.id == Type.CodeText
|
|
7227
|
+
};
|
|
7228
|
+
} else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {
|
|
7229
|
+
return {
|
|
7230
|
+
parser: htmlParser,
|
|
7231
|
+
overlay: leftOverSpace(node.node, node.from, node.to)
|
|
7232
|
+
};
|
|
7233
|
+
}
|
|
7234
|
+
return null;
|
|
7235
|
+
});
|
|
7236
|
+
return {
|
|
7237
|
+
wrap
|
|
7238
|
+
};
|
|
7239
|
+
}
|
|
7240
|
+
const StrikethroughDelim = {
|
|
7241
|
+
resolve: "Strikethrough",
|
|
7242
|
+
mark: "StrikethroughMark"
|
|
7243
|
+
};
|
|
7244
|
+
/// An extension that implements
|
|
7245
|
+
/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)
|
|
7246
|
+
/// Strikethrough syntax using `~~` delimiters.
|
|
7247
|
+
const Strikethrough = {
|
|
7248
|
+
defineNodes: [{
|
|
7249
|
+
name: "Strikethrough",
|
|
7250
|
+
style: {
|
|
7251
|
+
"Strikethrough/...": tags$1.strikethrough
|
|
7252
|
+
}
|
|
7253
|
+
}, {
|
|
7254
|
+
name: "StrikethroughMark",
|
|
7255
|
+
style: tags$1.processingInstruction
|
|
7256
|
+
}],
|
|
7257
|
+
parseInline: [{
|
|
7258
|
+
name: "Strikethrough",
|
|
7259
|
+
parse(cx, next, pos) {
|
|
7260
|
+
if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126) return -1;
|
|
7261
|
+
let before = cx.slice(pos - 1, pos),
|
|
7262
|
+
after = cx.slice(pos + 2, pos + 3);
|
|
7263
|
+
let sBefore = /\s|^$/.test(before),
|
|
7264
|
+
sAfter = /\s|^$/.test(after);
|
|
7265
|
+
let pBefore = Punctuation.test(before),
|
|
7266
|
+
pAfter = Punctuation.test(after);
|
|
7267
|
+
return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));
|
|
7268
|
+
},
|
|
7269
|
+
after: "Emphasis"
|
|
7270
|
+
}]
|
|
7271
|
+
};
|
|
7272
|
+
function parseRow(cx, line) {
|
|
7273
|
+
let startI = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
7274
|
+
let elts = arguments.length > 3 ? arguments[3] : undefined;
|
|
7275
|
+
let offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
|
|
7276
|
+
let count = 0,
|
|
7277
|
+
first = true,
|
|
7278
|
+
cellStart = -1,
|
|
7279
|
+
cellEnd = -1,
|
|
7280
|
+
esc = false;
|
|
7281
|
+
let parseCell = () => {
|
|
7282
|
+
elts.push(cx.elt("TableCell", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));
|
|
7283
|
+
};
|
|
7284
|
+
for (let i = startI; i < line.length; i++) {
|
|
7285
|
+
let next = line.charCodeAt(i);
|
|
7286
|
+
if (next == 124 /* '|' */ && !esc) {
|
|
7287
|
+
if (!first || cellStart > -1) count++;
|
|
7288
|
+
first = false;
|
|
7289
|
+
if (elts) {
|
|
7290
|
+
if (cellStart > -1) parseCell();
|
|
7291
|
+
elts.push(cx.elt("TableDelimiter", i + offset, i + offset + 1));
|
|
7292
|
+
}
|
|
7293
|
+
cellStart = cellEnd = -1;
|
|
7294
|
+
} else if (esc || next != 32 && next != 9) {
|
|
7295
|
+
if (cellStart < 0) cellStart = i;
|
|
7296
|
+
cellEnd = i + 1;
|
|
7297
|
+
}
|
|
7298
|
+
esc = !esc && next == 92;
|
|
7299
|
+
}
|
|
7300
|
+
if (cellStart > -1) {
|
|
7301
|
+
count++;
|
|
7302
|
+
if (elts) parseCell();
|
|
7303
|
+
}
|
|
7304
|
+
return count;
|
|
7305
|
+
}
|
|
7306
|
+
function hasPipe(str, start) {
|
|
7307
|
+
for (let i = start; i < str.length; i++) {
|
|
7308
|
+
let next = str.charCodeAt(i);
|
|
7309
|
+
if (next == 124 /* '|' */) return true;
|
|
7310
|
+
if (next == 92 /* '\\' */) i++;
|
|
7311
|
+
}
|
|
7312
|
+
return false;
|
|
7313
|
+
}
|
|
7314
|
+
const delimiterLine = /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;
|
|
7315
|
+
class TableParser {
|
|
7316
|
+
constructor() {
|
|
7317
|
+
// Null means we haven't seen the second line yet, false means this
|
|
7318
|
+
// isn't a table, and an array means this is a table and we've
|
|
7319
|
+
// parsed the given rows so far.
|
|
7320
|
+
this.rows = null;
|
|
7321
|
+
}
|
|
7322
|
+
nextLine(cx, line, leaf) {
|
|
7323
|
+
if (this.rows == null) {
|
|
7324
|
+
// Second line
|
|
7325
|
+
this.rows = false;
|
|
7326
|
+
let lineText;
|
|
7327
|
+
if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) && delimiterLine.test(lineText = line.text.slice(line.pos))) {
|
|
7328
|
+
let firstRow = [],
|
|
7329
|
+
firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);
|
|
7330
|
+
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)];
|
|
7331
|
+
}
|
|
7332
|
+
} else if (this.rows) {
|
|
7333
|
+
// Line after the second
|
|
7334
|
+
let content = [];
|
|
7335
|
+
parseRow(cx, line.text, line.pos, content, cx.lineStart);
|
|
7336
|
+
this.rows.push(cx.elt("TableRow", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));
|
|
7337
|
+
}
|
|
7338
|
+
return false;
|
|
7339
|
+
}
|
|
7340
|
+
finish(cx, leaf) {
|
|
7341
|
+
if (!this.rows) return false;
|
|
7342
|
+
cx.addLeafElement(leaf, cx.elt("Table", leaf.start, leaf.start + leaf.content.length, this.rows));
|
|
7343
|
+
return true;
|
|
7344
|
+
}
|
|
7345
|
+
}
|
|
7346
|
+
/// This extension provides
|
|
7347
|
+
/// [GFM-style](https://github.github.com/gfm/#tables-extension-)
|
|
7348
|
+
/// tables, using syntax like this:
|
|
7349
|
+
///
|
|
7350
|
+
/// ```
|
|
7351
|
+
/// | head 1 | head 2 |
|
|
7352
|
+
/// | --- | --- |
|
|
7353
|
+
/// | cell 1 | cell 2 |
|
|
7354
|
+
/// ```
|
|
7355
|
+
const Table = {
|
|
7356
|
+
defineNodes: [{
|
|
7357
|
+
name: "Table",
|
|
7358
|
+
block: true
|
|
7359
|
+
}, {
|
|
7360
|
+
name: "TableHeader",
|
|
7361
|
+
style: {
|
|
7362
|
+
"TableHeader/...": tags$1.heading
|
|
7363
|
+
}
|
|
7364
|
+
}, "TableRow", {
|
|
7365
|
+
name: "TableCell",
|
|
7366
|
+
style: tags$1.content
|
|
7367
|
+
}, {
|
|
7368
|
+
name: "TableDelimiter",
|
|
7369
|
+
style: tags$1.processingInstruction
|
|
7370
|
+
}],
|
|
7371
|
+
parseBlock: [{
|
|
7372
|
+
name: "Table",
|
|
7373
|
+
leaf(_, leaf) {
|
|
7374
|
+
return hasPipe(leaf.content, 0) ? new TableParser() : null;
|
|
7375
|
+
},
|
|
7376
|
+
endLeaf(cx, line, leaf) {
|
|
7377
|
+
if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos)) return false;
|
|
7378
|
+
let next = cx.scanLine(cx.absoluteLineEnd + 1).text;
|
|
7379
|
+
return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);
|
|
7380
|
+
},
|
|
7381
|
+
before: "SetextHeading"
|
|
7382
|
+
}]
|
|
7383
|
+
};
|
|
7384
|
+
class TaskParser {
|
|
7385
|
+
nextLine() {
|
|
7386
|
+
return false;
|
|
7387
|
+
}
|
|
7388
|
+
finish(cx, leaf) {
|
|
7389
|
+
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)]));
|
|
7390
|
+
return true;
|
|
7391
|
+
}
|
|
7392
|
+
}
|
|
7393
|
+
/// Extension providing
|
|
7394
|
+
/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)
|
|
7395
|
+
/// task list items, where list items can be prefixed with `[ ]` or
|
|
7396
|
+
/// `[x]` to add a checkbox.
|
|
7397
|
+
const TaskList = {
|
|
7398
|
+
defineNodes: [{
|
|
7399
|
+
name: "Task",
|
|
7400
|
+
block: true,
|
|
7401
|
+
style: tags$1.list
|
|
7402
|
+
}, {
|
|
7403
|
+
name: "TaskMarker",
|
|
7404
|
+
style: tags$1.atom
|
|
7405
|
+
}],
|
|
7406
|
+
parseBlock: [{
|
|
7407
|
+
name: "TaskList",
|
|
7408
|
+
leaf(cx, leaf) {
|
|
7409
|
+
return /^\[[ xX]\]/.test(leaf.content) && cx.parentType().name == "ListItem" ? new TaskParser() : null;
|
|
7410
|
+
},
|
|
7411
|
+
after: "SetextHeading"
|
|
7412
|
+
}]
|
|
7413
|
+
};
|
|
7414
|
+
/// Extension bundle containing [`Table`](#Table),
|
|
7415
|
+
/// [`TaskList`](#TaskList) and [`Strikethrough`](#Strikethrough).
|
|
7416
|
+
const GFM = [Table, TaskList, Strikethrough];
|
|
7417
|
+
function parseSubSuper(ch, node, mark) {
|
|
7418
|
+
return (cx, next, pos) => {
|
|
7419
|
+
if (next != ch || cx.char(pos + 1) == ch) return -1;
|
|
7420
|
+
let elts = [cx.elt(mark, pos, pos + 1)];
|
|
7421
|
+
for (let i = pos + 1; i < cx.end; i++) {
|
|
7422
|
+
let next = cx.char(i);
|
|
7423
|
+
if (next == ch) return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));
|
|
7424
|
+
if (next == 92 /* '\\' */) elts.push(cx.elt("Escape", i, i++ + 2));
|
|
7425
|
+
if (space(next)) break;
|
|
7426
|
+
}
|
|
7427
|
+
return -1;
|
|
7428
|
+
};
|
|
7429
|
+
}
|
|
7430
|
+
/// Extension providing
|
|
7431
|
+
/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)
|
|
7432
|
+
/// superscript using `^` markers.
|
|
7433
|
+
const Superscript = {
|
|
7434
|
+
defineNodes: [{
|
|
7435
|
+
name: "Superscript",
|
|
7436
|
+
style: tags$1.special(tags$1.content)
|
|
7437
|
+
}, {
|
|
7438
|
+
name: "SuperscriptMark",
|
|
7439
|
+
style: tags$1.processingInstruction
|
|
7440
|
+
}],
|
|
7441
|
+
parseInline: [{
|
|
7442
|
+
name: "Superscript",
|
|
7443
|
+
parse: parseSubSuper(94 /* '^' */, "Superscript", "SuperscriptMark")
|
|
7444
|
+
}]
|
|
7445
|
+
};
|
|
7446
|
+
/// Extension providing
|
|
7447
|
+
/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)
|
|
7448
|
+
/// subscript using `~` markers.
|
|
7449
|
+
const Subscript = {
|
|
7450
|
+
defineNodes: [{
|
|
7451
|
+
name: "Subscript",
|
|
7452
|
+
style: tags$1.special(tags$1.content)
|
|
7453
|
+
}, {
|
|
7454
|
+
name: "SubscriptMark",
|
|
7455
|
+
style: tags$1.processingInstruction
|
|
7456
|
+
}],
|
|
7457
|
+
parseInline: [{
|
|
7458
|
+
name: "Subscript",
|
|
7459
|
+
parse: parseSubSuper(126 /* '~' */, "Subscript", "SubscriptMark")
|
|
7460
|
+
}]
|
|
7461
|
+
};
|
|
7462
|
+
/// Extension that parses two colons with only letters, underscores,
|
|
7463
|
+
/// and numbers between them as `Emoji` nodes.
|
|
7464
|
+
const Emoji = {
|
|
7465
|
+
defineNodes: [{
|
|
7466
|
+
name: "Emoji",
|
|
7467
|
+
style: tags$1.character
|
|
7468
|
+
}],
|
|
7469
|
+
parseInline: [{
|
|
7470
|
+
name: "Emoji",
|
|
7471
|
+
parse(cx, next, pos) {
|
|
7472
|
+
let match;
|
|
7473
|
+
if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1;
|
|
7474
|
+
return cx.addElement(cx.elt("Emoji", pos, pos + 1 + match[0].length));
|
|
7475
|
+
}
|
|
7476
|
+
}]
|
|
7477
|
+
};
|
|
7478
|
+
|
|
7479
|
+
const data = /*@__PURE__*/defineLanguageFacet({
|
|
7480
|
+
block: {
|
|
7481
|
+
open: "<!--",
|
|
7482
|
+
close: "-->"
|
|
7483
|
+
}
|
|
7484
|
+
});
|
|
7485
|
+
const commonmark = /*@__PURE__*/parser.configure({
|
|
7486
|
+
props: [/*@__PURE__*/foldNodeProp.add(type => {
|
|
7487
|
+
if (!type.is("Block") || type.is("Document")) return undefined;
|
|
7488
|
+
return (tree, state) => ({
|
|
7489
|
+
from: state.doc.lineAt(tree.from).to,
|
|
7490
|
+
to: tree.to
|
|
7491
|
+
});
|
|
7492
|
+
}), /*@__PURE__*/indentNodeProp.add({
|
|
7493
|
+
Document: () => null
|
|
7494
|
+
}), /*@__PURE__*/languageDataProp.add({
|
|
7495
|
+
Document: data
|
|
7496
|
+
})]
|
|
7497
|
+
});
|
|
7498
|
+
function mkLang(parser) {
|
|
7499
|
+
return new Language(data, parser);
|
|
7500
|
+
}
|
|
7501
|
+
/**
|
|
7502
|
+
Language support for strict CommonMark.
|
|
7503
|
+
*/
|
|
7504
|
+
const commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);
|
|
7505
|
+
const extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji]);
|
|
7506
|
+
/**
|
|
7507
|
+
Language support for [GFM](https://github.github.com/gfm/) plus
|
|
7508
|
+
subscript, superscript, and emoji syntax.
|
|
7509
|
+
*/
|
|
7510
|
+
const markdownLanguage = /*@__PURE__*/mkLang(extended);
|
|
7511
|
+
function getCodeParser(languages, defaultLanguage) {
|
|
7512
|
+
return info => {
|
|
7513
|
+
if (info && languages) {
|
|
7514
|
+
let found = null;
|
|
7515
|
+
// Strip anything after whitespace
|
|
7516
|
+
info = /\S*/.exec(info)[0];
|
|
7517
|
+
if (typeof languages == "function") found = languages(info);else found = LanguageDescription.matchLanguageName(languages, info, true);
|
|
7518
|
+
if (found instanceof LanguageDescription) return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());else if (found) return found.parser;
|
|
7519
|
+
}
|
|
7520
|
+
return defaultLanguage ? defaultLanguage.parser : null;
|
|
7521
|
+
};
|
|
7522
|
+
}
|
|
7523
|
+
function nodeStart(node, doc) {
|
|
7524
|
+
return doc.sliceString(node.from, node.from + 50);
|
|
7525
|
+
}
|
|
7526
|
+
class Context {
|
|
7527
|
+
constructor(node, from, to, spaceBefore, spaceAfter, type, item) {
|
|
7528
|
+
this.node = node;
|
|
7529
|
+
this.from = from;
|
|
7530
|
+
this.to = to;
|
|
7531
|
+
this.spaceBefore = spaceBefore;
|
|
7532
|
+
this.spaceAfter = spaceAfter;
|
|
7533
|
+
this.type = type;
|
|
7534
|
+
this.item = item;
|
|
7535
|
+
}
|
|
7536
|
+
blank() {
|
|
7537
|
+
let trailing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
7538
|
+
let result = this.spaceBefore;
|
|
7539
|
+
if (this.node.name == "Blockquote") result += ">";else for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--) result += " ";
|
|
7540
|
+
return result + (trailing ? this.spaceAfter : "");
|
|
7541
|
+
}
|
|
7542
|
+
marker(doc, add) {
|
|
7543
|
+
let number = this.node.name == "OrderedList" ? String(+itemNumber(this.item, doc)[2] + add) : "";
|
|
7544
|
+
return this.spaceBefore + number + this.type + this.spaceAfter;
|
|
7545
|
+
}
|
|
7546
|
+
}
|
|
7547
|
+
function getContext(node, line, doc) {
|
|
7548
|
+
let nodes = [];
|
|
7549
|
+
for (let cur = node; cur && cur.name != "Document"; cur = cur.parent) {
|
|
7550
|
+
if (cur.name == "ListItem" || cur.name == "Blockquote") nodes.push(cur);
|
|
7551
|
+
}
|
|
7552
|
+
let context = [],
|
|
7553
|
+
pos = 0;
|
|
7554
|
+
for (let i = nodes.length - 1; i >= 0; i--) {
|
|
7555
|
+
let node = nodes[i],
|
|
7556
|
+
match,
|
|
7557
|
+
start = pos;
|
|
7558
|
+
if (node.name == "Blockquote" && (match = /^[ \t]*>( ?)/.exec(line.slice(pos)))) {
|
|
7559
|
+
pos += match[0].length;
|
|
7560
|
+
context.push(new Context(node, start, pos, "", match[1], ">", null));
|
|
7561
|
+
} else if (node.name == "ListItem" && node.parent.name == "OrderedList" && (match = /^([ \t]*)\d+([.)])([ \t]*)/.exec(nodeStart(node, doc)))) {
|
|
7562
|
+
let after = match[3],
|
|
7563
|
+
len = match[0].length;
|
|
7564
|
+
if (after.length >= 4) {
|
|
7565
|
+
after = after.slice(0, after.length - 4);
|
|
7566
|
+
len -= 4;
|
|
7567
|
+
}
|
|
7568
|
+
pos += len;
|
|
7569
|
+
context.push(new Context(node.parent, start, pos, match[1], after, match[2], node));
|
|
7570
|
+
} else if (node.name == "ListItem" && node.parent.name == "BulletList" && (match = /^([ \t]*)([-+*])([ \t]{1,4}\[[ xX]\])?([ \t]+)/.exec(nodeStart(node, doc)))) {
|
|
7571
|
+
let after = match[4],
|
|
7572
|
+
len = match[0].length;
|
|
7573
|
+
if (after.length > 4) {
|
|
7574
|
+
after = after.slice(0, after.length - 4);
|
|
7575
|
+
len -= 4;
|
|
7576
|
+
}
|
|
7577
|
+
let type = match[2];
|
|
7578
|
+
if (match[3]) type += match[3].replace(/[xX]/, ' ');
|
|
7579
|
+
pos += len;
|
|
7580
|
+
context.push(new Context(node.parent, start, pos, match[1], after, type, node));
|
|
7581
|
+
}
|
|
7582
|
+
}
|
|
7583
|
+
return context;
|
|
7584
|
+
}
|
|
7585
|
+
function itemNumber(item, doc) {
|
|
7586
|
+
return /^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));
|
|
7587
|
+
}
|
|
7588
|
+
function renumberList(after, doc, changes) {
|
|
7589
|
+
let offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
|
7590
|
+
for (let prev = -1, node = after;;) {
|
|
7591
|
+
if (node.name == "ListItem") {
|
|
7592
|
+
let m = itemNumber(node, doc);
|
|
7593
|
+
let number = +m[2];
|
|
7594
|
+
if (prev >= 0) {
|
|
7595
|
+
if (number != prev + 1) return;
|
|
7596
|
+
changes.push({
|
|
7597
|
+
from: node.from + m[1].length,
|
|
7598
|
+
to: node.from + m[0].length,
|
|
7599
|
+
insert: String(prev + 2 + offset)
|
|
7600
|
+
});
|
|
7601
|
+
}
|
|
7602
|
+
prev = number;
|
|
7603
|
+
}
|
|
7604
|
+
let next = node.nextSibling;
|
|
7605
|
+
if (!next) break;
|
|
7606
|
+
node = next;
|
|
7607
|
+
}
|
|
7608
|
+
}
|
|
7609
|
+
/**
|
|
7610
|
+
This command, when invoked in Markdown context with cursor
|
|
7611
|
+
selection(s), will create a new line with the markup for
|
|
7612
|
+
blockquotes and lists that were active on the old line. If the
|
|
7613
|
+
cursor was directly after the end of the markup for the old line,
|
|
7614
|
+
trailing whitespace and list markers are removed from that line.
|
|
7615
|
+
|
|
7616
|
+
The command does nothing in non-Markdown context, so it should
|
|
7617
|
+
not be used as the only binding for Enter (even in a Markdown
|
|
7618
|
+
document, HTML and code regions might use a different language).
|
|
7619
|
+
*/
|
|
7620
|
+
const insertNewlineContinueMarkup = _ref => {
|
|
7621
|
+
let {
|
|
7622
|
+
state,
|
|
7623
|
+
dispatch
|
|
7624
|
+
} = _ref;
|
|
7625
|
+
let tree = syntaxTree(state),
|
|
7626
|
+
{
|
|
7627
|
+
doc
|
|
7628
|
+
} = state;
|
|
7629
|
+
let dont = null,
|
|
7630
|
+
changes = state.changeByRange(range => {
|
|
7631
|
+
if (!range.empty || !markdownLanguage.isActiveAt(state, range.from)) return dont = {
|
|
7632
|
+
range
|
|
7633
|
+
};
|
|
7634
|
+
let pos = range.from,
|
|
7635
|
+
line = doc.lineAt(pos);
|
|
7636
|
+
let context = getContext(tree.resolveInner(pos, -1), line.text, doc);
|
|
7637
|
+
while (context.length && context[context.length - 1].from > pos - line.from) context.pop();
|
|
7638
|
+
if (!context.length) return dont = {
|
|
7639
|
+
range
|
|
7640
|
+
};
|
|
7641
|
+
let inner = context[context.length - 1];
|
|
7642
|
+
if (inner.to - inner.spaceAfter.length > pos - line.from) return dont = {
|
|
7643
|
+
range
|
|
7644
|
+
};
|
|
7645
|
+
let emptyLine = pos >= inner.to - inner.spaceAfter.length && !/\S/.test(line.text.slice(inner.to));
|
|
7646
|
+
// Empty line in list
|
|
7647
|
+
if (inner.item && emptyLine) {
|
|
7648
|
+
// First list item or blank line before: delete a level of markup
|
|
7649
|
+
if (inner.node.firstChild.to >= pos || line.from > 0 && !/[^\s>]/.test(doc.lineAt(line.from - 1).text)) {
|
|
7650
|
+
let next = context.length > 1 ? context[context.length - 2] : null;
|
|
7651
|
+
let delTo,
|
|
7652
|
+
insert = "";
|
|
7653
|
+
if (next && next.item) {
|
|
7654
|
+
// Re-add marker for the list at the next level
|
|
7655
|
+
delTo = line.from + next.from;
|
|
7656
|
+
insert = next.marker(doc, 1);
|
|
7657
|
+
} else {
|
|
7658
|
+
delTo = line.from + (next ? next.to : 0);
|
|
7659
|
+
}
|
|
7660
|
+
let changes = [{
|
|
7661
|
+
from: delTo,
|
|
7662
|
+
to: pos,
|
|
7663
|
+
insert
|
|
7664
|
+
}];
|
|
7665
|
+
if (inner.node.name == "OrderedList") renumberList(inner.item, doc, changes, -2);
|
|
7666
|
+
if (next && next.node.name == "OrderedList") renumberList(next.item, doc, changes);
|
|
7667
|
+
return {
|
|
7668
|
+
range: EditorSelection.cursor(delTo + insert.length),
|
|
7669
|
+
changes
|
|
7670
|
+
};
|
|
7671
|
+
} else {
|
|
7672
|
+
// Move this line down
|
|
7673
|
+
let insert = "";
|
|
7674
|
+
for (let i = 0, e = context.length - 2; i <= e; i++) insert += context[i].blank(i < e);
|
|
7675
|
+
insert += state.lineBreak;
|
|
7676
|
+
return {
|
|
7677
|
+
range: EditorSelection.cursor(pos + insert.length),
|
|
7678
|
+
changes: {
|
|
7679
|
+
from: line.from,
|
|
7680
|
+
insert
|
|
7681
|
+
}
|
|
7682
|
+
};
|
|
7683
|
+
}
|
|
7684
|
+
}
|
|
7685
|
+
if (inner.node.name == "Blockquote" && emptyLine && line.from) {
|
|
7686
|
+
let prevLine = doc.lineAt(line.from - 1),
|
|
7687
|
+
quoted = />\s*$/.exec(prevLine.text);
|
|
7688
|
+
// Two aligned empty quoted lines in a row
|
|
7689
|
+
if (quoted && quoted.index == inner.from) {
|
|
7690
|
+
let changes = state.changes([{
|
|
7691
|
+
from: prevLine.from + quoted.index,
|
|
7692
|
+
to: prevLine.to
|
|
7693
|
+
}, {
|
|
7694
|
+
from: line.from + inner.from,
|
|
7695
|
+
to: line.to
|
|
7696
|
+
}]);
|
|
7697
|
+
return {
|
|
7698
|
+
range: range.map(changes),
|
|
7699
|
+
changes
|
|
7700
|
+
};
|
|
7701
|
+
}
|
|
7702
|
+
}
|
|
7703
|
+
let changes = [];
|
|
7704
|
+
if (inner.node.name == "OrderedList") renumberList(inner.item, doc, changes);
|
|
7705
|
+
let insert = state.lineBreak;
|
|
7706
|
+
let continued = inner.item && inner.item.from < line.from;
|
|
7707
|
+
// If not dedented
|
|
7708
|
+
if (!continued || /^[\s\d.)\-+*>]*/.exec(line.text)[0].length >= inner.to) {
|
|
7709
|
+
for (let i = 0, e = context.length - 1; i <= e; i++) insert += i == e && !continued ? context[i].marker(doc, 1) : context[i].blank();
|
|
7710
|
+
}
|
|
7711
|
+
let from = pos;
|
|
7712
|
+
while (from > line.from && /\s/.test(line.text.charAt(from - line.from - 1))) from--;
|
|
7713
|
+
changes.push({
|
|
7714
|
+
from,
|
|
7715
|
+
to: pos,
|
|
7716
|
+
insert
|
|
7717
|
+
});
|
|
7718
|
+
return {
|
|
7719
|
+
range: EditorSelection.cursor(from + insert.length),
|
|
7720
|
+
changes
|
|
7721
|
+
};
|
|
7722
|
+
});
|
|
7723
|
+
if (dont) return false;
|
|
7724
|
+
dispatch(state.update(changes, {
|
|
7725
|
+
scrollIntoView: true,
|
|
7726
|
+
userEvent: "input"
|
|
7727
|
+
}));
|
|
7728
|
+
return true;
|
|
7729
|
+
};
|
|
7730
|
+
function isMark(node) {
|
|
7731
|
+
return node.name == "QuoteMark" || node.name == "ListMark";
|
|
7732
|
+
}
|
|
7733
|
+
function contextNodeForDelete(tree, pos) {
|
|
7734
|
+
let node = tree.resolveInner(pos, -1),
|
|
7735
|
+
scan = pos;
|
|
7736
|
+
if (isMark(node)) {
|
|
7737
|
+
scan = node.from;
|
|
7738
|
+
node = node.parent;
|
|
7739
|
+
}
|
|
7740
|
+
for (let prev; prev = node.childBefore(scan);) {
|
|
7741
|
+
if (isMark(prev)) {
|
|
7742
|
+
scan = prev.from;
|
|
7743
|
+
} else if (prev.name == "OrderedList" || prev.name == "BulletList") {
|
|
7744
|
+
node = prev.lastChild;
|
|
7745
|
+
scan = node.to;
|
|
7746
|
+
} else {
|
|
7747
|
+
break;
|
|
7748
|
+
}
|
|
7749
|
+
}
|
|
7750
|
+
return node;
|
|
7751
|
+
}
|
|
7752
|
+
/**
|
|
7753
|
+
This command will, when invoked in a Markdown context with the
|
|
7754
|
+
cursor directly after list or blockquote markup, delete one level
|
|
7755
|
+
of markup. When the markup is for a list, it will be replaced by
|
|
7756
|
+
spaces on the first invocation (a further invocation will delete
|
|
7757
|
+
the spaces), to make it easy to continue a list.
|
|
7758
|
+
|
|
7759
|
+
When not after Markdown block markup, this command will return
|
|
7760
|
+
false, so it is intended to be bound alongside other deletion
|
|
7761
|
+
commands, with a higher precedence than the more generic commands.
|
|
7762
|
+
*/
|
|
7763
|
+
const deleteMarkupBackward = _ref2 => {
|
|
7764
|
+
let {
|
|
7765
|
+
state,
|
|
7766
|
+
dispatch
|
|
7767
|
+
} = _ref2;
|
|
7768
|
+
let tree = syntaxTree(state);
|
|
7769
|
+
let dont = null,
|
|
7770
|
+
changes = state.changeByRange(range => {
|
|
7771
|
+
let pos = range.from,
|
|
7772
|
+
{
|
|
7773
|
+
doc
|
|
7774
|
+
} = state;
|
|
7775
|
+
if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
|
|
7776
|
+
let line = doc.lineAt(pos);
|
|
7777
|
+
let context = getContext(contextNodeForDelete(tree, pos), line.text, doc);
|
|
7778
|
+
if (context.length) {
|
|
7779
|
+
let inner = context[context.length - 1];
|
|
7780
|
+
let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);
|
|
7781
|
+
// Delete extra trailing space after markup
|
|
7782
|
+
if (pos - line.from > spaceEnd && !/\S/.test(line.text.slice(spaceEnd, pos - line.from))) return {
|
|
7783
|
+
range: EditorSelection.cursor(line.from + spaceEnd),
|
|
7784
|
+
changes: {
|
|
7785
|
+
from: line.from + spaceEnd,
|
|
7786
|
+
to: pos
|
|
7787
|
+
}
|
|
7788
|
+
};
|
|
7789
|
+
if (pos - line.from == spaceEnd) {
|
|
7790
|
+
let start = line.from + inner.from;
|
|
7791
|
+
// Replace a list item marker with blank space
|
|
7792
|
+
if (inner.item && inner.node.from < inner.item.from && /\S/.test(line.text.slice(inner.from, inner.to))) return {
|
|
7793
|
+
range,
|
|
7794
|
+
changes: {
|
|
7795
|
+
from: start,
|
|
7796
|
+
to: line.from + inner.to,
|
|
7797
|
+
insert: inner.blank()
|
|
7798
|
+
}
|
|
7799
|
+
};
|
|
7800
|
+
// Delete one level of indentation
|
|
7801
|
+
if (start < pos) return {
|
|
7802
|
+
range: EditorSelection.cursor(start),
|
|
7803
|
+
changes: {
|
|
7804
|
+
from: start,
|
|
7805
|
+
to: pos
|
|
7806
|
+
}
|
|
7807
|
+
};
|
|
7808
|
+
}
|
|
7809
|
+
}
|
|
7810
|
+
}
|
|
7811
|
+
return dont = {
|
|
7812
|
+
range
|
|
7813
|
+
};
|
|
7814
|
+
});
|
|
7815
|
+
if (dont) return false;
|
|
7816
|
+
dispatch(state.update(changes, {
|
|
7817
|
+
scrollIntoView: true,
|
|
7818
|
+
userEvent: "delete"
|
|
7819
|
+
}));
|
|
7820
|
+
return true;
|
|
7821
|
+
};
|
|
7822
|
+
|
|
7823
|
+
/**
|
|
7824
|
+
A small keymap with Markdown-specific bindings. Binds Enter to
|
|
7825
|
+
[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)
|
|
7826
|
+
and Backspace to
|
|
7827
|
+
[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).
|
|
7828
|
+
*/
|
|
7829
|
+
const markdownKeymap = [{
|
|
7830
|
+
key: "Enter",
|
|
7831
|
+
run: insertNewlineContinueMarkup
|
|
7832
|
+
}, {
|
|
7833
|
+
key: "Backspace",
|
|
7834
|
+
run: deleteMarkupBackward
|
|
7835
|
+
}];
|
|
7836
|
+
const htmlNoMatch = /*@__PURE__*/html({
|
|
7837
|
+
matchClosingTags: false
|
|
7838
|
+
});
|
|
7839
|
+
/**
|
|
7840
|
+
Markdown language support.
|
|
7841
|
+
*/
|
|
7842
|
+
function markdown() {
|
|
7843
|
+
let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
7844
|
+
let {
|
|
7845
|
+
codeLanguages,
|
|
7846
|
+
defaultCodeLanguage,
|
|
7847
|
+
addKeymap = true,
|
|
7848
|
+
base: {
|
|
7849
|
+
parser
|
|
7850
|
+
} = commonmarkLanguage
|
|
7851
|
+
} = config;
|
|
7852
|
+
if (!(parser instanceof MarkdownParser)) throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");
|
|
7853
|
+
let extensions = config.extensions ? [config.extensions] : [];
|
|
7854
|
+
let support = [htmlNoMatch.support],
|
|
7855
|
+
defaultCode;
|
|
7856
|
+
if (defaultCodeLanguage instanceof LanguageSupport) {
|
|
7857
|
+
support.push(defaultCodeLanguage.support);
|
|
7858
|
+
defaultCode = defaultCodeLanguage.language;
|
|
7859
|
+
} else if (defaultCodeLanguage) {
|
|
7860
|
+
defaultCode = defaultCodeLanguage;
|
|
7861
|
+
}
|
|
7862
|
+
let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;
|
|
7863
|
+
extensions.push(parseCode({
|
|
7864
|
+
codeParser,
|
|
7865
|
+
htmlParser: htmlNoMatch.language.parser
|
|
7866
|
+
}));
|
|
7867
|
+
if (addKeymap) support.push(Prec.high(keymap.of(markdownKeymap)));
|
|
7868
|
+
return new LanguageSupport(mkLang(parser.configure(extensions)), support);
|
|
7869
|
+
}
|
|
7870
|
+
|
|
7871
|
+
const JS = javascript({
|
|
7872
|
+
typescript: false
|
|
7873
|
+
});
|
|
7874
|
+
const TS = javascript({
|
|
7875
|
+
typescript: true
|
|
7876
|
+
});
|
|
7877
|
+
const CSS = css();
|
|
7878
|
+
const HTML = html();
|
|
7879
|
+
const JSON$1 = json();
|
|
7880
|
+
const MD = markdown();
|
|
7881
|
+
var languages = {
|
|
7882
|
+
[OrCodeLanguages.JS]: JS,
|
|
7883
|
+
[OrCodeLanguages.TS]: TS,
|
|
7884
|
+
[OrCodeLanguages.CSS]: CSS,
|
|
7885
|
+
[OrCodeLanguages.HTML]: HTML,
|
|
7886
|
+
[OrCodeLanguages.JSON]: JSON$1,
|
|
7887
|
+
[OrCodeLanguages.MD]: MD
|
|
7888
|
+
};
|
|
7889
|
+
|
|
7890
|
+
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 };
|