monaco-editor-core 0.56.0-dev-20251124 → 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 +34 -2
- 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/async.js +11 -0
- package/esm/vs/base/common/async.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.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 +2 -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 -65
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +69 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +159 -94
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +124 -50
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +393 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -0
- 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 -11
- 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 +37 -2
- 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 -4
- 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 +37 -2
- 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":["vs/editor/common/viewLayout/viewLineRenderer.ts"],"names":[],"mappings":"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","file":"viewLineRenderer.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\nimport * as nls from '../../../nls.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { IViewLineTokens } from '../tokens/lineTokens.js';\nimport { StringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nimport { LinePart, LinePartMetadata } from './linePart.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { InlineDecorationType } from '../viewModel/inlineDecorations.js';\nimport { TextDirection } from '../model.js';\n\nexport const enum RenderWhitespace {\n\tNone = 0,\n\tBoundary = 1,\n\tSelection = 2,\n\tTrailing = 3,\n\tAll = 4\n}\n\nexport class RenderLineInput {\n\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly canUseHalfwidthRightwardsArrow: boolean;\n\tpublic readonly lineContent: string;\n\tpublic readonly continuesWithWrappedLine: boolean;\n\tpublic readonly isBasicASCII: boolean;\n\tpublic readonly containsRTL: boolean;\n\tpublic readonly fauxIndentLength: number;\n\tpublic readonly lineTokens: IViewLineTokens;\n\tpublic readonly lineDecorations: LineDecoration[];\n\tpublic readonly tabSize: number;\n\tpublic readonly startVisibleColumn: number;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly renderSpaceWidth: number;\n\tpublic readonly renderSpaceCharCode: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly renderWhitespace: RenderWhitespace;\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly fontLigatures: boolean;\n\tpublic readonly textDirection: TextDirection | null;\n\tpublic readonly verticalScrollbarSize: number;\n\n\t/**\n\t * Defined only when renderWhitespace is 'selection'. Selections are non-overlapping,\n\t * and ordered by position within the line.\n\t */\n\tpublic readonly selectionsOnLine: OffsetRange[] | null;\n\t/**\n\t * When rendering an empty line, whether to render a new line instead\n\t */\n\tpublic readonly renderNewLineWhenEmpty: boolean;\n\n\tpublic get isLTR(): boolean {\n\t\treturn !this.containsRTL && this.textDirection !== TextDirection.RTL;\n\t}\n\n\tconstructor(\n\t\tuseMonospaceOptimizations: boolean,\n\t\tcanUseHalfwidthRightwardsArrow: boolean,\n\t\tlineContent: string,\n\t\tcontinuesWithWrappedLine: boolean,\n\t\tisBasicASCII: boolean,\n\t\tcontainsRTL: boolean,\n\t\tfauxIndentLength: number,\n\t\tlineTokens: IViewLineTokens,\n\t\tlineDecorations: LineDecoration[],\n\t\ttabSize: number,\n\t\tstartVisibleColumn: number,\n\t\tspaceWidth: number,\n\t\tmiddotWidth: number,\n\t\twsmiddotWidth: number,\n\t\tstopRenderingLineAfter: number,\n\t\trenderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n\t\trenderControlCharacters: boolean,\n\t\tfontLigatures: boolean,\n\t\tselectionsOnLine: OffsetRange[] | null,\n\t\ttextDirection: TextDirection | null,\n\t\tverticalScrollbarSize: number,\n\t\trenderNewLineWhenEmpty: boolean = false,\n\t) {\n\t\tthis.useMonospaceOptimizations = useMonospaceOptimizations;\n\t\tthis.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n\t\tthis.lineContent = lineContent;\n\t\tthis.continuesWithWrappedLine = continuesWithWrappedLine;\n\t\tthis.isBasicASCII = isBasicASCII;\n\t\tthis.containsRTL = containsRTL;\n\t\tthis.fauxIndentLength = fauxIndentLength;\n\t\tthis.lineTokens = lineTokens;\n\t\tthis.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n\t\tthis.tabSize = tabSize;\n\t\tthis.startVisibleColumn = startVisibleColumn;\n\t\tthis.spaceWidth = spaceWidth;\n\t\tthis.stopRenderingLineAfter = stopRenderingLineAfter;\n\t\tthis.renderWhitespace = (\n\t\t\trenderWhitespace === 'all'\n\t\t\t\t? RenderWhitespace.All\n\t\t\t\t: renderWhitespace === 'boundary'\n\t\t\t\t\t? RenderWhitespace.Boundary\n\t\t\t\t\t: renderWhitespace === 'selection'\n\t\t\t\t\t\t? RenderWhitespace.Selection\n\t\t\t\t\t\t: renderWhitespace === 'trailing'\n\t\t\t\t\t\t\t? RenderWhitespace.Trailing\n\t\t\t\t\t\t\t: RenderWhitespace.None\n\t\t);\n\t\tthis.renderControlCharacters = renderControlCharacters;\n\t\tthis.fontLigatures = fontLigatures;\n\t\tthis.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.start < b.start ? -1 : 1);\n\t\tthis.renderNewLineWhenEmpty = renderNewLineWhenEmpty;\n\t\tthis.textDirection = textDirection;\n\t\tthis.verticalScrollbarSize = verticalScrollbarSize;\n\n\t\tconst wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n\t\tconst middotDiff = Math.abs(middotWidth - spaceWidth);\n\t\tif (wsmiddotDiff < middotDiff) {\n\t\t\tthis.renderSpaceWidth = wsmiddotWidth;\n\t\t\tthis.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n\t\t} else {\n\t\t\tthis.renderSpaceWidth = middotWidth;\n\t\t\tthis.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n\t\t}\n\t}\n\n\tprivate sameSelection(otherSelections: OffsetRange[] | null): boolean {\n\t\tif (this.selectionsOnLine === null) {\n\t\t\treturn otherSelections === null;\n\t\t}\n\n\t\tif (otherSelections === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (otherSelections.length !== this.selectionsOnLine.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < this.selectionsOnLine.length; i++) {\n\t\t\tif (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic equals(other: RenderLineInput): boolean {\n\t\treturn (\n\t\t\tthis.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n\t\t\t&& this.lineContent === other.lineContent\n\t\t\t&& this.continuesWithWrappedLine === other.continuesWithWrappedLine\n\t\t\t&& this.isBasicASCII === other.isBasicASCII\n\t\t\t&& this.containsRTL === other.containsRTL\n\t\t\t&& this.fauxIndentLength === other.fauxIndentLength\n\t\t\t&& this.tabSize === other.tabSize\n\t\t\t&& this.startVisibleColumn === other.startVisibleColumn\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.renderSpaceWidth === other.renderSpaceWidth\n\t\t\t&& this.renderSpaceCharCode === other.renderSpaceCharCode\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t\t&& LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n\t\t\t&& this.lineTokens.equals(other.lineTokens)\n\t\t\t&& this.sameSelection(other.selectionsOnLine)\n\t\t\t&& this.textDirection === other.textDirection\n\t\t\t&& this.verticalScrollbarSize === other.verticalScrollbarSize\n\t\t\t&& this.renderNewLineWhenEmpty === other.renderNewLineWhenEmpty\n\t\t);\n\t}\n}\n\nconst enum CharacterMappingConstants {\n\tPART_INDEX_MASK = 0b11111111111111110000000000000000,\n\tCHAR_INDEX_MASK = 0b00000000000000001111111111111111,\n\n\tCHAR_INDEX_OFFSET = 0,\n\tPART_INDEX_OFFSET = 16\n}\n\nexport class DomPosition {\n\tconstructor(\n\t\tpublic readonly partIndex: number,\n\t\tpublic readonly charIndex: number\n\t) { }\n}\n\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n\n\tprivate static getPartIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.PART_INDEX_MASK) >>> CharacterMappingConstants.PART_INDEX_OFFSET;\n\t}\n\n\tprivate static getCharIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.CHAR_INDEX_MASK) >>> CharacterMappingConstants.CHAR_INDEX_OFFSET;\n\t}\n\n\tpublic readonly length: number;\n\tprivate readonly _data: Uint32Array;\n\tprivate readonly _horizontalOffset: Uint32Array;\n\n\tconstructor(length: number, partCount: number) {\n\t\tthis.length = length;\n\t\tthis._data = new Uint32Array(this.length);\n\t\tthis._horizontalOffset = new Uint32Array(this.length);\n\t}\n\n\tpublic setColumnInfo(column: number, partIndex: number, charIndex: number, horizontalOffset: number): void {\n\t\tconst partData = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\t\tthis._data[column - 1] = partData;\n\t\tthis._horizontalOffset[column - 1] = horizontalOffset;\n\t}\n\n\tpublic getHorizontalOffset(column: number): number {\n\t\tif (this._horizontalOffset.length === 0) {\n\t\t\t// No characters on this line\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._horizontalOffset[column - 1];\n\t}\n\n\tprivate charOffsetToPartData(charOffset: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (charOffset < 0) {\n\t\t\treturn this._data[0];\n\t\t}\n\t\tif (charOffset >= this.length) {\n\t\t\treturn this._data[this.length - 1];\n\t\t}\n\t\treturn this._data[charOffset];\n\t}\n\n\tpublic getDomPosition(column: number): DomPosition {\n\t\tconst partData = this.charOffsetToPartData(column - 1);\n\t\tconst partIndex = CharacterMapping.getPartIndex(partData);\n\t\tconst charIndex = CharacterMapping.getCharIndex(partData);\n\t\treturn new DomPosition(partIndex, charIndex);\n\t}\n\n\tpublic getColumn(domPosition: DomPosition, partLength: number): number {\n\t\tconst charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n\t\treturn charOffset + 1;\n\t}\n\n\tprivate partDataToCharOffset(partIndex: number, partLength: number, charIndex: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst searchEntry = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet min = 0;\n\t\tlet max = this.length - 1;\n\t\twhile (min + 1 < max) {\n\t\t\tconst mid = ((min + max) >>> 1);\n\t\t\tconst midEntry = this._data[mid];\n\t\t\tif (midEntry === searchEntry) {\n\t\t\t\treturn mid;\n\t\t\t} else if (midEntry > searchEntry) {\n\t\t\t\tmax = mid;\n\t\t\t} else {\n\t\t\t\tmin = mid;\n\t\t\t}\n\t\t}\n\n\t\tif (min === max) {\n\t\t\treturn min;\n\t\t}\n\n\t\tconst minEntry = this._data[min];\n\t\tconst maxEntry = this._data[max];\n\n\t\tif (minEntry === searchEntry) {\n\t\t\treturn min;\n\t\t}\n\t\tif (maxEntry === searchEntry) {\n\t\t\treturn max;\n\t\t}\n\n\t\tconst minPartIndex = CharacterMapping.getPartIndex(minEntry);\n\t\tconst minCharIndex = CharacterMapping.getCharIndex(minEntry);\n\n\t\tconst maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n\t\tlet maxCharIndex: number;\n\n\t\tif (minPartIndex !== maxPartIndex) {\n\t\t\t// sitting between parts\n\t\t\tmaxCharIndex = partLength;\n\t\t} else {\n\t\t\tmaxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n\t\t}\n\n\t\tconst minEntryDistance = charIndex - minCharIndex;\n\t\tconst maxEntryDistance = maxCharIndex - charIndex;\n\n\t\tif (minEntryDistance <= maxEntryDistance) {\n\t\t\treturn min;\n\t\t}\n\t\treturn max;\n\t}\n}\n\nexport const enum ForeignElementType {\n\tNone = 0,\n\tBefore = 1,\n\tAfter = 2\n}\n\nexport class RenderLineOutput {\n\t_renderLineOutputBrand: void = undefined;\n\n\treadonly characterMapping: CharacterMapping;\n\treadonly containsForeignElements: ForeignElementType;\n\n\tconstructor(characterMapping: CharacterMapping, containsForeignElements: ForeignElementType) {\n\t\tthis.characterMapping = characterMapping;\n\t\tthis.containsForeignElements = containsForeignElements;\n\t}\n}\n\nexport function renderViewLine(input: RenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tif (input.lineContent.length === 0) {\n\n\t\tif (input.lineDecorations.length > 0) {\n\t\t\t// This line is empty, but it contains inline decorations\n\t\t\tsb.appendString(`<span>`);\n\n\t\t\tlet beforeCount = 0;\n\t\t\tlet afterCount = 0;\n\t\t\tlet containsForeignElements = ForeignElementType.None;\n\t\t\tfor (const lineDecoration of input.lineDecorations) {\n\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before || lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\tsb.appendString(`<span class=\"`);\n\t\t\t\t\tsb.appendString(lineDecoration.className);\n\t\t\t\t\tsb.appendString(`\"></span>`);\n\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t\t\t\tbeforeCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t\t\t\tafterCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsb.appendString(`</span>`);\n\n\t\t\tconst characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n\t\t\tcharacterMapping.setColumnInfo(1, beforeCount, 0, 0);\n\n\t\t\treturn new RenderLineOutput(\n\t\t\t\tcharacterMapping,\n\t\t\t\tcontainsForeignElements\n\t\t\t);\n\t\t}\n\n\t\t// completely empty line\n\t\tif (input.renderNewLineWhenEmpty) {\n\t\t\tsb.appendString('<span><span>\\n</span></span>');\n\t\t} else {\n\t\t\tsb.appendString('<span><span></span></span>');\n\t\t}\n\t\treturn new RenderLineOutput(\n\t\t\tnew CharacterMapping(0, 0),\n\t\t\tForeignElementType.None\n\t\t);\n\t}\n\n\treturn _renderLine(resolveRenderLineInput(input), sb);\n}\n\nexport class RenderLineOutput2 {\n\tconstructor(\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly html: string,\n\t\tpublic readonly containsForeignElements: ForeignElementType\n\t) {\n\t}\n}\n\nexport function renderViewLine2(input: RenderLineInput): RenderLineOutput2 {\n\tconst sb = new StringBuilder(10000);\n\tconst out = renderViewLine(input, sb);\n\treturn new RenderLineOutput2(out.characterMapping, sb.build(), out.containsForeignElements);\n}\n\nclass ResolvedRenderLineInput {\n\tconstructor(\n\t\tpublic readonly fontIsMonospace: boolean,\n\t\tpublic readonly canUseHalfwidthRightwardsArrow: boolean,\n\t\tpublic readonly lineContent: string,\n\t\tpublic readonly len: number,\n\t\tpublic readonly isOverflowing: boolean,\n\t\tpublic readonly overflowingCharCount: number,\n\t\tpublic readonly parts: LinePart[],\n\t\tpublic readonly containsForeignElements: ForeignElementType,\n\t\tpublic readonly fauxIndentLength: number,\n\t\tpublic readonly tabSize: number,\n\t\tpublic readonly startVisibleColumn: number,\n\t\tpublic readonly spaceWidth: number,\n\t\tpublic readonly renderSpaceCharCode: number,\n\t\tpublic readonly renderWhitespace: RenderWhitespace,\n\t\tpublic readonly renderControlCharacters: boolean,\n\t) {\n\t\t//\n\t}\n}\n\nfunction resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput {\n\tconst lineContent = input.lineContent;\n\n\tlet isOverflowing: boolean;\n\tlet overflowingCharCount: number;\n\tlet len: number;\n\n\tif (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n\t\tisOverflowing = true;\n\t\toverflowingCharCount = lineContent.length - input.stopRenderingLineAfter;\n\t\tlen = input.stopRenderingLineAfter;\n\t} else {\n\t\tisOverflowing = false;\n\t\toverflowingCharCount = 0;\n\t\tlen = lineContent.length;\n\t}\n\n\tlet tokens = transformAndRemoveOverflowing(lineContent, input.containsRTL, input.lineTokens, input.fauxIndentLength, len);\n\tif (input.renderControlCharacters && !input.isBasicASCII) {\n\t\t// Calling `extractControlCharacters` before adding (possibly empty) line parts\n\t\t// for inline decorations. `extractControlCharacters` removes empty line parts.\n\t\ttokens = extractControlCharacters(lineContent, tokens);\n\t}\n\tif (input.renderWhitespace === RenderWhitespace.All ||\n\t\tinput.renderWhitespace === RenderWhitespace.Boundary ||\n\t\t(input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine) ||\n\t\t(input.renderWhitespace === RenderWhitespace.Trailing && !input.continuesWithWrappedLine)\n\t) {\n\t\ttokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n\t}\n\tlet containsForeignElements = ForeignElementType.None;\n\tif (input.lineDecorations.length > 0) {\n\t\tfor (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n\t\t\tconst lineDecoration = input.lineDecorations[i];\n\t\t\tif (lineDecoration.type === InlineDecorationType.RegularAffectingLetterSpacing) {\n\t\t\t\t// Pretend there are foreign elements... although not 100% accurate.\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t}\n\t\t}\n\t\ttokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n\t}\n\tif (!input.containsRTL) {\n\t\t// We can never split RTL text, as it ruins the rendering\n\t\ttokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n\t} else {\n\t\t// Split the first token if it contains both leading whitespace and RTL text\n\t\ttokens = splitLeadingWhitespaceFromRTL(lineContent, tokens);\n\t}\n\n\treturn new ResolvedRenderLineInput(\n\t\tinput.useMonospaceOptimizations,\n\t\tinput.canUseHalfwidthRightwardsArrow,\n\t\tlineContent,\n\t\tlen,\n\t\tisOverflowing,\n\t\toverflowingCharCount,\n\t\ttokens,\n\t\tcontainsForeignElements,\n\t\tinput.fauxIndentLength,\n\t\tinput.tabSize,\n\t\tinput.startVisibleColumn,\n\t\tinput.spaceWidth,\n\t\tinput.renderSpaceCharCode,\n\t\tinput.renderWhitespace,\n\t\tinput.renderControlCharacters\n\t);\n}\n\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(lineContent: string, lineContainsRTL: boolean, tokens: IViewLineTokens, fauxIndentLength: number, len: number): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\t// The faux indent part of the line should have no token type\n\tif (fauxIndentLength > 0) {\n\t\tresult[resultLen++] = new LinePart(fauxIndentLength, '', 0, false);\n\t}\n\tlet startOffset = fauxIndentLength;\n\tfor (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n\t\tconst endIndex = tokens.getEndOffset(tokenIndex);\n\t\tif (endIndex <= fauxIndentLength) {\n\t\t\t// The faux indent part of the line should have no token type\n\t\t\tcontinue;\n\t\t}\n\t\tconst type = tokens.getClassName(tokenIndex);\n\t\tif (endIndex >= len) {\n\t\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, len)) : false);\n\t\t\tresult[resultLen++] = new LinePart(len, type, 0, tokenContainsRTL);\n\t\t\tbreak;\n\t\t}\n\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, endIndex)) : false);\n\t\tresult[resultLen++] = new LinePart(endIndex, type, 0, tokenContainsRTL);\n\t\tstartOffset = endIndex;\n\t}\n\n\treturn result;\n}\n\n/**\n * written as a const enum to get value inlining.\n */\nconst enum Constants {\n\tLongToken = 50\n}\n\n/**\n * See https://github.com/microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent: string, tokens: LinePart[], onlyAtSpaces: boolean): LinePart[] {\n\tlet lastTokenEndIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\tif (onlyAtSpaces) {\n\t\t// Split only at spaces => we need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tif (lastTokenEndIndex + Constants.LongToken < tokenEndIndex) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\t\t\tlet lastSpaceOffset = -1;\n\t\t\t\tlet currTokenStart = lastTokenEndIndex;\n\t\t\t\tfor (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n\t\t\t\t\tif (lineContent.charCodeAt(j) === CharCode.Space) {\n\t\t\t\t\t\tlastSpaceOffset = j;\n\t\t\t\t\t}\n\t\t\t\t\tif (lastSpaceOffset !== -1 && j - currTokenStart >= Constants.LongToken) {\n\t\t\t\t\t\t// Split at `lastSpaceOffset` + 1\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t\t\tcurrTokenStart = lastSpaceOffset + 1;\n\t\t\t\t\t\tlastSpaceOffset = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currTokenStart !== tokenEndIndex) {\n\t\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t} else {\n\t\t// Split anywhere => we don't need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tconst diff = (tokenEndIndex - lastTokenEndIndex);\n\t\t\tif (diff > Constants.LongToken) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\t\t\t\tconst piecesCount = Math.ceil(diff / Constants.LongToken);\n\t\t\t\tfor (let j = 1; j < piecesCount; j++) {\n\t\t\t\t\tconst pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);\n\t\t\t\t\tresult[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Splits leading whitespace from the first token if it contains RTL text.\n */\nfunction splitLeadingWhitespaceFromRTL(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tif (tokens.length === 0) {\n\t\treturn tokens;\n\t}\n\n\tconst firstToken = tokens[0];\n\tif (!firstToken.containsRTL) {\n\t\treturn tokens;\n\t}\n\n\t// Check if the first token starts with whitespace\n\tconst firstTokenEndIndex = firstToken.endIndex;\n\tlet firstNonWhitespaceIndex = 0;\n\tfor (let i = 0; i < firstTokenEndIndex; i++) {\n\t\tconst charCode = lineContent.charCodeAt(i);\n\t\tif (charCode !== CharCode.Space && charCode !== CharCode.Tab) {\n\t\t\tfirstNonWhitespaceIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (firstNonWhitespaceIndex === 0) {\n\t\t// No leading whitespace\n\t\treturn tokens;\n\t}\n\n\t// Split the first token into leading whitespace and the rest\n\tconst result: LinePart[] = [];\n\tresult.push(new LinePart(firstNonWhitespaceIndex, firstToken.type, firstToken.metadata, false));\n\tresult.push(new LinePart(firstTokenEndIndex, firstToken.type, firstToken.metadata, firstToken.containsRTL));\n\n\t// Add remaining tokens\n\tfor (let i = 1; i < tokens.length; i++) {\n\t\tresult.push(tokens[i]);\n\t}\n\n\treturn result;\n}\n\nfunction isControlCharacter(charCode: number): boolean {\n\tif (charCode < 32) {\n\t\treturn (charCode !== CharCode.Tab);\n\t}\n\tif (charCode === 127) {\n\t\t// DEL\n\t\treturn true;\n\t}\n\n\tif (\n\t\t(charCode >= 0x202A && charCode <= 0x202E)\n\t\t|| (charCode >= 0x2066 && charCode <= 0x2069)\n\t\t|| (charCode >= 0x200E && charCode <= 0x200F)\n\t\t|| charCode === 0x061C\n\t) {\n\t\t// Unicode Directional Formatting Characters\n\t\t// LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n\t\t// RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n\t\t// PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n\t\t// LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n\t\t// RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n\t\t// LRI\tU+2066\tLEFT-TO-RIGHT ISOLATE\n\t\t// RLI\tU+2067\tRIGHT-TO-LEFT ISOLATE\n\t\t// FSI\tU+2068\tFIRST STRONG ISOLATE\n\t\t// PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n\t\t// LRM\tU+200E\tLEFT-TO-RIGHT MARK\n\t\t// RLM\tU+200F\tRIGHT-TO-LEFT MARK\n\t\t// ALM\tU+061C\tARABIC LETTER MARK\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction extractControlCharacters(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet lastLinePart: LinePart = new LinePart(0, '', 0, false);\n\tlet charOffset = 0;\n\tfor (const token of tokens) {\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tfor (; charOffset < tokenEndIndex; charOffset++) {\n\t\t\tconst charCode = lineContent.charCodeAt(charOffset);\n\t\t\tif (isControlCharacter(charCode)) {\n\t\t\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t\t\t// emit previous part if it has text\n\t\t\t\t\tlastLinePart = new LinePart(charOffset, token.type, token.metadata, token.containsRTL);\n\t\t\t\t\tresult.push(lastLinePart);\n\t\t\t\t}\n\t\t\t\tlastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata, false);\n\t\t\t\tresult.push(lastLinePart);\n\t\t\t}\n\t\t}\n\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t// emit previous part if it has text\n\t\t\tlastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata, token.containsRTL);\n\t\t\tresult.push(lastLinePart);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `mtkw` type that is later recognized in the rendering phase.\n * Moreover, a token is created for every visual indent because on some fonts the glyphs used for rendering whitespace (→ or ·) do not have the same width as .\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\n */\nfunction _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len: number, tokens: LinePart[]): LinePart[] {\n\n\tconst continuesWithWrappedLine = input.continuesWithWrappedLine;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst useMonospaceOptimizations = input.useMonospaceOptimizations;\n\tconst selections = input.selectionsOnLine;\n\tconst onlyBoundary = (input.renderWhitespace === RenderWhitespace.Boundary);\n\tconst onlyTrailing = (input.renderWhitespace === RenderWhitespace.Trailing);\n\tconst generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet tokenIndex = 0;\n\tlet tokenType = tokens[tokenIndex].type;\n\tlet tokenContainsRTL = tokens[tokenIndex].containsRTL;\n\tlet tokenEndIndex = tokens[tokenIndex].endIndex;\n\tconst tokensLength = tokens.length;\n\n\tlet lineIsEmptyOrWhitespace = false;\n\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\tlet lastNonWhitespaceIndex: number;\n\tif (firstNonWhitespaceIndex === -1) {\n\t\tlineIsEmptyOrWhitespace = true;\n\t\tfirstNonWhitespaceIndex = len;\n\t\tlastNonWhitespaceIndex = len;\n\t} else {\n\t\tlastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\t}\n\n\tlet wasInWhitespace = false;\n\tlet currentSelectionIndex = 0;\n\tlet currentSelection = selections && selections[currentSelectionIndex];\n\tlet tmpIndent = startVisibleColumn % tabSize;\n\tfor (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\n\t\tif (currentSelection && currentSelection.endExclusive <= charIndex) {\n\t\t\tcurrentSelectionIndex++;\n\t\t\tcurrentSelection = selections && selections[currentSelectionIndex];\n\t\t}\n\n\t\tlet isInWhitespace: boolean;\n\t\tif (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n\t\t\t// in leading or trailing whitespace\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\t// a tab character is rendered both in all and boundary cases\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Space) {\n\t\t\t// hit a space character\n\t\t\tif (onlyBoundary) {\n\t\t\t\t// rendering only boundary whitespace\n\t\t\t\tif (wasInWhitespace) {\n\t\t\t\t\tisInWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\tconst nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\t\t\t\tisInWhitespace = (nextChCode === CharCode.Space || nextChCode === CharCode.Tab);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisInWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tisInWhitespace = false;\n\t\t}\n\n\t\t// If rendering whitespace on selection, check that the charIndex falls within a selection\n\t\tif (isInWhitespace && selections) {\n\t\t\tisInWhitespace = !!currentSelection && currentSelection.start <= charIndex && charIndex < currentSelection.endExclusive;\n\t\t}\n\n\t\t// If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n\t\tif (isInWhitespace && onlyTrailing) {\n\t\t\tisInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n\t\t}\n\n\t\tif (isInWhitespace && tokenContainsRTL) {\n\t\t\t// If the token contains RTL text, breaking it up into multiple line parts\n\t\t\t// to render whitespace might affect the browser's bidi layout.\n\t\t\t//\n\t\t\t// We render whitespace in such tokens only if the whitespace\n\t\t\t// is the leading or the trailing whitespace of the line,\n\t\t\t// which doesn't affect the browser's bidi layout.\n\t\t\tif (charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex) {\n\t\t\t\tisInWhitespace = false;\n\t\t\t}\n\t\t}\n\n\t\tif (wasInWhitespace) {\n\t\t\t// was in whitespace token\n\t\t\tif (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n\t\t\t\t// leaving whitespace token or entering a new indent\n\t\t\t\tif (generateLinePartForEachWhitespace) {\n\t\t\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\t\t\tfor (let i = lastEndIndex + 1; i <= charIndex; i++) {\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult[resultLen++] = new LinePart(charIndex, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t}\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// was in regular token\n\t\t\tif (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, tokenType, 0, tokenContainsRTL);\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t}\n\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else if (strings.isFullWidthCharacter(chCode)) {\n\t\t\ttmpIndent += 2;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\n\t\twasInWhitespace = isInWhitespace;\n\n\t\twhile (charIndex === tokenEndIndex) {\n\t\t\ttokenIndex++;\n\t\t\tif (tokenIndex < tokensLength) {\n\t\t\t\ttokenType = tokens[tokenIndex].type;\n\t\t\t\ttokenContainsRTL = tokens[tokenIndex].containsRTL;\n\t\t\t\ttokenEndIndex = tokens[tokenIndex].endIndex;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet generateWhitespace = false;\n\tif (wasInWhitespace) {\n\t\t// was in whitespace token\n\t\tif (continuesWithWrappedLine && onlyBoundary) {\n\t\t\tconst lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : CharCode.Null);\n\t\t\tconst prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : CharCode.Null);\n\t\t\tconst isSingleTrailingSpace = (lastCharCode === CharCode.Space && (prevCharCode !== CharCode.Space && prevCharCode !== CharCode.Tab));\n\t\t\tif (!isSingleTrailingSpace) {\n\t\t\t\tgenerateWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tgenerateWhitespace = true;\n\t\t}\n\t}\n\n\tif (generateWhitespace) {\n\t\tif (generateLinePartForEachWhitespace) {\n\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\tfor (let i = lastEndIndex + 1; i <= len; i++) {\n\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t}\n\t\t} else {\n\t\t\tresult[resultLen++] = new LinePart(len, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t}\n\t} else {\n\t\tresult[resultLen++] = new LinePart(len, tokenType, 0, tokenContainsRTL);\n\t}\n\n\treturn result;\n}\n\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent: string, len: number, tokens: LinePart[], _lineDecorations: LineDecoration[]): LinePart[] {\n\t_lineDecorations.sort(LineDecoration.compare);\n\tconst lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n\tconst lineDecorationsLen = lineDecorations.length;\n\n\tlet lineDecorationIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet lastResultEndIndex = 0;\n\tfor (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tconst tokenType = token.type;\n\t\tconst tokenMetadata = token.metadata;\n\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\n\t\t\tif (lineDecoration.startOffset > lastResultEndIndex) {\n\t\t\t\tlastResultEndIndex = lineDecoration.startOffset;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t}\n\n\t\t\tif (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n\t\t\t\t// This line decoration ends before this token ends\n\t\t\t\tlastResultEndIndex = lineDecoration.endOffset + 1;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tlineDecorationIndex++;\n\t\t\t} else {\n\t\t\t\t// This line decoration continues on to the next token\n\t\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tokenEndIndex > lastResultEndIndex) {\n\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t}\n\t}\n\n\tconst lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n\tif (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata, false);\n\t\t\tlineDecorationIndex++;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input: ResolvedRenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tconst fontIsMonospace = input.fontIsMonospace;\n\tconst canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n\tconst containsForeignElements = input.containsForeignElements;\n\tconst lineContent = input.lineContent;\n\tconst len = input.len;\n\tconst isOverflowing = input.isOverflowing;\n\tconst overflowingCharCount = input.overflowingCharCount;\n\tconst parts = input.parts;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst spaceWidth = input.spaceWidth;\n\tconst renderSpaceCharCode = input.renderSpaceCharCode;\n\tconst renderWhitespace = input.renderWhitespace;\n\tconst renderControlCharacters = input.renderControlCharacters;\n\n\tconst characterMapping = new CharacterMapping(len + 1, parts.length);\n\tlet lastCharacterMappingDefined = false;\n\n\tlet charIndex = 0;\n\tlet visibleColumn = startVisibleColumn;\n\tlet charOffsetInPart = 0; // the character offset in the current part\n\tlet charHorizontalOffset = 0; // the character horizontal position in terms of chars relative to line start\n\n\tlet partDisplacement = 0;\n\n\tsb.appendString('<span>');\n\n\tfor (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n\n\t\tconst part = parts[partIndex];\n\t\tconst partEndIndex = part.endIndex;\n\t\tconst partType = part.type;\n\t\tconst partContainsRTL = part.containsRTL;\n\t\tconst partRendersWhitespace = (renderWhitespace !== RenderWhitespace.None && part.isWhitespace());\n\t\tconst partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw'/*only whitespace*/ || !containsForeignElements);\n\t\tconst partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n\t\tcharOffsetInPart = 0;\n\n\t\tsb.appendString('<span ');\n\t\tif (partContainsRTL) {\n\t\t\tsb.appendString('dir=\"rtl\" style=\"unicode-bidi:isolate\" ');\n\t\t}\n\t\tsb.appendString('class=\"');\n\t\tsb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n\t\tsb.appendASCIICharCode(CharCode.DoubleQuote);\n\n\t\tif (partRendersWhitespace) {\n\n\t\t\tlet partWidth = 0;\n\t\t\t{\n\t\t\t\tlet _charIndex = charIndex;\n\t\t\t\tlet _visibleColumn = visibleColumn;\n\n\t\t\t\tfor (; _charIndex < partEndIndex; _charIndex++) {\n\t\t\t\t\tconst charCode = lineContent.charCodeAt(_charIndex);\n\t\t\t\t\tconst charWidth = (charCode === CharCode.Tab ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n\t\t\t\t\tpartWidth += charWidth;\n\t\t\t\t\tif (_charIndex >= fauxIndentLength) {\n\t\t\t\t\t\t_visibleColumn += charWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (partRendersWhitespaceWithWidth) {\n\t\t\t\tsb.appendString(' style=\"width:');\n\t\t\t\tsb.appendString(String(spaceWidth * partWidth));\n\t\t\t\tsb.appendString('px\"');\n\t\t\t}\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters: number;\n\t\t\t\tlet charWidth: number;\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize)) | 0;\n\t\t\t\t\tcharWidth = producedCharacters;\n\n\t\t\t\t\tif (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n\t\t\t\t\t\tsb.appendCharCode(0x2192); // RIGHTWARDS ARROW\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendCharCode(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n\t\t\t\t\t}\n\t\t\t\t\tfor (let space = 2; space <= charWidth; space++) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t}\n\n\t\t\t\t} else { // must be CharCode.Space\n\t\t\t\t\tproducedCharacters = 2;\n\t\t\t\t\tcharWidth = 1;\n\n\t\t\t\t\tsb.appendCharCode(renderSpaceCharCode); // · or word separator middle dot\n\t\t\t\t\tsb.appendCharCode(0x200C); // ZERO WIDTH NON-JOINER\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters = 1;\n\t\t\t\tlet charWidth = 1;\n\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Space:\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\t\tsb.appendString('<');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\t\tsb.appendString('>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\t\tsb.appendString('&');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Null:\n\t\t\t\t\t\tif (renderControlCharacters) {\n\t\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\t\tsb.appendCharCode(9216);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendString('�');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\t\t\tcharWidth++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\tif (renderControlCharacters && charCode < 32) {\n\t\t\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t\t\t} else if (renderControlCharacters && charCode === 127) {\n\t\t\t\t\t\t\t// DEL\n\t\t\t\t\t\t\tsb.appendCharCode(9249);\n\t\t\t\t\t\t} else if (renderControlCharacters && isControlCharacter(charCode)) {\n\t\t\t\t\t\t\tsb.appendString('[U+');\n\t\t\t\t\t\t\tsb.appendString(to4CharHex(charCode));\n\t\t\t\t\t\t\tsb.appendString(']');\n\t\t\t\t\t\t\tproducedCharacters = 8;\n\t\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (partIsEmptyAndHasPseudoAfter) {\n\t\t\tpartDisplacement++;\n\t\t} else {\n\t\t\tpartDisplacement = 0;\n\t\t}\n\n\t\tif (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n\t\t\tlastCharacterMappingDefined = true;\n\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, charHorizontalOffset);\n\t\t}\n\n\t\tsb.appendString('</span>');\n\n\t}\n\n\tif (!lastCharacterMappingDefined) {\n\t\t// When getting client rects for the last character, we will position the\n\t\t// text range at the end of the span, insteaf of at the beginning of next span\n\t\tcharacterMapping.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, charHorizontalOffset);\n\t}\n\n\tif (isOverflowing) {\n\t\tsb.appendString('<span class=\"mtkoverflow\">');\n\t\tsb.appendString(nls.localize('showMore', \"Show more ({0})\", renderOverflowingCharCount(overflowingCharCount)));\n\t\tsb.appendString('</span>');\n\t}\n\n\tsb.appendString('</span>');\n\n\treturn new RenderLineOutput(characterMapping, containsForeignElements);\n}\n\nfunction to4CharHex(n: number): string {\n\treturn n.toString(16).toUpperCase().padStart(4, '0');\n}\n\nfunction renderOverflowingCharCount(n: number): string {\n\tif (n < 1024) {\n\t\treturn nls.localize('overflow.chars', \"{0} chars\", n);\n\t}\n\tif (n < 1024 * 1024) {\n\t\treturn `${(n / 1024).toFixed(1)} KB`;\n\t}\n\treturn `${(n / 1024 / 1024).toFixed(1)} MB`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/editor/common/viewLayout/viewLineRenderer.ts"],"names":[],"mappings":"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","file":"viewLineRenderer.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\nimport * as nls from '../../../nls.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { IViewLineTokens } from '../tokens/lineTokens.js';\nimport { StringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nimport { LinePart, LinePartMetadata } from './linePart.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { InlineDecorationType } from '../viewModel/inlineDecorations.js';\nimport { TextDirection } from '../model.js';\n\nexport const enum RenderWhitespace {\n\tNone = 0,\n\tBoundary = 1,\n\tSelection = 2,\n\tTrailing = 3,\n\tAll = 4\n}\n\nexport class RenderLineInput {\n\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly canUseHalfwidthRightwardsArrow: boolean;\n\tpublic readonly lineContent: string;\n\tpublic readonly continuesWithWrappedLine: boolean;\n\tpublic readonly isBasicASCII: boolean;\n\tpublic readonly containsRTL: boolean;\n\tpublic readonly fauxIndentLength: number;\n\tpublic readonly lineTokens: IViewLineTokens;\n\tpublic readonly lineDecorations: LineDecoration[];\n\tpublic readonly tabSize: number;\n\tpublic readonly startVisibleColumn: number;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly renderSpaceWidth: number;\n\tpublic readonly renderSpaceCharCode: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly renderWhitespace: RenderWhitespace;\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly fontLigatures: boolean;\n\tpublic readonly textDirection: TextDirection | null;\n\tpublic readonly verticalScrollbarSize: number;\n\n\t/**\n\t * Defined only when renderWhitespace is 'selection'. Selections are non-overlapping,\n\t * and ordered by position within the line.\n\t */\n\tpublic readonly selectionsOnLine: OffsetRange[] | null;\n\t/**\n\t * When rendering an empty line, whether to render a new line instead\n\t */\n\tpublic readonly renderNewLineWhenEmpty: boolean;\n\n\tpublic get isLTR(): boolean {\n\t\treturn !this.containsRTL && this.textDirection !== TextDirection.RTL;\n\t}\n\n\tconstructor(\n\t\tuseMonospaceOptimizations: boolean,\n\t\tcanUseHalfwidthRightwardsArrow: boolean,\n\t\tlineContent: string,\n\t\tcontinuesWithWrappedLine: boolean,\n\t\tisBasicASCII: boolean,\n\t\tcontainsRTL: boolean,\n\t\tfauxIndentLength: number,\n\t\tlineTokens: IViewLineTokens,\n\t\tlineDecorations: LineDecoration[],\n\t\ttabSize: number,\n\t\tstartVisibleColumn: number,\n\t\tspaceWidth: number,\n\t\tmiddotWidth: number,\n\t\twsmiddotWidth: number,\n\t\tstopRenderingLineAfter: number,\n\t\trenderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n\t\trenderControlCharacters: boolean,\n\t\tfontLigatures: boolean,\n\t\tselectionsOnLine: OffsetRange[] | null,\n\t\ttextDirection: TextDirection | null,\n\t\tverticalScrollbarSize: number,\n\t\trenderNewLineWhenEmpty: boolean = false,\n\t) {\n\t\tthis.useMonospaceOptimizations = useMonospaceOptimizations;\n\t\tthis.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n\t\tthis.lineContent = lineContent;\n\t\tthis.continuesWithWrappedLine = continuesWithWrappedLine;\n\t\tthis.isBasicASCII = isBasicASCII;\n\t\tthis.containsRTL = containsRTL;\n\t\tthis.fauxIndentLength = fauxIndentLength;\n\t\tthis.lineTokens = lineTokens;\n\t\tthis.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n\t\tthis.tabSize = tabSize;\n\t\tthis.startVisibleColumn = startVisibleColumn;\n\t\tthis.spaceWidth = spaceWidth;\n\t\tthis.stopRenderingLineAfter = stopRenderingLineAfter;\n\t\tthis.renderWhitespace = (\n\t\t\trenderWhitespace === 'all'\n\t\t\t\t? RenderWhitespace.All\n\t\t\t\t: renderWhitespace === 'boundary'\n\t\t\t\t\t? RenderWhitespace.Boundary\n\t\t\t\t\t: renderWhitespace === 'selection'\n\t\t\t\t\t\t? RenderWhitespace.Selection\n\t\t\t\t\t\t: renderWhitespace === 'trailing'\n\t\t\t\t\t\t\t? RenderWhitespace.Trailing\n\t\t\t\t\t\t\t: RenderWhitespace.None\n\t\t);\n\t\tthis.renderControlCharacters = renderControlCharacters;\n\t\tthis.fontLigatures = fontLigatures;\n\t\tthis.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.start < b.start ? -1 : 1);\n\t\tthis.renderNewLineWhenEmpty = renderNewLineWhenEmpty;\n\t\tthis.textDirection = textDirection;\n\t\tthis.verticalScrollbarSize = verticalScrollbarSize;\n\n\t\tconst wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n\t\tconst middotDiff = Math.abs(middotWidth - spaceWidth);\n\t\tif (wsmiddotDiff < middotDiff) {\n\t\t\tthis.renderSpaceWidth = wsmiddotWidth;\n\t\t\tthis.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n\t\t} else {\n\t\t\tthis.renderSpaceWidth = middotWidth;\n\t\t\tthis.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n\t\t}\n\t}\n\n\tprivate sameSelection(otherSelections: OffsetRange[] | null): boolean {\n\t\tif (this.selectionsOnLine === null) {\n\t\t\treturn otherSelections === null;\n\t\t}\n\n\t\tif (otherSelections === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (otherSelections.length !== this.selectionsOnLine.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < this.selectionsOnLine.length; i++) {\n\t\t\tif (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic equals(other: RenderLineInput): boolean {\n\t\treturn (\n\t\t\tthis.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n\t\t\t&& this.lineContent === other.lineContent\n\t\t\t&& this.continuesWithWrappedLine === other.continuesWithWrappedLine\n\t\t\t&& this.isBasicASCII === other.isBasicASCII\n\t\t\t&& this.containsRTL === other.containsRTL\n\t\t\t&& this.fauxIndentLength === other.fauxIndentLength\n\t\t\t&& this.tabSize === other.tabSize\n\t\t\t&& this.startVisibleColumn === other.startVisibleColumn\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.renderSpaceWidth === other.renderSpaceWidth\n\t\t\t&& this.renderSpaceCharCode === other.renderSpaceCharCode\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t\t&& LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n\t\t\t&& this.lineTokens.equals(other.lineTokens)\n\t\t\t&& this.sameSelection(other.selectionsOnLine)\n\t\t\t&& this.textDirection === other.textDirection\n\t\t\t&& this.verticalScrollbarSize === other.verticalScrollbarSize\n\t\t\t&& this.renderNewLineWhenEmpty === other.renderNewLineWhenEmpty\n\t\t);\n\t}\n}\n\nconst enum CharacterMappingConstants {\n\tPART_INDEX_MASK = 0b11111111111111110000000000000000,\n\tCHAR_INDEX_MASK = 0b00000000000000001111111111111111,\n\n\tCHAR_INDEX_OFFSET = 0,\n\tPART_INDEX_OFFSET = 16\n}\n\nexport class DomPosition {\n\tconstructor(\n\t\tpublic readonly partIndex: number,\n\t\tpublic readonly charIndex: number\n\t) { }\n}\n\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n\n\tprivate static getPartIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.PART_INDEX_MASK) >>> CharacterMappingConstants.PART_INDEX_OFFSET;\n\t}\n\n\tprivate static getCharIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.CHAR_INDEX_MASK) >>> CharacterMappingConstants.CHAR_INDEX_OFFSET;\n\t}\n\n\tpublic readonly length: number;\n\tprivate readonly _data: Uint32Array;\n\tprivate readonly _horizontalOffset: Uint32Array;\n\n\tconstructor(length: number, partCount: number) {\n\t\tthis.length = length;\n\t\tthis._data = new Uint32Array(this.length);\n\t\tthis._horizontalOffset = new Uint32Array(this.length);\n\t}\n\n\tpublic setColumnInfo(column: number, partIndex: number, charIndex: number, horizontalOffset: number): void {\n\t\tconst partData = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\t\tthis._data[column - 1] = partData;\n\t\tthis._horizontalOffset[column - 1] = horizontalOffset;\n\t}\n\n\tpublic getHorizontalOffset(column: number): number {\n\t\tif (this._horizontalOffset.length === 0) {\n\t\t\t// No characters on this line\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._horizontalOffset[column - 1];\n\t}\n\n\tprivate charOffsetToPartData(charOffset: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (charOffset < 0) {\n\t\t\treturn this._data[0];\n\t\t}\n\t\tif (charOffset >= this.length) {\n\t\t\treturn this._data[this.length - 1];\n\t\t}\n\t\treturn this._data[charOffset];\n\t}\n\n\tpublic getDomPosition(column: number): DomPosition {\n\t\tconst partData = this.charOffsetToPartData(column - 1);\n\t\tconst partIndex = CharacterMapping.getPartIndex(partData);\n\t\tconst charIndex = CharacterMapping.getCharIndex(partData);\n\t\treturn new DomPosition(partIndex, charIndex);\n\t}\n\n\tpublic getColumn(domPosition: DomPosition, partLength: number): number {\n\t\tconst charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n\t\treturn charOffset + 1;\n\t}\n\n\tprivate partDataToCharOffset(partIndex: number, partLength: number, charIndex: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst searchEntry = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet min = 0;\n\t\tlet max = this.length - 1;\n\t\twhile (min + 1 < max) {\n\t\t\tconst mid = ((min + max) >>> 1);\n\t\t\tconst midEntry = this._data[mid];\n\t\t\tif (midEntry === searchEntry) {\n\t\t\t\treturn mid;\n\t\t\t} else if (midEntry > searchEntry) {\n\t\t\t\tmax = mid;\n\t\t\t} else {\n\t\t\t\tmin = mid;\n\t\t\t}\n\t\t}\n\n\t\tif (min === max) {\n\t\t\treturn min;\n\t\t}\n\n\t\tconst minEntry = this._data[min];\n\t\tconst maxEntry = this._data[max];\n\n\t\tif (minEntry === searchEntry) {\n\t\t\treturn min;\n\t\t}\n\t\tif (maxEntry === searchEntry) {\n\t\t\treturn max;\n\t\t}\n\n\t\tconst minPartIndex = CharacterMapping.getPartIndex(minEntry);\n\t\tconst minCharIndex = CharacterMapping.getCharIndex(minEntry);\n\n\t\tconst maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n\t\tlet maxCharIndex: number;\n\n\t\tif (minPartIndex !== maxPartIndex) {\n\t\t\t// sitting between parts\n\t\t\tmaxCharIndex = partLength;\n\t\t} else {\n\t\t\tmaxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n\t\t}\n\n\t\tconst minEntryDistance = charIndex - minCharIndex;\n\t\tconst maxEntryDistance = maxCharIndex - charIndex;\n\n\t\tif (minEntryDistance <= maxEntryDistance) {\n\t\t\treturn min;\n\t\t}\n\t\treturn max;\n\t}\n}\n\nexport const enum ForeignElementType {\n\tNone = 0,\n\tBefore = 1,\n\tAfter = 2\n}\n\nexport class RenderLineOutput {\n\t_renderLineOutputBrand: void = undefined;\n\n\treadonly characterMapping: CharacterMapping;\n\treadonly containsForeignElements: ForeignElementType;\n\n\tconstructor(characterMapping: CharacterMapping, containsForeignElements: ForeignElementType) {\n\t\tthis.characterMapping = characterMapping;\n\t\tthis.containsForeignElements = containsForeignElements;\n\t}\n}\n\nexport function renderViewLine(input: RenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tif (input.lineContent.length === 0) {\n\n\t\tif (input.lineDecorations.length > 0) {\n\t\t\t// This line is empty, but it contains inline decorations\n\t\t\tsb.appendString(`<span>`);\n\n\t\t\tlet beforeCount = 0;\n\t\t\tlet afterCount = 0;\n\t\t\tlet containsForeignElements = ForeignElementType.None;\n\t\t\tfor (const lineDecoration of input.lineDecorations) {\n\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before || lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\tsb.appendString(`<span class=\"`);\n\t\t\t\t\tsb.appendString(lineDecoration.className);\n\t\t\t\t\tsb.appendString(`\"></span>`);\n\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t\t\t\tbeforeCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t\t\t\tafterCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsb.appendString(`</span>`);\n\n\t\t\tconst characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n\t\t\tcharacterMapping.setColumnInfo(1, beforeCount, 0, 0);\n\n\t\t\treturn new RenderLineOutput(\n\t\t\t\tcharacterMapping,\n\t\t\t\tcontainsForeignElements\n\t\t\t);\n\t\t}\n\n\t\t// completely empty line\n\t\tif (input.renderNewLineWhenEmpty) {\n\t\t\tsb.appendString('<span><span>\\n</span></span>');\n\t\t} else {\n\t\t\tsb.appendString('<span><span></span></span>');\n\t\t}\n\t\treturn new RenderLineOutput(\n\t\t\tnew CharacterMapping(0, 0),\n\t\t\tForeignElementType.None\n\t\t);\n\t}\n\n\treturn _renderLine(resolveRenderLineInput(input), sb);\n}\n\nexport class RenderLineOutput2 {\n\tconstructor(\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly html: string,\n\t\tpublic readonly containsForeignElements: ForeignElementType\n\t) {\n\t}\n}\n\nexport function renderViewLine2(input: RenderLineInput): RenderLineOutput2 {\n\tconst sb = new StringBuilder(10000);\n\tconst out = renderViewLine(input, sb);\n\treturn new RenderLineOutput2(out.characterMapping, sb.build(), out.containsForeignElements);\n}\n\nclass ResolvedRenderLineInput {\n\tconstructor(\n\t\tpublic readonly fontIsMonospace: boolean,\n\t\tpublic readonly canUseHalfwidthRightwardsArrow: boolean,\n\t\tpublic readonly lineContent: string,\n\t\tpublic readonly len: number,\n\t\tpublic readonly isOverflowing: boolean,\n\t\tpublic readonly overflowingCharCount: number,\n\t\tpublic readonly parts: LinePart[],\n\t\tpublic readonly containsForeignElements: ForeignElementType,\n\t\tpublic readonly fauxIndentLength: number,\n\t\tpublic readonly tabSize: number,\n\t\tpublic readonly startVisibleColumn: number,\n\t\tpublic readonly spaceWidth: number,\n\t\tpublic readonly renderSpaceCharCode: number,\n\t\tpublic readonly renderWhitespace: RenderWhitespace,\n\t\tpublic readonly renderControlCharacters: boolean,\n\t) {\n\t\t//\n\t}\n}\n\nfunction resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput {\n\tconst lineContent = input.lineContent;\n\n\tlet isOverflowing: boolean;\n\tlet overflowingCharCount: number;\n\tlet len: number;\n\n\tif (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n\t\tisOverflowing = true;\n\t\toverflowingCharCount = lineContent.length - input.stopRenderingLineAfter;\n\t\tlen = input.stopRenderingLineAfter;\n\t} else {\n\t\tisOverflowing = false;\n\t\toverflowingCharCount = 0;\n\t\tlen = lineContent.length;\n\t}\n\n\tlet tokens = transformAndRemoveOverflowing(lineContent, input.containsRTL, input.lineTokens, input.fauxIndentLength, len);\n\tif (input.renderControlCharacters && !input.isBasicASCII) {\n\t\t// Calling `extractControlCharacters` before adding (possibly empty) line parts\n\t\t// for inline decorations. `extractControlCharacters` removes empty line parts.\n\t\ttokens = extractControlCharacters(lineContent, tokens);\n\t}\n\tif (input.renderWhitespace === RenderWhitespace.All ||\n\t\tinput.renderWhitespace === RenderWhitespace.Boundary ||\n\t\t(input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine) ||\n\t\t(input.renderWhitespace === RenderWhitespace.Trailing && !input.continuesWithWrappedLine)\n\t) {\n\t\ttokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n\t}\n\tlet containsForeignElements = ForeignElementType.None;\n\tif (input.lineDecorations.length > 0) {\n\t\tfor (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n\t\t\tconst lineDecoration = input.lineDecorations[i];\n\t\t\tif (lineDecoration.type === InlineDecorationType.RegularAffectingLetterSpacing) {\n\t\t\t\t// Pretend there are foreign elements... although not 100% accurate.\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t}\n\t\t}\n\t\ttokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n\t}\n\tif (!input.containsRTL) {\n\t\t// We can never split RTL text, as it ruins the rendering\n\t\ttokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n\t} else {\n\t\t// Split the first token if it contains both leading whitespace and RTL text\n\t\ttokens = splitLeadingWhitespaceFromRTL(lineContent, tokens);\n\t}\n\n\treturn new ResolvedRenderLineInput(\n\t\tinput.useMonospaceOptimizations,\n\t\tinput.canUseHalfwidthRightwardsArrow,\n\t\tlineContent,\n\t\tlen,\n\t\tisOverflowing,\n\t\toverflowingCharCount,\n\t\ttokens,\n\t\tcontainsForeignElements,\n\t\tinput.fauxIndentLength,\n\t\tinput.tabSize,\n\t\tinput.startVisibleColumn,\n\t\tinput.spaceWidth,\n\t\tinput.renderSpaceCharCode,\n\t\tinput.renderWhitespace,\n\t\tinput.renderControlCharacters\n\t);\n}\n\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(lineContent: string, lineContainsRTL: boolean, tokens: IViewLineTokens, fauxIndentLength: number, len: number): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\t// The faux indent part of the line should have no token type\n\tif (fauxIndentLength > 0) {\n\t\tresult[resultLen++] = new LinePart(fauxIndentLength, '', 0, false);\n\t}\n\tlet startOffset = fauxIndentLength;\n\tfor (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n\t\tconst endIndex = tokens.getEndOffset(tokenIndex);\n\t\tif (endIndex <= fauxIndentLength) {\n\t\t\t// The faux indent part of the line should have no token type\n\t\t\tcontinue;\n\t\t}\n\t\tconst type = tokens.getClassName(tokenIndex);\n\t\tif (endIndex >= len) {\n\t\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, len)) : false);\n\t\t\tresult[resultLen++] = new LinePart(len, type, 0, tokenContainsRTL);\n\t\t\tbreak;\n\t\t}\n\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, endIndex)) : false);\n\t\tresult[resultLen++] = new LinePart(endIndex, type, 0, tokenContainsRTL);\n\t\tstartOffset = endIndex;\n\t}\n\n\treturn result;\n}\n\n/**\n * written as a const enum to get value inlining.\n */\nconst enum Constants {\n\tLongToken = 50\n}\n\n/**\n * See https://github.com/microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent: string, tokens: LinePart[], onlyAtSpaces: boolean): LinePart[] {\n\tlet lastTokenEndIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\tif (onlyAtSpaces) {\n\t\t// Split only at spaces => we need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tif (lastTokenEndIndex + Constants.LongToken < tokenEndIndex) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\t\t\tlet lastSpaceOffset = -1;\n\t\t\t\tlet currTokenStart = lastTokenEndIndex;\n\t\t\t\tfor (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n\t\t\t\t\tif (lineContent.charCodeAt(j) === CharCode.Space) {\n\t\t\t\t\t\tlastSpaceOffset = j;\n\t\t\t\t\t}\n\t\t\t\t\tif (lastSpaceOffset !== -1 && j - currTokenStart >= Constants.LongToken) {\n\t\t\t\t\t\t// Split at `lastSpaceOffset` + 1\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t\t\tcurrTokenStart = lastSpaceOffset + 1;\n\t\t\t\t\t\tlastSpaceOffset = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currTokenStart !== tokenEndIndex) {\n\t\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t} else {\n\t\t// Split anywhere => we don't need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tconst diff = (tokenEndIndex - lastTokenEndIndex);\n\t\t\tif (diff > Constants.LongToken) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\t\t\t\tconst piecesCount = Math.ceil(diff / Constants.LongToken);\n\t\t\t\tfor (let j = 1; j < piecesCount; j++) {\n\t\t\t\t\tconst pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);\n\t\t\t\t\tresult[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Splits leading whitespace from the first token if it contains RTL text.\n */\nfunction splitLeadingWhitespaceFromRTL(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tif (tokens.length === 0) {\n\t\treturn tokens;\n\t}\n\n\tconst firstToken = tokens[0];\n\tif (!firstToken.containsRTL) {\n\t\treturn tokens;\n\t}\n\n\t// Check if the first token starts with whitespace\n\tconst firstTokenEndIndex = firstToken.endIndex;\n\tlet firstNonWhitespaceIndex = 0;\n\tfor (let i = 0; i < firstTokenEndIndex; i++) {\n\t\tconst charCode = lineContent.charCodeAt(i);\n\t\tif (charCode !== CharCode.Space && charCode !== CharCode.Tab) {\n\t\t\tfirstNonWhitespaceIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (firstNonWhitespaceIndex === 0) {\n\t\t// No leading whitespace\n\t\treturn tokens;\n\t}\n\n\t// Split the first token into leading whitespace and the rest\n\tconst result: LinePart[] = [];\n\tresult.push(new LinePart(firstNonWhitespaceIndex, firstToken.type, firstToken.metadata, false));\n\tresult.push(new LinePart(firstTokenEndIndex, firstToken.type, firstToken.metadata, firstToken.containsRTL));\n\n\t// Add remaining tokens\n\tfor (let i = 1; i < tokens.length; i++) {\n\t\tresult.push(tokens[i]);\n\t}\n\n\treturn result;\n}\n\nfunction isControlCharacter(charCode: number): boolean {\n\tif (charCode < 32) {\n\t\treturn (charCode !== CharCode.Tab);\n\t}\n\tif (charCode === 127) {\n\t\t// DEL\n\t\treturn true;\n\t}\n\n\tif (\n\t\t(charCode >= 0x202A && charCode <= 0x202E)\n\t\t|| (charCode >= 0x2066 && charCode <= 0x2069)\n\t\t|| (charCode >= 0x200E && charCode <= 0x200F)\n\t\t|| charCode === 0x061C\n\t) {\n\t\t// Unicode Directional Formatting Characters\n\t\t// LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n\t\t// RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n\t\t// PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n\t\t// LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n\t\t// RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n\t\t// LRI\tU+2066\tLEFT-TO-RIGHT ISOLATE\n\t\t// RLI\tU+2067\tRIGHT-TO-LEFT ISOLATE\n\t\t// FSI\tU+2068\tFIRST STRONG ISOLATE\n\t\t// PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n\t\t// LRM\tU+200E\tLEFT-TO-RIGHT MARK\n\t\t// RLM\tU+200F\tRIGHT-TO-LEFT MARK\n\t\t// ALM\tU+061C\tARABIC LETTER MARK\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction extractControlCharacters(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet lastLinePart: LinePart = new LinePart(0, '', 0, false);\n\tlet charOffset = 0;\n\tfor (const token of tokens) {\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tfor (; charOffset < tokenEndIndex; charOffset++) {\n\t\t\tconst charCode = lineContent.charCodeAt(charOffset);\n\t\t\tif (isControlCharacter(charCode)) {\n\t\t\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t\t\t// emit previous part if it has text\n\t\t\t\t\tlastLinePart = new LinePart(charOffset, token.type, token.metadata, token.containsRTL);\n\t\t\t\t\tresult.push(lastLinePart);\n\t\t\t\t}\n\t\t\t\tlastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata, false);\n\t\t\t\tresult.push(lastLinePart);\n\t\t\t}\n\t\t}\n\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t// emit previous part if it has text\n\t\t\tlastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata, token.containsRTL);\n\t\t\tresult.push(lastLinePart);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `mtkw` type that is later recognized in the rendering phase.\n * Moreover, a token is created for every visual indent because on some fonts the glyphs used for rendering whitespace (→ or ·) do not have the same width as .\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\n */\nfunction _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len: number, tokens: LinePart[]): LinePart[] {\n\n\tconst continuesWithWrappedLine = input.continuesWithWrappedLine;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst useMonospaceOptimizations = input.useMonospaceOptimizations;\n\tconst selections = input.selectionsOnLine;\n\tconst onlyBoundary = (input.renderWhitespace === RenderWhitespace.Boundary);\n\tconst onlyTrailing = (input.renderWhitespace === RenderWhitespace.Trailing);\n\tconst generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet tokenIndex = 0;\n\tlet tokenType = tokens[tokenIndex].type;\n\tlet tokenContainsRTL = tokens[tokenIndex].containsRTL;\n\tlet tokenEndIndex = tokens[tokenIndex].endIndex;\n\tconst tokensLength = tokens.length;\n\n\tlet lineIsEmptyOrWhitespace = false;\n\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\tlet lastNonWhitespaceIndex: number;\n\tif (firstNonWhitespaceIndex === -1) {\n\t\tlineIsEmptyOrWhitespace = true;\n\t\tfirstNonWhitespaceIndex = len;\n\t\tlastNonWhitespaceIndex = len;\n\t} else {\n\t\tlastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\t}\n\n\tlet wasInWhitespace = false;\n\tlet currentSelectionIndex = 0;\n\tlet currentSelection = selections && selections[currentSelectionIndex];\n\tlet tmpIndent = startVisibleColumn % tabSize;\n\tfor (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\n\t\tif (currentSelection && currentSelection.endExclusive <= charIndex) {\n\t\t\tcurrentSelectionIndex++;\n\t\t\tcurrentSelection = selections && selections[currentSelectionIndex];\n\t\t}\n\n\t\tlet isInWhitespace: boolean;\n\t\tif (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n\t\t\t// in leading or trailing whitespace\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\t// a tab character is rendered both in all and boundary cases\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Space) {\n\t\t\t// hit a space character\n\t\t\tif (onlyBoundary) {\n\t\t\t\t// rendering only boundary whitespace\n\t\t\t\tif (wasInWhitespace) {\n\t\t\t\t\tisInWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\tconst nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\t\t\t\tisInWhitespace = (nextChCode === CharCode.Space || nextChCode === CharCode.Tab);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisInWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tisInWhitespace = false;\n\t\t}\n\n\t\t// If rendering whitespace on selection, check that the charIndex falls within a selection\n\t\tif (isInWhitespace && selections) {\n\t\t\tisInWhitespace = !!currentSelection && currentSelection.start <= charIndex && charIndex < currentSelection.endExclusive;\n\t\t}\n\n\t\t// If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n\t\tif (isInWhitespace && onlyTrailing) {\n\t\t\tisInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n\t\t}\n\n\t\tif (isInWhitespace && tokenContainsRTL) {\n\t\t\t// If the token contains RTL text, breaking it up into multiple line parts\n\t\t\t// to render whitespace might affect the browser's bidi layout.\n\t\t\t//\n\t\t\t// We render whitespace in such tokens only if the whitespace\n\t\t\t// is the leading or the trailing whitespace of the line,\n\t\t\t// which doesn't affect the browser's bidi layout.\n\t\t\tif (charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex) {\n\t\t\t\tisInWhitespace = false;\n\t\t\t}\n\t\t}\n\n\t\tif (wasInWhitespace) {\n\t\t\t// was in whitespace token\n\t\t\tif (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n\t\t\t\t// leaving whitespace token or entering a new indent\n\t\t\t\tif (generateLinePartForEachWhitespace) {\n\t\t\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\t\t\tfor (let i = lastEndIndex + 1; i <= charIndex; i++) {\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult[resultLen++] = new LinePart(charIndex, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t}\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// was in regular token\n\t\t\tif (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, tokenType, 0, tokenContainsRTL);\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t}\n\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else if (strings.isFullWidthCharacter(chCode)) {\n\t\t\ttmpIndent += 2;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\n\t\twasInWhitespace = isInWhitespace;\n\n\t\twhile (charIndex === tokenEndIndex) {\n\t\t\ttokenIndex++;\n\t\t\tif (tokenIndex < tokensLength) {\n\t\t\t\ttokenType = tokens[tokenIndex].type;\n\t\t\t\ttokenContainsRTL = tokens[tokenIndex].containsRTL;\n\t\t\t\ttokenEndIndex = tokens[tokenIndex].endIndex;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet generateWhitespace = false;\n\tif (wasInWhitespace) {\n\t\t// was in whitespace token\n\t\tif (continuesWithWrappedLine && onlyBoundary) {\n\t\t\tconst lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : CharCode.Null);\n\t\t\tconst prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : CharCode.Null);\n\t\t\tconst isSingleTrailingSpace = (lastCharCode === CharCode.Space && (prevCharCode !== CharCode.Space && prevCharCode !== CharCode.Tab));\n\t\t\tif (!isSingleTrailingSpace) {\n\t\t\t\tgenerateWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tgenerateWhitespace = true;\n\t\t}\n\t}\n\n\tif (generateWhitespace) {\n\t\tif (generateLinePartForEachWhitespace) {\n\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\tfor (let i = lastEndIndex + 1; i <= len; i++) {\n\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t}\n\t\t} else {\n\t\t\tresult[resultLen++] = new LinePart(len, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t}\n\t} else {\n\t\tresult[resultLen++] = new LinePart(len, tokenType, 0, tokenContainsRTL);\n\t}\n\n\treturn result;\n}\n\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent: string, len: number, tokens: LinePart[], _lineDecorations: LineDecoration[]): LinePart[] {\n\t_lineDecorations.sort(LineDecoration.compare);\n\tconst lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n\tconst lineDecorationsLen = lineDecorations.length;\n\n\tlet lineDecorationIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet lastResultEndIndex = 0;\n\tfor (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tconst tokenType = token.type;\n\t\tconst tokenMetadata = token.metadata;\n\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\n\t\t\tif (lineDecoration.startOffset > lastResultEndIndex) {\n\t\t\t\tlastResultEndIndex = lineDecoration.startOffset;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t}\n\n\t\t\tif (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n\t\t\t\t// This line decoration ends before this token ends\n\t\t\t\tlastResultEndIndex = lineDecoration.endOffset + 1;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tlineDecorationIndex++;\n\t\t\t} else {\n\t\t\t\t// This line decoration continues on to the next token\n\t\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tokenEndIndex > lastResultEndIndex) {\n\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t}\n\t}\n\n\tconst lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n\tif (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata, false);\n\t\t\tlineDecorationIndex++;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input: ResolvedRenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tconst fontIsMonospace = input.fontIsMonospace;\n\tconst canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n\tconst containsForeignElements = input.containsForeignElements;\n\tconst lineContent = input.lineContent;\n\tconst len = input.len;\n\tconst isOverflowing = input.isOverflowing;\n\tconst overflowingCharCount = input.overflowingCharCount;\n\tconst parts = input.parts;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst spaceWidth = input.spaceWidth;\n\tconst renderSpaceCharCode = input.renderSpaceCharCode;\n\tconst renderWhitespace = input.renderWhitespace;\n\tconst renderControlCharacters = input.renderControlCharacters;\n\n\tconst characterMapping = new CharacterMapping(len + 1, parts.length);\n\tlet lastCharacterMappingDefined = false;\n\n\tlet charIndex = 0;\n\tlet visibleColumn = startVisibleColumn;\n\tlet charOffsetInPart = 0; // the character offset in the current part\n\tlet charHorizontalOffset = 0; // the character horizontal position in terms of chars relative to line start\n\n\tlet partDisplacement = 0;\n\n\tsb.appendString('<span>');\n\n\tfor (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n\n\t\tconst part = parts[partIndex];\n\t\tconst partEndIndex = part.endIndex;\n\t\tconst partType = part.type;\n\t\tconst partContainsRTL = part.containsRTL;\n\t\tconst partRendersWhitespace = (renderWhitespace !== RenderWhitespace.None && part.isWhitespace());\n\t\tconst partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw'/*only whitespace*/ || !containsForeignElements);\n\t\tconst partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n\t\tcharOffsetInPart = 0;\n\n\t\tsb.appendString('<span ');\n\t\tif (partContainsRTL) {\n\t\t\tsb.appendString('style=\"unicode-bidi:isolate\" ');\n\t\t}\n\t\tsb.appendString('class=\"');\n\t\tsb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n\t\tsb.appendASCIICharCode(CharCode.DoubleQuote);\n\n\t\tif (partRendersWhitespace) {\n\n\t\t\tlet partWidth = 0;\n\t\t\t{\n\t\t\t\tlet _charIndex = charIndex;\n\t\t\t\tlet _visibleColumn = visibleColumn;\n\n\t\t\t\tfor (; _charIndex < partEndIndex; _charIndex++) {\n\t\t\t\t\tconst charCode = lineContent.charCodeAt(_charIndex);\n\t\t\t\t\tconst charWidth = (charCode === CharCode.Tab ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n\t\t\t\t\tpartWidth += charWidth;\n\t\t\t\t\tif (_charIndex >= fauxIndentLength) {\n\t\t\t\t\t\t_visibleColumn += charWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (partRendersWhitespaceWithWidth) {\n\t\t\t\tsb.appendString(' style=\"width:');\n\t\t\t\tsb.appendString(String(spaceWidth * partWidth));\n\t\t\t\tsb.appendString('px\"');\n\t\t\t}\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters: number;\n\t\t\t\tlet charWidth: number;\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize)) | 0;\n\t\t\t\t\tcharWidth = producedCharacters;\n\n\t\t\t\t\tif (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n\t\t\t\t\t\tsb.appendCharCode(0x2192); // RIGHTWARDS ARROW\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendCharCode(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n\t\t\t\t\t}\n\t\t\t\t\tfor (let space = 2; space <= charWidth; space++) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t}\n\n\t\t\t\t} else { // must be CharCode.Space\n\t\t\t\t\tproducedCharacters = 2;\n\t\t\t\t\tcharWidth = 1;\n\n\t\t\t\t\tsb.appendCharCode(renderSpaceCharCode); // · or word separator middle dot\n\t\t\t\t\tsb.appendCharCode(0x200C); // ZERO WIDTH NON-JOINER\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters = 1;\n\t\t\t\tlet charWidth = 1;\n\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Space:\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\t\tsb.appendString('<');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\t\tsb.appendString('>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\t\tsb.appendString('&');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Null:\n\t\t\t\t\t\tif (renderControlCharacters) {\n\t\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\t\tsb.appendCharCode(9216);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendString('�');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\t\t\tcharWidth++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\tif (renderControlCharacters && charCode < 32) {\n\t\t\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t\t\t} else if (renderControlCharacters && charCode === 127) {\n\t\t\t\t\t\t\t// DEL\n\t\t\t\t\t\t\tsb.appendCharCode(9249);\n\t\t\t\t\t\t} else if (renderControlCharacters && isControlCharacter(charCode)) {\n\t\t\t\t\t\t\tsb.appendString('[U+');\n\t\t\t\t\t\t\tsb.appendString(to4CharHex(charCode));\n\t\t\t\t\t\t\tsb.appendString(']');\n\t\t\t\t\t\t\tproducedCharacters = 8;\n\t\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (partIsEmptyAndHasPseudoAfter) {\n\t\t\tpartDisplacement++;\n\t\t} else {\n\t\t\tpartDisplacement = 0;\n\t\t}\n\n\t\tif (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n\t\t\tlastCharacterMappingDefined = true;\n\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, charHorizontalOffset);\n\t\t}\n\n\t\tsb.appendString('</span>');\n\n\t}\n\n\tif (!lastCharacterMappingDefined) {\n\t\t// When getting client rects for the last character, we will position the\n\t\t// text range at the end of the span, insteaf of at the beginning of next span\n\t\tcharacterMapping.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, charHorizontalOffset);\n\t}\n\n\tif (isOverflowing) {\n\t\tsb.appendString('<span class=\"mtkoverflow\">');\n\t\tsb.appendString(nls.localize('showMore', \"Show more ({0})\", renderOverflowingCharCount(overflowingCharCount)));\n\t\tsb.appendString('</span>');\n\t}\n\n\tsb.appendString('</span>');\n\n\treturn new RenderLineOutput(characterMapping, containsForeignElements);\n}\n\nfunction to4CharHex(n: number): string {\n\treturn n.toString(16).toUpperCase().padStart(4, '0');\n}\n\nfunction renderOverflowingCharCount(n: number): string {\n\tif (n < 1024) {\n\t\treturn nls.localize('overflow.chars', \"{0} chars\", n);\n\t}\n\tif (n < 1024 * 1024) {\n\t\treturn `${(n / 1024).toFixed(1)} KB`;\n\t}\n\treturn `${(n / 1024 / 1024).toFixed(1)} MB`;\n}\n"]}
|
|
@@ -5,15 +5,12 @@
|
|
|
5
5
|
import * as browser from '../../../../base/browser/browser.js';
|
|
6
6
|
import { getActiveDocument, getActiveWindow } from '../../../../base/browser/dom.js';
|
|
7
7
|
import * as platform from '../../../../base/common/platform.js';
|
|
8
|
-
import { StopWatch } from '../../../../base/common/stopwatch.js';
|
|
9
8
|
import * as nls from '../../../../nls.js';
|
|
10
9
|
import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js';
|
|
11
10
|
import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';
|
|
12
11
|
import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
|
|
13
12
|
import { ILogService } from '../../../../platform/log/common/log.js';
|
|
14
|
-
import {
|
|
15
|
-
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
|
|
16
|
-
import { CopyOptions, InMemoryClipboardMetadataManager } from '../../../browser/controller/editContext/clipboardUtils.js';
|
|
13
|
+
import { CopyOptions, generateDataToCopyAndStoreInMemory, InMemoryClipboardMetadataManager, PasteOptions } from '../../../browser/controller/editContext/clipboardUtils.js';
|
|
17
14
|
import { NativeEditContextRegistry } from '../../../browser/controller/editContext/native/nativeEditContextRegistry.js';
|
|
18
15
|
import { EditorAction, MultiCommand, registerEditorAction } from '../../../browser/editorExtensions.js';
|
|
19
16
|
import { ICodeEditorService } from '../../../browser/services/codeEditorService.js';
|
|
@@ -153,6 +150,7 @@ class ExecCommandCopyWithSyntaxHighlightingAction extends EditorAction {
|
|
|
153
150
|
}
|
|
154
151
|
run(accessor, editor) {
|
|
155
152
|
const logService = accessor.get(ILogService);
|
|
153
|
+
const clipboardService = accessor.get(IClipboardService);
|
|
156
154
|
logService.trace('ExecCommandCopyWithSyntaxHighlightingAction#run');
|
|
157
155
|
if (!editor.hasModel()) {
|
|
158
156
|
return;
|
|
@@ -164,11 +162,48 @@ class ExecCommandCopyWithSyntaxHighlightingAction extends EditorAction {
|
|
|
164
162
|
CopyOptions.forceCopyWithSyntaxHighlighting = true;
|
|
165
163
|
editor.focus();
|
|
166
164
|
logService.trace('ExecCommandCopyWithSyntaxHighlightingAction (before execCommand copy)');
|
|
167
|
-
editor
|
|
165
|
+
executeClipboardCopyWithWorkaround(editor, clipboardService);
|
|
168
166
|
logService.trace('ExecCommandCopyWithSyntaxHighlightingAction (after execCommand copy)');
|
|
169
167
|
CopyOptions.forceCopyWithSyntaxHighlighting = false;
|
|
170
168
|
}
|
|
171
169
|
}
|
|
170
|
+
function executeClipboardCopyWithWorkaround(editor, clipboardService) {
|
|
171
|
+
// !!!!!
|
|
172
|
+
// This is a workaround for what we think is an Electron bug where
|
|
173
|
+
// execCommand('copy') does not always work (it does not fire a clipboard event)
|
|
174
|
+
// We will use this as a signal that we have executed a copy command
|
|
175
|
+
// !!!!!
|
|
176
|
+
CopyOptions.electronBugWorkaroundCopyEventHasFired = false;
|
|
177
|
+
editor.getContainerDomNode().ownerDocument.execCommand('copy');
|
|
178
|
+
if (platform.isNative && CopyOptions.electronBugWorkaroundCopyEventHasFired === false) {
|
|
179
|
+
// We have encountered the Electron bug!
|
|
180
|
+
// As a workaround, we will write (only the plaintext data) to the clipboard in a different way
|
|
181
|
+
// We will use the clipboard service (which in the native case will go to electron's clipboard API)
|
|
182
|
+
const { dataToCopy } = generateDataToCopyAndStoreInMemory(editor._getViewModel(), editor.getOptions(), undefined, browser.isFirefox);
|
|
183
|
+
clipboardService.writeText(dataToCopy.text);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async function pasteWithNavigatorAPI(editor, clipboardService, logService) {
|
|
187
|
+
const clipboardText = await clipboardService.readText();
|
|
188
|
+
if (clipboardText !== '') {
|
|
189
|
+
const metadata = InMemoryClipboardMetadataManager.INSTANCE.get(clipboardText);
|
|
190
|
+
let pasteOnNewLine = false;
|
|
191
|
+
let multicursorText = null;
|
|
192
|
+
let mode = null;
|
|
193
|
+
if (metadata) {
|
|
194
|
+
pasteOnNewLine = (editor.getOption(45 /* EditorOption.emptySelectionClipboard */) && !!metadata.isFromEmptySelection);
|
|
195
|
+
multicursorText = (typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null);
|
|
196
|
+
mode = metadata.mode;
|
|
197
|
+
}
|
|
198
|
+
logService.trace('pasteWithNavigatorAPI with id : ', metadata?.id, ', clipboardText.length : ', clipboardText.length);
|
|
199
|
+
editor.trigger('keyboard', "paste" /* Handler.Paste */, {
|
|
200
|
+
text: clipboardText,
|
|
201
|
+
pasteOnNewLine,
|
|
202
|
+
multicursorText,
|
|
203
|
+
mode
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
172
207
|
function registerExecCommandImpl(target, browserCommand) {
|
|
173
208
|
if (!target) {
|
|
174
209
|
return;
|
|
@@ -176,10 +211,11 @@ function registerExecCommandImpl(target, browserCommand) {
|
|
|
176
211
|
// 1. handle case when focus is in editor.
|
|
177
212
|
target.addImplementation(10000, 'code-editor', (accessor, args) => {
|
|
178
213
|
const logService = accessor.get(ILogService);
|
|
214
|
+
const clipboardService = accessor.get(IClipboardService);
|
|
179
215
|
logService.trace('registerExecCommandImpl (addImplementation code-editor for : ', browserCommand, ')');
|
|
180
216
|
// Only if editor text focus (i.e. not if editor has widget focus).
|
|
181
217
|
const focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor();
|
|
182
|
-
if (focusedEditor && focusedEditor.hasTextFocus()) {
|
|
218
|
+
if (focusedEditor && focusedEditor.hasTextFocus() && focusedEditor.hasModel()) {
|
|
183
219
|
// Do not execute if there is no selection and empty selection clipboard is off
|
|
184
220
|
const emptySelectionClipboard = focusedEditor.getOption(45 /* EditorOption.emptySelectionClipboard */);
|
|
185
221
|
const selection = focusedEditor.getSelection();
|
|
@@ -191,14 +227,19 @@ function registerExecCommandImpl(target, browserCommand) {
|
|
|
191
227
|
logCopyCommand(focusedEditor);
|
|
192
228
|
// execCommand(copy) works for edit context, but not execCommand(cut).
|
|
193
229
|
logService.trace('registerExecCommandImpl (before execCommand copy)');
|
|
194
|
-
focusedEditor
|
|
230
|
+
executeClipboardCopyWithWorkaround(focusedEditor, clipboardService);
|
|
195
231
|
focusedEditor.trigger(undefined, "cut" /* Handler.Cut */, undefined);
|
|
196
232
|
logService.trace('registerExecCommandImpl (after execCommand copy)');
|
|
197
233
|
}
|
|
198
234
|
else {
|
|
199
235
|
logCopyCommand(focusedEditor);
|
|
200
236
|
logService.trace('registerExecCommandImpl (before execCommand ' + browserCommand + ')');
|
|
201
|
-
|
|
237
|
+
if (browserCommand === 'copy') {
|
|
238
|
+
executeClipboardCopyWithWorkaround(focusedEditor, clipboardService);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
focusedEditor.getContainerDomNode().ownerDocument.execCommand(browserCommand);
|
|
242
|
+
}
|
|
202
243
|
logService.trace('registerExecCommandImpl (after execCommand ' + browserCommand + ')');
|
|
203
244
|
}
|
|
204
245
|
return true;
|
|
@@ -233,8 +274,6 @@ if (PasteAction) {
|
|
|
233
274
|
logService.trace('registerExecCommandImpl (addImplementation code-editor for : paste)');
|
|
234
275
|
const codeEditorService = accessor.get(ICodeEditorService);
|
|
235
276
|
const clipboardService = accessor.get(IClipboardService);
|
|
236
|
-
const telemetryService = accessor.get(ITelemetryService);
|
|
237
|
-
const productService = accessor.get(IProductService);
|
|
238
277
|
// Only if editor text focus (i.e. not if editor has widget focus).
|
|
239
278
|
const focusedEditor = codeEditorService.getFocusedCodeEditor();
|
|
240
279
|
if (focusedEditor && focusedEditor.hasModel() && focusedEditor.hasTextFocus()) {
|
|
@@ -246,17 +285,16 @@ if (PasteAction) {
|
|
|
246
285
|
nativeEditContext.onWillPaste();
|
|
247
286
|
}
|
|
248
287
|
}
|
|
249
|
-
const sw = StopWatch.create(true);
|
|
250
288
|
logService.trace('registerExecCommandImpl (before triggerPaste)');
|
|
289
|
+
PasteOptions.electronBugWorkaroundPasteEventHasFired = false;
|
|
251
290
|
const triggerPaste = clipboardService.triggerPaste(getActiveWindow().vscodeWindowId);
|
|
252
291
|
if (triggerPaste) {
|
|
253
292
|
logService.trace('registerExecCommandImpl (triggerPaste defined)');
|
|
254
293
|
return triggerPaste.then(async () => {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
const duration = sw.elapsed();
|
|
258
|
-
telemetryService.publicLog2('editorAsyncPaste', { duration });
|
|
294
|
+
if (PasteOptions.electronBugWorkaroundPasteEventHasFired === false) {
|
|
295
|
+
return pasteWithNavigatorAPI(focusedEditor, clipboardService, logService);
|
|
259
296
|
}
|
|
297
|
+
logService.trace('registerExecCommandImpl (after triggerPaste)');
|
|
260
298
|
return CopyPasteController.get(focusedEditor)?.finishedPaste() ?? Promise.resolve();
|
|
261
299
|
});
|
|
262
300
|
}
|
|
@@ -266,27 +304,7 @@ if (PasteAction) {
|
|
|
266
304
|
if (platform.isWeb) {
|
|
267
305
|
logService.trace('registerExecCommandImpl (Paste handling on web)');
|
|
268
306
|
// Use the clipboard service if document.execCommand('paste') was not successful
|
|
269
|
-
return (
|
|
270
|
-
const clipboardText = await clipboardService.readText();
|
|
271
|
-
if (clipboardText !== '') {
|
|
272
|
-
const metadata = InMemoryClipboardMetadataManager.INSTANCE.get(clipboardText);
|
|
273
|
-
let pasteOnNewLine = false;
|
|
274
|
-
let multicursorText = null;
|
|
275
|
-
let mode = null;
|
|
276
|
-
if (metadata) {
|
|
277
|
-
pasteOnNewLine = (focusedEditor.getOption(45 /* EditorOption.emptySelectionClipboard */) && !!metadata.isFromEmptySelection);
|
|
278
|
-
multicursorText = (typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null);
|
|
279
|
-
mode = metadata.mode;
|
|
280
|
-
}
|
|
281
|
-
logService.trace('registerExecCommandImpl (clipboardText.length : ', clipboardText.length, ' id : ', metadata?.id, ')');
|
|
282
|
-
focusedEditor.trigger('keyboard', "paste" /* Handler.Paste */, {
|
|
283
|
-
text: clipboardText,
|
|
284
|
-
pasteOnNewLine,
|
|
285
|
-
multicursorText,
|
|
286
|
-
mode
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
})();
|
|
307
|
+
return pasteWithNavigatorAPI(focusedEditor, clipboardService, logService);
|
|
290
308
|
}
|
|
291
309
|
return true;
|
|
292
310
|
}
|