monaco-editor-core 0.56.0-dev-20251125 → 0.56.0-dev-20251217
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/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +30 -4
- package/esm/vs/base/browser/dom.js +1 -4
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +25 -11
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +15 -8
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/list/list.css +1 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +11 -2
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/defaultAccount.js +6 -0
- package/esm/vs/base/common/defaultAccount.js.map +1 -0
- package/esm/vs/base/common/equals.js +73 -24
- package/esm/vs/base/common/equals.js.map +1 -1
- package/esm/vs/base/common/event.js +14 -4
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/iterator.js.map +1 -1
- package/esm/vs/base/common/keybindings.js +0 -8
- package/esm/vs/base/common/keybindings.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +2 -2
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/marshallingIds.js.map +1 -1
- package/esm/vs/base/common/observableInternal/index.js +1 -1
- package/esm/vs/base/common/observableInternal/index.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
- package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
- package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
- package/esm/vs/base/common/product.js.map +1 -1
- package/esm/vs/base/common/strings.js +3 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
- package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/view.js +11 -2
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
- package/esm/vs/editor/common/config/fontInfo.js +1 -1
- package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
- package/esm/vs/editor/common/core/edits/edit.js +19 -0
- package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
- package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/textEdit.js +0 -3
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
- package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
- package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
- package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
- package/esm/vs/editor/common/languages.js +2 -1
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/decorationProvider.js +21 -1
- package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
- package/esm/vs/editor/common/model/textModel.js +49 -30
- package/esm/vs/editor/common/model/textModel.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
- package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +2 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/textModelEvents.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -70
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +59 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +152 -95
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +113 -54
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +317 -75
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +11 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
- package/esm/vs/editor/contrib/links/browser/links.js +10 -10
- package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
- package/esm/vs/editor/contrib/rename/browser/rename.js +19 -15
- package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js +33 -0
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +12 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
- package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +19 -2
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +34 -3
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +11 -8
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/actions.js +11 -5
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
- package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/log/common/log.js +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/markers/common/markerService.js +6 -6
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
- package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
- package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +21 -21
- package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
- package/esm/vs/platform/window/common/window.js +1 -1
- package/esm/vs/platform/window/common/window.js.map +1 -1
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +34 -3
- package/package.json +2 -2
- package/version.txt +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
- package/esm/vs/platform/product/common/productService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/standalone/common/monarch/monarchLexer.ts","vs/editor/standalone/common/monarch/monarchLexer.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAEhG;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAe,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAGzG,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AAGnG,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,0BAA0B;aAEP,cAAS,GAAG,IAAI,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;IAC/E,MAAM,CAAC,MAAM,CAAC,MAAkC,EAAE,KAAa;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAKD,YAAY,aAAqB;QAChC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,MAAkC,EAAE,KAAa;QAC9D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5D,mCAAmC;YACnC,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,cAAc,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,cAAc,IAAI,GAAG,CAAC;QACvB,CAAC;QACD,cAAc,IAAI,KAAK,CAAC;QAExB,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;QACvC,OAAO,MAAM,CAAC;IACf,CAAC;;AAGF,MAAM,mBAAmB;IAMxB,YAAY,MAAkC,EAAE,KAAa;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,OAAmC;QAClE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,CAAC;YACf,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,CAA6B,EAAE,CAA6B;QAClF,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACd,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACb,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACd,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,KAA0B;QACvC,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAEM,IAAI,CAAC,KAAa;QACxB,OAAO,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAEM,GAAG;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,MAAM;QACZ,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC5B,OAAO,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;CACD;AAED,MAAM,oBAAoB;IAIzB,YAAY,UAAkB,EAAE,KAAuB;QACtD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,KAA2B;QACxC,OAAO,CACN,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CACjC,CAAC;IACH,CAAC;IAEM,KAAK;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtC,iBAAiB;QACjB,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACD;AAED;;GAEG;AACH,MAAM,uBAAuB;aAEJ,cAAS,GAAG,IAAI,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAC5E,MAAM,CAAC,MAAM,CAAC,KAA0B,EAAE,oBAAiD;QACjG,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC3D,CAAC;IAKD,YAAY,aAAqB;QAChC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,KAA0B,EAAE,oBAAiD;QAC1F,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACnC,4BAA4B;YAC5B,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1D,mCAAmC;YACnC,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,cAAc,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEpE,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;QACvC,OAAO,MAAM,CAAC;IACf,CAAC;;AAGF,MAAM,gBAAgB;IAKrB,YACC,KAA0B,EAC1B,oBAAiD;QAEjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IAClD,CAAC;IAEM,KAAK;QACX,MAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,iBAAiB;QACjB,IAAI,yBAAyB,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9E,CAAC;IAEM,MAAM,CAAC,KAAuB;QACpC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC/E,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC;CACD;AAQD,MAAM,6BAA6B;IAOlC;QACC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,CAAC;IAEM,aAAa,CAAC,UAAkB;QACtC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAC/B,CAAC;IAEM,IAAI,CAAC,WAAmB,EAAE,IAAY;QAC5C,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAClF,OAAO;QACR,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,WAAY,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEM,sBAAsB,CAAC,oBAA4B,EAAE,MAAe,EAAE,oBAA0C,EAAE,WAAmB;QAC3I,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC;QACzD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC;QAErD,MAAM,iCAAiC,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC/F,IAAI,CAAC,iCAAiC,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC3B,OAAO,iBAAiB,CAAC;QAC1B,CAAC;QAED,MAAM,YAAY,GAAG,iCAAiC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACjH,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChG,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAEM,QAAQ,CAAC,QAA0B;QACzC,OAAO,IAAI,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;CACD;AAED,MAAM,4BAA4B;IASjC,YAAY,eAAiC,EAAE,KAAiB;QAC/D,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,kBAAkB,0BAAkB,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEM,aAAa,CAAC,UAAkB;QACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC9F,CAAC;IAEM,IAAI,CAAC,WAAmB,EAAE,IAAY;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,mDAAwC,CAAC;QAC1G,IAAI,IAAI,CAAC,kBAAkB,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,CAAqB,EAAE,CAAW,EAAE,CAAqB;QAC9E,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAE,CAAC;QACX,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAE,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,sBAAsB,CAAC,oBAA4B,EAAE,MAAe,EAAE,oBAA0C,EAAE,WAAmB;QAC3I,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC;QACzD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC;QAErD,MAAM,iCAAiC,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC/F,IAAI,CAAC,iCAAiC,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC3B,OAAO,iBAAiB,CAAC;QAC1B,CAAC;QAED,MAAM,YAAY,GAAG,iCAAiC,CAAC,eAAe,CAAC,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACxH,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;YACvC,CAAC;QACF,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAClH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAEM,QAAQ,CAAC,QAA0B;QACzC,OAAO,IAAI,SAAS,CAAC,yBAAyB,CAC7C,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAC5E,QAAQ,CACR,CAAC;IACH,CAAC;CACD;AAIM,IAAM,gBAAgB,wBAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAU/C,YAAY,eAAiC,EAAE,sBAA+C,EAAE,UAAkB,EAAE,KAA2B,EAA0C,qBAA4C;QACpO,KAAK,EAAE,CAAC;QADgL,0BAAqB,GAArB,qBAAqB,CAAuB;QAEpO,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEjD,sCAAsC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/D,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO;YACR,CAAC;YACD,IAAI,sBAAsB,GAAG,KAAK,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,sBAAsB,GAAG,IAAI,CAAC;oBAC9B,MAAM;gBACP,CAAC;YACF,CAAC;YACD,IAAI,sBAAsB,EAAE,CAAC;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBAChE,QAAQ,GAAG,KAAK,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAS,kCAAkC,EAAE;YACjH,kBAAkB,EAAE,IAAI,CAAC,WAAW;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;YACtE,IAAI,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAS,kCAAkC,EAAE;oBACjH,kBAAkB,EAAE,IAAI,CAAC,WAAW;iBACpC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,aAAa;QACnB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxD,MAAM,mBAAmB,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACjF,IAAI,mBAAmB,EAAE,CAAC;gBACzB,wCAAwC;gBACxC,IAAI,mBAAmB,YAAY,kBAAgB,EAAE,CAAC;oBACrD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC;oBAC7D,IAAI,gBAAgB,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wBACvC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACzC,CAAC;gBACF,CAAC;gBACD,SAAS;YACV,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClE,wDAAwD;gBACxD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7E,CAAC;QACF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACN,MAAM,EAAE,IAAI;aACZ,CAAC;QACH,CAAC;QACD,OAAO;YACN,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;SACnD,CAAC;IACH,CAAC;IAEM,eAAe;QACrB,MAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAM,CAAC,CAAC;QAC9E,OAAO,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAEM,QAAQ,CAAC,IAAY,EAAE,MAAe,EAAE,SAA2B;QACzE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACpD,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,6BAA6B,EAAE,CAAC;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAoB,SAAS,EAAE,eAAe,CAAC,CAAC;QAChG,OAAO,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,MAAe,EAAE,SAA2B;QAChF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACpD,OAAO,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACjH,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,CAAC;QACzI,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAoB,SAAS,EAAE,eAAe,CAAC,CAAC;QAChG,OAAO,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,MAAe,EAAE,SAA2B,EAAE,SAAkC;QAC/G,IAAI,SAAS,CAAC,oBAAoB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEO,gCAAgC,CAAC,IAAY,EAAE,KAAuB;QAC7E,IAAI,KAAK,GAAiC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB;YACtF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,kCAAkC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtG,CAAC;QACF,CAAC;QAED,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC1H,SAAS;YACV,CAAC;YACD,kBAAkB,GAAG,IAAI,CAAC;YAE1B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;YACjC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClG,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAClE,SAAS;YACV,CAAC;YAED,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC5C,SAAS,GAAG,MAAM,CAAC;YACpB,CAAC;QACF,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzB,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,uEAAuE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3I,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,eAAe,CAAC,IAAY,EAAE,MAAe,EAAE,SAA2B,EAAE,WAAmB,EAAE,eAAwC;QAEhJ,MAAM,SAAS,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEzE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,8CAA8C;YAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,oBAAqB,EAAE,WAAW,CAAC,CAAC;YAC1H,OAAO,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,oBAAoB,CAAC,SAAS,CAAC,oBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9I,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,oCAAoC;YACpC,eAAe,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,oBAAqB,EAAE,WAAW,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC;IACrG,CAAC;IAEO,aAAa,CAAC,IAAgC;QACrD,IAAI,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,IAAI,CAAC;QAClB,CAAC;QACD,OAAO,WAAW,CAAC;IACpB,CAAC;IAEO,WAAW,CAAC,aAAqB,EAAE,MAAe,EAAE,SAA2B,EAAE,WAAmB,EAAE,eAAwC;QACrJ,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhD,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAAC;QACjD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,oBAAoB,GAAG,SAAS,CAAC,oBAAoB,CAAC;QAC1D,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;QASZ,IAAI,aAAa,GAAyB,IAAI,CAAC;QAE/C,6DAA6D;QAC7D,iDAAiD;QACjD,IAAI,eAAe,GAAG,IAAI,CAAC;QAE3B,OAAO,eAAe,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;YAE5C,MAAM,IAAI,GAAG,GAAG,CAAC;YACjB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9B,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAE1B,IAAI,OAAO,GAAoB,IAAI,CAAC;YACpC,IAAI,OAAO,GAAkB,IAAI,CAAC;YAClC,IAAI,MAAM,GAAmE,IAAI,CAAC;YAClF,IAAI,IAAI,GAA+B,IAAI,CAAC;YAE5C,IAAI,wBAAwB,GAAkB,IAAI,CAAC;YAEnD,kDAAkD;YAClD,IAAI,aAAa,EAAE,CAAC;gBACnB,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;gBAChC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;gBACjD,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBAC7B,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC3B,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;gBAE1B,uBAAuB;gBACvB,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,aAAa,GAAG,IAAI,CAAC;gBACtB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,yCAAyC;gBAEzC,IAAI,CAAC,eAAe,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC3C,gBAAgB;oBAChB,MAAM;gBACP,CAAC;gBAED,eAAe,GAAG,KAAK,CAAC;gBAExB,+BAA+B;gBAC/B,IAAI,KAAK,GAAiC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,qBAAqB;oBAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,kCAAkC,GAAG,KAAK,CAAC,CAAC;oBAC1F,CAAC;gBACF,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBAC1B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC7C,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;wBACrD,IAAI,OAAO,EAAE,CAAC;4BACb,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;4BACrB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;4BACrB,MAAM;wBACP,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,gDAAgD;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;YACd,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,gEAAgE;gBAChE,2DAA2D;gBAC3D,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;oBACtB,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7B,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnC,CAAC;YAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACtB,uDAAuD;gBACvD,MAAM;YACP,CAAC;YAED,iBAAiB;YACjB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;YAEtB,gDAAgD;YAChD,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9F,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,MAAM,GAAmE,IAAI,CAAC;YAClF,yDAAyD;YACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,MAAM,GAAG,MAAM,CAAC;YACjB,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAEhE,sBAAsB;gBACtB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACvB,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC9F,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzB,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;wBACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;4BAC3B,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;wBAChG,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;oBAC7B,CAAC;yBAAM,IAAI,oBAAoB,EAAE,CAAC;wBACjC,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,iEAAiE,CAAC,CAAC;oBACjH,CAAC;yBAAM,CAAC;wBACP,wBAAwB,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;oBACvH,CAAC;gBACF,CAAC;gBAED,wBAAwB;gBACxB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,uBAAuB;oBAC3C,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxC,CAAC;gBAED,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC5D,IAAI,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAE,iCAAiC;oBAC1I,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC1B,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;oBAC1D,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;wBACtD,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,GAAG,SAAS,GAAG,gCAAgC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1J,CAAC;yBAAM,CAAC;wBACP,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACnC,CAAC;gBACF,CAAC;qBAAM,IAAI,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;oBACvE,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;gBAChF,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACxB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC7B,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;4BACzC,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,yCAAyC;gCACrF,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,MAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;wBACrD,CAAC;6BAAM,CAAC;4BACP,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3B,CAAC;oBACF,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACnC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;4BACtB,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,wCAAwC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;wBACnH,CAAC;6BAAM,CAAC;4BACP,KAAK,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;wBACtB,CAAC;oBACF,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACtC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACP,IAAI,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBACnG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;4BAC1B,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;wBAC1D,CAAC;wBAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;4BACtD,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,GAAG,SAAS,GAAG,gCAAgC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;wBACzJ,CAAC;6BAAM,CAAC;4BACP,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC/B,CAAC;oBACF,CAAC;gBACF,CAAC;gBAED,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACpD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnJ,CAAC;YACF,CAAC;YAED,eAAe;YACf,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,iDAAiD,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5H,CAAC;YAED,MAAM,kCAAkC,GAAG,CAAC,wBAAgC,EAAE,EAAE;gBAC/E,uDAAuD;gBACvD,MAAM,UAAU,GAAG,CAClB,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,wBAAwB,CAAC;uBACxE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,wBAAwB,CAAC;uBACvE,wBAAwB,CAC3B,CAAC;gBAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAC;gBAE7E,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;oBACtB,2DAA2D;oBAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,WAAW,GAAG,GAAG,EAAE,eAAe,CAAC,CAAC;gBAClJ,CAAC;qBAAM,CAAC;oBACP,OAAO,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;gBACpE,CAAC;YACF,CAAC,CAAC;YAEF,+BAA+B;YAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtG,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,yEAAyE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpJ,CAAC;gBACD,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/B,CAAC;gBACD,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,+EAA+E,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1J,CAAC;gBAED,aAAa,GAAG;oBACf,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,EAAE;iBACV,CAAC;gBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;wBACzB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;wBACjB,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;qBACvB,CAAC;gBACH,CAAC;gBAED,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;gBACtB,kDAAkD;gBAClD,SAAS;YACV,CAAC;iBAAM,CAAC;gBACP,iBAAiB;gBAEjB,uBAAuB;gBACvB,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC3B,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;oBACtB,OAAO,GAAG,EAAE,CAAC,CAAE,kCAAkC;oBACjD,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,GAAG,EAAE,CAAC;oBAEZ,0EAA0E;oBAC1E,mCAAmC;oBACnC,IAAI,wBAAwB,KAAK,IAAI,EAAE,CAAC;wBACvC,OAAO,kCAAkC,CAAC,wBAAwB,CAAC,CAAC;oBACrE,CAAC;gBACF,CAAC;gBAED,iBAAiB;gBACjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,IAAI,UAAU,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;wBAChJ,SAAS;oBACV,CAAC;yBAAM,CAAC;wBACP,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,oCAAoC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/G,CAAC;gBACF,CAAC;gBAED,mDAAmD;gBACnD,4EAA4E;gBAC5E,IAAI,SAAS,GAAkB,IAAI,CAAC;gBACpC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,sDAAsD,GAAG,OAAO,CAAC,CAAC;oBAChH,CAAC;oBACD,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACP,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBACvE,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3C,CAAC;gBAED,IAAI,IAAI,GAAG,mBAAmB,EAAE,CAAC;oBAChC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,CAAC,CAAC;gBACrD,CAAC;YACF,CAAC;YAED,IAAI,wBAAwB,KAAK,IAAI,EAAE,CAAC;gBACvC,OAAO,kCAAkC,CAAC,wBAAwB,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;QAED,OAAO,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACpE,CAAC;IAEO,8BAA8B,CAAC,UAAkB;QACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,8BAA8B;YAC9B,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;YAC/D,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC5C,CAAC;QAED,MAAM,mBAAmB,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,mBAAmB,EAAE,CAAC;YACzB,OAAO,IAAI,oBAAoB,CAAC,UAAU,EAAE,mBAAmB,CAAC,eAAe,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,IAAI,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;CACD,CAAA;AAxfY,gBAAgB;IAUsH,WAAA,qBAAqB,CAAA;GAV3J,gBAAgB,CAwf5B;;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,KAA2B,EAAE,OAAe;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,2CAAmC,EAAE,CAAC;QACjF,CAAC;aACI,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,6CAAoC,EAAE,CAAC;QAClF,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC","file":"monarchLexer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\n\nimport { Disposable, IDisposable } from '../../../../base/common/lifecycle.js';\nimport * as languages from '../../../common/languages.js';\nimport { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js';\nimport { TokenTheme } from '../../../common/languages/supports/tokenization.js';\nimport { ILanguageService } from '../../../common/languages/language.js';\nimport * as monarchCommon from './monarchCommon.js';\nimport { IStandaloneThemeService } from '../standaloneTheme.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js';\n\nconst CACHE_STACK_DEPTH = 5;\n\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\n\tpublic static create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\treturn this._INSTANCE.create(parent, state);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchStackElement };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\tif (parent !== null && parent.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchStackElement(parent, state);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(parent);\n\t\tif (stackElementId.length > 0) {\n\t\t\tstackElementId += '|';\n\t\t}\n\t\tstackElementId += state;\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchStackElement(parent, state);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchStackElement {\n\n\tpublic readonly parent: MonarchStackElement | null;\n\tpublic readonly state: string;\n\tpublic readonly depth: number;\n\n\tconstructor(parent: MonarchStackElement | null, state: string) {\n\t\tthis.parent = parent;\n\t\tthis.state = state;\n\t\tthis.depth = (this.parent ? this.parent.depth : 0) + 1;\n\t}\n\n\tpublic static getStackElementId(element: MonarchStackElement | null): string {\n\t\tlet result = '';\n\t\twhile (element !== null) {\n\t\t\tif (result.length > 0) {\n\t\t\t\tresult += '|';\n\t\t\t}\n\t\t\tresult += element.state;\n\t\t\telement = element.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _equals(a: MonarchStackElement | null, b: MonarchStackElement | null): boolean {\n\t\twhile (a !== null && b !== null) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (a.state !== b.state) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a.parent;\n\t\t\tb = b.parent;\n\t\t}\n\t\tif (a === null && b === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic equals(other: MonarchStackElement): boolean {\n\t\treturn MonarchStackElement._equals(this, other);\n\t}\n\n\tpublic push(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this, state);\n\t}\n\n\tpublic pop(): MonarchStackElement | null {\n\t\treturn this.parent;\n\t}\n\n\tpublic popall(): MonarchStackElement {\n\t\tlet result: MonarchStackElement = this;\n\t\twhile (result.parent) {\n\t\t\tresult = result.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic switchTo(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this.parent, state);\n\t}\n}\n\nclass EmbeddedLanguageData {\n\tpublic readonly languageId: string;\n\tpublic readonly state: languages.IState;\n\n\tconstructor(languageId: string, state: languages.IState) {\n\t\tthis.languageId = languageId;\n\t\tthis.state = state;\n\t}\n\n\tpublic equals(other: EmbeddedLanguageData): boolean {\n\t\treturn (\n\t\t\tthis.languageId === other.languageId\n\t\t\t&& this.state.equals(other.state)\n\t\t);\n\t}\n\n\tpublic clone(): EmbeddedLanguageData {\n\t\tconst stateClone = this.state.clone();\n\t\t// save an object\n\t\tif (stateClone === this.state) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new EmbeddedLanguageData(this.languageId, this.state);\n\t}\n}\n\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\n\tpublic static create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\treturn this._INSTANCE.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchLineState };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\tif (embeddedLanguageData !== null) {\n\t\t\t// no caching when embedding\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tif (stack !== null && stack.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tconst stackElementId = MonarchStackElement.getStackElementId(stack);\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchLineState(stack, null);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchLineState implements languages.IState {\n\n\tpublic readonly stack: MonarchStackElement;\n\tpublic readonly embeddedLanguageData: EmbeddedLanguageData | null;\n\n\tconstructor(\n\t\tstack: MonarchStackElement,\n\t\tembeddedLanguageData: EmbeddedLanguageData | null\n\t) {\n\t\tthis.stack = stack;\n\t\tthis.embeddedLanguageData = embeddedLanguageData;\n\t}\n\n\tpublic clone(): languages.IState {\n\t\tconst embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;\n\t\t// save an object\n\t\tif (embeddedlanguageDataClone === this.embeddedLanguageData) {\n\t\t\treturn this;\n\t\t}\n\t\treturn MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);\n\t}\n\n\tpublic equals(other: languages.IState): boolean {\n\t\tif (!(other instanceof MonarchLineState)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.stack.equals(other.stack)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.embeddedLanguageData === null && other.embeddedLanguageData === null) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.embeddedLanguageData.equals(other.embeddedLanguageData);\n\t}\n}\n\ninterface IMonarchTokensCollector {\n\tenterLanguage(languageId: string): void;\n\temit(startOffset: number, type: string): void;\n\tnestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState;\n}\n\nclass MonarchClassicTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _tokens: languages.Token[];\n\tprivate _languageId: string | null;\n\tprivate _lastTokenType: string | null;\n\tprivate _lastTokenLanguage: string | null;\n\n\tconstructor() {\n\t\tthis._tokens = [];\n\t\tthis._languageId = null;\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._languageId = languageId;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tif (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenType = type;\n\t\tthis._lastTokenLanguage = this._languageId;\n\t\tthis._tokens.push(new languages.Token(startOffset, type, this._languageId!));\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (const token of nestedResult.tokens) {\n\t\t\t\tthis._tokens.push(new languages.Token(token.offset + offsetDelta, token.type, token.language));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._tokens = this._tokens.concat(nestedResult.tokens);\n\t\t}\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t\tthis._languageId = null;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.TokenizationResult {\n\t\treturn new languages.TokenizationResult(this._tokens, endState);\n\t}\n}\n\nclass MonarchModernTokensCollector implements IMonarchTokensCollector {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _theme: TokenTheme;\n\tprivate _prependTokens: Uint32Array | null;\n\tprivate _tokens: number[];\n\tprivate _currentLanguageId: LanguageId;\n\tprivate _lastTokenMetadata: number;\n\n\tconstructor(languageService: ILanguageService, theme: TokenTheme) {\n\t\tthis._languageService = languageService;\n\t\tthis._theme = theme;\n\t\tthis._prependTokens = null;\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = LanguageId.Null;\n\t\tthis._lastTokenMetadata = 0;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tconst metadata = this._theme.match(this._currentLanguageId, type) | MetadataConsts.BALANCED_BRACKETS_MASK;\n\t\tif (this._lastTokenMetadata === metadata) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenMetadata = metadata;\n\t\tthis._tokens.push(startOffset);\n\t\tthis._tokens.push(metadata);\n\t}\n\n\tprivate static _merge(a: Uint32Array | null, b: number[], c: Uint32Array | null): Uint32Array {\n\t\tconst aLen = (a !== null ? a.length : 0);\n\t\tconst bLen = b.length;\n\t\tconst cLen = (c !== null ? c.length : 0);\n\n\t\tif (aLen === 0 && bLen === 0 && cLen === 0) {\n\t\t\treturn new Uint32Array(0);\n\t\t}\n\t\tif (aLen === 0 && bLen === 0) {\n\t\t\treturn c!;\n\t\t}\n\t\tif (bLen === 0 && cLen === 0) {\n\t\t\treturn a!;\n\t\t}\n\n\t\tconst result = new Uint32Array(aLen + bLen + cLen);\n\t\tif (a !== null) {\n\t\t\tresult.set(a);\n\t\t}\n\t\tfor (let i = 0; i < bLen; i++) {\n\t\t\tresult[aLen + i] = b[i];\n\t\t}\n\t\tif (c !== null) {\n\t\t\tresult.set(c, aLen + bLen);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {\n\t\t\t\tnestedResult.tokens[i] += offsetDelta;\n\t\t\t}\n\t\t}\n\n\t\tthis._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = 0;\n\t\tthis._lastTokenMetadata = 0;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.EncodedTokenizationResult {\n\t\treturn new languages.EncodedTokenizationResult(\n\t\t\tMonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null),\n\t\t\tendState\n\t\t);\n\t}\n}\n\nexport type ILoadStatus = { loaded: true } | { loaded: false; promise: Promise<void> };\n\nexport class MonarchTokenizer extends Disposable implements languages.ITokenizationSupport, IDisposable {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _languageId: string;\n\tprivate readonly _lexer: monarchCommon.ILexer;\n\tprivate readonly _embeddedLanguages: { [languageId: string]: boolean };\n\tpublic embeddedLoaded: Promise<void>;\n\tprivate _maxTokenizationLineLength: number;\n\n\tconstructor(languageService: ILanguageService, standaloneThemeService: IStandaloneThemeService, languageId: string, lexer: monarchCommon.ILexer, @IConfigurationService private readonly _configurationService: IConfigurationService) {\n\t\tsuper();\n\t\tthis._languageService = languageService;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._languageId = languageId;\n\t\tthis._lexer = lexer;\n\t\tthis._embeddedLanguages = Object.create(null);\n\t\tthis.embeddedLoaded = Promise.resolve(undefined);\n\n\t\t// Set up listening for embedded modes\n\t\tlet emitting = false;\n\t\tthis._register(languages.TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (emitting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet isOneOfMyEmbeddedModes = false;\n\t\t\tfor (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n\t\t\t\tconst language = e.changedLanguages[i];\n\t\t\t\tif (this._embeddedLanguages[language]) {\n\t\t\t\t\tisOneOfMyEmbeddedModes = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOneOfMyEmbeddedModes) {\n\t\t\t\temitting = true;\n\t\t\t\tlanguages.TokenizationRegistry.handleChange([this._languageId]);\n\t\t\t\temitting = false;\n\t\t\t}\n\t\t}));\n\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\toverrideIdentifier: this._languageId\n\t\t});\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('editor.maxTokenizationLineLength')) {\n\t\t\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\t\t\toverrideIdentifier: this._languageId\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic getLoadStatus(): ILoadStatus {\n\t\tconst promises: Thenable<any>[] = [];\n\t\tfor (const nestedLanguageId in this._embeddedLanguages) {\n\t\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\t\tif (tokenizationSupport) {\n\t\t\t\t// The nested language is already loaded\n\t\t\t\tif (tokenizationSupport instanceof MonarchTokenizer) {\n\t\t\t\t\tconst nestedModeStatus = tokenizationSupport.getLoadStatus();\n\t\t\t\t\tif (nestedModeStatus.loaded === false) {\n\t\t\t\t\t\tpromises.push(nestedModeStatus.promise);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!languages.TokenizationRegistry.isResolved(nestedLanguageId)) {\n\t\t\t\t// The nested language is in the process of being loaded\n\t\t\t\tpromises.push(languages.TokenizationRegistry.getOrCreate(nestedLanguageId));\n\t\t\t}\n\t\t}\n\n\t\tif (promises.length === 0) {\n\t\t\treturn {\n\t\t\t\tloaded: true\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tpromise: Promise.all(promises).then(_ => undefined)\n\t\t};\n\t}\n\n\tpublic getInitialState(): languages.IState {\n\t\tconst rootState = MonarchStackElementFactory.create(null, this._lexer.start!);\n\t\treturn MonarchLineStateFactory.create(rootState, null);\n\t}\n\n\tpublic tokenize(line: string, hasEOL: boolean, lineState: languages.IState): languages.TokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenize(this._languageId, lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchClassicTokensCollector();\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tpublic tokenizeEncoded(line: string, hasEOL: boolean, lineState: languages.IState): languages.EncodedTokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchModernTokensCollector(this._languageService, this._standaloneThemeService.getColorTheme().tokenTheme);\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tprivate _tokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, collector: IMonarchTokensCollector): MonarchLineState {\n\t\tif (lineState.embeddedLanguageData) {\n\t\t\treturn this._nestedTokenize(line, hasEOL, lineState, 0, collector);\n\t\t} else {\n\t\t\treturn this._myTokenize(line, hasEOL, lineState, 0, collector);\n\t\t}\n\t}\n\n\tprivate _findLeavingNestedLanguageOffset(line: string, state: MonarchLineState): number {\n\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state.stack.state];\n\t\tif (!rules) {\n\t\t\trules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n\t\t\tif (!rules) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n\t\t\t}\n\t\t}\n\n\t\tlet popOffset = -1;\n\t\tlet hasEmbeddedPopRule = false;\n\n\t\tfor (const rule of rules) {\n\t\t\tif (!monarchCommon.isIAction(rule.action) || !(rule.action.nextEmbedded === '@pop' || rule.action.hasEmbeddedEndInCases)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasEmbeddedPopRule = true;\n\n\t\t\tlet regex = rule.resolveRegex(state.stack.state);\n\t\t\tconst regexSource = regex.source;\n\t\t\tif (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n\t\t\t\tconst flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n\t\t\t\tregex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n\t\t\t}\n\n\t\t\tconst result = line.search(regex);\n\t\t\tif (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (popOffset === -1 || result < popOffset) {\n\t\t\t\tpopOffset = result;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasEmbeddedPopRule) {\n\t\t\tthrow monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n\t\t}\n\n\t\treturn popOffset;\n\t}\n\n\tprivate _nestedTokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\n\t\tconst popOffset = this._findLeavingNestedLanguageOffset(line, lineState);\n\n\t\tif (popOffset === -1) {\n\t\t\t// tokenization will not leave nested language\n\t\t\tconst nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData!, offsetDelta);\n\t\t\treturn MonarchLineStateFactory.create(lineState.stack, new EmbeddedLanguageData(lineState.embeddedLanguageData!.languageId, nestedEndState));\n\t\t}\n\n\t\tconst nestedLanguageLine = line.substring(0, popOffset);\n\t\tif (nestedLanguageLine.length > 0) {\n\t\t\t// tokenize with the nested language\n\t\t\ttokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData!, offsetDelta);\n\t\t}\n\n\t\tconst restOfTheLine = line.substring(popOffset);\n\t\treturn this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n\t}\n\n\tprivate _safeRuleName(rule: monarchCommon.IRule | null): string {\n\t\tif (rule) {\n\t\t\treturn rule.name;\n\t\t}\n\t\treturn '(unknown)';\n\t}\n\n\tprivate _myTokenize(lineWithoutLF: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\t\ttokensCollector.enterLanguage(this._languageId);\n\n\t\tconst lineWithoutLFLength = lineWithoutLF.length;\n\t\tconst line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n\t\tconst lineLength = line.length;\n\n\t\tlet embeddedLanguageData = lineState.embeddedLanguageData;\n\t\tlet stack = lineState.stack;\n\t\tlet pos = 0;\n\n\t\t// regular expression group matching\n\t\t// these never need cloning or equality since they are only used within a line match\n\t\tinterface GroupMatching {\n\t\t\tmatches: string[];\n\t\t\trule: monarchCommon.IRule | null;\n\t\t\tgroups: { action: monarchCommon.FuzzyAction; matched: string }[];\n\t\t}\n\t\tlet groupMatching: GroupMatching | null = null;\n\n\t\t// See https://github.com/microsoft/monaco-editor/issues/1235\n\t\t// Evaluate rules at least once for an empty line\n\t\tlet forceEvaluation = true;\n\n\t\twhile (forceEvaluation || pos < lineLength) {\n\n\t\t\tconst pos0 = pos;\n\t\t\tconst stackLen0 = stack.depth;\n\t\t\tconst groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n\t\t\tconst state = stack.state;\n\n\t\t\tlet matches: string[] | null = null;\n\t\t\tlet matched: string | null = null;\n\t\t\tlet action: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\tlet rule: monarchCommon.IRule | null = null;\n\n\t\t\tlet enteringEmbeddedLanguage: string | null = null;\n\n\t\t\t// check if we need to process group matches first\n\t\t\tif (groupMatching) {\n\t\t\t\tmatches = groupMatching.matches;\n\t\t\t\tconst groupEntry = groupMatching.groups.shift()!;\n\t\t\t\tmatched = groupEntry.matched;\n\t\t\t\taction = groupEntry.action;\n\t\t\t\trule = groupMatching.rule;\n\n\t\t\t\t// cleanup if necessary\n\t\t\t\tif (groupMatching.groups.length === 0) {\n\t\t\t\t\tgroupMatching = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise we match on the token stream\n\n\t\t\t\tif (!forceEvaluation && pos >= lineLength) {\n\t\t\t\t\t// nothing to do\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tforceEvaluation = false;\n\n\t\t\t\t// get the rules for this state\n\t\t\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state];\n\t\t\t\tif (!rules) {\n\t\t\t\t\trules = monarchCommon.findRules(this._lexer, state); // do parent matching\n\t\t\t\t\tif (!rules) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// try each rule until we match\n\t\t\t\tconst restOfLine = line.substr(pos);\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\tif (pos === 0 || !rule.matchOnlyAtLineStart) {\n\t\t\t\t\t\tmatches = restOfLine.match(rule.resolveRegex(state));\n\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\tmatched = matches[0];\n\t\t\t\t\t\t\taction = rule.action;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We matched 'rule' with 'matches' and 'action'\n\t\t\tif (!matches) {\n\t\t\t\tmatches = [''];\n\t\t\t\tmatched = '';\n\t\t\t}\n\n\t\t\tif (!action) {\n\t\t\t\t// bad: we didn't match anything, and there is no action to take\n\t\t\t\t// we need to advance the stream or we get progress trouble\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\tmatches = [line.charAt(pos)];\n\t\t\t\t\tmatched = matches[0];\n\t\t\t\t}\n\t\t\t\taction = this._lexer.defaultToken;\n\t\t\t}\n\n\t\t\tif (matched === null) {\n\t\t\t\t// should never happen, needed for strict null checking\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// advance stream\n\t\t\tpos += matched.length;\n\n\t\t\t// maybe call action function (used for 'cases')\n\t\t\twhile (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n\t\t\t\taction = action.test(matched, matches, state, pos === lineLength);\n\t\t\t}\n\n\t\t\tlet result: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\t// set the result: either a string or an array of actions\n\t\t\tif (typeof action === 'string' || Array.isArray(action)) {\n\t\t\t\tresult = action;\n\t\t\t} else if (action.group) {\n\t\t\t\tresult = action.group;\n\t\t\t} else if (action.token !== null && action.token !== undefined) {\n\n\t\t\t\t// do $n replacements?\n\t\t\t\tif (action.tokenSubst) {\n\t\t\t\t\tresult = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n\t\t\t\t} else {\n\t\t\t\t\tresult = action.token;\n\t\t\t\t}\n\n\t\t\t\t// enter embedded language?\n\t\t\t\tif (action.nextEmbedded) {\n\t\t\t\t\tif (action.nextEmbedded === '@pop') {\n\t\t\t\t\t\tif (!embeddedLanguageData) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot pop embedded language if not inside one');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tembeddedLanguageData = null;\n\t\t\t\t\t} else if (embeddedLanguageData) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot enter embedded language from within an embedded language');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tenteringEmbeddedLanguage = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// state transformations\n\t\t\t\tif (action.goBack) { // back up the stream..\n\t\t\t\t\tpos = Math.max(0, pos - action.goBack);\n\t\t\t\t}\n\n\t\t\t\tif (action.switchTo && typeof action.switchTo === 'string') {\n\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t}\n\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstack = stack.switchTo(nextState);\n\t\t\t\t\t}\n\t\t\t\t} else if (action.transform && typeof action.transform === 'function') {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'action.transform not supported');\n\t\t\t\t} else if (action.next) {\n\t\t\t\t\tif (action.next === '@push') {\n\t\t\t\t\t\tif (stack.depth >= this._lexer.maxStack) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n\t\t\t\t\t\t\t\tstack.state + ',' + stack.parent!.state + ',...]');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(state);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@pop') {\n\t\t\t\t\t\tif (stack.depth <= 1) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.pop()!;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@popall') {\n\t\t\t\t\t\tstack = stack.popall();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n\t\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(nextState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action.log && typeof (action.log) === 'string') {\n\t\t\t\t\tmonarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check result\n\t\t\tif (result === null) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n\t\t\t}\n\n\t\t\tconst computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage: string) => {\n\t\t\t\t// support language names, mime types, and language ids\n\t\t\t\tconst languageId = (\n\t\t\t\t\tthis._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)\n\t\t\t\t\t|| this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)\n\t\t\t\t\t|| enteringEmbeddedLanguage\n\t\t\t\t);\n\n\t\t\t\tconst embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);\n\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\t// there is content from the embedded language on this line\n\t\t\t\t\tconst restOfLine = lineWithoutLF.substr(pos);\n\t\t\t\t\treturn this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);\n\t\t\t\t} else {\n\t\t\t\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// is the result a group match?\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tif (groupMatching && groupMatching.groups.length > 0) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tif (matches.length !== result.length + 1) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tlet totalLen = 0;\n\t\t\t\tfor (let i = 1; i < matches.length; i++) {\n\t\t\t\t\ttotalLen += matches[i].length;\n\t\t\t\t}\n\t\t\t\tif (totalLen !== matched.length) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\n\t\t\t\tgroupMatching = {\n\t\t\t\t\trule: rule,\n\t\t\t\t\tmatches: matches,\n\t\t\t\t\tgroups: []\n\t\t\t\t};\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\tgroupMatching.groups[i] = {\n\t\t\t\t\t\taction: result[i],\n\t\t\t\t\t\tmatched: matches[i + 1]\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpos -= matched.length;\n\t\t\t\t// call recursively to initiate first result match\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// regular result\n\n\t\t\t\t// check for '@rematch'\n\t\t\t\tif (result === '@rematch') {\n\t\t\t\t\tpos -= matched.length;\n\t\t\t\t\tmatched = ''; // better set the next state too..\n\t\t\t\t\tmatches = null;\n\t\t\t\t\tresult = '';\n\n\t\t\t\t\t// Even though `@rematch` was specified, if `nextEmbedded` also specified,\n\t\t\t\t\t// a state transition should occur.\n\t\t\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check progress\n\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\tif (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// return the result (and check for brace matching)\n\t\t\t\t// todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n\t\t\t\tlet tokenType: string | null = null;\n\t\t\t\tif (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n\t\t\t\t\tconst rest = result.substr('@brackets'.length);\n\t\t\t\t\tconst bracket = findBracket(this._lexer, matched);\n\t\t\t\t\tif (!bracket) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n\t\t\t\t\t}\n\t\t\t\t\ttokenType = monarchCommon.sanitize(bracket.token + rest);\n\t\t\t\t} else {\n\t\t\t\t\tconst token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n\t\t\t\t\ttokenType = monarchCommon.sanitize(token);\n\t\t\t\t}\n\n\t\t\t\tif (pos0 < lineWithoutLFLength) {\n\t\t\t\t\ttokensCollector.emit(pos0 + offsetDelta, tokenType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t}\n\t\t}\n\n\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate _getNestedEmbeddedLanguageData(languageId: string): EmbeddedLanguageData {\n\t\tif (!this._languageService.isRegisteredLanguageId(languageId)) {\n\t\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t\t}\n\n\t\tif (languageId !== this._languageId) {\n\t\t\t// Fire language loading event\n\t\t\tthis._languageService.requestBasicLanguageFeatures(languageId);\n\t\t\tlanguages.TokenizationRegistry.getOrCreate(languageId);\n\t\t\tthis._embeddedLanguages[languageId] = true;\n\t\t}\n\n\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(languageId);\n\t\tif (tokenizationSupport) {\n\t\t\treturn new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState());\n\t\t}\n\n\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t}\n}\n\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer: monarchCommon.ILexer, matched: string) {\n\tif (!matched) {\n\t\treturn null;\n\t}\n\tmatched = monarchCommon.fixCase(lexer, matched);\n\n\tconst brackets = lexer.brackets;\n\tfor (const bracket of brackets) {\n\t\tif (bracket.open === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Open };\n\t\t}\n\t\telse if (bracket.close === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Close };\n\t\t}\n\t}\n\treturn null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\n\nimport { Disposable, IDisposable } from '../../../../base/common/lifecycle.js';\nimport * as languages from '../../../common/languages.js';\nimport { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js';\nimport { TokenTheme } from '../../../common/languages/supports/tokenization.js';\nimport { ILanguageService } from '../../../common/languages/language.js';\nimport * as monarchCommon from './monarchCommon.js';\nimport { IStandaloneThemeService } from '../standaloneTheme.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js';\n\nconst CACHE_STACK_DEPTH = 5;\n\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\n\tpublic static create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\treturn this._INSTANCE.create(parent, state);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchStackElement };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\tif (parent !== null && parent.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchStackElement(parent, state);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(parent);\n\t\tif (stackElementId.length > 0) {\n\t\t\tstackElementId += '|';\n\t\t}\n\t\tstackElementId += state;\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchStackElement(parent, state);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchStackElement {\n\n\tpublic readonly parent: MonarchStackElement | null;\n\tpublic readonly state: string;\n\tpublic readonly depth: number;\n\n\tconstructor(parent: MonarchStackElement | null, state: string) {\n\t\tthis.parent = parent;\n\t\tthis.state = state;\n\t\tthis.depth = (this.parent ? this.parent.depth : 0) + 1;\n\t}\n\n\tpublic static getStackElementId(element: MonarchStackElement | null): string {\n\t\tlet result = '';\n\t\twhile (element !== null) {\n\t\t\tif (result.length > 0) {\n\t\t\t\tresult += '|';\n\t\t\t}\n\t\t\tresult += element.state;\n\t\t\telement = element.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _equals(a: MonarchStackElement | null, b: MonarchStackElement | null): boolean {\n\t\twhile (a !== null && b !== null) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (a.state !== b.state) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a.parent;\n\t\t\tb = b.parent;\n\t\t}\n\t\tif (a === null && b === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic equals(other: MonarchStackElement): boolean {\n\t\treturn MonarchStackElement._equals(this, other);\n\t}\n\n\tpublic push(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this, state);\n\t}\n\n\tpublic pop(): MonarchStackElement | null {\n\t\treturn this.parent;\n\t}\n\n\tpublic popall(): MonarchStackElement {\n\t\tlet result: MonarchStackElement = this;\n\t\twhile (result.parent) {\n\t\t\tresult = result.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic switchTo(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this.parent, state);\n\t}\n}\n\nclass EmbeddedLanguageData {\n\tpublic readonly languageId: string;\n\tpublic readonly state: languages.IState;\n\n\tconstructor(languageId: string, state: languages.IState) {\n\t\tthis.languageId = languageId;\n\t\tthis.state = state;\n\t}\n\n\tpublic equals(other: EmbeddedLanguageData): boolean {\n\t\treturn (\n\t\t\tthis.languageId === other.languageId\n\t\t\t&& this.state.equals(other.state)\n\t\t);\n\t}\n\n\tpublic clone(): EmbeddedLanguageData {\n\t\tconst stateClone = this.state.clone();\n\t\t// save an object\n\t\tif (stateClone === this.state) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new EmbeddedLanguageData(this.languageId, this.state);\n\t}\n}\n\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\n\tpublic static create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\treturn this._INSTANCE.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchLineState };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\tif (embeddedLanguageData !== null) {\n\t\t\t// no caching when embedding\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tif (stack !== null && stack.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tconst stackElementId = MonarchStackElement.getStackElementId(stack);\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchLineState(stack, null);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchLineState implements languages.IState {\n\n\tpublic readonly stack: MonarchStackElement;\n\tpublic readonly embeddedLanguageData: EmbeddedLanguageData | null;\n\n\tconstructor(\n\t\tstack: MonarchStackElement,\n\t\tembeddedLanguageData: EmbeddedLanguageData | null\n\t) {\n\t\tthis.stack = stack;\n\t\tthis.embeddedLanguageData = embeddedLanguageData;\n\t}\n\n\tpublic clone(): languages.IState {\n\t\tconst embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;\n\t\t// save an object\n\t\tif (embeddedlanguageDataClone === this.embeddedLanguageData) {\n\t\t\treturn this;\n\t\t}\n\t\treturn MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);\n\t}\n\n\tpublic equals(other: languages.IState): boolean {\n\t\tif (!(other instanceof MonarchLineState)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.stack.equals(other.stack)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.embeddedLanguageData === null && other.embeddedLanguageData === null) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.embeddedLanguageData.equals(other.embeddedLanguageData);\n\t}\n}\n\ninterface IMonarchTokensCollector {\n\tenterLanguage(languageId: string): void;\n\temit(startOffset: number, type: string): void;\n\tnestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState;\n}\n\nclass MonarchClassicTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _tokens: languages.Token[];\n\tprivate _languageId: string | null;\n\tprivate _lastTokenType: string | null;\n\tprivate _lastTokenLanguage: string | null;\n\n\tconstructor() {\n\t\tthis._tokens = [];\n\t\tthis._languageId = null;\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._languageId = languageId;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tif (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenType = type;\n\t\tthis._lastTokenLanguage = this._languageId;\n\t\tthis._tokens.push(new languages.Token(startOffset, type, this._languageId!));\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (const token of nestedResult.tokens) {\n\t\t\t\tthis._tokens.push(new languages.Token(token.offset + offsetDelta, token.type, token.language));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._tokens = this._tokens.concat(nestedResult.tokens);\n\t\t}\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t\tthis._languageId = null;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.TokenizationResult {\n\t\treturn new languages.TokenizationResult(this._tokens, endState);\n\t}\n}\n\nclass MonarchModernTokensCollector implements IMonarchTokensCollector {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _theme: TokenTheme;\n\tprivate _prependTokens: Uint32Array | null;\n\tprivate _tokens: number[];\n\tprivate _currentLanguageId: LanguageId;\n\tprivate _lastTokenMetadata: number;\n\n\tconstructor(languageService: ILanguageService, theme: TokenTheme) {\n\t\tthis._languageService = languageService;\n\t\tthis._theme = theme;\n\t\tthis._prependTokens = null;\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = LanguageId.Null;\n\t\tthis._lastTokenMetadata = 0;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tconst metadata = this._theme.match(this._currentLanguageId, type) | MetadataConsts.BALANCED_BRACKETS_MASK;\n\t\tif (this._lastTokenMetadata === metadata) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenMetadata = metadata;\n\t\tthis._tokens.push(startOffset);\n\t\tthis._tokens.push(metadata);\n\t}\n\n\tprivate static _merge(a: Uint32Array | null, b: number[], c: Uint32Array | null): Uint32Array {\n\t\tconst aLen = (a !== null ? a.length : 0);\n\t\tconst bLen = b.length;\n\t\tconst cLen = (c !== null ? c.length : 0);\n\n\t\tif (aLen === 0 && bLen === 0 && cLen === 0) {\n\t\t\treturn new Uint32Array(0);\n\t\t}\n\t\tif (aLen === 0 && bLen === 0) {\n\t\t\treturn c!;\n\t\t}\n\t\tif (bLen === 0 && cLen === 0) {\n\t\t\treturn a!;\n\t\t}\n\n\t\tconst result = new Uint32Array(aLen + bLen + cLen);\n\t\tif (a !== null) {\n\t\t\tresult.set(a);\n\t\t}\n\t\tfor (let i = 0; i < bLen; i++) {\n\t\t\tresult[aLen + i] = b[i];\n\t\t}\n\t\tif (c !== null) {\n\t\t\tresult.set(c, aLen + bLen);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {\n\t\t\t\tnestedResult.tokens[i] += offsetDelta;\n\t\t\t}\n\t\t}\n\n\t\tthis._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = 0;\n\t\tthis._lastTokenMetadata = 0;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.EncodedTokenizationResult {\n\t\treturn new languages.EncodedTokenizationResult(\n\t\t\tMonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null),\n\t\t\tendState\n\t\t);\n\t}\n}\n\nexport type ILoadStatus = { loaded: true } | { loaded: false; promise: Promise<void> };\n\nexport class MonarchTokenizer extends Disposable implements languages.ITokenizationSupport, IDisposable {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _languageId: string;\n\tprivate readonly _lexer: monarchCommon.ILexer;\n\tprivate readonly _embeddedLanguages: { [languageId: string]: boolean };\n\tpublic embeddedLoaded: Promise<void>;\n\tprivate _maxTokenizationLineLength: number;\n\n\tconstructor(languageService: ILanguageService, standaloneThemeService: IStandaloneThemeService, languageId: string, lexer: monarchCommon.ILexer, @IConfigurationService private readonly _configurationService: IConfigurationService) {\n\t\tsuper();\n\t\tthis._languageService = languageService;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._languageId = languageId;\n\t\tthis._lexer = lexer;\n\t\tthis._embeddedLanguages = Object.create(null);\n\t\tthis.embeddedLoaded = Promise.resolve(undefined);\n\n\t\t// Set up listening for embedded modes\n\t\tlet emitting = false;\n\t\tthis._register(languages.TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (emitting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet isOneOfMyEmbeddedModes = false;\n\t\t\tfor (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n\t\t\t\tconst language = e.changedLanguages[i];\n\t\t\t\tif (this._embeddedLanguages[language]) {\n\t\t\t\t\tisOneOfMyEmbeddedModes = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOneOfMyEmbeddedModes) {\n\t\t\t\temitting = true;\n\t\t\t\tlanguages.TokenizationRegistry.handleChange([this._languageId]);\n\t\t\t\temitting = false;\n\t\t\t}\n\t\t}));\n\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\toverrideIdentifier: this._languageId\n\t\t});\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('editor.maxTokenizationLineLength')) {\n\t\t\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\t\t\toverrideIdentifier: this._languageId\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic getLoadStatus(): ILoadStatus {\n\t\tconst promises: Thenable<any>[] = [];\n\t\tfor (const nestedLanguageId in this._embeddedLanguages) {\n\t\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\t\tif (tokenizationSupport) {\n\t\t\t\t// The nested language is already loaded\n\t\t\t\tif (tokenizationSupport instanceof MonarchTokenizer) {\n\t\t\t\t\tconst nestedModeStatus = tokenizationSupport.getLoadStatus();\n\t\t\t\t\tif (nestedModeStatus.loaded === false) {\n\t\t\t\t\t\tpromises.push(nestedModeStatus.promise);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!languages.TokenizationRegistry.isResolved(nestedLanguageId)) {\n\t\t\t\t// The nested language is in the process of being loaded\n\t\t\t\tpromises.push(languages.TokenizationRegistry.getOrCreate(nestedLanguageId));\n\t\t\t}\n\t\t}\n\n\t\tif (promises.length === 0) {\n\t\t\treturn {\n\t\t\t\tloaded: true\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tpromise: Promise.all(promises).then(_ => undefined)\n\t\t};\n\t}\n\n\tpublic getInitialState(): languages.IState {\n\t\tconst rootState = MonarchStackElementFactory.create(null, this._lexer.start!);\n\t\treturn MonarchLineStateFactory.create(rootState, null);\n\t}\n\n\tpublic tokenize(line: string, hasEOL: boolean, lineState: languages.IState): languages.TokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenize(this._languageId, lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchClassicTokensCollector();\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tpublic tokenizeEncoded(line: string, hasEOL: boolean, lineState: languages.IState): languages.EncodedTokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchModernTokensCollector(this._languageService, this._standaloneThemeService.getColorTheme().tokenTheme);\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tprivate _tokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, collector: IMonarchTokensCollector): MonarchLineState {\n\t\tif (lineState.embeddedLanguageData) {\n\t\t\treturn this._nestedTokenize(line, hasEOL, lineState, 0, collector);\n\t\t} else {\n\t\t\treturn this._myTokenize(line, hasEOL, lineState, 0, collector);\n\t\t}\n\t}\n\n\tprivate _findLeavingNestedLanguageOffset(line: string, state: MonarchLineState): number {\n\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state.stack.state];\n\t\tif (!rules) {\n\t\t\trules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n\t\t\tif (!rules) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n\t\t\t}\n\t\t}\n\n\t\tlet popOffset = -1;\n\t\tlet hasEmbeddedPopRule = false;\n\n\t\tfor (const rule of rules) {\n\t\t\tif (!monarchCommon.isIAction(rule.action) || !(rule.action.nextEmbedded === '@pop' || rule.action.hasEmbeddedEndInCases)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasEmbeddedPopRule = true;\n\n\t\t\tlet regex = rule.resolveRegex(state.stack.state);\n\t\t\tconst regexSource = regex.source;\n\t\t\tif (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n\t\t\t\tconst flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n\t\t\t\tregex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n\t\t\t}\n\n\t\t\tconst result = line.search(regex);\n\t\t\tif (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (popOffset === -1 || result < popOffset) {\n\t\t\t\tpopOffset = result;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasEmbeddedPopRule) {\n\t\t\tthrow monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n\t\t}\n\n\t\treturn popOffset;\n\t}\n\n\tprivate _nestedTokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\n\t\tconst popOffset = this._findLeavingNestedLanguageOffset(line, lineState);\n\n\t\tif (popOffset === -1) {\n\t\t\t// tokenization will not leave nested language\n\t\t\tconst nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData!, offsetDelta);\n\t\t\treturn MonarchLineStateFactory.create(lineState.stack, new EmbeddedLanguageData(lineState.embeddedLanguageData!.languageId, nestedEndState));\n\t\t}\n\n\t\tconst nestedLanguageLine = line.substring(0, popOffset);\n\t\tif (nestedLanguageLine.length > 0) {\n\t\t\t// tokenize with the nested language\n\t\t\ttokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData!, offsetDelta);\n\t\t}\n\n\t\tconst restOfTheLine = line.substring(popOffset);\n\t\treturn this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n\t}\n\n\tprivate _safeRuleName(rule: monarchCommon.IRule | null): string {\n\t\tif (rule) {\n\t\t\treturn rule.name;\n\t\t}\n\t\treturn '(unknown)';\n\t}\n\n\tprivate _myTokenize(lineWithoutLF: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\t\ttokensCollector.enterLanguage(this._languageId);\n\n\t\tconst lineWithoutLFLength = lineWithoutLF.length;\n\t\tconst line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n\t\tconst lineLength = line.length;\n\n\t\tlet embeddedLanguageData = lineState.embeddedLanguageData;\n\t\tlet stack = lineState.stack;\n\t\tlet pos = 0;\n\n\t\t// regular expression group matching\n\t\t// these never need cloning or equality since they are only used within a line match\n\t\tinterface GroupMatching {\n\t\t\tmatches: string[];\n\t\t\trule: monarchCommon.IRule | null;\n\t\t\tgroups: { action: monarchCommon.FuzzyAction; matched: string }[];\n\t\t}\n\t\tlet groupMatching: GroupMatching | null = null;\n\n\t\t// See https://github.com/microsoft/monaco-editor/issues/1235\n\t\t// Evaluate rules at least once for an empty line\n\t\tlet forceEvaluation = true;\n\n\t\twhile (forceEvaluation || pos < lineLength) {\n\n\t\t\tconst pos0 = pos;\n\t\t\tconst stackLen0 = stack.depth;\n\t\t\tconst groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n\t\t\tconst state = stack.state;\n\n\t\t\tlet matches: string[] | null = null;\n\t\t\tlet matched: string | null = null;\n\t\t\tlet action: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\tlet rule: monarchCommon.IRule | null = null;\n\n\t\t\tlet enteringEmbeddedLanguage: string | null = null;\n\n\t\t\t// check if we need to process group matches first\n\t\t\tif (groupMatching) {\n\t\t\t\tmatches = groupMatching.matches;\n\t\t\t\tconst groupEntry = groupMatching.groups.shift()!;\n\t\t\t\tmatched = groupEntry.matched;\n\t\t\t\taction = groupEntry.action;\n\t\t\t\trule = groupMatching.rule;\n\n\t\t\t\t// cleanup if necessary\n\t\t\t\tif (groupMatching.groups.length === 0) {\n\t\t\t\t\tgroupMatching = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise we match on the token stream\n\n\t\t\t\tif (!forceEvaluation && pos >= lineLength) {\n\t\t\t\t\t// nothing to do\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tforceEvaluation = false;\n\n\t\t\t\t// get the rules for this state\n\t\t\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state];\n\t\t\t\tif (!rules) {\n\t\t\t\t\trules = monarchCommon.findRules(this._lexer, state); // do parent matching\n\t\t\t\t\tif (!rules) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// try each rule until we match\n\t\t\t\tconst restOfLine = line.substr(pos);\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\tif (pos === 0 || !rule.matchOnlyAtLineStart) {\n\t\t\t\t\t\tmatches = restOfLine.match(rule.resolveRegex(state));\n\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\tmatched = matches[0];\n\t\t\t\t\t\t\taction = rule.action;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We matched 'rule' with 'matches' and 'action'\n\t\t\tif (!matches) {\n\t\t\t\tmatches = [''];\n\t\t\t\tmatched = '';\n\t\t\t}\n\n\t\t\tif (!action) {\n\t\t\t\t// bad: we didn't match anything, and there is no action to take\n\t\t\t\t// we need to advance the stream or we get progress trouble\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\tmatches = [line.charAt(pos)];\n\t\t\t\t\tmatched = matches[0];\n\t\t\t\t}\n\t\t\t\taction = this._lexer.defaultToken;\n\t\t\t}\n\n\t\t\tif (matched === null) {\n\t\t\t\t// should never happen, needed for strict null checking\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// advance stream\n\t\t\tpos += matched.length;\n\n\t\t\t// maybe call action function (used for 'cases')\n\t\t\twhile (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n\t\t\t\taction = action.test(matched, matches, state, pos === lineLength);\n\t\t\t}\n\n\t\t\tlet result: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\t// set the result: either a string or an array of actions\n\t\t\tif (typeof action === 'string' || Array.isArray(action)) {\n\t\t\t\tresult = action;\n\t\t\t} else if (action.group) {\n\t\t\t\tresult = action.group;\n\t\t\t} else if (action.token !== null && action.token !== undefined) {\n\n\t\t\t\t// do $n replacements?\n\t\t\t\tif (action.tokenSubst) {\n\t\t\t\t\tresult = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n\t\t\t\t} else {\n\t\t\t\t\tresult = action.token;\n\t\t\t\t}\n\n\t\t\t\t// enter embedded language?\n\t\t\t\tif (action.nextEmbedded) {\n\t\t\t\t\tif (action.nextEmbedded === '@pop') {\n\t\t\t\t\t\tif (!embeddedLanguageData) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot pop embedded language if not inside one');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tembeddedLanguageData = null;\n\t\t\t\t\t} else if (embeddedLanguageData) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot enter embedded language from within an embedded language');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tenteringEmbeddedLanguage = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// state transformations\n\t\t\t\tif (action.goBack) { // back up the stream..\n\t\t\t\t\tpos = Math.max(0, pos - action.goBack);\n\t\t\t\t}\n\n\t\t\t\tif (action.switchTo && typeof action.switchTo === 'string') {\n\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t}\n\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstack = stack.switchTo(nextState);\n\t\t\t\t\t}\n\t\t\t\t} else if (action.transform && typeof action.transform === 'function') {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'action.transform not supported');\n\t\t\t\t} else if (action.next) {\n\t\t\t\t\tif (action.next === '@push') {\n\t\t\t\t\t\tif (stack.depth >= this._lexer.maxStack) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n\t\t\t\t\t\t\t\tstack.state + ',' + stack.parent!.state + ',...]');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(state);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@pop') {\n\t\t\t\t\t\tif (stack.depth <= 1) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.pop()!;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@popall') {\n\t\t\t\t\t\tstack = stack.popall();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n\t\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(nextState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action.log && typeof (action.log) === 'string') {\n\t\t\t\t\tmonarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check result\n\t\t\tif (result === null) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n\t\t\t}\n\n\t\t\tconst computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage: string) => {\n\t\t\t\t// support language names, mime types, and language ids\n\t\t\t\tconst languageId = (\n\t\t\t\t\tthis._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)\n\t\t\t\t\t|| this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)\n\t\t\t\t\t|| enteringEmbeddedLanguage\n\t\t\t\t);\n\n\t\t\t\tconst embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);\n\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\t// there is content from the embedded language on this line\n\t\t\t\t\tconst restOfLine = lineWithoutLF.substr(pos);\n\t\t\t\t\treturn this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);\n\t\t\t\t} else {\n\t\t\t\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// is the result a group match?\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tif (groupMatching && groupMatching.groups.length > 0) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tif (matches.length !== result.length + 1) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tlet totalLen = 0;\n\t\t\t\tfor (let i = 1; i < matches.length; i++) {\n\t\t\t\t\ttotalLen += matches[i].length;\n\t\t\t\t}\n\t\t\t\tif (totalLen !== matched.length) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\n\t\t\t\tgroupMatching = {\n\t\t\t\t\trule: rule,\n\t\t\t\t\tmatches: matches,\n\t\t\t\t\tgroups: []\n\t\t\t\t};\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\tgroupMatching.groups[i] = {\n\t\t\t\t\t\taction: result[i],\n\t\t\t\t\t\tmatched: matches[i + 1]\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpos -= matched.length;\n\t\t\t\t// call recursively to initiate first result match\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// regular result\n\n\t\t\t\t// check for '@rematch'\n\t\t\t\tif (result === '@rematch') {\n\t\t\t\t\tpos -= matched.length;\n\t\t\t\t\tmatched = ''; // better set the next state too..\n\t\t\t\t\tmatches = null;\n\t\t\t\t\tresult = '';\n\n\t\t\t\t\t// Even though `@rematch` was specified, if `nextEmbedded` also specified,\n\t\t\t\t\t// a state transition should occur.\n\t\t\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check progress\n\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\tif (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// return the result (and check for brace matching)\n\t\t\t\t// todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n\t\t\t\tlet tokenType: string | null = null;\n\t\t\t\tif (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n\t\t\t\t\tconst rest = result.substr('@brackets'.length);\n\t\t\t\t\tconst bracket = findBracket(this._lexer, matched);\n\t\t\t\t\tif (!bracket) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n\t\t\t\t\t}\n\t\t\t\t\ttokenType = monarchCommon.sanitize(bracket.token + rest);\n\t\t\t\t} else {\n\t\t\t\t\tconst token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n\t\t\t\t\ttokenType = monarchCommon.sanitize(token);\n\t\t\t\t}\n\n\t\t\t\tif (pos0 < lineWithoutLFLength) {\n\t\t\t\t\ttokensCollector.emit(pos0 + offsetDelta, tokenType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t}\n\t\t}\n\n\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate _getNestedEmbeddedLanguageData(languageId: string): EmbeddedLanguageData {\n\t\tif (!this._languageService.isRegisteredLanguageId(languageId)) {\n\t\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t\t}\n\n\t\tif (languageId !== this._languageId) {\n\t\t\t// Fire language loading event\n\t\t\tthis._languageService.requestBasicLanguageFeatures(languageId);\n\t\t\tlanguages.TokenizationRegistry.getOrCreate(languageId);\n\t\t\tthis._embeddedLanguages[languageId] = true;\n\t\t}\n\n\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(languageId);\n\t\tif (tokenizationSupport) {\n\t\t\treturn new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState());\n\t\t}\n\n\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t}\n}\n\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer: monarchCommon.ILexer, matched: string) {\n\tif (!matched) {\n\t\treturn null;\n\t}\n\tmatched = monarchCommon.fixCase(lexer, matched);\n\n\tconst brackets = lexer.brackets;\n\tfor (const bracket of brackets) {\n\t\tif (bracket.open === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Open };\n\t\t}\n\t\telse if (bracket.close === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Close };\n\t\t}\n\t}\n\treturn null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/standalone/common/monarch/monarchLexer.ts","vs/editor/standalone/common/monarch/monarchLexer.ts"],"names":[],"mappings":"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","file":"monarchLexer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\n\nimport { Disposable, IDisposable } from '../../../../base/common/lifecycle.js';\nimport * as languages from '../../../common/languages.js';\nimport { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js';\nimport { TokenTheme } from '../../../common/languages/supports/tokenization.js';\nimport { ILanguageService } from '../../../common/languages/language.js';\nimport * as monarchCommon from './monarchCommon.js';\nimport { IStandaloneThemeService } from '../standaloneTheme.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js';\n\nconst CACHE_STACK_DEPTH = 5;\n\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\n\tpublic static create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\treturn this._INSTANCE.create(parent, state);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchStackElement };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\tif (parent !== null && parent.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchStackElement(parent, state);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(parent);\n\t\tif (stackElementId.length > 0) {\n\t\t\tstackElementId += '|';\n\t\t}\n\t\tstackElementId += state;\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchStackElement(parent, state);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchStackElement {\n\n\tpublic readonly parent: MonarchStackElement | null;\n\tpublic readonly state: string;\n\tpublic readonly depth: number;\n\n\tconstructor(parent: MonarchStackElement | null, state: string) {\n\t\tthis.parent = parent;\n\t\tthis.state = state;\n\t\tthis.depth = (this.parent ? this.parent.depth : 0) + 1;\n\t}\n\n\tpublic static getStackElementId(element: MonarchStackElement | null): string {\n\t\tlet result = '';\n\t\twhile (element !== null) {\n\t\t\tif (result.length > 0) {\n\t\t\t\tresult += '|';\n\t\t\t}\n\t\t\tresult += element.state;\n\t\t\telement = element.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _equals(a: MonarchStackElement | null, b: MonarchStackElement | null): boolean {\n\t\twhile (a !== null && b !== null) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (a.state !== b.state) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a.parent;\n\t\t\tb = b.parent;\n\t\t}\n\t\tif (a === null && b === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic equals(other: MonarchStackElement): boolean {\n\t\treturn MonarchStackElement._equals(this, other);\n\t}\n\n\tpublic push(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this, state);\n\t}\n\n\tpublic pop(): MonarchStackElement | null {\n\t\treturn this.parent;\n\t}\n\n\tpublic popall(): MonarchStackElement {\n\t\tlet result: MonarchStackElement = this;\n\t\twhile (result.parent) {\n\t\t\tresult = result.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic switchTo(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this.parent, state);\n\t}\n}\n\nclass EmbeddedLanguageData {\n\tpublic readonly languageId: string;\n\tpublic readonly state: languages.IState;\n\n\tconstructor(languageId: string, state: languages.IState) {\n\t\tthis.languageId = languageId;\n\t\tthis.state = state;\n\t}\n\n\tpublic equals(other: EmbeddedLanguageData): boolean {\n\t\treturn (\n\t\t\tthis.languageId === other.languageId\n\t\t\t&& this.state.equals(other.state)\n\t\t);\n\t}\n\n\tpublic clone(): EmbeddedLanguageData {\n\t\tconst stateClone = this.state.clone();\n\t\t// save an object\n\t\tif (stateClone === this.state) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new EmbeddedLanguageData(this.languageId, this.state);\n\t}\n}\n\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\n\tpublic static create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\treturn this._INSTANCE.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchLineState };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\tif (embeddedLanguageData !== null) {\n\t\t\t// no caching when embedding\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tif (stack !== null && stack.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tconst stackElementId = MonarchStackElement.getStackElementId(stack);\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchLineState(stack, null);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchLineState implements languages.IState {\n\n\tpublic readonly stack: MonarchStackElement;\n\tpublic readonly embeddedLanguageData: EmbeddedLanguageData | null;\n\n\tconstructor(\n\t\tstack: MonarchStackElement,\n\t\tembeddedLanguageData: EmbeddedLanguageData | null\n\t) {\n\t\tthis.stack = stack;\n\t\tthis.embeddedLanguageData = embeddedLanguageData;\n\t}\n\n\tpublic clone(): languages.IState {\n\t\tconst embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;\n\t\t// save an object\n\t\tif (embeddedlanguageDataClone === this.embeddedLanguageData) {\n\t\t\treturn this;\n\t\t}\n\t\treturn MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);\n\t}\n\n\tpublic equals(other: languages.IState): boolean {\n\t\tif (!(other instanceof MonarchLineState)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.stack.equals(other.stack)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.embeddedLanguageData === null && other.embeddedLanguageData === null) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.embeddedLanguageData.equals(other.embeddedLanguageData);\n\t}\n}\n\ninterface IMonarchTokensCollector {\n\tenterLanguage(languageId: string): void;\n\temit(startOffset: number, type: string): void;\n\tnestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState;\n}\n\nclass MonarchClassicTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _tokens: languages.Token[];\n\tprivate _languageId: string | null;\n\tprivate _lastTokenType: string | null;\n\tprivate _lastTokenLanguage: string | null;\n\n\tconstructor() {\n\t\tthis._tokens = [];\n\t\tthis._languageId = null;\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._languageId = languageId;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tif (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenType = type;\n\t\tthis._lastTokenLanguage = this._languageId;\n\t\tthis._tokens.push(new languages.Token(startOffset, type, this._languageId!));\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (const token of nestedResult.tokens) {\n\t\t\t\tthis._tokens.push(new languages.Token(token.offset + offsetDelta, token.type, token.language));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._tokens = this._tokens.concat(nestedResult.tokens);\n\t\t}\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t\tthis._languageId = null;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.TokenizationResult {\n\t\treturn new languages.TokenizationResult(this._tokens, endState);\n\t}\n}\n\nclass MonarchModernTokensCollector implements IMonarchTokensCollector {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _theme: TokenTheme;\n\tprivate _prependTokens: Uint32Array | null;\n\tprivate _tokens: number[];\n\tprivate _currentLanguageId: LanguageId;\n\tprivate _lastTokenMetadata: number;\n\n\tconstructor(languageService: ILanguageService, theme: TokenTheme) {\n\t\tthis._languageService = languageService;\n\t\tthis._theme = theme;\n\t\tthis._prependTokens = null;\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = LanguageId.Null;\n\t\tthis._lastTokenMetadata = 0;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tconst metadata = this._theme.match(this._currentLanguageId, type) | MetadataConsts.BALANCED_BRACKETS_MASK;\n\t\tif (this._lastTokenMetadata === metadata) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenMetadata = metadata;\n\t\tthis._tokens.push(startOffset);\n\t\tthis._tokens.push(metadata);\n\t}\n\n\tprivate static _merge(a: Uint32Array | null, b: number[], c: Uint32Array | null): Uint32Array {\n\t\tconst aLen = (a !== null ? a.length : 0);\n\t\tconst bLen = b.length;\n\t\tconst cLen = (c !== null ? c.length : 0);\n\n\t\tif (aLen === 0 && bLen === 0 && cLen === 0) {\n\t\t\treturn new Uint32Array(0);\n\t\t}\n\t\tif (aLen === 0 && bLen === 0) {\n\t\t\treturn c!;\n\t\t}\n\t\tif (bLen === 0 && cLen === 0) {\n\t\t\treturn a!;\n\t\t}\n\n\t\tconst result = new Uint32Array(aLen + bLen + cLen);\n\t\tif (a !== null) {\n\t\t\tresult.set(a);\n\t\t}\n\t\tfor (let i = 0; i < bLen; i++) {\n\t\t\tresult[aLen + i] = b[i];\n\t\t}\n\t\tif (c !== null) {\n\t\t\tresult.set(c, aLen + bLen);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {\n\t\t\t\tnestedResult.tokens[i] += offsetDelta;\n\t\t\t}\n\t\t}\n\n\t\tthis._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = 0;\n\t\tthis._lastTokenMetadata = 0;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.EncodedTokenizationResult {\n\t\treturn new languages.EncodedTokenizationResult(\n\t\t\tMonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null),\n\t\t\t[],\n\t\t\tendState\n\t\t);\n\t}\n}\n\nexport type ILoadStatus = { loaded: true } | { loaded: false; promise: Promise<void> };\n\nexport class MonarchTokenizer extends Disposable implements languages.ITokenizationSupport, IDisposable {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _languageId: string;\n\tprivate readonly _lexer: monarchCommon.ILexer;\n\tprivate readonly _embeddedLanguages: { [languageId: string]: boolean };\n\tpublic embeddedLoaded: Promise<void>;\n\tprivate _maxTokenizationLineLength: number;\n\n\tconstructor(languageService: ILanguageService, standaloneThemeService: IStandaloneThemeService, languageId: string, lexer: monarchCommon.ILexer, @IConfigurationService private readonly _configurationService: IConfigurationService) {\n\t\tsuper();\n\t\tthis._languageService = languageService;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._languageId = languageId;\n\t\tthis._lexer = lexer;\n\t\tthis._embeddedLanguages = Object.create(null);\n\t\tthis.embeddedLoaded = Promise.resolve(undefined);\n\n\t\t// Set up listening for embedded modes\n\t\tlet emitting = false;\n\t\tthis._register(languages.TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (emitting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet isOneOfMyEmbeddedModes = false;\n\t\t\tfor (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n\t\t\t\tconst language = e.changedLanguages[i];\n\t\t\t\tif (this._embeddedLanguages[language]) {\n\t\t\t\t\tisOneOfMyEmbeddedModes = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOneOfMyEmbeddedModes) {\n\t\t\t\temitting = true;\n\t\t\t\tlanguages.TokenizationRegistry.handleChange([this._languageId]);\n\t\t\t\temitting = false;\n\t\t\t}\n\t\t}));\n\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\toverrideIdentifier: this._languageId\n\t\t});\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('editor.maxTokenizationLineLength')) {\n\t\t\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\t\t\toverrideIdentifier: this._languageId\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic getLoadStatus(): ILoadStatus {\n\t\tconst promises: Thenable<any>[] = [];\n\t\tfor (const nestedLanguageId in this._embeddedLanguages) {\n\t\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\t\tif (tokenizationSupport) {\n\t\t\t\t// The nested language is already loaded\n\t\t\t\tif (tokenizationSupport instanceof MonarchTokenizer) {\n\t\t\t\t\tconst nestedModeStatus = tokenizationSupport.getLoadStatus();\n\t\t\t\t\tif (nestedModeStatus.loaded === false) {\n\t\t\t\t\t\tpromises.push(nestedModeStatus.promise);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!languages.TokenizationRegistry.isResolved(nestedLanguageId)) {\n\t\t\t\t// The nested language is in the process of being loaded\n\t\t\t\tpromises.push(languages.TokenizationRegistry.getOrCreate(nestedLanguageId));\n\t\t\t}\n\t\t}\n\n\t\tif (promises.length === 0) {\n\t\t\treturn {\n\t\t\t\tloaded: true\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tpromise: Promise.all(promises).then(_ => undefined)\n\t\t};\n\t}\n\n\tpublic getInitialState(): languages.IState {\n\t\tconst rootState = MonarchStackElementFactory.create(null, this._lexer.start!);\n\t\treturn MonarchLineStateFactory.create(rootState, null);\n\t}\n\n\tpublic tokenize(line: string, hasEOL: boolean, lineState: languages.IState): languages.TokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenize(this._languageId, lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchClassicTokensCollector();\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tpublic tokenizeEncoded(line: string, hasEOL: boolean, lineState: languages.IState): languages.EncodedTokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchModernTokensCollector(this._languageService, this._standaloneThemeService.getColorTheme().tokenTheme);\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tprivate _tokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, collector: IMonarchTokensCollector): MonarchLineState {\n\t\tif (lineState.embeddedLanguageData) {\n\t\t\treturn this._nestedTokenize(line, hasEOL, lineState, 0, collector);\n\t\t} else {\n\t\t\treturn this._myTokenize(line, hasEOL, lineState, 0, collector);\n\t\t}\n\t}\n\n\tprivate _findLeavingNestedLanguageOffset(line: string, state: MonarchLineState): number {\n\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state.stack.state];\n\t\tif (!rules) {\n\t\t\trules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n\t\t\tif (!rules) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n\t\t\t}\n\t\t}\n\n\t\tlet popOffset = -1;\n\t\tlet hasEmbeddedPopRule = false;\n\n\t\tfor (const rule of rules) {\n\t\t\tif (!monarchCommon.isIAction(rule.action) || !(rule.action.nextEmbedded === '@pop' || rule.action.hasEmbeddedEndInCases)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasEmbeddedPopRule = true;\n\n\t\t\tlet regex = rule.resolveRegex(state.stack.state);\n\t\t\tconst regexSource = regex.source;\n\t\t\tif (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n\t\t\t\tconst flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n\t\t\t\tregex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n\t\t\t}\n\n\t\t\tconst result = line.search(regex);\n\t\t\tif (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (popOffset === -1 || result < popOffset) {\n\t\t\t\tpopOffset = result;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasEmbeddedPopRule) {\n\t\t\tthrow monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n\t\t}\n\n\t\treturn popOffset;\n\t}\n\n\tprivate _nestedTokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\n\t\tconst popOffset = this._findLeavingNestedLanguageOffset(line, lineState);\n\n\t\tif (popOffset === -1) {\n\t\t\t// tokenization will not leave nested language\n\t\t\tconst nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData!, offsetDelta);\n\t\t\treturn MonarchLineStateFactory.create(lineState.stack, new EmbeddedLanguageData(lineState.embeddedLanguageData!.languageId, nestedEndState));\n\t\t}\n\n\t\tconst nestedLanguageLine = line.substring(0, popOffset);\n\t\tif (nestedLanguageLine.length > 0) {\n\t\t\t// tokenize with the nested language\n\t\t\ttokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData!, offsetDelta);\n\t\t}\n\n\t\tconst restOfTheLine = line.substring(popOffset);\n\t\treturn this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n\t}\n\n\tprivate _safeRuleName(rule: monarchCommon.IRule | null): string {\n\t\tif (rule) {\n\t\t\treturn rule.name;\n\t\t}\n\t\treturn '(unknown)';\n\t}\n\n\tprivate _myTokenize(lineWithoutLF: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\t\ttokensCollector.enterLanguage(this._languageId);\n\n\t\tconst lineWithoutLFLength = lineWithoutLF.length;\n\t\tconst line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n\t\tconst lineLength = line.length;\n\n\t\tlet embeddedLanguageData = lineState.embeddedLanguageData;\n\t\tlet stack = lineState.stack;\n\t\tlet pos = 0;\n\n\t\t// regular expression group matching\n\t\t// these never need cloning or equality since they are only used within a line match\n\t\tinterface GroupMatching {\n\t\t\tmatches: string[];\n\t\t\trule: monarchCommon.IRule | null;\n\t\t\tgroups: { action: monarchCommon.FuzzyAction; matched: string }[];\n\t\t}\n\t\tlet groupMatching: GroupMatching | null = null;\n\n\t\t// See https://github.com/microsoft/monaco-editor/issues/1235\n\t\t// Evaluate rules at least once for an empty line\n\t\tlet forceEvaluation = true;\n\n\t\twhile (forceEvaluation || pos < lineLength) {\n\n\t\t\tconst pos0 = pos;\n\t\t\tconst stackLen0 = stack.depth;\n\t\t\tconst groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n\t\t\tconst state = stack.state;\n\n\t\t\tlet matches: string[] | null = null;\n\t\t\tlet matched: string | null = null;\n\t\t\tlet action: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\tlet rule: monarchCommon.IRule | null = null;\n\n\t\t\tlet enteringEmbeddedLanguage: string | null = null;\n\n\t\t\t// check if we need to process group matches first\n\t\t\tif (groupMatching) {\n\t\t\t\tmatches = groupMatching.matches;\n\t\t\t\tconst groupEntry = groupMatching.groups.shift()!;\n\t\t\t\tmatched = groupEntry.matched;\n\t\t\t\taction = groupEntry.action;\n\t\t\t\trule = groupMatching.rule;\n\n\t\t\t\t// cleanup if necessary\n\t\t\t\tif (groupMatching.groups.length === 0) {\n\t\t\t\t\tgroupMatching = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise we match on the token stream\n\n\t\t\t\tif (!forceEvaluation && pos >= lineLength) {\n\t\t\t\t\t// nothing to do\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tforceEvaluation = false;\n\n\t\t\t\t// get the rules for this state\n\t\t\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state];\n\t\t\t\tif (!rules) {\n\t\t\t\t\trules = monarchCommon.findRules(this._lexer, state); // do parent matching\n\t\t\t\t\tif (!rules) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// try each rule until we match\n\t\t\t\tconst restOfLine = line.substr(pos);\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\tif (pos === 0 || !rule.matchOnlyAtLineStart) {\n\t\t\t\t\t\tmatches = restOfLine.match(rule.resolveRegex(state));\n\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\tmatched = matches[0];\n\t\t\t\t\t\t\taction = rule.action;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We matched 'rule' with 'matches' and 'action'\n\t\t\tif (!matches) {\n\t\t\t\tmatches = [''];\n\t\t\t\tmatched = '';\n\t\t\t}\n\n\t\t\tif (!action) {\n\t\t\t\t// bad: we didn't match anything, and there is no action to take\n\t\t\t\t// we need to advance the stream or we get progress trouble\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\tmatches = [line.charAt(pos)];\n\t\t\t\t\tmatched = matches[0];\n\t\t\t\t}\n\t\t\t\taction = this._lexer.defaultToken;\n\t\t\t}\n\n\t\t\tif (matched === null) {\n\t\t\t\t// should never happen, needed for strict null checking\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// advance stream\n\t\t\tpos += matched.length;\n\n\t\t\t// maybe call action function (used for 'cases')\n\t\t\twhile (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n\t\t\t\taction = action.test(matched, matches, state, pos === lineLength);\n\t\t\t}\n\n\t\t\tlet result: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\t// set the result: either a string or an array of actions\n\t\t\tif (typeof action === 'string' || Array.isArray(action)) {\n\t\t\t\tresult = action;\n\t\t\t} else if (action.group) {\n\t\t\t\tresult = action.group;\n\t\t\t} else if (action.token !== null && action.token !== undefined) {\n\n\t\t\t\t// do $n replacements?\n\t\t\t\tif (action.tokenSubst) {\n\t\t\t\t\tresult = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n\t\t\t\t} else {\n\t\t\t\t\tresult = action.token;\n\t\t\t\t}\n\n\t\t\t\t// enter embedded language?\n\t\t\t\tif (action.nextEmbedded) {\n\t\t\t\t\tif (action.nextEmbedded === '@pop') {\n\t\t\t\t\t\tif (!embeddedLanguageData) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot pop embedded language if not inside one');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tembeddedLanguageData = null;\n\t\t\t\t\t} else if (embeddedLanguageData) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot enter embedded language from within an embedded language');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tenteringEmbeddedLanguage = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// state transformations\n\t\t\t\tif (action.goBack) { // back up the stream..\n\t\t\t\t\tpos = Math.max(0, pos - action.goBack);\n\t\t\t\t}\n\n\t\t\t\tif (action.switchTo && typeof action.switchTo === 'string') {\n\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t}\n\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstack = stack.switchTo(nextState);\n\t\t\t\t\t}\n\t\t\t\t} else if (action.transform && typeof action.transform === 'function') {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'action.transform not supported');\n\t\t\t\t} else if (action.next) {\n\t\t\t\t\tif (action.next === '@push') {\n\t\t\t\t\t\tif (stack.depth >= this._lexer.maxStack) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n\t\t\t\t\t\t\t\tstack.state + ',' + stack.parent!.state + ',...]');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(state);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@pop') {\n\t\t\t\t\t\tif (stack.depth <= 1) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.pop()!;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@popall') {\n\t\t\t\t\t\tstack = stack.popall();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n\t\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(nextState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action.log && typeof (action.log) === 'string') {\n\t\t\t\t\tmonarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check result\n\t\t\tif (result === null) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n\t\t\t}\n\n\t\t\tconst computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage: string) => {\n\t\t\t\t// support language names, mime types, and language ids\n\t\t\t\tconst languageId = (\n\t\t\t\t\tthis._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)\n\t\t\t\t\t|| this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)\n\t\t\t\t\t|| enteringEmbeddedLanguage\n\t\t\t\t);\n\n\t\t\t\tconst embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);\n\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\t// there is content from the embedded language on this line\n\t\t\t\t\tconst restOfLine = lineWithoutLF.substr(pos);\n\t\t\t\t\treturn this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);\n\t\t\t\t} else {\n\t\t\t\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// is the result a group match?\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tif (groupMatching && groupMatching.groups.length > 0) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tif (matches.length !== result.length + 1) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tlet totalLen = 0;\n\t\t\t\tfor (let i = 1; i < matches.length; i++) {\n\t\t\t\t\ttotalLen += matches[i].length;\n\t\t\t\t}\n\t\t\t\tif (totalLen !== matched.length) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\n\t\t\t\tgroupMatching = {\n\t\t\t\t\trule: rule,\n\t\t\t\t\tmatches: matches,\n\t\t\t\t\tgroups: []\n\t\t\t\t};\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\tgroupMatching.groups[i] = {\n\t\t\t\t\t\taction: result[i],\n\t\t\t\t\t\tmatched: matches[i + 1]\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpos -= matched.length;\n\t\t\t\t// call recursively to initiate first result match\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// regular result\n\n\t\t\t\t// check for '@rematch'\n\t\t\t\tif (result === '@rematch') {\n\t\t\t\t\tpos -= matched.length;\n\t\t\t\t\tmatched = ''; // better set the next state too..\n\t\t\t\t\tmatches = null;\n\t\t\t\t\tresult = '';\n\n\t\t\t\t\t// Even though `@rematch` was specified, if `nextEmbedded` also specified,\n\t\t\t\t\t// a state transition should occur.\n\t\t\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check progress\n\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\tif (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// return the result (and check for brace matching)\n\t\t\t\t// todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n\t\t\t\tlet tokenType: string | null = null;\n\t\t\t\tif (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n\t\t\t\t\tconst rest = result.substr('@brackets'.length);\n\t\t\t\t\tconst bracket = findBracket(this._lexer, matched);\n\t\t\t\t\tif (!bracket) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n\t\t\t\t\t}\n\t\t\t\t\ttokenType = monarchCommon.sanitize(bracket.token + rest);\n\t\t\t\t} else {\n\t\t\t\t\tconst token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n\t\t\t\t\ttokenType = monarchCommon.sanitize(token);\n\t\t\t\t}\n\n\t\t\t\tif (pos0 < lineWithoutLFLength) {\n\t\t\t\t\ttokensCollector.emit(pos0 + offsetDelta, tokenType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t}\n\t\t}\n\n\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate _getNestedEmbeddedLanguageData(languageId: string): EmbeddedLanguageData {\n\t\tif (!this._languageService.isRegisteredLanguageId(languageId)) {\n\t\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t\t}\n\n\t\tif (languageId !== this._languageId) {\n\t\t\t// Fire language loading event\n\t\t\tthis._languageService.requestBasicLanguageFeatures(languageId);\n\t\t\tlanguages.TokenizationRegistry.getOrCreate(languageId);\n\t\t\tthis._embeddedLanguages[languageId] = true;\n\t\t}\n\n\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(languageId);\n\t\tif (tokenizationSupport) {\n\t\t\treturn new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState());\n\t\t}\n\n\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t}\n}\n\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer: monarchCommon.ILexer, matched: string) {\n\tif (!matched) {\n\t\treturn null;\n\t}\n\tmatched = monarchCommon.fixCase(lexer, matched);\n\n\tconst brackets = lexer.brackets;\n\tfor (const bracket of brackets) {\n\t\tif (bracket.open === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Open };\n\t\t}\n\t\telse if (bracket.close === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Close };\n\t\t}\n\t}\n\treturn null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\n\nimport { Disposable, IDisposable } from '../../../../base/common/lifecycle.js';\nimport * as languages from '../../../common/languages.js';\nimport { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js';\nimport { TokenTheme } from '../../../common/languages/supports/tokenization.js';\nimport { ILanguageService } from '../../../common/languages/language.js';\nimport * as monarchCommon from './monarchCommon.js';\nimport { IStandaloneThemeService } from '../standaloneTheme.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { LanguageId, MetadataConsts } from '../../../common/encodedTokenAttributes.js';\n\nconst CACHE_STACK_DEPTH = 5;\n\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\n\tpublic static create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\treturn this._INSTANCE.create(parent, state);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchStackElement };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(parent: MonarchStackElement | null, state: string): MonarchStackElement {\n\t\tif (parent !== null && parent.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchStackElement(parent, state);\n\t\t}\n\t\tlet stackElementId = MonarchStackElement.getStackElementId(parent);\n\t\tif (stackElementId.length > 0) {\n\t\t\tstackElementId += '|';\n\t\t}\n\t\tstackElementId += state;\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchStackElement(parent, state);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchStackElement {\n\n\tpublic readonly parent: MonarchStackElement | null;\n\tpublic readonly state: string;\n\tpublic readonly depth: number;\n\n\tconstructor(parent: MonarchStackElement | null, state: string) {\n\t\tthis.parent = parent;\n\t\tthis.state = state;\n\t\tthis.depth = (this.parent ? this.parent.depth : 0) + 1;\n\t}\n\n\tpublic static getStackElementId(element: MonarchStackElement | null): string {\n\t\tlet result = '';\n\t\twhile (element !== null) {\n\t\t\tif (result.length > 0) {\n\t\t\t\tresult += '|';\n\t\t\t}\n\t\t\tresult += element.state;\n\t\t\telement = element.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _equals(a: MonarchStackElement | null, b: MonarchStackElement | null): boolean {\n\t\twhile (a !== null && b !== null) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (a.state !== b.state) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a.parent;\n\t\t\tb = b.parent;\n\t\t}\n\t\tif (a === null && b === null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic equals(other: MonarchStackElement): boolean {\n\t\treturn MonarchStackElement._equals(this, other);\n\t}\n\n\tpublic push(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this, state);\n\t}\n\n\tpublic pop(): MonarchStackElement | null {\n\t\treturn this.parent;\n\t}\n\n\tpublic popall(): MonarchStackElement {\n\t\tlet result: MonarchStackElement = this;\n\t\twhile (result.parent) {\n\t\t\tresult = result.parent;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic switchTo(state: string): MonarchStackElement {\n\t\treturn MonarchStackElementFactory.create(this.parent, state);\n\t}\n}\n\nclass EmbeddedLanguageData {\n\tpublic readonly languageId: string;\n\tpublic readonly state: languages.IState;\n\n\tconstructor(languageId: string, state: languages.IState) {\n\t\tthis.languageId = languageId;\n\t\tthis.state = state;\n\t}\n\n\tpublic equals(other: EmbeddedLanguageData): boolean {\n\t\treturn (\n\t\t\tthis.languageId === other.languageId\n\t\t\t&& this.state.equals(other.state)\n\t\t);\n\t}\n\n\tpublic clone(): EmbeddedLanguageData {\n\t\tconst stateClone = this.state.clone();\n\t\t// save an object\n\t\tif (stateClone === this.state) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new EmbeddedLanguageData(this.languageId, this.state);\n\t}\n}\n\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n\n\tprivate static readonly _INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\n\tpublic static create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\treturn this._INSTANCE.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate readonly _maxCacheDepth: number;\n\tprivate readonly _entries: { [stackElementId: string]: MonarchLineState };\n\n\tconstructor(maxCacheDepth: number) {\n\t\tthis._maxCacheDepth = maxCacheDepth;\n\t\tthis._entries = Object.create(null);\n\t}\n\n\tpublic create(stack: MonarchStackElement, embeddedLanguageData: EmbeddedLanguageData | null): MonarchLineState {\n\t\tif (embeddedLanguageData !== null) {\n\t\t\t// no caching when embedding\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tif (stack !== null && stack.depth >= this._maxCacheDepth) {\n\t\t\t// no caching above a certain depth\n\t\t\treturn new MonarchLineState(stack, embeddedLanguageData);\n\t\t}\n\t\tconst stackElementId = MonarchStackElement.getStackElementId(stack);\n\n\t\tlet result = this._entries[stackElementId];\n\t\tif (result) {\n\t\t\treturn result;\n\t\t}\n\t\tresult = new MonarchLineState(stack, null);\n\t\tthis._entries[stackElementId] = result;\n\t\treturn result;\n\t}\n}\n\nclass MonarchLineState implements languages.IState {\n\n\tpublic readonly stack: MonarchStackElement;\n\tpublic readonly embeddedLanguageData: EmbeddedLanguageData | null;\n\n\tconstructor(\n\t\tstack: MonarchStackElement,\n\t\tembeddedLanguageData: EmbeddedLanguageData | null\n\t) {\n\t\tthis.stack = stack;\n\t\tthis.embeddedLanguageData = embeddedLanguageData;\n\t}\n\n\tpublic clone(): languages.IState {\n\t\tconst embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;\n\t\t// save an object\n\t\tif (embeddedlanguageDataClone === this.embeddedLanguageData) {\n\t\t\treturn this;\n\t\t}\n\t\treturn MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);\n\t}\n\n\tpublic equals(other: languages.IState): boolean {\n\t\tif (!(other instanceof MonarchLineState)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.stack.equals(other.stack)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.embeddedLanguageData === null && other.embeddedLanguageData === null) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.embeddedLanguageData.equals(other.embeddedLanguageData);\n\t}\n}\n\ninterface IMonarchTokensCollector {\n\tenterLanguage(languageId: string): void;\n\temit(startOffset: number, type: string): void;\n\tnestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState;\n}\n\nclass MonarchClassicTokensCollector implements IMonarchTokensCollector {\n\n\tprivate _tokens: languages.Token[];\n\tprivate _languageId: string | null;\n\tprivate _lastTokenType: string | null;\n\tprivate _lastTokenLanguage: string | null;\n\n\tconstructor() {\n\t\tthis._tokens = [];\n\t\tthis._languageId = null;\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._languageId = languageId;\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tif (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenType = type;\n\t\tthis._lastTokenLanguage = this._languageId;\n\t\tthis._tokens.push(new languages.Token(startOffset, type, this._languageId!));\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (const token of nestedResult.tokens) {\n\t\t\t\tthis._tokens.push(new languages.Token(token.offset + offsetDelta, token.type, token.language));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._tokens = this._tokens.concat(nestedResult.tokens);\n\t\t}\n\t\tthis._lastTokenType = null;\n\t\tthis._lastTokenLanguage = null;\n\t\tthis._languageId = null;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.TokenizationResult {\n\t\treturn new languages.TokenizationResult(this._tokens, endState);\n\t}\n}\n\nclass MonarchModernTokensCollector implements IMonarchTokensCollector {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _theme: TokenTheme;\n\tprivate _prependTokens: Uint32Array | null;\n\tprivate _tokens: number[];\n\tprivate _currentLanguageId: LanguageId;\n\tprivate _lastTokenMetadata: number;\n\n\tconstructor(languageService: ILanguageService, theme: TokenTheme) {\n\t\tthis._languageService = languageService;\n\t\tthis._theme = theme;\n\t\tthis._prependTokens = null;\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = LanguageId.Null;\n\t\tthis._lastTokenMetadata = 0;\n\t}\n\n\tpublic enterLanguage(languageId: string): void {\n\t\tthis._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n\t}\n\n\tpublic emit(startOffset: number, type: string): void {\n\t\tconst metadata = this._theme.match(this._currentLanguageId, type) | MetadataConsts.BALANCED_BRACKETS_MASK;\n\t\tif (this._lastTokenMetadata === metadata) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastTokenMetadata = metadata;\n\t\tthis._tokens.push(startOffset);\n\t\tthis._tokens.push(metadata);\n\t}\n\n\tprivate static _merge(a: Uint32Array | null, b: number[], c: Uint32Array | null): Uint32Array {\n\t\tconst aLen = (a !== null ? a.length : 0);\n\t\tconst bLen = b.length;\n\t\tconst cLen = (c !== null ? c.length : 0);\n\n\t\tif (aLen === 0 && bLen === 0 && cLen === 0) {\n\t\t\treturn new Uint32Array(0);\n\t\t}\n\t\tif (aLen === 0 && bLen === 0) {\n\t\t\treturn c!;\n\t\t}\n\t\tif (bLen === 0 && cLen === 0) {\n\t\t\treturn a!;\n\t\t}\n\n\t\tconst result = new Uint32Array(aLen + bLen + cLen);\n\t\tif (a !== null) {\n\t\t\tresult.set(a);\n\t\t}\n\t\tfor (let i = 0; i < bLen; i++) {\n\t\t\tresult[aLen + i] = b[i];\n\t\t}\n\t\tif (c !== null) {\n\t\t\tresult.set(c, aLen + bLen);\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic nestedLanguageTokenize(embeddedLanguageLine: string, hasEOL: boolean, embeddedLanguageData: EmbeddedLanguageData, offsetDelta: number): languages.IState {\n\t\tconst nestedLanguageId = embeddedLanguageData.languageId;\n\t\tconst embeddedModeState = embeddedLanguageData.state;\n\n\t\tconst nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\tif (!nestedLanguageTokenizationSupport) {\n\t\t\tthis.enterLanguage(nestedLanguageId);\n\t\t\tthis.emit(offsetDelta, '');\n\t\t\treturn embeddedModeState;\n\t\t}\n\n\t\tconst nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);\n\t\tif (offsetDelta !== 0) {\n\t\t\tfor (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {\n\t\t\t\tnestedResult.tokens[i] += offsetDelta;\n\t\t\t}\n\t\t}\n\n\t\tthis._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n\t\tthis._tokens = [];\n\t\tthis._currentLanguageId = 0;\n\t\tthis._lastTokenMetadata = 0;\n\t\treturn nestedResult.endState;\n\t}\n\n\tpublic finalize(endState: MonarchLineState): languages.EncodedTokenizationResult {\n\t\treturn new languages.EncodedTokenizationResult(\n\t\t\tMonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null),\n\t\t\t[],\n\t\t\tendState\n\t\t);\n\t}\n}\n\nexport type ILoadStatus = { loaded: true } | { loaded: false; promise: Promise<void> };\n\nexport class MonarchTokenizer extends Disposable implements languages.ITokenizationSupport, IDisposable {\n\n\tprivate readonly _languageService: ILanguageService;\n\tprivate readonly _standaloneThemeService: IStandaloneThemeService;\n\tprivate readonly _languageId: string;\n\tprivate readonly _lexer: monarchCommon.ILexer;\n\tprivate readonly _embeddedLanguages: { [languageId: string]: boolean };\n\tpublic embeddedLoaded: Promise<void>;\n\tprivate _maxTokenizationLineLength: number;\n\n\tconstructor(languageService: ILanguageService, standaloneThemeService: IStandaloneThemeService, languageId: string, lexer: monarchCommon.ILexer, @IConfigurationService private readonly _configurationService: IConfigurationService) {\n\t\tsuper();\n\t\tthis._languageService = languageService;\n\t\tthis._standaloneThemeService = standaloneThemeService;\n\t\tthis._languageId = languageId;\n\t\tthis._lexer = lexer;\n\t\tthis._embeddedLanguages = Object.create(null);\n\t\tthis.embeddedLoaded = Promise.resolve(undefined);\n\n\t\t// Set up listening for embedded modes\n\t\tlet emitting = false;\n\t\tthis._register(languages.TokenizationRegistry.onDidChange((e) => {\n\t\t\tif (emitting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet isOneOfMyEmbeddedModes = false;\n\t\t\tfor (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n\t\t\t\tconst language = e.changedLanguages[i];\n\t\t\t\tif (this._embeddedLanguages[language]) {\n\t\t\t\t\tisOneOfMyEmbeddedModes = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOneOfMyEmbeddedModes) {\n\t\t\t\temitting = true;\n\t\t\t\tlanguages.TokenizationRegistry.handleChange([this._languageId]);\n\t\t\t\temitting = false;\n\t\t\t}\n\t\t}));\n\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\toverrideIdentifier: this._languageId\n\t\t});\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration('editor.maxTokenizationLineLength')) {\n\t\t\t\tthis._maxTokenizationLineLength = this._configurationService.getValue<number>('editor.maxTokenizationLineLength', {\n\t\t\t\t\toverrideIdentifier: this._languageId\n\t\t\t\t});\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic getLoadStatus(): ILoadStatus {\n\t\tconst promises: Thenable<any>[] = [];\n\t\tfor (const nestedLanguageId in this._embeddedLanguages) {\n\t\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n\t\t\tif (tokenizationSupport) {\n\t\t\t\t// The nested language is already loaded\n\t\t\t\tif (tokenizationSupport instanceof MonarchTokenizer) {\n\t\t\t\t\tconst nestedModeStatus = tokenizationSupport.getLoadStatus();\n\t\t\t\t\tif (nestedModeStatus.loaded === false) {\n\t\t\t\t\t\tpromises.push(nestedModeStatus.promise);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!languages.TokenizationRegistry.isResolved(nestedLanguageId)) {\n\t\t\t\t// The nested language is in the process of being loaded\n\t\t\t\tpromises.push(languages.TokenizationRegistry.getOrCreate(nestedLanguageId));\n\t\t\t}\n\t\t}\n\n\t\tif (promises.length === 0) {\n\t\t\treturn {\n\t\t\t\tloaded: true\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tpromise: Promise.all(promises).then(_ => undefined)\n\t\t};\n\t}\n\n\tpublic getInitialState(): languages.IState {\n\t\tconst rootState = MonarchStackElementFactory.create(null, this._lexer.start!);\n\t\treturn MonarchLineStateFactory.create(rootState, null);\n\t}\n\n\tpublic tokenize(line: string, hasEOL: boolean, lineState: languages.IState): languages.TokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenize(this._languageId, lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchClassicTokensCollector();\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tpublic tokenizeEncoded(line: string, hasEOL: boolean, lineState: languages.IState): languages.EncodedTokenizationResult {\n\t\tif (line.length >= this._maxTokenizationLineLength) {\n\t\t\treturn nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);\n\t\t}\n\t\tconst tokensCollector = new MonarchModernTokensCollector(this._languageService, this._standaloneThemeService.getColorTheme().tokenTheme);\n\t\tconst endLineState = this._tokenize(line, hasEOL, <MonarchLineState>lineState, tokensCollector);\n\t\treturn tokensCollector.finalize(endLineState);\n\t}\n\n\tprivate _tokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, collector: IMonarchTokensCollector): MonarchLineState {\n\t\tif (lineState.embeddedLanguageData) {\n\t\t\treturn this._nestedTokenize(line, hasEOL, lineState, 0, collector);\n\t\t} else {\n\t\t\treturn this._myTokenize(line, hasEOL, lineState, 0, collector);\n\t\t}\n\t}\n\n\tprivate _findLeavingNestedLanguageOffset(line: string, state: MonarchLineState): number {\n\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state.stack.state];\n\t\tif (!rules) {\n\t\t\trules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n\t\t\tif (!rules) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n\t\t\t}\n\t\t}\n\n\t\tlet popOffset = -1;\n\t\tlet hasEmbeddedPopRule = false;\n\n\t\tfor (const rule of rules) {\n\t\t\tif (!monarchCommon.isIAction(rule.action) || !(rule.action.nextEmbedded === '@pop' || rule.action.hasEmbeddedEndInCases)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasEmbeddedPopRule = true;\n\n\t\t\tlet regex = rule.resolveRegex(state.stack.state);\n\t\t\tconst regexSource = regex.source;\n\t\t\tif (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n\t\t\t\tconst flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n\t\t\t\tregex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n\t\t\t}\n\n\t\t\tconst result = line.search(regex);\n\t\t\tif (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (popOffset === -1 || result < popOffset) {\n\t\t\t\tpopOffset = result;\n\t\t\t}\n\t\t}\n\n\t\tif (!hasEmbeddedPopRule) {\n\t\t\tthrow monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n\t\t}\n\n\t\treturn popOffset;\n\t}\n\n\tprivate _nestedTokenize(line: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\n\t\tconst popOffset = this._findLeavingNestedLanguageOffset(line, lineState);\n\n\t\tif (popOffset === -1) {\n\t\t\t// tokenization will not leave nested language\n\t\t\tconst nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData!, offsetDelta);\n\t\t\treturn MonarchLineStateFactory.create(lineState.stack, new EmbeddedLanguageData(lineState.embeddedLanguageData!.languageId, nestedEndState));\n\t\t}\n\n\t\tconst nestedLanguageLine = line.substring(0, popOffset);\n\t\tif (nestedLanguageLine.length > 0) {\n\t\t\t// tokenize with the nested language\n\t\t\ttokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData!, offsetDelta);\n\t\t}\n\n\t\tconst restOfTheLine = line.substring(popOffset);\n\t\treturn this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n\t}\n\n\tprivate _safeRuleName(rule: monarchCommon.IRule | null): string {\n\t\tif (rule) {\n\t\t\treturn rule.name;\n\t\t}\n\t\treturn '(unknown)';\n\t}\n\n\tprivate _myTokenize(lineWithoutLF: string, hasEOL: boolean, lineState: MonarchLineState, offsetDelta: number, tokensCollector: IMonarchTokensCollector): MonarchLineState {\n\t\ttokensCollector.enterLanguage(this._languageId);\n\n\t\tconst lineWithoutLFLength = lineWithoutLF.length;\n\t\tconst line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n\t\tconst lineLength = line.length;\n\n\t\tlet embeddedLanguageData = lineState.embeddedLanguageData;\n\t\tlet stack = lineState.stack;\n\t\tlet pos = 0;\n\n\t\t// regular expression group matching\n\t\t// these never need cloning or equality since they are only used within a line match\n\t\tinterface GroupMatching {\n\t\t\tmatches: string[];\n\t\t\trule: monarchCommon.IRule | null;\n\t\t\tgroups: { action: monarchCommon.FuzzyAction; matched: string }[];\n\t\t}\n\t\tlet groupMatching: GroupMatching | null = null;\n\n\t\t// See https://github.com/microsoft/monaco-editor/issues/1235\n\t\t// Evaluate rules at least once for an empty line\n\t\tlet forceEvaluation = true;\n\n\t\twhile (forceEvaluation || pos < lineLength) {\n\n\t\t\tconst pos0 = pos;\n\t\t\tconst stackLen0 = stack.depth;\n\t\t\tconst groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n\t\t\tconst state = stack.state;\n\n\t\t\tlet matches: string[] | null = null;\n\t\t\tlet matched: string | null = null;\n\t\t\tlet action: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\tlet rule: monarchCommon.IRule | null = null;\n\n\t\t\tlet enteringEmbeddedLanguage: string | null = null;\n\n\t\t\t// check if we need to process group matches first\n\t\t\tif (groupMatching) {\n\t\t\t\tmatches = groupMatching.matches;\n\t\t\t\tconst groupEntry = groupMatching.groups.shift()!;\n\t\t\t\tmatched = groupEntry.matched;\n\t\t\t\taction = groupEntry.action;\n\t\t\t\trule = groupMatching.rule;\n\n\t\t\t\t// cleanup if necessary\n\t\t\t\tif (groupMatching.groups.length === 0) {\n\t\t\t\t\tgroupMatching = null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise we match on the token stream\n\n\t\t\t\tif (!forceEvaluation && pos >= lineLength) {\n\t\t\t\t\t// nothing to do\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tforceEvaluation = false;\n\n\t\t\t\t// get the rules for this state\n\t\t\t\tlet rules: monarchCommon.IRule[] | null = this._lexer.tokenizer[state];\n\t\t\t\tif (!rules) {\n\t\t\t\t\trules = monarchCommon.findRules(this._lexer, state); // do parent matching\n\t\t\t\t\tif (!rules) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// try each rule until we match\n\t\t\t\tconst restOfLine = line.substr(pos);\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\tif (pos === 0 || !rule.matchOnlyAtLineStart) {\n\t\t\t\t\t\tmatches = restOfLine.match(rule.resolveRegex(state));\n\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\tmatched = matches[0];\n\t\t\t\t\t\t\taction = rule.action;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We matched 'rule' with 'matches' and 'action'\n\t\t\tif (!matches) {\n\t\t\t\tmatches = [''];\n\t\t\t\tmatched = '';\n\t\t\t}\n\n\t\t\tif (!action) {\n\t\t\t\t// bad: we didn't match anything, and there is no action to take\n\t\t\t\t// we need to advance the stream or we get progress trouble\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\tmatches = [line.charAt(pos)];\n\t\t\t\t\tmatched = matches[0];\n\t\t\t\t}\n\t\t\t\taction = this._lexer.defaultToken;\n\t\t\t}\n\n\t\t\tif (matched === null) {\n\t\t\t\t// should never happen, needed for strict null checking\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// advance stream\n\t\t\tpos += matched.length;\n\n\t\t\t// maybe call action function (used for 'cases')\n\t\t\twhile (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n\t\t\t\taction = action.test(matched, matches, state, pos === lineLength);\n\t\t\t}\n\n\t\t\tlet result: monarchCommon.FuzzyAction | monarchCommon.FuzzyAction[] | null = null;\n\t\t\t// set the result: either a string or an array of actions\n\t\t\tif (typeof action === 'string' || Array.isArray(action)) {\n\t\t\t\tresult = action;\n\t\t\t} else if (action.group) {\n\t\t\t\tresult = action.group;\n\t\t\t} else if (action.token !== null && action.token !== undefined) {\n\n\t\t\t\t// do $n replacements?\n\t\t\t\tif (action.tokenSubst) {\n\t\t\t\t\tresult = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n\t\t\t\t} else {\n\t\t\t\t\tresult = action.token;\n\t\t\t\t}\n\n\t\t\t\t// enter embedded language?\n\t\t\t\tif (action.nextEmbedded) {\n\t\t\t\t\tif (action.nextEmbedded === '@pop') {\n\t\t\t\t\t\tif (!embeddedLanguageData) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot pop embedded language if not inside one');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tembeddedLanguageData = null;\n\t\t\t\t\t} else if (embeddedLanguageData) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'cannot enter embedded language from within an embedded language');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tenteringEmbeddedLanguage = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// state transformations\n\t\t\t\tif (action.goBack) { // back up the stream..\n\t\t\t\t\tpos = Math.max(0, pos - action.goBack);\n\t\t\t\t}\n\n\t\t\t\tif (action.switchTo && typeof action.switchTo === 'string') {\n\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t}\n\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstack = stack.switchTo(nextState);\n\t\t\t\t\t}\n\t\t\t\t} else if (action.transform && typeof action.transform === 'function') {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'action.transform not supported');\n\t\t\t\t} else if (action.next) {\n\t\t\t\t\tif (action.next === '@push') {\n\t\t\t\t\t\tif (stack.depth >= this._lexer.maxStack) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n\t\t\t\t\t\t\t\tstack.state + ',' + stack.parent!.state + ',...]');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(state);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@pop') {\n\t\t\t\t\t\tif (stack.depth <= 1) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.pop()!;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (action.next === '@popall') {\n\t\t\t\t\t\tstack = stack.popall();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n\t\t\t\t\t\tif (nextState[0] === '@') {\n\t\t\t\t\t\t\tnextState = nextState.substr(1); // peel off starting '@'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!monarchCommon.findRules(this._lexer, nextState)) {\n\t\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstack = stack.push(nextState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action.log && typeof (action.log) === 'string') {\n\t\t\t\t\tmonarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check result\n\t\t\tif (result === null) {\n\t\t\t\tthrow monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n\t\t\t}\n\n\t\t\tconst computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage: string) => {\n\t\t\t\t// support language names, mime types, and language ids\n\t\t\t\tconst languageId = (\n\t\t\t\t\tthis._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)\n\t\t\t\t\t|| this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)\n\t\t\t\t\t|| enteringEmbeddedLanguage\n\t\t\t\t);\n\n\t\t\t\tconst embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);\n\n\t\t\t\tif (pos < lineLength) {\n\t\t\t\t\t// there is content from the embedded language on this line\n\t\t\t\t\tconst restOfLine = lineWithoutLF.substr(pos);\n\t\t\t\t\treturn this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);\n\t\t\t\t} else {\n\t\t\t\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// is the result a group match?\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tif (groupMatching && groupMatching.groups.length > 0) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tif (matches.length !== result.length + 1) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\t\t\t\tlet totalLen = 0;\n\t\t\t\tfor (let i = 1; i < matches.length; i++) {\n\t\t\t\t\ttotalLen += matches[i].length;\n\t\t\t\t}\n\t\t\t\tif (totalLen !== matched.length) {\n\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n\t\t\t\t}\n\n\t\t\t\tgroupMatching = {\n\t\t\t\t\trule: rule,\n\t\t\t\t\tmatches: matches,\n\t\t\t\t\tgroups: []\n\t\t\t\t};\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\tgroupMatching.groups[i] = {\n\t\t\t\t\t\taction: result[i],\n\t\t\t\t\t\tmatched: matches[i + 1]\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tpos -= matched.length;\n\t\t\t\t// call recursively to initiate first result match\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// regular result\n\n\t\t\t\t// check for '@rematch'\n\t\t\t\tif (result === '@rematch') {\n\t\t\t\t\tpos -= matched.length;\n\t\t\t\t\tmatched = ''; // better set the next state too..\n\t\t\t\t\tmatches = null;\n\t\t\t\t\tresult = '';\n\n\t\t\t\t\t// Even though `@rematch` was specified, if `nextEmbedded` also specified,\n\t\t\t\t\t// a state transition should occur.\n\t\t\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check progress\n\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\tif (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// return the result (and check for brace matching)\n\t\t\t\t// todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n\t\t\t\tlet tokenType: string | null = null;\n\t\t\t\tif (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n\t\t\t\t\tconst rest = result.substr('@brackets'.length);\n\t\t\t\t\tconst bracket = findBracket(this._lexer, matched);\n\t\t\t\t\tif (!bracket) {\n\t\t\t\t\t\tthrow monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n\t\t\t\t\t}\n\t\t\t\t\ttokenType = monarchCommon.sanitize(bracket.token + rest);\n\t\t\t\t} else {\n\t\t\t\t\tconst token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n\t\t\t\t\ttokenType = monarchCommon.sanitize(token);\n\t\t\t\t}\n\n\t\t\t\tif (pos0 < lineWithoutLFLength) {\n\t\t\t\t\ttokensCollector.emit(pos0 + offsetDelta, tokenType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (enteringEmbeddedLanguage !== null) {\n\t\t\t\treturn computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n\t\t\t}\n\t\t}\n\n\t\treturn MonarchLineStateFactory.create(stack, embeddedLanguageData);\n\t}\n\n\tprivate _getNestedEmbeddedLanguageData(languageId: string): EmbeddedLanguageData {\n\t\tif (!this._languageService.isRegisteredLanguageId(languageId)) {\n\t\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t\t}\n\n\t\tif (languageId !== this._languageId) {\n\t\t\t// Fire language loading event\n\t\t\tthis._languageService.requestBasicLanguageFeatures(languageId);\n\t\t\tlanguages.TokenizationRegistry.getOrCreate(languageId);\n\t\t\tthis._embeddedLanguages[languageId] = true;\n\t\t}\n\n\t\tconst tokenizationSupport = languages.TokenizationRegistry.get(languageId);\n\t\tif (tokenizationSupport) {\n\t\t\treturn new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState());\n\t\t}\n\n\t\treturn new EmbeddedLanguageData(languageId, NullState);\n\t}\n}\n\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer: monarchCommon.ILexer, matched: string) {\n\tif (!matched) {\n\t\treturn null;\n\t}\n\tmatched = monarchCommon.fixCase(lexer, matched);\n\n\tconst brackets = lexer.brackets;\n\tfor (const bracket of brackets) {\n\t\tif (bracket.open === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Open };\n\t\t}\n\t\telse if (bracket.close === matched) {\n\t\t\treturn { token: bracket.token, bracketType: monarchCommon.MonarchBracket.Close };\n\t\t}\n\t}\n\treturn null;\n}\n"]}
|